From e8951e07647acd20fe10dc131a69ee39d14f20f5 Mon Sep 17 00:00:00 2001 From: Jem Gillam <6413628+jemgillam@users.noreply.github.com> Date: Wed, 9 Jul 2025 12:11:21 +0100 Subject: [PATCH] =?UTF-8?q?sponsorship:=20update=20sponsors=20=F0=9F=99=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .yarn/install-state.gz | Bin 0 -> 2643253 bytes README.md | 40 +- SPONSORS.md | 11 +- grafast/bench/dist/cli-run.d.ts | 3 + grafast/bench/dist/cli-run.d.ts.map | 1 + grafast/bench/dist/cli-run.js | 7 + grafast/bench/dist/cli-run.js.map | 1 + grafast/bench/dist/cli.d.ts | 10 + grafast/bench/dist/cli.d.ts.map | 1 + grafast/bench/dist/cli.js | 78 + grafast/bench/dist/cli.js.map | 1 + grafast/bench/dist/index.d.ts | 9 + grafast/bench/dist/index.d.ts.map | 1 + grafast/bench/dist/index.js | 132 + grafast/bench/dist/index.js.map | 1 + grafast/bench/dist/interfaces.d.ts | 26 + grafast/bench/dist/interfaces.d.ts.map | 1 + grafast/bench/dist/interfaces.js | 3 + grafast/bench/dist/interfaces.js.map | 1 + grafast/bench/tsconfig.build.tsbuildinfo | 1 + grafast/dataplan-json/dist/index.d.ts | 2 + grafast/dataplan-json/dist/index.d.ts.map | 1 + grafast/dataplan-json/dist/index.js | 7 + grafast/dataplan-json/dist/index.js.map | 1 + .../dataplan-json/dist/steps/jsonParse.d.ts | 30 + .../dist/steps/jsonParse.d.ts.map | 1 + grafast/dataplan-json/dist/steps/jsonParse.js | 66 + .../dataplan-json/dist/steps/jsonParse.js.map | 1 + grafast/dataplan-json/tsconfig.tsbuildinfo | 1 + grafast/dataplan-pg/dist/adaptors/pg.d.ts | 110 + grafast/dataplan-pg/dist/adaptors/pg.d.ts.map | 1 + grafast/dataplan-pg/dist/adaptors/pg.js | 634 +++ grafast/dataplan-pg/dist/adaptors/pg.js.map | 1 + grafast/dataplan-pg/dist/codecUtils/box.d.ts | 23 + .../dataplan-pg/dist/codecUtils/box.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/box.js | 35 + .../dataplan-pg/dist/codecUtils/box.js.map | 1 + .../dataplan-pg/dist/codecUtils/circle.d.ts | 18 + .../dist/codecUtils/circle.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/circle.js | 36 + .../dataplan-pg/dist/codecUtils/circle.js.map | 1 + .../dataplan-pg/dist/codecUtils/hstore.d.ts | 16 + .../dist/codecUtils/hstore.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/hstore.js | 192 + .../dataplan-pg/dist/codecUtils/hstore.js.map | 1 + .../dataplan-pg/dist/codecUtils/index.d.ts | 10 + .../dist/codecUtils/index.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/index.js | 13 + .../dataplan-pg/dist/codecUtils/index.js.map | 1 + .../dataplan-pg/dist/codecUtils/interval.d.ts | 26 + .../dist/codecUtils/interval.d.ts.map | 1 + .../dataplan-pg/dist/codecUtils/interval.js | 62 + .../dist/codecUtils/interval.js.map | 1 + grafast/dataplan-pg/dist/codecUtils/line.d.ts | 23 + .../dataplan-pg/dist/codecUtils/line.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/line.js | 37 + .../dataplan-pg/dist/codecUtils/line.js.map | 1 + grafast/dataplan-pg/dist/codecUtils/lseg.d.ts | 23 + .../dataplan-pg/dist/codecUtils/lseg.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/lseg.js | 35 + .../dataplan-pg/dist/codecUtils/lseg.js.map | 1 + grafast/dataplan-pg/dist/codecUtils/path.d.ts | 18 + .../dataplan-pg/dist/codecUtils/path.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/path.js | 54 + .../dataplan-pg/dist/codecUtils/path.js.map | 1 + .../dataplan-pg/dist/codecUtils/point.d.ts | 17 + .../dist/codecUtils/point.d.ts.map | 1 + grafast/dataplan-pg/dist/codecUtils/point.js | 31 + .../dataplan-pg/dist/codecUtils/point.js.map | 1 + .../dataplan-pg/dist/codecUtils/polygon.d.ts | 17 + .../dist/codecUtils/polygon.d.ts.map | 1 + .../dataplan-pg/dist/codecUtils/polygon.js | 42 + .../dist/codecUtils/polygon.js.map | 1 + grafast/dataplan-pg/dist/codecs.d.ts | 239 ++ grafast/dataplan-pg/dist/codecs.d.ts.map | 1 + grafast/dataplan-pg/dist/codecs.js | 829 ++++ grafast/dataplan-pg/dist/codecs.js.map | 1 + grafast/dataplan-pg/dist/datasource.d.ts | 267 ++ grafast/dataplan-pg/dist/datasource.d.ts.map | 1 + grafast/dataplan-pg/dist/datasource.js | 776 ++++ grafast/dataplan-pg/dist/datasource.js.map | 1 + .../dist/examples/exampleSchema.d.ts | 13 + .../dist/examples/exampleSchema.d.ts.map | 1 + .../dist/examples/exampleSchema.js | 3488 +++++++++++++++++ .../dist/examples/exampleSchema.js.map | 1 + grafast/dataplan-pg/dist/executor.d.ts | 105 + grafast/dataplan-pg/dist/executor.d.ts.map | 1 + grafast/dataplan-pg/dist/executor.js | 586 +++ grafast/dataplan-pg/dist/executor.js.map | 1 + .../dist/filters/pgBooleanFilter.d.ts | 20 + .../dist/filters/pgBooleanFilter.d.ts.map | 1 + .../dist/filters/pgBooleanFilter.js | 33 + .../dist/filters/pgBooleanFilter.js.map | 1 + .../dist/filters/pgClassFilter.d.ts | 20 + .../dist/filters/pgClassFilter.d.ts.map | 1 + .../dataplan-pg/dist/filters/pgClassFilter.js | 32 + .../dist/filters/pgClassFilter.js.map | 1 + .../dist/filters/pgManyFilter.d.ts | 18 + .../dist/filters/pgManyFilter.d.ts.map | 1 + .../dataplan-pg/dist/filters/pgManyFilter.js | 49 + .../dist/filters/pgManyFilter.js.map | 1 + .../dataplan-pg/dist/filters/pgOrFilter.d.ts | 19 + .../dist/filters/pgOrFilter.d.ts.map | 1 + .../dataplan-pg/dist/filters/pgOrFilter.js | 36 + .../dist/filters/pgOrFilter.js.map | 1 + .../dist/formatSQLForDebugging.d.ts | 14 + .../dist/formatSQLForDebugging.d.ts.map | 1 + .../dataplan-pg/dist/formatSQLForDebugging.js | 59 + .../dist/formatSQLForDebugging.js.map | 1 + grafast/dataplan-pg/dist/index.d.ts | 102 + grafast/dataplan-pg/dist/index.d.ts.map | 1 + grafast/dataplan-pg/dist/index.js | 164 + grafast/dataplan-pg/dist/index.js.map | 1 + grafast/dataplan-pg/dist/inspect.d.ts | 10 + grafast/dataplan-pg/dist/inspect.d.ts.map | 1 + grafast/dataplan-pg/dist/inspect.js | 20 + grafast/dataplan-pg/dist/inspect.js.map | 1 + grafast/dataplan-pg/dist/interfaces.d.ts | 405 ++ grafast/dataplan-pg/dist/interfaces.d.ts.map | 1 + grafast/dataplan-pg/dist/interfaces.js | 4 + grafast/dataplan-pg/dist/interfaces.js.map | 1 + grafast/dataplan-pg/dist/parseArray.d.ts | 11 + grafast/dataplan-pg/dist/parseArray.d.ts.map | 1 + grafast/dataplan-pg/dist/parseArray.js | 114 + grafast/dataplan-pg/dist/parseArray.js.map | 1 + grafast/dataplan-pg/dist/pgLocker.d.ts | 48 + grafast/dataplan-pg/dist/pgLocker.d.ts.map | 1 + grafast/dataplan-pg/dist/pgLocker.js | 129 + grafast/dataplan-pg/dist/pgLocker.js.map | 1 + grafast/dataplan-pg/dist/pgServices.d.ts | 20 + grafast/dataplan-pg/dist/pgServices.d.ts.map | 1 + grafast/dataplan-pg/dist/pgServices.js | 94 + grafast/dataplan-pg/dist/pgServices.js.map | 1 + .../dist/plugins/PgContextPlugin.d.ts | 10 + .../dist/plugins/PgContextPlugin.d.ts.map | 1 + .../dist/plugins/PgContextPlugin.js | 54 + .../dist/plugins/PgContextPlugin.js.map | 1 + .../dist/steps/pgClassExpression.d.ts | 49 + .../dist/steps/pgClassExpression.d.ts.map | 1 + .../dist/steps/pgClassExpression.js | 212 + .../dist/steps/pgClassExpression.js.map | 1 + .../dataplan-pg/dist/steps/pgCondition.d.ts | 57 + .../dist/steps/pgCondition.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/pgCondition.js | 175 + .../dataplan-pg/dist/steps/pgCondition.js.map | 1 + grafast/dataplan-pg/dist/steps/pgCursor.d.ts | 29 + .../dataplan-pg/dist/steps/pgCursor.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/pgCursor.js | 41 + .../dataplan-pg/dist/steps/pgCursor.js.map | 1 + .../dist/steps/pgDeleteSingle.d.ts | 83 + .../dist/steps/pgDeleteSingle.d.ts.map | 1 + .../dataplan-pg/dist/steps/pgDeleteSingle.js | 263 ++ .../dist/steps/pgDeleteSingle.js.map | 1 + .../dist/steps/pgInsertSingle.d.ts | 100 + .../dist/steps/pgInsertSingle.d.ts.map | 1 + .../dataplan-pg/dist/steps/pgInsertSingle.js | 272 ++ .../dist/steps/pgInsertSingle.js.map | 1 + .../dataplan-pg/dist/steps/pgPageInfo.d.ts | 59 + .../dist/steps/pgPageInfo.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/pgPageInfo.js | 126 + .../dataplan-pg/dist/steps/pgPageInfo.js.map | 1 + .../dataplan-pg/dist/steps/pgPolymorphic.d.ts | 47 + .../dist/steps/pgPolymorphic.d.ts.map | 1 + .../dataplan-pg/dist/steps/pgPolymorphic.js | 79 + .../dist/steps/pgPolymorphic.js.map | 1 + grafast/dataplan-pg/dist/steps/pgSelect.d.ts | 453 +++ .../dataplan-pg/dist/steps/pgSelect.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/pgSelect.js | 2481 ++++++++++++ .../dataplan-pg/dist/steps/pgSelect.js.map | 1 + .../dist/steps/pgSelectSingle.d.ts | 102 + .../dist/steps/pgSelectSingle.d.ts.map | 1 + .../dataplan-pg/dist/steps/pgSelectSingle.js | 433 ++ .../dist/steps/pgSelectSingle.js.map | 1 + .../dist/steps/pgSingleTablePolymorphic.d.ts | 28 + .../steps/pgSingleTablePolymorphic.d.ts.map | 1 + .../dist/steps/pgSingleTablePolymorphic.js | 46 + .../steps/pgSingleTablePolymorphic.js.map | 1 + grafast/dataplan-pg/dist/steps/pgStmt.d.ts | 154 + .../dataplan-pg/dist/steps/pgStmt.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/pgStmt.js | 389 ++ grafast/dataplan-pg/dist/steps/pgStmt.js.map | 1 + .../dataplan-pg/dist/steps/pgTempTable.d.ts | 20 + .../dist/steps/pgTempTable.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/pgTempTable.js | 34 + .../dataplan-pg/dist/steps/pgTempTable.js.map | 1 + .../dataplan-pg/dist/steps/pgUnionAll.d.ts | 214 + .../dist/steps/pgUnionAll.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/pgUnionAll.js | 1310 +++++++ .../dataplan-pg/dist/steps/pgUnionAll.js.map | 1 + .../dist/steps/pgUpdateSingle.d.ts | 101 + .../dist/steps/pgUpdateSingle.d.ts.map | 1 + .../dataplan-pg/dist/steps/pgUpdateSingle.js | 319 ++ .../dist/steps/pgUpdateSingle.js.map | 1 + .../dist/steps/pgValidateParsedCursor.d.ts | 7 + .../steps/pgValidateParsedCursor.d.ts.map | 1 + .../dist/steps/pgValidateParsedCursor.js | 71 + .../dist/steps/pgValidateParsedCursor.js.map | 1 + grafast/dataplan-pg/dist/steps/toPg.d.ts | 2 + grafast/dataplan-pg/dist/steps/toPg.d.ts.map | 1 + grafast/dataplan-pg/dist/steps/toPg.js | 43 + grafast/dataplan-pg/dist/steps/toPg.js.map | 1 + .../dataplan-pg/dist/steps/withPgClient.d.ts | 41 + .../dist/steps/withPgClient.d.ts.map | 1 + .../dataplan-pg/dist/steps/withPgClient.js | 44 + .../dist/steps/withPgClient.js.map | 1 + grafast/dataplan-pg/dist/utils.d.ts | 9 + grafast/dataplan-pg/dist/utils.d.ts.map | 1 + grafast/dataplan-pg/dist/utils.js | 38 + grafast/dataplan-pg/dist/utils.js.map | 1 + grafast/dataplan-pg/dist/version.d.ts | 2 + grafast/dataplan-pg/dist/version.d.ts.map | 1 + grafast/dataplan-pg/dist/version.js | 6 + grafast/dataplan-pg/dist/version.js.map | 1 + grafast/dataplan-pg/tsconfig.tsbuildinfo | 1 + grafast/grafast/dist/args.d.ts | 6 + grafast/grafast/dist/args.d.ts.map | 1 + grafast/grafast/dist/args.js | 77 + grafast/grafast/dist/args.js.map | 1 + grafast/grafast/dist/assert.d.ts | 5 + grafast/grafast/dist/assert.d.ts.map | 1 + grafast/grafast/dist/assert.js | 23 + grafast/grafast/dist/assert.js.map | 1 + grafast/grafast/dist/bucket.d.ts | 2 + grafast/grafast/dist/bucket.d.ts.map | 1 + grafast/grafast/dist/bucket.js | 4 + grafast/grafast/dist/bucket.js.map | 1 + grafast/grafast/dist/config.d.ts | 2 + grafast/grafast/dist/config.d.ts.map | 1 + grafast/grafast/dist/config.js | 5 + grafast/grafast/dist/config.js.map | 1 + grafast/grafast/dist/constraints.d.ts | 75 + grafast/grafast/dist/constraints.d.ts.map | 1 + grafast/grafast/dist/constraints.js | 110 + grafast/grafast/dist/constraints.js.map | 1 + grafast/grafast/dist/deferred.d.ts | 13 + grafast/grafast/dist/deferred.d.ts.map | 1 + grafast/grafast/dist/deferred.js | 24 + grafast/grafast/dist/deferred.js.map | 1 + grafast/grafast/dist/dev.d.ts | 3 + grafast/grafast/dist/dev.d.ts.map | 1 + grafast/grafast/dist/dev.js | 25 + grafast/grafast/dist/dev.js.map | 1 + grafast/grafast/dist/engine/LayerPlan.d.ts | 125 + .../grafast/dist/engine/LayerPlan.d.ts.map | 1 + grafast/grafast/dist/engine/LayerPlan.js | 654 ++++ grafast/grafast/dist/engine/LayerPlan.js.map | 1 + .../grafast/dist/engine/OperationPlan.d.ts | 208 + .../dist/engine/OperationPlan.d.ts.map | 1 + grafast/grafast/dist/engine/OperationPlan.js | 2857 ++++++++++++++ .../grafast/dist/engine/OperationPlan.js.map | 1 + grafast/grafast/dist/engine/OutputPlan.d.ts | 176 + .../grafast/dist/engine/OutputPlan.d.ts.map | 1 + grafast/grafast/dist/engine/OutputPlan.js | 1047 +++++ grafast/grafast/dist/engine/OutputPlan.js.map | 1 + grafast/grafast/dist/engine/StepTracker.d.ts | 2 + .../grafast/dist/engine/StepTracker.d.ts.map | 1 + grafast/grafast/dist/engine/StepTracker.js | 598 +++ .../grafast/dist/engine/StepTracker.js.map | 1 + .../grafast/dist/engine/executeBucket.d.ts | 6 + .../dist/engine/executeBucket.d.ts.map | 1 + grafast/grafast/dist/engine/executeBucket.js | 1102 ++++++ .../grafast/dist/engine/executeBucket.js.map | 1 + .../dist/engine/executeOutputPlan.d.ts | 30 + .../dist/engine/executeOutputPlan.d.ts.map | 1 + .../grafast/dist/engine/executeOutputPlan.js | 26 + .../dist/engine/executeOutputPlan.js.map | 1 + .../dist/engine/lib/defaultPlanResolver.d.ts | 6 + .../engine/lib/defaultPlanResolver.d.ts.map | 1 + .../dist/engine/lib/defaultPlanResolver.js | 11 + .../engine/lib/defaultPlanResolver.js.map | 1 + .../dist/engine/lib/withGlobalLayerPlan.d.ts | 7 + .../engine/lib/withGlobalLayerPlan.d.ts.map | 1 + .../dist/engine/lib/withGlobalLayerPlan.js | 39 + .../engine/lib/withGlobalLayerPlan.js.map | 1 + grafast/grafast/dist/engine/lock.d.ts | 4 + grafast/grafast/dist/engine/lock.d.ts.map | 1 + grafast/grafast/dist/engine/lock.js | 82 + grafast/grafast/dist/engine/lock.js.map | 1 + grafast/grafast/dist/envelop.d.ts | 19 + grafast/grafast/dist/envelop.d.ts.map | 1 + grafast/grafast/dist/envelop.js | 85 + grafast/grafast/dist/envelop.js.map | 1 + grafast/grafast/dist/error.d.ts | 31 + grafast/grafast/dist/error.d.ts.map | 1 + grafast/grafast/dist/error.js | 73 + grafast/grafast/dist/error.js.map | 1 + .../grafast/dist/establishOperationPlan.d.ts | 12 + .../dist/establishOperationPlan.d.ts.map | 1 + .../grafast/dist/establishOperationPlan.js | 201 + .../dist/establishOperationPlan.js.map | 1 + grafast/grafast/dist/execute.d.ts | 14 + grafast/grafast/dist/execute.d.ts.map | 1 + grafast/grafast/dist/execute.js | 96 + grafast/grafast/dist/execute.js.map | 1 + grafast/grafast/dist/exportAs.d.ts | 2 + grafast/grafast/dist/exportAs.d.ts.map | 1 + grafast/grafast/dist/exportAs.js | 56 + grafast/grafast/dist/exportAs.js.map | 1 + grafast/grafast/dist/global.d.ts | 3 + grafast/grafast/dist/global.d.ts.map | 1 + grafast/grafast/dist/global.js | 12 + grafast/grafast/dist/global.js.map | 1 + grafast/grafast/dist/grafastGraphql.d.ts | 15 + grafast/grafast/dist/grafastGraphql.d.ts.map | 1 + grafast/grafast/dist/grafastGraphql.js | 152 + grafast/grafast/dist/grafastGraphql.js.map | 1 + grafast/grafast/dist/grafastPrint.d.ts | 16 + grafast/grafast/dist/grafastPrint.d.ts.map | 1 + grafast/grafast/dist/grafastPrint.js | 238 ++ grafast/grafast/dist/grafastPrint.js.map | 1 + .../grafast/dist/graphqlCollectFields.d.ts | 10 + .../dist/graphqlCollectFields.d.ts.map | 1 + grafast/grafast/dist/graphqlCollectFields.js | 228 ++ .../grafast/dist/graphqlCollectFields.js.map | 1 + .../dist/graphqlMergeSelectionSets.d.ts | 8 + .../dist/graphqlMergeSelectionSets.d.ts.map | 1 + .../grafast/dist/graphqlMergeSelectionSets.js | 59 + .../dist/graphqlMergeSelectionSets.js.map | 1 + grafast/grafast/dist/index.d.ts | 201 + grafast/grafast/dist/index.d.ts.map | 1 + grafast/grafast/dist/index.js | 328 ++ grafast/grafast/dist/index.js.map | 1 + grafast/grafast/dist/input.d.ts | 6 + grafast/grafast/dist/input.d.ts.map | 1 + grafast/grafast/dist/input.js | 206 + grafast/grafast/dist/input.js.map | 1 + grafast/grafast/dist/inspect.d.ts | 10 + grafast/grafast/dist/inspect.d.ts.map | 1 + grafast/grafast/dist/inspect.js | 20 + grafast/grafast/dist/inspect.js.map | 1 + grafast/grafast/dist/interfaces.d.ts | 575 +++ grafast/grafast/dist/interfaces.d.ts.map | 1 + grafast/grafast/dist/interfaces.js | 80 + grafast/grafast/dist/interfaces.js.map | 1 + grafast/grafast/dist/makeGrafastSchema.d.ts | 85 + .../grafast/dist/makeGrafastSchema.d.ts.map | 1 + grafast/grafast/dist/makeGrafastSchema.js | 394 ++ grafast/grafast/dist/makeGrafastSchema.js.map | 1 + grafast/grafast/dist/mermaid.d.ts | 17 + grafast/grafast/dist/mermaid.d.ts.map | 1 + grafast/grafast/dist/mermaid.js | 402 ++ grafast/grafast/dist/mermaid.js.map | 1 + grafast/grafast/dist/middleware.d.ts | 7 + grafast/grafast/dist/middleware.d.ts.map | 1 + grafast/grafast/dist/middleware.js | 24 + grafast/grafast/dist/middleware.js.map | 1 + grafast/grafast/dist/multistep.d.ts | 19 + grafast/grafast/dist/multistep.d.ts.map | 1 + grafast/grafast/dist/multistep.js | 54 + grafast/grafast/dist/multistep.js.map | 1 + grafast/grafast/dist/operationPlan-input.d.ts | 8 + .../grafast/dist/operationPlan-input.d.ts.map | 1 + grafast/grafast/dist/operationPlan-input.js | 228 ++ .../grafast/dist/operationPlan-input.js.map | 1 + grafast/grafast/dist/planJSONInterfaces.d.ts | 94 + .../grafast/dist/planJSONInterfaces.d.ts.map | 1 + grafast/grafast/dist/planJSONInterfaces.js | 3 + .../grafast/dist/planJSONInterfaces.js.map | 1 + grafast/grafast/dist/polymorphic.d.ts | 14 + grafast/grafast/dist/polymorphic.d.ts.map | 1 + grafast/grafast/dist/polymorphic.js | 72 + grafast/grafast/dist/polymorphic.js.map | 1 + grafast/grafast/dist/prepare.d.ts | 28 + grafast/grafast/dist/prepare.d.ts.map | 1 + grafast/grafast/dist/prepare.js | 792 ++++ grafast/grafast/dist/prepare.js.map | 1 + grafast/grafast/dist/step.d.ts | 243 ++ grafast/grafast/dist/step.d.ts.map | 1 + grafast/grafast/dist/step.js | 475 +++ grafast/grafast/dist/step.js.map | 1 + grafast/grafast/dist/steps/__flag.d.ts | 65 + grafast/grafast/dist/steps/__flag.d.ts.map | 1 + grafast/grafast/dist/steps/__flag.js | 261 ++ grafast/grafast/dist/steps/__flag.js.map | 1 + .../grafast/dist/steps/__inputDefault.d.ts | 14 + .../dist/steps/__inputDefault.d.ts.map | 1 + grafast/grafast/dist/steps/__inputDefault.js | 48 + .../grafast/dist/steps/__inputDefault.js.map | 1 + .../dist/steps/__inputDynamicScalar.d.ts | 19 + .../dist/steps/__inputDynamicScalar.d.ts.map | 1 + .../dist/steps/__inputDynamicScalar.js | 127 + .../dist/steps/__inputDynamicScalar.js.map | 1 + grafast/grafast/dist/steps/__inputList.d.ts | 22 + .../grafast/dist/steps/__inputList.d.ts.map | 1 + grafast/grafast/dist/steps/__inputList.js | 113 + grafast/grafast/dist/steps/__inputList.js.map | 1 + grafast/grafast/dist/steps/__inputObject.d.ts | 25 + .../grafast/dist/steps/__inputObject.d.ts.map | 1 + grafast/grafast/dist/steps/__inputObject.js | 174 + .../grafast/dist/steps/__inputObject.js.map | 1 + .../grafast/dist/steps/__inputStaticLeaf.d.ts | 19 + .../dist/steps/__inputStaticLeaf.d.ts.map | 1 + .../grafast/dist/steps/__inputStaticLeaf.js | 45 + .../dist/steps/__inputStaticLeaf.js.map | 1 + grafast/grafast/dist/steps/__item.d.ts | 27 + grafast/grafast/dist/steps/__item.d.ts.map | 1 + grafast/grafast/dist/steps/__item.js | 56 + grafast/grafast/dist/steps/__item.js.map | 1 + .../grafast/dist/steps/__trackedValue.d.ts | 64 + .../dist/steps/__trackedValue.d.ts.map | 1 + grafast/grafast/dist/steps/__trackedValue.js | 318 ++ .../grafast/dist/steps/__trackedValue.js.map | 1 + grafast/grafast/dist/steps/__value.d.ts | 22 + grafast/grafast/dist/steps/__value.d.ts.map | 1 + grafast/grafast/dist/steps/__value.js | 48 + grafast/grafast/dist/steps/__value.js.map | 1 + grafast/grafast/dist/steps/access.d.ts | 43 + grafast/grafast/dist/steps/access.d.ts.map | 1 + grafast/grafast/dist/steps/access.js | 216 + grafast/grafast/dist/steps/access.js.map | 1 + grafast/grafast/dist/steps/applyInput.d.ts | 44 + .../grafast/dist/steps/applyInput.d.ts.map | 1 + grafast/grafast/dist/steps/applyInput.js | 206 + grafast/grafast/dist/steps/applyInput.js.map | 1 + .../grafast/dist/steps/applyTransforms.d.ts | 9 + .../dist/steps/applyTransforms.d.ts.map | 1 + grafast/grafast/dist/steps/applyTransforms.js | 173 + .../grafast/dist/steps/applyTransforms.js.map | 1 + grafast/grafast/dist/steps/bakedInput.d.ts | 23 + .../grafast/dist/steps/bakedInput.d.ts.map | 1 + grafast/grafast/dist/steps/bakedInput.js | 90 + grafast/grafast/dist/steps/bakedInput.js.map | 1 + grafast/grafast/dist/steps/condition.d.ts | 31 + grafast/grafast/dist/steps/condition.d.ts.map | 1 + grafast/grafast/dist/steps/condition.js | 94 + grafast/grafast/dist/steps/condition.js.map | 1 + grafast/grafast/dist/steps/connection.d.ts | 147 + .../grafast/dist/steps/connection.d.ts.map | 1 + grafast/grafast/dist/steps/connection.js | 368 ++ grafast/grafast/dist/steps/connection.js.map | 1 + grafast/grafast/dist/steps/constant.d.ts | 31 + grafast/grafast/dist/steps/constant.d.ts.map | 1 + grafast/grafast/dist/steps/constant.js | 151 + grafast/grafast/dist/steps/constant.js.map | 1 + grafast/grafast/dist/steps/each.d.ts | 9 + grafast/grafast/dist/steps/each.d.ts.map | 1 + grafast/grafast/dist/steps/each.js | 63 + grafast/grafast/dist/steps/each.js.map | 1 + grafast/grafast/dist/steps/error.d.ts | 15 + grafast/grafast/dist/steps/error.d.ts.map | 1 + grafast/grafast/dist/steps/error.js | 33 + grafast/grafast/dist/steps/error.js.map | 1 + grafast/grafast/dist/steps/filter.d.ts | 11 + grafast/grafast/dist/steps/filter.d.ts.map | 1 + grafast/grafast/dist/steps/filter.js | 31 + grafast/grafast/dist/steps/filter.js.map | 1 + grafast/grafast/dist/steps/first.d.ts | 23 + grafast/grafast/dist/steps/first.d.ts.map | 1 + grafast/grafast/dist/steps/first.js | 45 + grafast/grafast/dist/steps/first.js.map | 1 + .../grafast/dist/steps/graphqlResolver.d.ts | 4 + .../dist/steps/graphqlResolver.d.ts.map | 1 + grafast/grafast/dist/steps/graphqlResolver.js | 277 ++ .../grafast/dist/steps/graphqlResolver.js.map | 1 + grafast/grafast/dist/steps/groupBy.d.ts | 12 + grafast/grafast/dist/steps/groupBy.d.ts.map | 1 + grafast/grafast/dist/steps/groupBy.js | 39 + grafast/grafast/dist/steps/groupBy.js.map | 1 + grafast/grafast/dist/steps/index.d.ts | 48 + grafast/grafast/dist/steps/index.d.ts.map | 1 + grafast/grafast/dist/steps/index.js | 159 + grafast/grafast/dist/steps/index.js.map | 1 + grafast/grafast/dist/steps/lambda.d.ts | 29 + grafast/grafast/dist/steps/lambda.d.ts.map | 1 + grafast/grafast/dist/steps/lambda.js | 67 + grafast/grafast/dist/steps/lambda.js.map | 1 + grafast/grafast/dist/steps/last.d.ts | 22 + grafast/grafast/dist/steps/last.d.ts.map | 1 + grafast/grafast/dist/steps/last.js | 42 + grafast/grafast/dist/steps/last.js.map | 1 + grafast/grafast/dist/steps/list.d.ts | 40 + grafast/grafast/dist/steps/list.d.ts.map | 1 + grafast/grafast/dist/steps/list.js | 118 + grafast/grafast/dist/steps/list.js.map | 1 + grafast/grafast/dist/steps/listTransform.d.ts | 65 + .../grafast/dist/steps/listTransform.d.ts.map | 1 + grafast/grafast/dist/steps/listTransform.js | 216 + .../grafast/dist/steps/listTransform.js.map | 1 + grafast/grafast/dist/steps/listen.d.ts | 37 + grafast/grafast/dist/steps/listen.d.ts.map | 1 + grafast/grafast/dist/steps/listen.js | 59 + grafast/grafast/dist/steps/listen.js.map | 1 + grafast/grafast/dist/steps/load.d.ts | 88 + grafast/grafast/dist/steps/load.d.ts.map | 1 + grafast/grafast/dist/steps/load.js | 343 ++ grafast/grafast/dist/steps/load.js.map | 1 + grafast/grafast/dist/steps/node.d.ts | 47 + grafast/grafast/dist/steps/node.d.ts.map | 1 + grafast/grafast/dist/steps/node.js | 119 + grafast/grafast/dist/steps/node.js.map | 1 + grafast/grafast/dist/steps/object.d.ts | 73 + grafast/grafast/dist/steps/object.d.ts.map | 1 + grafast/grafast/dist/steps/object.js | 216 + grafast/grafast/dist/steps/object.js.map | 1 + .../grafast/dist/steps/partitionByIndex.d.ts | 40 + .../dist/steps/partitionByIndex.d.ts.map | 1 + .../grafast/dist/steps/partitionByIndex.js | 85 + .../dist/steps/partitionByIndex.js.map | 1 + .../grafast/dist/steps/polymorphicBranch.d.ts | 27 + .../dist/steps/polymorphicBranch.d.ts.map | 1 + .../grafast/dist/steps/polymorphicBranch.js | 62 + .../dist/steps/polymorphicBranch.js.map | 1 + grafast/grafast/dist/steps/proxy.d.ts | 38 + grafast/grafast/dist/steps/proxy.d.ts.map | 1 + grafast/grafast/dist/steps/proxy.js | 117 + grafast/grafast/dist/steps/proxy.js.map | 1 + grafast/grafast/dist/steps/remapKeys.d.ts | 35 + grafast/grafast/dist/steps/remapKeys.d.ts.map | 1 + grafast/grafast/dist/steps/remapKeys.js | 91 + grafast/grafast/dist/steps/remapKeys.js.map | 1 + grafast/grafast/dist/steps/reverse.d.ts | 27 + grafast/grafast/dist/steps/reverse.d.ts.map | 1 + grafast/grafast/dist/steps/reverse.js | 55 + grafast/grafast/dist/steps/reverse.js.map | 1 + grafast/grafast/dist/steps/setter.d.ts | 18 + grafast/grafast/dist/steps/setter.d.ts.map | 1 + grafast/grafast/dist/steps/setter.js | 38 + grafast/grafast/dist/steps/setter.js.map | 1 + grafast/grafast/dist/steps/sideEffect.d.ts | 28 + .../grafast/dist/steps/sideEffect.d.ts.map | 1 + grafast/grafast/dist/steps/sideEffect.js | 44 + grafast/grafast/dist/steps/sideEffect.js.map | 1 + grafast/grafast/dist/stringifyPayload.d.ts | 3 + .../grafast/dist/stringifyPayload.d.ts.map | 1 + grafast/grafast/dist/stringifyPayload.js | 58 + grafast/grafast/dist/stringifyPayload.js.map | 1 + grafast/grafast/dist/stripAnsi.d.ts | 3 + grafast/grafast/dist/stripAnsi.d.ts.map | 1 + grafast/grafast/dist/stripAnsi.js | 14 + grafast/grafast/dist/stripAnsi.js.map | 1 + grafast/grafast/dist/subscribe.d.ts | 14 + grafast/grafast/dist/subscribe.d.ts.map | 1 + grafast/grafast/dist/subscribe.js | 29 + grafast/grafast/dist/subscribe.js.map | 1 + grafast/grafast/dist/thereCanBeOnlyOne.d.ts | 2 + .../grafast/dist/thereCanBeOnlyOne.d.ts.map | 1 + grafast/grafast/dist/thereCanBeOnlyOne.js | 21 + grafast/grafast/dist/thereCanBeOnlyOne.js.map | 1 + grafast/grafast/dist/timeSource.d.ts | 2 + grafast/grafast/dist/timeSource.d.ts.map | 1 + grafast/grafast/dist/timeSource.js | 8 + grafast/grafast/dist/timeSource.js.map | 1 + grafast/grafast/dist/utils.d.ts | 173 + grafast/grafast/dist/utils.d.ts.map | 1 + grafast/grafast/dist/utils.js | 818 ++++ grafast/grafast/dist/utils.js.map | 1 + grafast/grafast/dist/version.d.ts | 2 + grafast/grafast/dist/version.d.ts.map | 1 + grafast/grafast/dist/version.js | 6 + grafast/grafast/dist/version.js.map | 1 + grafast/grafast/tsconfig.tsbuildinfo | 1 + grafast/grafserv-persisted/dist/index.d.ts | 86 + .../grafserv-persisted/dist/index.d.ts.map | 1 + grafast/grafserv-persisted/dist/index.js | 239 ++ grafast/grafserv-persisted/dist/index.js.map | 1 + .../grafserv-persisted/dist/interfaces.d.ts | 7 + .../dist/interfaces.d.ts.map | 1 + grafast/grafserv-persisted/dist/interfaces.js | 3 + .../grafserv-persisted/dist/interfaces.js.map | 1 + grafast/grafserv-persisted/dist/version.d.ts | 2 + .../grafserv-persisted/dist/version.d.ts.map | 1 + grafast/grafserv-persisted/dist/version.js | 6 + .../grafserv-persisted/dist/version.js.map | 1 + .../grafserv-persisted/tsconfig.tsbuildinfo | 1 + grafast/grafserv/dist/accept.d.ts | 8 + grafast/grafserv/dist/accept.d.ts.map | 1 + grafast/grafserv/dist/accept.js | 468 +++ grafast/grafserv/dist/accept.js.map | 1 + grafast/grafserv/dist/core/base.d.ts | 45 + grafast/grafserv/dist/core/base.d.ts.map | 1 + grafast/grafserv/dist/core/base.js | 634 +++ grafast/grafserv/dist/core/base.js.map | 1 + grafast/grafserv/dist/envelop/index.d.ts | 19 + grafast/grafserv/dist/envelop/index.d.ts.map | 1 + grafast/grafserv/dist/envelop/index.js | 71 + grafast/grafserv/dist/envelop/index.js.map | 1 + grafast/grafserv/dist/hooks.d.ts | 7 + grafast/grafserv/dist/hooks.d.ts.map | 1 + grafast/grafserv/dist/hooks.js | 69 + grafast/grafserv/dist/hooks.js.map | 1 + grafast/grafserv/dist/index.d.ts | 122 + grafast/grafserv/dist/index.d.ts.map | 1 + grafast/grafserv/dist/index.js | 23 + grafast/grafserv/dist/index.js.map | 1 + grafast/grafserv/dist/interfaces.d.ts | 205 + grafast/grafserv/dist/interfaces.d.ts.map | 1 + grafast/grafserv/dist/interfaces.js | 6 + grafast/grafserv/dist/interfaces.js.map | 1 + grafast/grafserv/dist/mapIterator.d.ts | 2 + grafast/grafserv/dist/mapIterator.d.ts.map | 1 + grafast/grafserv/dist/mapIterator.js | 67 + grafast/grafserv/dist/mapIterator.js.map | 1 + .../grafserv/dist/middleware/graphiql.d.ts | 6 + .../dist/middleware/graphiql.d.ts.map | 1 + grafast/grafserv/dist/middleware/graphiql.js | 43 + .../grafserv/dist/middleware/graphiql.js.map | 1 + grafast/grafserv/dist/middleware/graphql.d.ts | 27 + .../grafserv/dist/middleware/graphql.d.ts.map | 1 + grafast/grafserv/dist/middleware/graphql.js | 458 +++ .../grafserv/dist/middleware/graphql.js.map | 1 + grafast/grafserv/dist/options.d.ts | 25 + grafast/grafserv/dist/options.d.ts.map | 1 + grafast/grafserv/dist/options.js | 128 + grafast/grafserv/dist/options.js.map | 1 + .../dist/servers/express/v4/index.d.ts | 22 + .../dist/servers/express/v4/index.d.ts.map | 1 + .../grafserv/dist/servers/express/v4/index.js | 82 + .../dist/servers/express/v4/index.js.map | 1 + .../dist/servers/fastify/v4/index.d.ts | 20 + .../dist/servers/fastify/v4/index.d.ts.map | 1 + .../grafserv/dist/servers/fastify/v4/index.js | 207 + .../dist/servers/fastify/v4/index.js.map | 1 + .../grafserv/dist/servers/h3/v1/index.d.ts | 28 + .../dist/servers/h3/v1/index.d.ts.map | 1 + grafast/grafserv/dist/servers/h3/v1/index.js | 225 ++ .../grafserv/dist/servers/h3/v1/index.js.map | 1 + .../grafserv/dist/servers/hono/v4/index.d.ts | 36 + .../dist/servers/hono/v4/index.d.ts.map | 1 + .../grafserv/dist/servers/hono/v4/index.js | 218 ++ .../dist/servers/hono/v4/index.js.map | 1 + .../grafserv/dist/servers/koa/v2/index.d.ts | 25 + .../dist/servers/koa/v2/index.d.ts.map | 1 + grafast/grafserv/dist/servers/koa/v2/index.js | 175 + .../grafserv/dist/servers/koa/v2/index.js.map | 1 + .../dist/servers/lambda/v1/index.d.ts | 31 + .../dist/servers/lambda/v1/index.d.ts.map | 1 + .../grafserv/dist/servers/lambda/v1/index.js | 83 + .../dist/servers/lambda/v1/index.js.map | 1 + grafast/grafserv/dist/servers/node/index.d.ts | 59 + .../grafserv/dist/servers/node/index.d.ts.map | 1 + grafast/grafserv/dist/servers/node/index.js | 307 ++ .../grafserv/dist/servers/node/index.js.map | 1 + grafast/grafserv/dist/utils.d.ts | 33 + grafast/grafserv/dist/utils.d.ts.map | 1 + grafast/grafserv/dist/utils.js | 320 ++ grafast/grafserv/dist/utils.js.map | 1 + grafast/grafserv/dist/version.d.ts | 2 + grafast/grafserv/dist/version.d.ts.map | 1 + grafast/grafserv/dist/version.js | 6 + grafast/grafserv/dist/version.js.map | 1 + grafast/grafserv/tsconfig.tsbuildinfo | 1 + .../ruru-components/dist/components/Copy.d.ts | 7 + .../dist/components/Copy.d.ts.map | 1 + .../ruru-components/dist/components/Copy.js | 20 + .../dist/components/Copy.js.map | 1 + .../dist/components/ErrorPopup.d.ts | 6 + .../dist/components/ErrorPopup.d.ts.map | 1 + .../dist/components/ErrorPopup.js | 4 + .../dist/components/ErrorPopup.js.map | 1 + .../dist/components/Explain.d.ts | 19 + .../dist/components/Explain.d.ts.map | 1 + .../dist/components/Explain.js | 82 + .../dist/components/Explain.js.map | 1 + .../dist/components/Footer.d.ts | 3 + .../dist/components/Footer.d.ts.map | 1 + .../ruru-components/dist/components/Footer.js | 3 + .../dist/components/Footer.js.map | 1 + .../dist/components/FormatSQL.d.ts | 5 + .../dist/components/FormatSQL.d.ts.map | 1 + .../dist/components/FormatSQL.js | 83 + .../dist/components/FormatSQL.js.map | 1 + .../dist/components/Mermaid.d.ts | 6 + .../dist/components/Mermaid.d.ts.map | 1 + .../dist/components/Mermaid.js | 28 + .../dist/components/Mermaid.js.map | 1 + .../ruru-components/dist/defaultQuery.d.ts | 2 + .../dist/defaultQuery.d.ts.map | 1 + grafast/ruru-components/dist/defaultQuery.js | 34 + .../ruru-components/dist/defaultQuery.js.map | 1 + .../dist/hooks/useExplain.d.ts | 18 + .../dist/hooks/useExplain.d.ts.map | 1 + .../ruru-components/dist/hooks/useExplain.js | 43 + .../dist/hooks/useExplain.js.map | 1 + .../dist/hooks/useFetcher.d.ts | 29 + .../dist/hooks/useFetcher.d.ts.map | 1 + .../ruru-components/dist/hooks/useFetcher.js | 191 + .../dist/hooks/useFetcher.js.map | 1 + .../dist/hooks/useGraphQLChangeStream.d.ts | 5 + .../hooks/useGraphQLChangeStream.d.ts.map | 1 + .../dist/hooks/useGraphQLChangeStream.js | 52 + .../dist/hooks/useGraphQLChangeStream.js.map | 1 + .../dist/hooks/usePrettify.d.ts | 12 + .../dist/hooks/usePrettify.d.ts.map | 1 + .../ruru-components/dist/hooks/usePrettify.js | 29 + .../dist/hooks/usePrettify.js.map | 1 + .../dist/hooks/useStorage.d.ts | 16 + .../dist/hooks/useStorage.d.ts.map | 1 + .../ruru-components/dist/hooks/useStorage.js | 57 + .../dist/hooks/useStorage.js.map | 1 + grafast/ruru-components/dist/index.d.ts | 3 + grafast/ruru-components/dist/index.d.ts.map | 1 + grafast/ruru-components/dist/index.js | 2 + grafast/ruru-components/dist/index.js.map | 1 + grafast/ruru-components/dist/interfaces.d.ts | 71 + .../ruru-components/dist/interfaces.d.ts.map | 1 + grafast/ruru-components/dist/interfaces.js | 2 + .../ruru-components/dist/interfaces.js.map | 1 + .../ruru-components/dist/plugins/explain.d.ts | 3 + .../dist/plugins/explain.d.ts.map | 1 + .../ruru-components/dist/plugins/explain.js | 15 + .../dist/plugins/explain.js.map | 1 + grafast/ruru-components/dist/ruru.d.ts | 15 + grafast/ruru-components/dist/ruru.d.ts.map | 1 + grafast/ruru-components/dist/ruru.js | 70 + grafast/ruru-components/dist/ruru.js.map | 1 + grafast/ruru-components/tsconfig.tsbuildinfo | 1 + grafast/ruru/bundle/ruru.min.js | 2 + grafast/ruru/bundle/ruru.min.js.LICENSE.txt | 74 + grafast/ruru/dist/.npmignore | 1 + grafast/ruru/dist/bundleData.d.ts | 2 + grafast/ruru/dist/bundleData.d.ts.map | 1 + grafast/ruru/dist/bundleData.js | 9 + grafast/ruru/dist/bundleData.js.map | 1 + grafast/ruru/dist/cli-run.d.ts | 3 + grafast/ruru/dist/cli-run.d.ts.map | 1 + grafast/ruru/dist/cli-run.js | 7 + grafast/ruru/dist/cli-run.js.map | 1 + grafast/ruru/dist/cli.d.ts | 16 + grafast/ruru/dist/cli.d.ts.map | 1 + grafast/ruru/dist/cli.js | 169 + grafast/ruru/dist/cli.js.map | 1 + grafast/ruru/dist/index.d.ts | 2 + grafast/ruru/dist/index.d.ts.map | 1 + grafast/ruru/dist/index.js | 4 + grafast/ruru/dist/index.js.map | 1 + grafast/ruru/dist/interfaces.d.ts | 13 + grafast/ruru/dist/interfaces.d.ts.map | 1 + grafast/ruru/dist/interfaces.js | 3 + grafast/ruru/dist/interfaces.js.map | 1 + grafast/ruru/dist/server.d.ts | 90 + grafast/ruru/dist/server.d.ts.map | 1 + grafast/ruru/dist/server.js | 77 + grafast/ruru/dist/server.js.map | 1 + grafast/ruru/dist/version.d.ts | 2 + grafast/ruru/dist/version.d.ts.map | 1 + grafast/ruru/dist/version.js | 6 + grafast/ruru/dist/version.js.map | 1 + grafast/ruru/src/bundleData.ts | 5 + grafast/ruru/tsconfig.build.tsbuildinfo | 1 + graphile-build/graphile-build-pg/dist/_.d.ts | 5 + .../graphile-build-pg/dist/_.d.ts.map | 1 + graphile-build/graphile-build-pg/dist/_.js | 12 + .../graphile-build-pg/dist/_.js.map | 1 + .../graphile-build-pg/dist/behavior.d.ts | 9 + .../graphile-build-pg/dist/behavior.d.ts.map | 1 + .../graphile-build-pg/dist/behavior.js | 44 + .../graphile-build-pg/dist/behavior.js.map | 1 + .../dist/examples/NO_DATA_GATHERING.d.ts | 9 + .../dist/examples/NO_DATA_GATHERING.d.ts.map | 1 + .../dist/examples/NO_DATA_GATHERING.js | 460 +++ .../dist/examples/NO_DATA_GATHERING.js.map | 1 + .../dist/examples/benjies-test-script.d.ts | 2 + .../examples/benjies-test-script.d.ts.map | 1 + .../dist/examples/benjies-test-script.js | 278 ++ .../dist/examples/benjies-test-script.js.map | 1 + .../dist/examples/config.d.ts | 15 + .../dist/examples/config.d.ts.map | 1 + .../graphile-build-pg/dist/examples/config.js | 76 + .../dist/examples/config.js.map | 1 + .../dist/examples/fastify-helix-envelop.d.ts | 2 + .../examples/fastify-helix-envelop.d.ts.map | 1 + .../dist/examples/fastify-helix-envelop.js | 138 + .../examples/fastify-helix-envelop.js.map | 1 + .../dist/examples/schema-export.d.ts | 2 + .../dist/examples/schema-export.d.ts.map | 1 + .../dist/examples/schema-export.js | 58 + .../dist/examples/schema-export.js.map | 1 + .../dist/examples/webpack-entry-file.d.ts | 5 + .../dist/examples/webpack-entry-file.d.ts.map | 1 + .../dist/examples/webpack-entry-file.js | 14 + .../dist/examples/webpack-entry-file.js.map | 1 + .../dist/examples/webpack.d.ts | 2 + .../dist/examples/webpack.d.ts.map | 1 + .../dist/examples/webpack.js | 116 + .../dist/examples/webpack.js.map | 1 + .../graphile-build-pg/dist/index.d.ts | 142 + .../graphile-build-pg/dist/index.d.ts.map | 1 + .../graphile-build-pg/dist/index.js | 82 + .../graphile-build-pg/dist/index.js.map | 1 + .../graphile-build-pg/dist/inputUtils.d.ts | 31 + .../dist/inputUtils.d.ts.map | 1 + .../graphile-build-pg/dist/inputUtils.js | 79 + .../graphile-build-pg/dist/inputUtils.js.map | 1 + .../dist/plugins/PgAllRowsPlugin.d.ts | 34 + .../dist/plugins/PgAllRowsPlugin.d.ts.map | 1 + .../dist/plugins/PgAllRowsPlugin.js | 105 + .../dist/plugins/PgAllRowsPlugin.js.map | 1 + .../plugins/PgAttributeDeprecationPlugin.d.ts | 10 + .../PgAttributeDeprecationPlugin.d.ts.map | 1 + .../plugins/PgAttributeDeprecationPlugin.js | 30 + .../PgAttributeDeprecationPlugin.js.map | 1 + .../dist/plugins/PgAttributesPlugin.d.ts | 64 + .../dist/plugins/PgAttributesPlugin.d.ts.map | 1 + .../dist/plugins/PgAttributesPlugin.js | 423 ++ .../dist/plugins/PgAttributesPlugin.js.map | 1 + .../dist/plugins/PgBasicsPlugin.d.ts | 103 + .../dist/plugins/PgBasicsPlugin.d.ts.map | 1 + .../dist/plugins/PgBasicsPlugin.js | 319 ++ .../dist/plugins/PgBasicsPlugin.js.map | 1 + .../dist/plugins/PgCodecsPlugin.d.ts | 114 + .../dist/plugins/PgCodecsPlugin.d.ts.map | 1 + .../dist/plugins/PgCodecsPlugin.js | 984 +++++ .../dist/plugins/PgCodecsPlugin.js.map | 1 + .../plugins/PgConditionArgumentPlugin.d.ts | 35 + .../PgConditionArgumentPlugin.d.ts.map | 1 + .../dist/plugins/PgConditionArgumentPlugin.js | 105 + .../plugins/PgConditionArgumentPlugin.js.map | 1 + .../PgConditionCustomFieldsPlugin.d.ts | 26 + .../PgConditionCustomFieldsPlugin.d.ts.map | 1 + .../plugins/PgConditionCustomFieldsPlugin.js | 113 + .../PgConditionCustomFieldsPlugin.js.map | 1 + ...onnectionArgOrderByDefaultValuePlugin.d.ts | 11 + ...ctionArgOrderByDefaultValuePlugin.d.ts.map | 1 + ...gConnectionArgOrderByDefaultValuePlugin.js | 43 + ...nectionArgOrderByDefaultValuePlugin.js.map | 1 + .../plugins/PgConnectionArgOrderByPlugin.d.ts | 25 + .../PgConnectionArgOrderByPlugin.d.ts.map | 1 + .../plugins/PgConnectionArgOrderByPlugin.js | 128 + .../PgConnectionArgOrderByPlugin.js.map | 1 + .../plugins/PgConnectionTotalCountPlugin.d.ts | 24 + .../PgConnectionTotalCountPlugin.d.ts.map | 1 + .../plugins/PgConnectionTotalCountPlugin.js | 64 + .../PgConnectionTotalCountPlugin.js.map | 1 + .../dist/plugins/PgCustomTypeFieldPlugin.d.ts | 100 + .../plugins/PgCustomTypeFieldPlugin.d.ts.map | 1 + .../dist/plugins/PgCustomTypeFieldPlugin.js | 900 +++++ .../plugins/PgCustomTypeFieldPlugin.js.map | 1 + .../dist/plugins/PgEnumTablesPlugin.d.ts | 44 + .../dist/plugins/PgEnumTablesPlugin.d.ts.map | 1 + .../dist/plugins/PgEnumTablesPlugin.js | 271 ++ .../dist/plugins/PgEnumTablesPlugin.js.map | 1 + .../dist/plugins/PgFakeConstraintsPlugin.d.ts | 27 + .../plugins/PgFakeConstraintsPlugin.d.ts.map | 1 + .../dist/plugins/PgFakeConstraintsPlugin.js | 311 ++ .../plugins/PgFakeConstraintsPlugin.js.map | 1 + .../PgFirstLastBeforeAfterArgsPlugin.d.ts | 22 + .../PgFirstLastBeforeAfterArgsPlugin.d.ts.map | 1 + .../PgFirstLastBeforeAfterArgsPlugin.js | 95 + .../PgFirstLastBeforeAfterArgsPlugin.js.map | 1 + .../dist/plugins/PgIndexBehaviorsPlugin.d.ts | 22 + .../plugins/PgIndexBehaviorsPlugin.d.ts.map | 1 + .../dist/plugins/PgIndexBehaviorsPlugin.js | 111 + .../plugins/PgIndexBehaviorsPlugin.js.map | 1 + .../PgInterfaceModeUnionAllRowsPlugin.d.ts | 34 + ...PgInterfaceModeUnionAllRowsPlugin.d.ts.map | 1 + .../PgInterfaceModeUnionAllRowsPlugin.js | 156 + .../PgInterfaceModeUnionAllRowsPlugin.js.map | 1 + .../dist/plugins/PgIntrospectionPlugin.d.ts | 127 + .../plugins/PgIntrospectionPlugin.d.ts.map | 1 + .../dist/plugins/PgIntrospectionPlugin.js | 384 ++ .../dist/plugins/PgIntrospectionPlugin.js.map | 1 + .../dist/plugins/PgJWTPlugin.d.ts | 45 + .../dist/plugins/PgJWTPlugin.d.ts.map | 1 + .../dist/plugins/PgJWTPlugin.js | 126 + .../dist/plugins/PgJWTPlugin.js.map | 1 + .../dist/plugins/PgLtreePlugin.d.ts | 9 + .../dist/plugins/PgLtreePlugin.d.ts.map | 1 + .../dist/plugins/PgLtreePlugin.js | 64 + .../dist/plugins/PgLtreePlugin.js.map | 1 + .../dist/plugins/PgMutationCreatePlugin.d.ts | 26 + .../plugins/PgMutationCreatePlugin.d.ts.map | 1 + .../dist/plugins/PgMutationCreatePlugin.js | 203 + .../plugins/PgMutationCreatePlugin.js.map | 1 + .../plugins/PgMutationPayloadEdgePlugin.d.ts | 19 + .../PgMutationPayloadEdgePlugin.d.ts.map | 1 + .../plugins/PgMutationPayloadEdgePlugin.js | 127 + .../PgMutationPayloadEdgePlugin.js.map | 1 + .../plugins/PgMutationUpdateDeletePlugin.d.ts | 84 + .../PgMutationUpdateDeletePlugin.d.ts.map | 1 + .../plugins/PgMutationUpdateDeletePlugin.js | 508 +++ .../PgMutationUpdateDeletePlugin.js.map | 1 + .../plugins/PgNodeIdAttributesPlugin.d.ts | 31 + .../plugins/PgNodeIdAttributesPlugin.d.ts.map | 1 + .../dist/plugins/PgNodeIdAttributesPlugin.js | 202 + .../plugins/PgNodeIdAttributesPlugin.js.map | 1 + .../plugins/PgOrderAllAttributesPlugin.d.ts | 21 + .../PgOrderAllAttributesPlugin.d.ts.map | 1 + .../plugins/PgOrderAllAttributesPlugin.js | 119 + .../plugins/PgOrderAllAttributesPlugin.js.map | 1 + .../plugins/PgOrderByPrimaryKeyPlugin.d.ts | 16 + .../PgOrderByPrimaryKeyPlugin.d.ts.map | 1 + .../dist/plugins/PgOrderByPrimaryKeyPlugin.js | 80 + .../plugins/PgOrderByPrimaryKeyPlugin.js.map | 1 + .../plugins/PgOrderCustomFieldsPlugin.d.ts | 23 + .../PgOrderCustomFieldsPlugin.d.ts.map | 1 + .../dist/plugins/PgOrderCustomFieldsPlugin.js | 94 + .../plugins/PgOrderCustomFieldsPlugin.js.map | 1 + .../PgPolymorphismOnlyArgumentPlugin.d.ts | 23 + .../PgPolymorphismOnlyArgumentPlugin.d.ts.map | 1 + .../PgPolymorphismOnlyArgumentPlugin.js | 157 + .../PgPolymorphismOnlyArgumentPlugin.js.map | 1 + .../dist/plugins/PgPolymorphismPlugin.d.ts | 74 + .../plugins/PgPolymorphismPlugin.d.ts.map | 1 + .../dist/plugins/PgPolymorphismPlugin.js | 974 +++++ .../dist/plugins/PgPolymorphismPlugin.js.map | 1 + .../dist/plugins/PgProceduresPlugin.d.ts | 57 + .../dist/plugins/PgProceduresPlugin.d.ts.map | 1 + .../dist/plugins/PgProceduresPlugin.js | 455 +++ .../dist/plugins/PgProceduresPlugin.js.map | 1 + .../dist/plugins/PgRBACPlugin.d.ts | 35 + .../dist/plugins/PgRBACPlugin.d.ts.map | 1 + .../dist/plugins/PgRBACPlugin.js | 188 + .../dist/plugins/PgRBACPlugin.js.map | 1 + .../dist/plugins/PgRefsPlugin.d.ts | 45 + .../dist/plugins/PgRefsPlugin.d.ts.map | 1 + .../dist/plugins/PgRefsPlugin.js | 216 + .../dist/plugins/PgRefsPlugin.js.map | 1 + .../dist/plugins/PgRegistryPlugin.d.ts | 40 + .../dist/plugins/PgRegistryPlugin.d.ts.map | 1 + .../dist/plugins/PgRegistryPlugin.js | 61 + .../dist/plugins/PgRegistryPlugin.js.map | 1 + .../dist/plugins/PgRelationsPlugin.d.ts | 92 + .../dist/plugins/PgRelationsPlugin.d.ts.map | 1 + .../dist/plugins/PgRelationsPlugin.js | 944 +++++ .../dist/plugins/PgRelationsPlugin.js.map | 1 + .../PgRemoveExtensionResourcesPlugin.d.ts | 18 + .../PgRemoveExtensionResourcesPlugin.d.ts.map | 1 + .../PgRemoveExtensionResourcesPlugin.js | 100 + .../PgRemoveExtensionResourcesPlugin.js.map | 1 + .../dist/plugins/PgRowByUniquePlugin.d.ts | 25 + .../dist/plugins/PgRowByUniquePlugin.d.ts.map | 1 + .../dist/plugins/PgRowByUniquePlugin.js | 135 + .../dist/plugins/PgRowByUniquePlugin.js.map | 1 + .../dist/plugins/PgTableNodePlugin.d.ts | 15 + .../dist/plugins/PgTableNodePlugin.d.ts.map | 1 + .../dist/plugins/PgTableNodePlugin.js | 150 + .../dist/plugins/PgTableNodePlugin.js.map | 1 + .../dist/plugins/PgTablesPlugin.d.ts | 165 + .../dist/plugins/PgTablesPlugin.d.ts.map | 1 + .../dist/plugins/PgTablesPlugin.js | 441 +++ .../dist/plugins/PgTablesPlugin.js.map | 1 + .../dist/plugins/PgTypesPlugin.d.ts | 29 + .../dist/plugins/PgTypesPlugin.d.ts.map | 1 + .../dist/plugins/PgTypesPlugin.js | 343 ++ .../dist/plugins/PgTypesPlugin.js.map | 1 + .../graphile-build-pg/dist/preset.d.ts | 16 + .../graphile-build-pg/dist/preset.d.ts.map | 1 + .../graphile-build-pg/dist/preset.js | 104 + .../graphile-build-pg/dist/preset.js.map | 1 + .../graphile-build-pg/dist/utils.d.ts | 32 + .../graphile-build-pg/dist/utils.d.ts.map | 1 + .../graphile-build-pg/dist/utils.js | 398 ++ .../graphile-build-pg/dist/utils.js.map | 1 + .../graphile-build-pg/dist/version.d.ts | 2 + .../graphile-build-pg/dist/version.d.ts.map | 1 + .../graphile-build-pg/dist/version.js | 6 + .../graphile-build-pg/dist/version.js.map | 1 + .../graphile-build-pg/dist/watchFixtures.d.ts | 7 + .../dist/watchFixtures.d.ts.map | 1 + .../graphile-build-pg/dist/watchFixtures.js | 111 + .../dist/watchFixtures.js.map | 1 + .../graphile-build-pg/tsconfig.tsbuildinfo | 1 + .../graphile-build/dist/SchemaBuilder.d.ts | 55 + .../dist/SchemaBuilder.d.ts.map | 1 + .../graphile-build/dist/SchemaBuilder.js | 186 + .../graphile-build/dist/SchemaBuilder.js.map | 1 + .../dist/SchemaBuilderHooks.d.ts | 7 + .../dist/SchemaBuilderHooks.d.ts.map | 1 + .../graphile-build/dist/SchemaBuilderHooks.js | 39 + .../dist/SchemaBuilderHooks.js.map | 1 + .../graphile-build/dist/behavior.d.ts | 78 + .../graphile-build/dist/behavior.d.ts.map | 1 + .../graphile-build/dist/behavior.js | 673 ++++ .../graphile-build/dist/behavior.js.map | 1 + .../dist/callbackToAsyncIterator.d.ts | 10 + .../dist/callbackToAsyncIterator.d.ts.map | 1 + .../dist/callbackToAsyncIterator.js | 95 + .../dist/callbackToAsyncIterator.js.map | 1 + .../dist/examples/README-1.d.ts | 15 + .../dist/examples/README-1.d.ts.map | 1 + .../graphile-build/dist/examples/README-1.js | 109 + .../dist/examples/README-1.js.map | 1 + .../graphile-build/dist/extend.d.ts | 12 + .../graphile-build/dist/extend.d.ts.map | 1 + graphile-build/graphile-build/dist/extend.js | 47 + .../graphile-build/dist/extend.js.map | 1 + .../graphile-build/dist/global.d.ts | 677 ++++ .../graphile-build/dist/global.d.ts.map | 1 + graphile-build/graphile-build/dist/global.js | 3 + .../graphile-build/dist/global.js.map | 1 + graphile-build/graphile-build/dist/index.d.ts | 303 ++ .../graphile-build/dist/index.d.ts.map | 1 + graphile-build/graphile-build/dist/index.js | 498 +++ .../graphile-build/dist/index.js.map | 1 + .../graphile-build/dist/inflection.d.ts | 72 + .../graphile-build/dist/inflection.d.ts.map | 1 + .../graphile-build/dist/inflection.js | 101 + .../graphile-build/dist/inflection.js.map | 1 + .../graphile-build/dist/interfaces.d.ts | 67 + .../graphile-build/dist/interfaces.d.ts.map | 1 + .../graphile-build/dist/interfaces.js | 3 + .../graphile-build/dist/interfaces.js.map | 1 + .../graphile-build/dist/makeNewBuild.d.ts | 7 + .../graphile-build/dist/makeNewBuild.d.ts.map | 1 + .../graphile-build/dist/makeNewBuild.js | 370 ++ .../graphile-build/dist/makeNewBuild.js.map | 1 + .../dist/newWithHooks/index.d.ts | 19 + .../dist/newWithHooks/index.d.ts.map | 1 + .../graphile-build/dist/newWithHooks/index.js | 424 ++ .../dist/newWithHooks/index.js.map | 1 + .../AddInterfaceSubtypesToTypesPlugin.d.ts | 10 + ...AddInterfaceSubtypesToTypesPlugin.d.ts.map | 1 + .../AddInterfaceSubtypesToTypesPlugin.js | 31 + .../AddInterfaceSubtypesToTypesPlugin.js.map | 1 + ...AddNodeInterfaceToSuitableTypesPlugin.d.ts | 10 + ...odeInterfaceToSuitableTypesPlugin.d.ts.map | 1 + .../AddNodeInterfaceToSuitableTypesPlugin.js | 93 + ...dNodeInterfaceToSuitableTypesPlugin.js.map | 1 + .../BuiltinScalarConnectionsPlugin.d.ts | 11 + .../BuiltinScalarConnectionsPlugin.d.ts.map | 1 + .../plugins/BuiltinScalarConnectionsPlugin.js | 42 + .../BuiltinScalarConnectionsPlugin.js.map | 1 + .../ClientMutationIdDescriptionPlugin.d.ts | 22 + ...ClientMutationIdDescriptionPlugin.d.ts.map | 1 + .../ClientMutationIdDescriptionPlugin.js | 69 + .../ClientMutationIdDescriptionPlugin.js.map | 1 + .../plugins/CollectReferencedTypesPlugin.d.ts | 10 + .../CollectReferencedTypesPlugin.d.ts.map | 1 + .../plugins/CollectReferencedTypesPlugin.js | 34 + .../CollectReferencedTypesPlugin.js.map | 1 + .../dist/plugins/CommonBehaviorsPlugin.d.ts | 16 + .../plugins/CommonBehaviorsPlugin.d.ts.map | 1 + .../dist/plugins/CommonBehaviorsPlugin.js | 44 + .../dist/plugins/CommonBehaviorsPlugin.js.map | 1 + .../dist/plugins/CommonTypesPlugin.d.ts | 20 + .../dist/plugins/CommonTypesPlugin.d.ts.map | 1 + .../dist/plugins/CommonTypesPlugin.js | 122 + .../dist/plugins/CommonTypesPlugin.js.map | 1 + .../dist/plugins/ConnectionPlugin.d.ts | 31 + .../dist/plugins/ConnectionPlugin.d.ts.map | 1 + .../dist/plugins/ConnectionPlugin.js | 140 + .../dist/plugins/ConnectionPlugin.js.map | 1 + .../dist/plugins/CursorTypePlugin.d.ts | 18 + .../dist/plugins/CursorTypePlugin.d.ts.map | 1 + .../dist/plugins/CursorTypePlugin.js | 25 + .../dist/plugins/CursorTypePlugin.js.map | 1 + .../plugins/MutationPayloadQueryPlugin.d.ts | 18 + .../MutationPayloadQueryPlugin.d.ts.map | 1 + .../plugins/MutationPayloadQueryPlugin.js | 42 + .../plugins/MutationPayloadQueryPlugin.js.map | 1 + .../dist/plugins/MutationPlugin.d.ts | 24 + .../dist/plugins/MutationPlugin.d.ts.map | 1 + .../dist/plugins/MutationPlugin.js | 68 + .../dist/plugins/MutationPlugin.js.map | 1 + .../dist/plugins/NodeAccessorPlugin.d.ts | 27 + .../dist/plugins/NodeAccessorPlugin.d.ts.map | 1 + .../dist/plugins/NodeAccessorPlugin.js | 120 + .../dist/plugins/NodeAccessorPlugin.js.map | 1 + .../plugins/NodeIdCodecBase64JSONPlugin.d.ts | 10 + .../NodeIdCodecBase64JSONPlugin.d.ts.map | 1 + .../plugins/NodeIdCodecBase64JSONPlugin.js | 40 + .../NodeIdCodecBase64JSONPlugin.js.map | 1 + .../plugins/NodeIdCodecPipeStringPlugin.d.ts | 10 + .../NodeIdCodecPipeStringPlugin.d.ts.map | 1 + .../plugins/NodeIdCodecPipeStringPlugin.js | 34 + .../NodeIdCodecPipeStringPlugin.js.map | 1 + .../dist/plugins/NodePlugin.d.ts | 33 + .../dist/plugins/NodePlugin.d.ts.map | 1 + .../graphile-build/dist/plugins/NodePlugin.js | 139 + .../dist/plugins/NodePlugin.js.map | 1 + .../plugins/PageInfoStartEndCursorPlugin.d.ts | 16 + .../PageInfoStartEndCursorPlugin.d.ts.map | 1 + .../plugins/PageInfoStartEndCursorPlugin.js | 42 + .../PageInfoStartEndCursorPlugin.js.map | 1 + .../dist/plugins/QueryPlugin.d.ts | 26 + .../dist/plugins/QueryPlugin.d.ts.map | 1 + .../dist/plugins/QueryPlugin.js | 59 + .../dist/plugins/QueryPlugin.js.map | 1 + .../dist/plugins/QueryQueryPlugin.d.ts | 14 + .../dist/plugins/QueryQueryPlugin.d.ts.map | 1 + .../dist/plugins/QueryQueryPlugin.js | 39 + .../dist/plugins/QueryQueryPlugin.js.map | 1 + .../dist/plugins/RegisterQueryNodePlugin.d.ts | 10 + .../plugins/RegisterQueryNodePlugin.d.ts.map | 1 + .../dist/plugins/RegisterQueryNodePlugin.js | 39 + .../plugins/RegisterQueryNodePlugin.js.map | 1 + .../dist/plugins/StreamDeferPlugin.d.ts | 16 + .../dist/plugins/StreamDeferPlugin.d.ts.map | 1 + .../dist/plugins/StreamDeferPlugin.js | 26 + .../dist/plugins/StreamDeferPlugin.js.map | 1 + .../dist/plugins/SubscriptionPlugin.d.ts | 24 + .../dist/plugins/SubscriptionPlugin.d.ts.map | 1 + .../dist/plugins/SubscriptionPlugin.js | 68 + .../dist/plugins/SubscriptionPlugin.js.map | 1 + .../dist/plugins/SwallowErrorsPlugin.d.ts | 24 + .../dist/plugins/SwallowErrorsPlugin.d.ts.map | 1 + .../dist/plugins/SwallowErrorsPlugin.js | 38 + .../dist/plugins/SwallowErrorsPlugin.js.map | 1 + .../plugins/TrimEmptyDescriptionsPlugin.d.ts | 10 + .../TrimEmptyDescriptionsPlugin.d.ts.map | 1 + .../plugins/TrimEmptyDescriptionsPlugin.js | 57 + .../TrimEmptyDescriptionsPlugin.js.map | 1 + .../graphile-build/dist/plugins/index.d.ts | 25 + .../dist/plugins/index.d.ts.map | 1 + .../graphile-build/dist/plugins/index.js | 50 + .../graphile-build/dist/plugins/index.js.map | 1 + .../graphile-build/dist/preset.d.ts | 21 + .../graphile-build/dist/preset.d.ts.map | 1 + graphile-build/graphile-build/dist/preset.js | 56 + .../graphile-build/dist/preset.js.map | 1 + .../graphile-build/dist/swallowError.d.ts | 9 + .../graphile-build/dist/swallowError.d.ts.map | 1 + .../graphile-build/dist/swallowError.js | 34 + .../graphile-build/dist/swallowError.js.map | 1 + graphile-build/graphile-build/dist/utils.d.ts | 57 + .../graphile-build/dist/utils.d.ts.map | 1 + graphile-build/graphile-build/dist/utils.js | 202 + .../graphile-build/dist/utils.js.map | 1 + .../dist/vendor/collectReferencedTypes.d.ts | 3 + .../vendor/collectReferencedTypes.d.ts.map | 1 + .../dist/vendor/collectReferencedTypes.js | 61 + .../dist/vendor/collectReferencedTypes.js.map | 1 + .../graphile-build/dist/version.d.ts | 2 + .../graphile-build/dist/version.d.ts.map | 1 + graphile-build/graphile-build/dist/version.js | 6 + .../graphile-build/dist/version.js.map | 1 + .../graphile-build/tsconfig.tsbuildinfo | 1 + .../dist/index.d.ts | 39 + .../dist/index.d.ts.map | 1 + .../dist/index.js | 432 ++ .../dist/index.js.map | 1 + .../tsconfig.tsbuildinfo | 1 + .../graphile-utils/dist/exportable.d.ts | 2 + .../graphile-utils/dist/exportable.d.ts.map | 1 + .../graphile-utils/dist/exportable.js | 16 + .../graphile-utils/dist/exportable.js.map | 1 + graphile-build/graphile-utils/dist/gql.d.ts | 3 + .../graphile-utils/dist/gql.d.ts.map | 1 + graphile-build/graphile-utils/dist/gql.js | 59 + graphile-build/graphile-utils/dist/gql.js.map | 1 + graphile-build/graphile-utils/dist/index.d.ts | 11 + .../graphile-utils/dist/index.d.ts.map | 1 + graphile-build/graphile-utils/dist/index.js | 28 + .../graphile-utils/dist/index.js.map | 1 + .../dist/makeAddInflectorsPlugin.d.ts | 3 + .../dist/makeAddInflectorsPlugin.d.ts.map | 1 + .../dist/makeAddInflectorsPlugin.js | 41 + .../dist/makeAddInflectorsPlugin.js.map | 1 + .../dist/makeAddPgTableConditionPlugin.d.ts | 14 + .../makeAddPgTableConditionPlugin.d.ts.map | 1 + .../dist/makeAddPgTableConditionPlugin.js | 81 + .../dist/makeAddPgTableConditionPlugin.js.map | 1 + .../dist/makeAddPgTableOrderByPlugin.d.ts | 25 + .../dist/makeAddPgTableOrderByPlugin.d.ts.map | 1 + .../dist/makeAddPgTableOrderByPlugin.js | 160 + .../dist/makeAddPgTableOrderByPlugin.js.map | 1 + .../dist/makeChangeNullabilityPlugin.d.ts | 15 + .../dist/makeChangeNullabilityPlugin.d.ts.map | 1 + .../dist/makeChangeNullabilityPlugin.js | 138 + .../dist/makeChangeNullabilityPlugin.js.map | 1 + .../dist/makeExtendSchemaPlugin.d.ts | 94 + .../dist/makeExtendSchemaPlugin.d.ts.map | 1 + .../dist/makeExtendSchemaPlugin.js | 715 ++++ .../dist/makeExtendSchemaPlugin.js.map | 1 + .../dist/makePgSmartTagsPlugin.d.ts | 104 + .../dist/makePgSmartTagsPlugin.d.ts.map | 1 + .../dist/makePgSmartTagsPlugin.js | 411 ++ .../dist/makePgSmartTagsPlugin.js.map | 1 + .../dist/makeProcessSchemaPlugin.d.ts | 5 + .../dist/makeProcessSchemaPlugin.d.ts.map | 1 + .../dist/makeProcessSchemaPlugin.js | 18 + .../dist/makeProcessSchemaPlugin.js.map | 1 + .../dist/makeWrapPlansPlugin.d.ts | 21 + .../dist/makeWrapPlansPlugin.d.ts.map | 1 + .../dist/makeWrapPlansPlugin.js | 110 + .../dist/makeWrapPlansPlugin.js.map | 1 + .../dist/parseIdentifierParts.d.ts | 2 + .../dist/parseIdentifierParts.d.ts.map | 1 + .../dist/parseIdentifierParts.js | 47 + .../dist/parseIdentifierParts.js.map | 1 + .../graphile-utils/tsconfig.build.tsbuildinfo | 1 + sponsors.json | 3 +- .../dist/ExhaustiveDeps.d.ts | 3 + .../dist/ExhaustiveDeps.d.ts.map | 1 + .../dist/ExhaustiveDeps.js | 559 +++ .../dist/ExhaustiveDeps.js.map | 1 + .../dist/ExportInstances.d.ts | 3 + .../dist/ExportInstances.d.ts.map | 1 + .../dist/ExportInstances.js | 85 + .../dist/ExportInstances.js.map | 1 + .../dist/ExportMethods.d.ts | 3 + .../dist/ExportMethods.d.ts.map | 1 + .../dist/ExportMethods.js | 190 + .../dist/ExportMethods.js.map | 1 + .../dist/ExportSubclasses.d.ts | 3 + .../dist/ExportSubclasses.d.ts.map | 1 + .../dist/ExportSubclasses.js | 170 + .../dist/ExportSubclasses.js.map | 1 + .../dist/NoNested.d.ts | 4 + .../dist/NoNested.d.ts.map | 1 + .../dist/NoNested.js | 83 + .../dist/NoNested.js.map | 1 + .../dist/common.d.ts | 25 + .../dist/common.d.ts.map | 1 + .../dist/common.js | 77 + .../dist/common.js.map | 1 + .../dist/index.d.ts | 32 + .../dist/index.d.ts.map | 1 + .../dist/index.js | 69 + .../dist/index.js.map | 1 + .../tsconfig.tsbuildinfo | 1 + utils/graphile-config/dist/cli.d.ts | 11 + utils/graphile-config/dist/cli.d.ts.map | 1 + utils/graphile-config/dist/cli.js | 24 + utils/graphile-config/dist/cli.js.map | 1 + utils/graphile-config/dist/functionality.d.ts | 3 + .../dist/functionality.d.ts.map | 1 + utils/graphile-config/dist/functionality.js | 63 + .../graphile-config/dist/functionality.js.map | 1 + utils/graphile-config/dist/hooks.d.ts | 24 + utils/graphile-config/dist/hooks.d.ts.map | 1 + utils/graphile-config/dist/hooks.js | 46 + utils/graphile-config/dist/hooks.js.map | 1 + utils/graphile-config/dist/index.d.ts | 65 + utils/graphile-config/dist/index.d.ts.map | 1 + utils/graphile-config/dist/index.js | 26 + utils/graphile-config/dist/index.js.map | 1 + utils/graphile-config/dist/interfaces.d.ts | 12 + .../graphile-config/dist/interfaces.d.ts.map | 1 + utils/graphile-config/dist/interfaces.js | 3 + utils/graphile-config/dist/interfaces.js.map | 1 + utils/graphile-config/dist/loadConfig.d.ts | 3 + .../graphile-config/dist/loadConfig.d.ts.map | 1 + utils/graphile-config/dist/loadConfig.js | 105 + utils/graphile-config/dist/loadConfig.js.map | 1 + utils/graphile-config/dist/middleware.d.ts | 21 + .../graphile-config/dist/middleware.d.ts.map | 1 + utils/graphile-config/dist/middleware.js | 71 + utils/graphile-config/dist/middleware.js.map | 1 + .../graphile-config/dist/resolvePresets.d.ts | 10 + .../dist/resolvePresets.d.ts.map | 1 + utils/graphile-config/dist/resolvePresets.js | 295 ++ .../dist/resolvePresets.js.map | 1 + utils/graphile-config/dist/sort.d.ts | 8 + utils/graphile-config/dist/sort.d.ts.map | 1 + utils/graphile-config/dist/sort.js | 94 + utils/graphile-config/dist/sort.js.map | 1 + utils/graphile-config/dist/utils.d.ts | 2 + utils/graphile-config/dist/utils.d.ts.map | 1 + utils/graphile-config/dist/utils.js | 9 + utils/graphile-config/dist/utils.js.map | 1 + utils/graphile-config/tsconfig.tsbuildinfo | 1 + utils/graphile-export/dist/exportSchema.d.ts | 19 + .../dist/exportSchema.d.ts.map | 1 + utils/graphile-export/dist/exportSchema.js | 1323 +++++++ .../graphile-export/dist/exportSchema.js.map | 1 + utils/graphile-export/dist/helpers.d.ts | 2 + utils/graphile-export/dist/helpers.d.ts.map | 1 + utils/graphile-export/dist/helpers.js | 16 + utils/graphile-export/dist/helpers.js.map | 1 + utils/graphile-export/dist/index.d.ts | 4 + utils/graphile-export/dist/index.d.ts.map | 1 + utils/graphile-export/dist/index.js | 10 + utils/graphile-export/dist/index.js.map | 1 + utils/graphile-export/dist/interfaces.d.ts | 28 + .../graphile-export/dist/interfaces.d.ts.map | 1 + utils/graphile-export/dist/interfaces.js | 3 + utils/graphile-export/dist/interfaces.js.map | 1 + .../graphile-export/dist/optimize/index.d.ts | 3 + .../dist/optimize/index.d.ts.map | 1 + utils/graphile-export/dist/optimize/index.js | 351 ++ .../dist/optimize/index.js.map | 1 + utils/graphile-export/dist/reservedWords.d.ts | 2 + .../dist/reservedWords.d.ts.map | 1 + utils/graphile-export/dist/reservedWords.js | 100 + .../graphile-export/dist/reservedWords.js.map | 1 + utils/graphile-export/dist/wellKnown.d.ts | 6 + utils/graphile-export/dist/wellKnown.d.ts.map | 1 + utils/graphile-export/dist/wellKnown.js | 106 + utils/graphile-export/dist/wellKnown.js.map | 1 + utils/graphile-export/tsconfig.tsbuildinfo | 1 + utils/graphile/dist/cli-run.d.ts | 3 + utils/graphile/dist/cli-run.d.ts.map | 1 + utils/graphile/dist/cli-run.js | 7 + utils/graphile/dist/cli-run.js.map | 1 + utils/graphile/dist/cli.d.ts | 4 + utils/graphile/dist/cli.d.ts.map | 1 + utils/graphile/dist/cli.js | 24 + utils/graphile/dist/cli.js.map | 1 + .../graphile/dist/commands/behavior/cli.d.ts | 4 + .../dist/commands/behavior/cli.d.ts.map | 1 + utils/graphile/dist/commands/behavior/cli.js | 16 + .../dist/commands/behavior/cli.js.map | 1 + .../dist/commands/behavior/debug/cli.d.ts | 12 + .../dist/commands/behavior/debug/cli.d.ts.map | 1 + .../dist/commands/behavior/debug/cli.js | 28 + .../dist/commands/behavior/debug/cli.js.map | 1 + .../dist/commands/behavior/debug/main.d.ts | 7 + .../commands/behavior/debug/main.d.ts.map | 1 + .../dist/commands/behavior/debug/main.js | 202 + .../dist/commands/behavior/debug/main.js.map | 1 + utils/graphile/dist/commands/config/cli.d.ts | 4 + .../dist/commands/config/cli.d.ts.map | 1 + utils/graphile/dist/commands/config/cli.js | 18 + .../graphile/dist/commands/config/cli.js.map | 1 + .../dist/commands/config/options/cli.d.ts | 6 + .../dist/commands/config/options/cli.d.ts.map | 1 + .../dist/commands/config/options/cli.js | 20 + .../dist/commands/config/options/cli.js.map | 1 + .../dist/commands/config/options/main.d.ts | 4 + .../commands/config/options/main.d.ts.map | 1 + .../dist/commands/config/options/main.js | 208 + .../dist/commands/config/options/main.js.map | 1 + .../dist/commands/config/print/cli.d.ts | 12 + .../dist/commands/config/print/cli.d.ts.map | 1 + .../dist/commands/config/print/cli.js | 157 + .../dist/commands/config/print/cli.js.map | 1 + .../dist/commands/inflection/cli.d.ts | 4 + .../dist/commands/inflection/cli.d.ts.map | 1 + .../graphile/dist/commands/inflection/cli.js | 16 + .../dist/commands/inflection/cli.js.map | 1 + .../dist/commands/inflection/list/cli.d.ts | 6 + .../commands/inflection/list/cli.d.ts.map | 1 + .../dist/commands/inflection/list/cli.js | 20 + .../dist/commands/inflection/list/cli.js.map | 1 + .../dist/commands/inflection/list/main.d.ts | 4 + .../commands/inflection/list/main.d.ts.map | 1 + .../dist/commands/inflection/list/main.js | 88 + .../dist/commands/inflection/list/main.js.map | 1 + utils/graphile/dist/index.d.ts | 2 + utils/graphile/dist/index.d.ts.map | 1 + utils/graphile/dist/index.js | 3 + utils/graphile/dist/index.js.map | 1 + utils/graphile/dist/stripAnsi.d.ts | 3 + utils/graphile/dist/stripAnsi.d.ts.map | 1 + utils/graphile/dist/stripAnsi.js | 14 + utils/graphile/dist/stripAnsi.js.map | 1 + utils/graphile/dist/utils/typescriptVfs.d.ts | 22 + .../dist/utils/typescriptVfs.d.ts.map | 1 + utils/graphile/dist/utils/typescriptVfs.js | 261 ++ .../graphile/dist/utils/typescriptVfs.js.map | 1 + utils/graphile/tsconfig.tsbuildinfo | 1 + .../dist/consistentlyOrderedSchema.d.ts | 17 + .../dist/consistentlyOrderedSchema.d.ts.map | 1 + .../dist/consistentlyOrderedSchema.js | 238 ++ .../dist/consistentlyOrderedSchema.js.map | 1 + .../dist/index.d.ts | 5 + .../dist/index.d.ts.map | 1 + .../dist/index.js | 12 + .../dist/index.js.map | 1 + .../tsconfig.tsbuildinfo | 1 + utils/jest-serializer-simple/dist/index.d.ts | 9 + .../dist/index.d.ts.map | 1 + utils/jest-serializer-simple/dist/index.js | 31 + .../jest-serializer-simple/dist/index.js.map | 1 + .../tsconfig.tsbuildinfo | 1 + utils/lds/dist/cli.d.ts | 3 + utils/lds/dist/cli.d.ts.map | 1 + utils/lds/dist/cli.js | 151 + utils/lds/dist/cli.js.map | 1 + utils/lds/dist/fatal-error.d.ts | 6 + utils/lds/dist/fatal-error.d.ts.map | 1 + utils/lds/dist/fatal-error.js | 12 + utils/lds/dist/fatal-error.js.map | 1 + utils/lds/dist/index.d.ts | 38 + utils/lds/dist/index.d.ts.map | 1 + utils/lds/dist/index.js | 123 + utils/lds/dist/index.js.map | 1 + utils/lds/dist/pg-logical-decoding.d.ts | 68 + utils/lds/dist/pg-logical-decoding.d.ts.map | 1 + utils/lds/dist/pg-logical-decoding.js | 192 + utils/lds/dist/pg-logical-decoding.js.map | 1 + utils/lds/tsconfig.tsbuildinfo | 1 + utils/lru/dist/index.d.ts | 30 + utils/lru/dist/index.d.ts.map | 1 + utils/lru/dist/index.js | 141 + utils/lru/dist/index.js.map | 1 + utils/lru/tsconfig.tsbuildinfo | 1 + utils/pg-introspection/dist/acl.d.ts | 159 + utils/pg-introspection/dist/acl.d.ts.map | 1 + utils/pg-introspection/dist/acl.js | 488 +++ utils/pg-introspection/dist/acl.js.map | 1 + .../dist/augmentIntrospection.d.ts | 6 + .../dist/augmentIntrospection.d.ts.map | 1 + .../dist/augmentIntrospection.js | 349 ++ .../dist/augmentIntrospection.js.map | 1 + utils/pg-introspection/dist/index.d.ts | 182 + utils/pg-introspection/dist/index.d.ts.map | 1 + utils/pg-introspection/dist/index.js | 21 + utils/pg-introspection/dist/index.js.map | 1 + .../pg-introspection/dist/introspection.d.ts | 1202 ++++++ .../dist/introspection.d.ts.map | 1 + utils/pg-introspection/dist/introspection.js | 225 ++ .../dist/introspection.js.map | 1 + .../pg-introspection/dist/reservedWords.d.ts | 3 + .../dist/reservedWords.d.ts.map | 1 + utils/pg-introspection/dist/reservedWords.js | 389 ++ .../dist/reservedWords.js.map | 1 + .../pg-introspection/dist/smartComments.d.ts | 9 + .../dist/smartComments.d.ts.map | 1 + utils/pg-introspection/dist/smartComments.js | 52 + .../dist/smartComments.js.map | 1 + utils/pg-introspection/tsconfig.tsbuildinfo | 1 + utils/pg-sql2/dist/index.d.ts | 187 + utils/pg-sql2/dist/index.d.ts.map | 1 + utils/pg-sql2/dist/index.js | 1089 +++++ utils/pg-sql2/dist/index.js.map | 1 + utils/pg-sql2/dist/thereCanBeOnlyOne.d.ts | 7 + utils/pg-sql2/dist/thereCanBeOnlyOne.d.ts.map | 1 + utils/pg-sql2/dist/thereCanBeOnlyOne.js | 12 + utils/pg-sql2/dist/thereCanBeOnlyOne.js.map | 1 + utils/pg-sql2/dist/version.d.ts | 2 + utils/pg-sql2/dist/version.d.ts.map | 1 + utils/pg-sql2/dist/version.js | 6 + utils/pg-sql2/dist/version.js.map | 1 + utils/pg-sql2/tsconfig.tsbuildinfo | 1 + utils/tamedevil/dist/index.d.ts | 269 ++ utils/tamedevil/dist/index.d.ts.map | 1 + utils/tamedevil/dist/index.js | 964 +++++ utils/tamedevil/dist/index.js.map | 1 + utils/tamedevil/dist/reservedWords.d.ts | 2 + utils/tamedevil/dist/reservedWords.d.ts.map | 1 + utils/tamedevil/dist/reservedWords.js | 100 + utils/tamedevil/dist/reservedWords.js.map | 1 + utils/tamedevil/dist/thereCanBeOnlyOne.d.ts | 7 + .../tamedevil/dist/thereCanBeOnlyOne.d.ts.map | 1 + utils/tamedevil/dist/thereCanBeOnlyOne.js | 12 + utils/tamedevil/dist/thereCanBeOnlyOne.js.map | 1 + utils/tamedevil/tsconfig.tsbuildinfo | 1 + 1419 files changed, 79946 insertions(+), 24 deletions(-) create mode 100644 .yarn/install-state.gz create mode 100644 grafast/bench/dist/cli-run.d.ts create mode 100644 grafast/bench/dist/cli-run.d.ts.map create mode 100644 grafast/bench/dist/cli-run.js create mode 100644 grafast/bench/dist/cli-run.js.map create mode 100644 grafast/bench/dist/cli.d.ts create mode 100644 grafast/bench/dist/cli.d.ts.map create mode 100644 grafast/bench/dist/cli.js create mode 100644 grafast/bench/dist/cli.js.map create mode 100644 grafast/bench/dist/index.d.ts create mode 100644 grafast/bench/dist/index.d.ts.map create mode 100644 grafast/bench/dist/index.js create mode 100644 grafast/bench/dist/index.js.map create mode 100644 grafast/bench/dist/interfaces.d.ts create mode 100644 grafast/bench/dist/interfaces.d.ts.map create mode 100644 grafast/bench/dist/interfaces.js create mode 100644 grafast/bench/dist/interfaces.js.map create mode 100644 grafast/bench/tsconfig.build.tsbuildinfo create mode 100644 grafast/dataplan-json/dist/index.d.ts create mode 100644 grafast/dataplan-json/dist/index.d.ts.map create mode 100644 grafast/dataplan-json/dist/index.js create mode 100644 grafast/dataplan-json/dist/index.js.map create mode 100644 grafast/dataplan-json/dist/steps/jsonParse.d.ts create mode 100644 grafast/dataplan-json/dist/steps/jsonParse.d.ts.map create mode 100644 grafast/dataplan-json/dist/steps/jsonParse.js create mode 100644 grafast/dataplan-json/dist/steps/jsonParse.js.map create mode 100644 grafast/dataplan-json/tsconfig.tsbuildinfo create mode 100644 grafast/dataplan-pg/dist/adaptors/pg.d.ts create mode 100644 grafast/dataplan-pg/dist/adaptors/pg.d.ts.map create mode 100644 grafast/dataplan-pg/dist/adaptors/pg.js create mode 100644 grafast/dataplan-pg/dist/adaptors/pg.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/box.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/box.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/box.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/box.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/circle.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/circle.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/circle.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/circle.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/hstore.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/hstore.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/hstore.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/hstore.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/index.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/index.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/index.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/index.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/interval.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/interval.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/interval.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/interval.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/line.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/line.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/line.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/line.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/lseg.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/lseg.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/lseg.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/lseg.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/path.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/path.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/path.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/path.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/point.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/point.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/point.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/point.js.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/polygon.d.ts create mode 100644 grafast/dataplan-pg/dist/codecUtils/polygon.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecUtils/polygon.js create mode 100644 grafast/dataplan-pg/dist/codecUtils/polygon.js.map create mode 100644 grafast/dataplan-pg/dist/codecs.d.ts create mode 100644 grafast/dataplan-pg/dist/codecs.d.ts.map create mode 100644 grafast/dataplan-pg/dist/codecs.js create mode 100644 grafast/dataplan-pg/dist/codecs.js.map create mode 100644 grafast/dataplan-pg/dist/datasource.d.ts create mode 100644 grafast/dataplan-pg/dist/datasource.d.ts.map create mode 100644 grafast/dataplan-pg/dist/datasource.js create mode 100644 grafast/dataplan-pg/dist/datasource.js.map create mode 100644 grafast/dataplan-pg/dist/examples/exampleSchema.d.ts create mode 100644 grafast/dataplan-pg/dist/examples/exampleSchema.d.ts.map create mode 100644 grafast/dataplan-pg/dist/examples/exampleSchema.js create mode 100644 grafast/dataplan-pg/dist/examples/exampleSchema.js.map create mode 100644 grafast/dataplan-pg/dist/executor.d.ts create mode 100644 grafast/dataplan-pg/dist/executor.d.ts.map create mode 100644 grafast/dataplan-pg/dist/executor.js create mode 100644 grafast/dataplan-pg/dist/executor.js.map create mode 100644 grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts create mode 100644 grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts.map create mode 100644 grafast/dataplan-pg/dist/filters/pgBooleanFilter.js create mode 100644 grafast/dataplan-pg/dist/filters/pgBooleanFilter.js.map create mode 100644 grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts create mode 100644 grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts.map create mode 100644 grafast/dataplan-pg/dist/filters/pgClassFilter.js create mode 100644 grafast/dataplan-pg/dist/filters/pgClassFilter.js.map create mode 100644 grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts create mode 100644 grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts.map create mode 100644 grafast/dataplan-pg/dist/filters/pgManyFilter.js create mode 100644 grafast/dataplan-pg/dist/filters/pgManyFilter.js.map create mode 100644 grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts create mode 100644 grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts.map create mode 100644 grafast/dataplan-pg/dist/filters/pgOrFilter.js create mode 100644 grafast/dataplan-pg/dist/filters/pgOrFilter.js.map create mode 100644 grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts create mode 100644 grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts.map create mode 100644 grafast/dataplan-pg/dist/formatSQLForDebugging.js create mode 100644 grafast/dataplan-pg/dist/formatSQLForDebugging.js.map create mode 100644 grafast/dataplan-pg/dist/index.d.ts create mode 100644 grafast/dataplan-pg/dist/index.d.ts.map create mode 100644 grafast/dataplan-pg/dist/index.js create mode 100644 grafast/dataplan-pg/dist/index.js.map create mode 100644 grafast/dataplan-pg/dist/inspect.d.ts create mode 100644 grafast/dataplan-pg/dist/inspect.d.ts.map create mode 100644 grafast/dataplan-pg/dist/inspect.js create mode 100644 grafast/dataplan-pg/dist/inspect.js.map create mode 100644 grafast/dataplan-pg/dist/interfaces.d.ts create mode 100644 grafast/dataplan-pg/dist/interfaces.d.ts.map create mode 100644 grafast/dataplan-pg/dist/interfaces.js create mode 100644 grafast/dataplan-pg/dist/interfaces.js.map create mode 100644 grafast/dataplan-pg/dist/parseArray.d.ts create mode 100644 grafast/dataplan-pg/dist/parseArray.d.ts.map create mode 100644 grafast/dataplan-pg/dist/parseArray.js create mode 100644 grafast/dataplan-pg/dist/parseArray.js.map create mode 100644 grafast/dataplan-pg/dist/pgLocker.d.ts create mode 100644 grafast/dataplan-pg/dist/pgLocker.d.ts.map create mode 100644 grafast/dataplan-pg/dist/pgLocker.js create mode 100644 grafast/dataplan-pg/dist/pgLocker.js.map create mode 100644 grafast/dataplan-pg/dist/pgServices.d.ts create mode 100644 grafast/dataplan-pg/dist/pgServices.d.ts.map create mode 100644 grafast/dataplan-pg/dist/pgServices.js create mode 100644 grafast/dataplan-pg/dist/pgServices.js.map create mode 100644 grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts create mode 100644 grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts.map create mode 100644 grafast/dataplan-pg/dist/plugins/PgContextPlugin.js create mode 100644 grafast/dataplan-pg/dist/plugins/PgContextPlugin.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgClassExpression.js create mode 100644 grafast/dataplan-pg/dist/steps/pgClassExpression.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgCondition.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgCondition.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgCondition.js create mode 100644 grafast/dataplan-pg/dist/steps/pgCondition.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgCursor.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgCursor.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgCursor.js create mode 100644 grafast/dataplan-pg/dist/steps/pgCursor.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgDeleteSingle.js create mode 100644 grafast/dataplan-pg/dist/steps/pgDeleteSingle.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgInsertSingle.js create mode 100644 grafast/dataplan-pg/dist/steps/pgInsertSingle.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgPageInfo.js create mode 100644 grafast/dataplan-pg/dist/steps/pgPageInfo.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgPolymorphic.js create mode 100644 grafast/dataplan-pg/dist/steps/pgPolymorphic.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgSelect.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgSelect.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgSelect.js create mode 100644 grafast/dataplan-pg/dist/steps/pgSelect.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgSelectSingle.js create mode 100644 grafast/dataplan-pg/dist/steps/pgSelectSingle.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js create mode 100644 grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgStmt.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgStmt.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgStmt.js create mode 100644 grafast/dataplan-pg/dist/steps/pgStmt.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgTempTable.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgTempTable.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgTempTable.js create mode 100644 grafast/dataplan-pg/dist/steps/pgTempTable.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgUnionAll.js create mode 100644 grafast/dataplan-pg/dist/steps/pgUnionAll.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgUpdateSingle.js create mode 100644 grafast/dataplan-pg/dist/steps/pgUpdateSingle.js.map create mode 100644 grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js create mode 100644 grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js.map create mode 100644 grafast/dataplan-pg/dist/steps/toPg.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/toPg.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/toPg.js create mode 100644 grafast/dataplan-pg/dist/steps/toPg.js.map create mode 100644 grafast/dataplan-pg/dist/steps/withPgClient.d.ts create mode 100644 grafast/dataplan-pg/dist/steps/withPgClient.d.ts.map create mode 100644 grafast/dataplan-pg/dist/steps/withPgClient.js create mode 100644 grafast/dataplan-pg/dist/steps/withPgClient.js.map create mode 100644 grafast/dataplan-pg/dist/utils.d.ts create mode 100644 grafast/dataplan-pg/dist/utils.d.ts.map create mode 100644 grafast/dataplan-pg/dist/utils.js create mode 100644 grafast/dataplan-pg/dist/utils.js.map create mode 100644 grafast/dataplan-pg/dist/version.d.ts create mode 100644 grafast/dataplan-pg/dist/version.d.ts.map create mode 100644 grafast/dataplan-pg/dist/version.js create mode 100644 grafast/dataplan-pg/dist/version.js.map create mode 100644 grafast/dataplan-pg/tsconfig.tsbuildinfo create mode 100644 grafast/grafast/dist/args.d.ts create mode 100644 grafast/grafast/dist/args.d.ts.map create mode 100644 grafast/grafast/dist/args.js create mode 100644 grafast/grafast/dist/args.js.map create mode 100644 grafast/grafast/dist/assert.d.ts create mode 100644 grafast/grafast/dist/assert.d.ts.map create mode 100644 grafast/grafast/dist/assert.js create mode 100644 grafast/grafast/dist/assert.js.map create mode 100644 grafast/grafast/dist/bucket.d.ts create mode 100644 grafast/grafast/dist/bucket.d.ts.map create mode 100644 grafast/grafast/dist/bucket.js create mode 100644 grafast/grafast/dist/bucket.js.map create mode 100644 grafast/grafast/dist/config.d.ts create mode 100644 grafast/grafast/dist/config.d.ts.map create mode 100644 grafast/grafast/dist/config.js create mode 100644 grafast/grafast/dist/config.js.map create mode 100644 grafast/grafast/dist/constraints.d.ts create mode 100644 grafast/grafast/dist/constraints.d.ts.map create mode 100644 grafast/grafast/dist/constraints.js create mode 100644 grafast/grafast/dist/constraints.js.map create mode 100644 grafast/grafast/dist/deferred.d.ts create mode 100644 grafast/grafast/dist/deferred.d.ts.map create mode 100644 grafast/grafast/dist/deferred.js create mode 100644 grafast/grafast/dist/deferred.js.map create mode 100644 grafast/grafast/dist/dev.d.ts create mode 100644 grafast/grafast/dist/dev.d.ts.map create mode 100644 grafast/grafast/dist/dev.js create mode 100644 grafast/grafast/dist/dev.js.map create mode 100644 grafast/grafast/dist/engine/LayerPlan.d.ts create mode 100644 grafast/grafast/dist/engine/LayerPlan.d.ts.map create mode 100644 grafast/grafast/dist/engine/LayerPlan.js create mode 100644 grafast/grafast/dist/engine/LayerPlan.js.map create mode 100644 grafast/grafast/dist/engine/OperationPlan.d.ts create mode 100644 grafast/grafast/dist/engine/OperationPlan.d.ts.map create mode 100644 grafast/grafast/dist/engine/OperationPlan.js create mode 100644 grafast/grafast/dist/engine/OperationPlan.js.map create mode 100644 grafast/grafast/dist/engine/OutputPlan.d.ts create mode 100644 grafast/grafast/dist/engine/OutputPlan.d.ts.map create mode 100644 grafast/grafast/dist/engine/OutputPlan.js create mode 100644 grafast/grafast/dist/engine/OutputPlan.js.map create mode 100644 grafast/grafast/dist/engine/StepTracker.d.ts create mode 100644 grafast/grafast/dist/engine/StepTracker.d.ts.map create mode 100644 grafast/grafast/dist/engine/StepTracker.js create mode 100644 grafast/grafast/dist/engine/StepTracker.js.map create mode 100644 grafast/grafast/dist/engine/executeBucket.d.ts create mode 100644 grafast/grafast/dist/engine/executeBucket.d.ts.map create mode 100644 grafast/grafast/dist/engine/executeBucket.js create mode 100644 grafast/grafast/dist/engine/executeBucket.js.map create mode 100644 grafast/grafast/dist/engine/executeOutputPlan.d.ts create mode 100644 grafast/grafast/dist/engine/executeOutputPlan.d.ts.map create mode 100644 grafast/grafast/dist/engine/executeOutputPlan.js create mode 100644 grafast/grafast/dist/engine/executeOutputPlan.js.map create mode 100644 grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts create mode 100644 grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts.map create mode 100644 grafast/grafast/dist/engine/lib/defaultPlanResolver.js create mode 100644 grafast/grafast/dist/engine/lib/defaultPlanResolver.js.map create mode 100644 grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts create mode 100644 grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts.map create mode 100644 grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js create mode 100644 grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js.map create mode 100644 grafast/grafast/dist/engine/lock.d.ts create mode 100644 grafast/grafast/dist/engine/lock.d.ts.map create mode 100644 grafast/grafast/dist/engine/lock.js create mode 100644 grafast/grafast/dist/engine/lock.js.map create mode 100644 grafast/grafast/dist/envelop.d.ts create mode 100644 grafast/grafast/dist/envelop.d.ts.map create mode 100644 grafast/grafast/dist/envelop.js create mode 100644 grafast/grafast/dist/envelop.js.map create mode 100644 grafast/grafast/dist/error.d.ts create mode 100644 grafast/grafast/dist/error.d.ts.map create mode 100644 grafast/grafast/dist/error.js create mode 100644 grafast/grafast/dist/error.js.map create mode 100644 grafast/grafast/dist/establishOperationPlan.d.ts create mode 100644 grafast/grafast/dist/establishOperationPlan.d.ts.map create mode 100644 grafast/grafast/dist/establishOperationPlan.js create mode 100644 grafast/grafast/dist/establishOperationPlan.js.map create mode 100644 grafast/grafast/dist/execute.d.ts create mode 100644 grafast/grafast/dist/execute.d.ts.map create mode 100644 grafast/grafast/dist/execute.js create mode 100644 grafast/grafast/dist/execute.js.map create mode 100644 grafast/grafast/dist/exportAs.d.ts create mode 100644 grafast/grafast/dist/exportAs.d.ts.map create mode 100644 grafast/grafast/dist/exportAs.js create mode 100644 grafast/grafast/dist/exportAs.js.map create mode 100644 grafast/grafast/dist/global.d.ts create mode 100644 grafast/grafast/dist/global.d.ts.map create mode 100644 grafast/grafast/dist/global.js create mode 100644 grafast/grafast/dist/global.js.map create mode 100644 grafast/grafast/dist/grafastGraphql.d.ts create mode 100644 grafast/grafast/dist/grafastGraphql.d.ts.map create mode 100644 grafast/grafast/dist/grafastGraphql.js create mode 100644 grafast/grafast/dist/grafastGraphql.js.map create mode 100644 grafast/grafast/dist/grafastPrint.d.ts create mode 100644 grafast/grafast/dist/grafastPrint.d.ts.map create mode 100644 grafast/grafast/dist/grafastPrint.js create mode 100644 grafast/grafast/dist/grafastPrint.js.map create mode 100644 grafast/grafast/dist/graphqlCollectFields.d.ts create mode 100644 grafast/grafast/dist/graphqlCollectFields.d.ts.map create mode 100644 grafast/grafast/dist/graphqlCollectFields.js create mode 100644 grafast/grafast/dist/graphqlCollectFields.js.map create mode 100644 grafast/grafast/dist/graphqlMergeSelectionSets.d.ts create mode 100644 grafast/grafast/dist/graphqlMergeSelectionSets.d.ts.map create mode 100644 grafast/grafast/dist/graphqlMergeSelectionSets.js create mode 100644 grafast/grafast/dist/graphqlMergeSelectionSets.js.map create mode 100644 grafast/grafast/dist/index.d.ts create mode 100644 grafast/grafast/dist/index.d.ts.map create mode 100644 grafast/grafast/dist/index.js create mode 100644 grafast/grafast/dist/index.js.map create mode 100644 grafast/grafast/dist/input.d.ts create mode 100644 grafast/grafast/dist/input.d.ts.map create mode 100644 grafast/grafast/dist/input.js create mode 100644 grafast/grafast/dist/input.js.map create mode 100644 grafast/grafast/dist/inspect.d.ts create mode 100644 grafast/grafast/dist/inspect.d.ts.map create mode 100644 grafast/grafast/dist/inspect.js create mode 100644 grafast/grafast/dist/inspect.js.map create mode 100644 grafast/grafast/dist/interfaces.d.ts create mode 100644 grafast/grafast/dist/interfaces.d.ts.map create mode 100644 grafast/grafast/dist/interfaces.js create mode 100644 grafast/grafast/dist/interfaces.js.map create mode 100644 grafast/grafast/dist/makeGrafastSchema.d.ts create mode 100644 grafast/grafast/dist/makeGrafastSchema.d.ts.map create mode 100644 grafast/grafast/dist/makeGrafastSchema.js create mode 100644 grafast/grafast/dist/makeGrafastSchema.js.map create mode 100644 grafast/grafast/dist/mermaid.d.ts create mode 100644 grafast/grafast/dist/mermaid.d.ts.map create mode 100644 grafast/grafast/dist/mermaid.js create mode 100644 grafast/grafast/dist/mermaid.js.map create mode 100644 grafast/grafast/dist/middleware.d.ts create mode 100644 grafast/grafast/dist/middleware.d.ts.map create mode 100644 grafast/grafast/dist/middleware.js create mode 100644 grafast/grafast/dist/middleware.js.map create mode 100644 grafast/grafast/dist/multistep.d.ts create mode 100644 grafast/grafast/dist/multistep.d.ts.map create mode 100644 grafast/grafast/dist/multistep.js create mode 100644 grafast/grafast/dist/multistep.js.map create mode 100644 grafast/grafast/dist/operationPlan-input.d.ts create mode 100644 grafast/grafast/dist/operationPlan-input.d.ts.map create mode 100644 grafast/grafast/dist/operationPlan-input.js create mode 100644 grafast/grafast/dist/operationPlan-input.js.map create mode 100644 grafast/grafast/dist/planJSONInterfaces.d.ts create mode 100644 grafast/grafast/dist/planJSONInterfaces.d.ts.map create mode 100644 grafast/grafast/dist/planJSONInterfaces.js create mode 100644 grafast/grafast/dist/planJSONInterfaces.js.map create mode 100644 grafast/grafast/dist/polymorphic.d.ts create mode 100644 grafast/grafast/dist/polymorphic.d.ts.map create mode 100644 grafast/grafast/dist/polymorphic.js create mode 100644 grafast/grafast/dist/polymorphic.js.map create mode 100644 grafast/grafast/dist/prepare.d.ts create mode 100644 grafast/grafast/dist/prepare.d.ts.map create mode 100644 grafast/grafast/dist/prepare.js create mode 100644 grafast/grafast/dist/prepare.js.map create mode 100644 grafast/grafast/dist/step.d.ts create mode 100644 grafast/grafast/dist/step.d.ts.map create mode 100644 grafast/grafast/dist/step.js create mode 100644 grafast/grafast/dist/step.js.map create mode 100644 grafast/grafast/dist/steps/__flag.d.ts create mode 100644 grafast/grafast/dist/steps/__flag.d.ts.map create mode 100644 grafast/grafast/dist/steps/__flag.js create mode 100644 grafast/grafast/dist/steps/__flag.js.map create mode 100644 grafast/grafast/dist/steps/__inputDefault.d.ts create mode 100644 grafast/grafast/dist/steps/__inputDefault.d.ts.map create mode 100644 grafast/grafast/dist/steps/__inputDefault.js create mode 100644 grafast/grafast/dist/steps/__inputDefault.js.map create mode 100644 grafast/grafast/dist/steps/__inputDynamicScalar.d.ts create mode 100644 grafast/grafast/dist/steps/__inputDynamicScalar.d.ts.map create mode 100644 grafast/grafast/dist/steps/__inputDynamicScalar.js create mode 100644 grafast/grafast/dist/steps/__inputDynamicScalar.js.map create mode 100644 grafast/grafast/dist/steps/__inputList.d.ts create mode 100644 grafast/grafast/dist/steps/__inputList.d.ts.map create mode 100644 grafast/grafast/dist/steps/__inputList.js create mode 100644 grafast/grafast/dist/steps/__inputList.js.map create mode 100644 grafast/grafast/dist/steps/__inputObject.d.ts create mode 100644 grafast/grafast/dist/steps/__inputObject.d.ts.map create mode 100644 grafast/grafast/dist/steps/__inputObject.js create mode 100644 grafast/grafast/dist/steps/__inputObject.js.map create mode 100644 grafast/grafast/dist/steps/__inputStaticLeaf.d.ts create mode 100644 grafast/grafast/dist/steps/__inputStaticLeaf.d.ts.map create mode 100644 grafast/grafast/dist/steps/__inputStaticLeaf.js create mode 100644 grafast/grafast/dist/steps/__inputStaticLeaf.js.map create mode 100644 grafast/grafast/dist/steps/__item.d.ts create mode 100644 grafast/grafast/dist/steps/__item.d.ts.map create mode 100644 grafast/grafast/dist/steps/__item.js create mode 100644 grafast/grafast/dist/steps/__item.js.map create mode 100644 grafast/grafast/dist/steps/__trackedValue.d.ts create mode 100644 grafast/grafast/dist/steps/__trackedValue.d.ts.map create mode 100644 grafast/grafast/dist/steps/__trackedValue.js create mode 100644 grafast/grafast/dist/steps/__trackedValue.js.map create mode 100644 grafast/grafast/dist/steps/__value.d.ts create mode 100644 grafast/grafast/dist/steps/__value.d.ts.map create mode 100644 grafast/grafast/dist/steps/__value.js create mode 100644 grafast/grafast/dist/steps/__value.js.map create mode 100644 grafast/grafast/dist/steps/access.d.ts create mode 100644 grafast/grafast/dist/steps/access.d.ts.map create mode 100644 grafast/grafast/dist/steps/access.js create mode 100644 grafast/grafast/dist/steps/access.js.map create mode 100644 grafast/grafast/dist/steps/applyInput.d.ts create mode 100644 grafast/grafast/dist/steps/applyInput.d.ts.map create mode 100644 grafast/grafast/dist/steps/applyInput.js create mode 100644 grafast/grafast/dist/steps/applyInput.js.map create mode 100644 grafast/grafast/dist/steps/applyTransforms.d.ts create mode 100644 grafast/grafast/dist/steps/applyTransforms.d.ts.map create mode 100644 grafast/grafast/dist/steps/applyTransforms.js create mode 100644 grafast/grafast/dist/steps/applyTransforms.js.map create mode 100644 grafast/grafast/dist/steps/bakedInput.d.ts create mode 100644 grafast/grafast/dist/steps/bakedInput.d.ts.map create mode 100644 grafast/grafast/dist/steps/bakedInput.js create mode 100644 grafast/grafast/dist/steps/bakedInput.js.map create mode 100644 grafast/grafast/dist/steps/condition.d.ts create mode 100644 grafast/grafast/dist/steps/condition.d.ts.map create mode 100644 grafast/grafast/dist/steps/condition.js create mode 100644 grafast/grafast/dist/steps/condition.js.map create mode 100644 grafast/grafast/dist/steps/connection.d.ts create mode 100644 grafast/grafast/dist/steps/connection.d.ts.map create mode 100644 grafast/grafast/dist/steps/connection.js create mode 100644 grafast/grafast/dist/steps/connection.js.map create mode 100644 grafast/grafast/dist/steps/constant.d.ts create mode 100644 grafast/grafast/dist/steps/constant.d.ts.map create mode 100644 grafast/grafast/dist/steps/constant.js create mode 100644 grafast/grafast/dist/steps/constant.js.map create mode 100644 grafast/grafast/dist/steps/each.d.ts create mode 100644 grafast/grafast/dist/steps/each.d.ts.map create mode 100644 grafast/grafast/dist/steps/each.js create mode 100644 grafast/grafast/dist/steps/each.js.map create mode 100644 grafast/grafast/dist/steps/error.d.ts create mode 100644 grafast/grafast/dist/steps/error.d.ts.map create mode 100644 grafast/grafast/dist/steps/error.js create mode 100644 grafast/grafast/dist/steps/error.js.map create mode 100644 grafast/grafast/dist/steps/filter.d.ts create mode 100644 grafast/grafast/dist/steps/filter.d.ts.map create mode 100644 grafast/grafast/dist/steps/filter.js create mode 100644 grafast/grafast/dist/steps/filter.js.map create mode 100644 grafast/grafast/dist/steps/first.d.ts create mode 100644 grafast/grafast/dist/steps/first.d.ts.map create mode 100644 grafast/grafast/dist/steps/first.js create mode 100644 grafast/grafast/dist/steps/first.js.map create mode 100644 grafast/grafast/dist/steps/graphqlResolver.d.ts create mode 100644 grafast/grafast/dist/steps/graphqlResolver.d.ts.map create mode 100644 grafast/grafast/dist/steps/graphqlResolver.js create mode 100644 grafast/grafast/dist/steps/graphqlResolver.js.map create mode 100644 grafast/grafast/dist/steps/groupBy.d.ts create mode 100644 grafast/grafast/dist/steps/groupBy.d.ts.map create mode 100644 grafast/grafast/dist/steps/groupBy.js create mode 100644 grafast/grafast/dist/steps/groupBy.js.map create mode 100644 grafast/grafast/dist/steps/index.d.ts create mode 100644 grafast/grafast/dist/steps/index.d.ts.map create mode 100644 grafast/grafast/dist/steps/index.js create mode 100644 grafast/grafast/dist/steps/index.js.map create mode 100644 grafast/grafast/dist/steps/lambda.d.ts create mode 100644 grafast/grafast/dist/steps/lambda.d.ts.map create mode 100644 grafast/grafast/dist/steps/lambda.js create mode 100644 grafast/grafast/dist/steps/lambda.js.map create mode 100644 grafast/grafast/dist/steps/last.d.ts create mode 100644 grafast/grafast/dist/steps/last.d.ts.map create mode 100644 grafast/grafast/dist/steps/last.js create mode 100644 grafast/grafast/dist/steps/last.js.map create mode 100644 grafast/grafast/dist/steps/list.d.ts create mode 100644 grafast/grafast/dist/steps/list.d.ts.map create mode 100644 grafast/grafast/dist/steps/list.js create mode 100644 grafast/grafast/dist/steps/list.js.map create mode 100644 grafast/grafast/dist/steps/listTransform.d.ts create mode 100644 grafast/grafast/dist/steps/listTransform.d.ts.map create mode 100644 grafast/grafast/dist/steps/listTransform.js create mode 100644 grafast/grafast/dist/steps/listTransform.js.map create mode 100644 grafast/grafast/dist/steps/listen.d.ts create mode 100644 grafast/grafast/dist/steps/listen.d.ts.map create mode 100644 grafast/grafast/dist/steps/listen.js create mode 100644 grafast/grafast/dist/steps/listen.js.map create mode 100644 grafast/grafast/dist/steps/load.d.ts create mode 100644 grafast/grafast/dist/steps/load.d.ts.map create mode 100644 grafast/grafast/dist/steps/load.js create mode 100644 grafast/grafast/dist/steps/load.js.map create mode 100644 grafast/grafast/dist/steps/node.d.ts create mode 100644 grafast/grafast/dist/steps/node.d.ts.map create mode 100644 grafast/grafast/dist/steps/node.js create mode 100644 grafast/grafast/dist/steps/node.js.map create mode 100644 grafast/grafast/dist/steps/object.d.ts create mode 100644 grafast/grafast/dist/steps/object.d.ts.map create mode 100644 grafast/grafast/dist/steps/object.js create mode 100644 grafast/grafast/dist/steps/object.js.map create mode 100644 grafast/grafast/dist/steps/partitionByIndex.d.ts create mode 100644 grafast/grafast/dist/steps/partitionByIndex.d.ts.map create mode 100644 grafast/grafast/dist/steps/partitionByIndex.js create mode 100644 grafast/grafast/dist/steps/partitionByIndex.js.map create mode 100644 grafast/grafast/dist/steps/polymorphicBranch.d.ts create mode 100644 grafast/grafast/dist/steps/polymorphicBranch.d.ts.map create mode 100644 grafast/grafast/dist/steps/polymorphicBranch.js create mode 100644 grafast/grafast/dist/steps/polymorphicBranch.js.map create mode 100644 grafast/grafast/dist/steps/proxy.d.ts create mode 100644 grafast/grafast/dist/steps/proxy.d.ts.map create mode 100644 grafast/grafast/dist/steps/proxy.js create mode 100644 grafast/grafast/dist/steps/proxy.js.map create mode 100644 grafast/grafast/dist/steps/remapKeys.d.ts create mode 100644 grafast/grafast/dist/steps/remapKeys.d.ts.map create mode 100644 grafast/grafast/dist/steps/remapKeys.js create mode 100644 grafast/grafast/dist/steps/remapKeys.js.map create mode 100644 grafast/grafast/dist/steps/reverse.d.ts create mode 100644 grafast/grafast/dist/steps/reverse.d.ts.map create mode 100644 grafast/grafast/dist/steps/reverse.js create mode 100644 grafast/grafast/dist/steps/reverse.js.map create mode 100644 grafast/grafast/dist/steps/setter.d.ts create mode 100644 grafast/grafast/dist/steps/setter.d.ts.map create mode 100644 grafast/grafast/dist/steps/setter.js create mode 100644 grafast/grafast/dist/steps/setter.js.map create mode 100644 grafast/grafast/dist/steps/sideEffect.d.ts create mode 100644 grafast/grafast/dist/steps/sideEffect.d.ts.map create mode 100644 grafast/grafast/dist/steps/sideEffect.js create mode 100644 grafast/grafast/dist/steps/sideEffect.js.map create mode 100644 grafast/grafast/dist/stringifyPayload.d.ts create mode 100644 grafast/grafast/dist/stringifyPayload.d.ts.map create mode 100644 grafast/grafast/dist/stringifyPayload.js create mode 100644 grafast/grafast/dist/stringifyPayload.js.map create mode 100644 grafast/grafast/dist/stripAnsi.d.ts create mode 100644 grafast/grafast/dist/stripAnsi.d.ts.map create mode 100644 grafast/grafast/dist/stripAnsi.js create mode 100644 grafast/grafast/dist/stripAnsi.js.map create mode 100644 grafast/grafast/dist/subscribe.d.ts create mode 100644 grafast/grafast/dist/subscribe.d.ts.map create mode 100644 grafast/grafast/dist/subscribe.js create mode 100644 grafast/grafast/dist/subscribe.js.map create mode 100644 grafast/grafast/dist/thereCanBeOnlyOne.d.ts create mode 100644 grafast/grafast/dist/thereCanBeOnlyOne.d.ts.map create mode 100644 grafast/grafast/dist/thereCanBeOnlyOne.js create mode 100644 grafast/grafast/dist/thereCanBeOnlyOne.js.map create mode 100644 grafast/grafast/dist/timeSource.d.ts create mode 100644 grafast/grafast/dist/timeSource.d.ts.map create mode 100644 grafast/grafast/dist/timeSource.js create mode 100644 grafast/grafast/dist/timeSource.js.map create mode 100644 grafast/grafast/dist/utils.d.ts create mode 100644 grafast/grafast/dist/utils.d.ts.map create mode 100644 grafast/grafast/dist/utils.js create mode 100644 grafast/grafast/dist/utils.js.map create mode 100644 grafast/grafast/dist/version.d.ts create mode 100644 grafast/grafast/dist/version.d.ts.map create mode 100644 grafast/grafast/dist/version.js create mode 100644 grafast/grafast/dist/version.js.map create mode 100644 grafast/grafast/tsconfig.tsbuildinfo create mode 100644 grafast/grafserv-persisted/dist/index.d.ts create mode 100644 grafast/grafserv-persisted/dist/index.d.ts.map create mode 100644 grafast/grafserv-persisted/dist/index.js create mode 100644 grafast/grafserv-persisted/dist/index.js.map create mode 100644 grafast/grafserv-persisted/dist/interfaces.d.ts create mode 100644 grafast/grafserv-persisted/dist/interfaces.d.ts.map create mode 100644 grafast/grafserv-persisted/dist/interfaces.js create mode 100644 grafast/grafserv-persisted/dist/interfaces.js.map create mode 100644 grafast/grafserv-persisted/dist/version.d.ts create mode 100644 grafast/grafserv-persisted/dist/version.d.ts.map create mode 100644 grafast/grafserv-persisted/dist/version.js create mode 100644 grafast/grafserv-persisted/dist/version.js.map create mode 100644 grafast/grafserv-persisted/tsconfig.tsbuildinfo create mode 100644 grafast/grafserv/dist/accept.d.ts create mode 100644 grafast/grafserv/dist/accept.d.ts.map create mode 100644 grafast/grafserv/dist/accept.js create mode 100644 grafast/grafserv/dist/accept.js.map create mode 100644 grafast/grafserv/dist/core/base.d.ts create mode 100644 grafast/grafserv/dist/core/base.d.ts.map create mode 100644 grafast/grafserv/dist/core/base.js create mode 100644 grafast/grafserv/dist/core/base.js.map create mode 100644 grafast/grafserv/dist/envelop/index.d.ts create mode 100644 grafast/grafserv/dist/envelop/index.d.ts.map create mode 100644 grafast/grafserv/dist/envelop/index.js create mode 100644 grafast/grafserv/dist/envelop/index.js.map create mode 100644 grafast/grafserv/dist/hooks.d.ts create mode 100644 grafast/grafserv/dist/hooks.d.ts.map create mode 100644 grafast/grafserv/dist/hooks.js create mode 100644 grafast/grafserv/dist/hooks.js.map create mode 100644 grafast/grafserv/dist/index.d.ts create mode 100644 grafast/grafserv/dist/index.d.ts.map create mode 100644 grafast/grafserv/dist/index.js create mode 100644 grafast/grafserv/dist/index.js.map create mode 100644 grafast/grafserv/dist/interfaces.d.ts create mode 100644 grafast/grafserv/dist/interfaces.d.ts.map create mode 100644 grafast/grafserv/dist/interfaces.js create mode 100644 grafast/grafserv/dist/interfaces.js.map create mode 100644 grafast/grafserv/dist/mapIterator.d.ts create mode 100644 grafast/grafserv/dist/mapIterator.d.ts.map create mode 100644 grafast/grafserv/dist/mapIterator.js create mode 100644 grafast/grafserv/dist/mapIterator.js.map create mode 100644 grafast/grafserv/dist/middleware/graphiql.d.ts create mode 100644 grafast/grafserv/dist/middleware/graphiql.d.ts.map create mode 100644 grafast/grafserv/dist/middleware/graphiql.js create mode 100644 grafast/grafserv/dist/middleware/graphiql.js.map create mode 100644 grafast/grafserv/dist/middleware/graphql.d.ts create mode 100644 grafast/grafserv/dist/middleware/graphql.d.ts.map create mode 100644 grafast/grafserv/dist/middleware/graphql.js create mode 100644 grafast/grafserv/dist/middleware/graphql.js.map create mode 100644 grafast/grafserv/dist/options.d.ts create mode 100644 grafast/grafserv/dist/options.d.ts.map create mode 100644 grafast/grafserv/dist/options.js create mode 100644 grafast/grafserv/dist/options.js.map create mode 100644 grafast/grafserv/dist/servers/express/v4/index.d.ts create mode 100644 grafast/grafserv/dist/servers/express/v4/index.d.ts.map create mode 100644 grafast/grafserv/dist/servers/express/v4/index.js create mode 100644 grafast/grafserv/dist/servers/express/v4/index.js.map create mode 100644 grafast/grafserv/dist/servers/fastify/v4/index.d.ts create mode 100644 grafast/grafserv/dist/servers/fastify/v4/index.d.ts.map create mode 100644 grafast/grafserv/dist/servers/fastify/v4/index.js create mode 100644 grafast/grafserv/dist/servers/fastify/v4/index.js.map create mode 100644 grafast/grafserv/dist/servers/h3/v1/index.d.ts create mode 100644 grafast/grafserv/dist/servers/h3/v1/index.d.ts.map create mode 100644 grafast/grafserv/dist/servers/h3/v1/index.js create mode 100644 grafast/grafserv/dist/servers/h3/v1/index.js.map create mode 100644 grafast/grafserv/dist/servers/hono/v4/index.d.ts create mode 100644 grafast/grafserv/dist/servers/hono/v4/index.d.ts.map create mode 100644 grafast/grafserv/dist/servers/hono/v4/index.js create mode 100644 grafast/grafserv/dist/servers/hono/v4/index.js.map create mode 100644 grafast/grafserv/dist/servers/koa/v2/index.d.ts create mode 100644 grafast/grafserv/dist/servers/koa/v2/index.d.ts.map create mode 100644 grafast/grafserv/dist/servers/koa/v2/index.js create mode 100644 grafast/grafserv/dist/servers/koa/v2/index.js.map create mode 100644 grafast/grafserv/dist/servers/lambda/v1/index.d.ts create mode 100644 grafast/grafserv/dist/servers/lambda/v1/index.d.ts.map create mode 100644 grafast/grafserv/dist/servers/lambda/v1/index.js create mode 100644 grafast/grafserv/dist/servers/lambda/v1/index.js.map create mode 100644 grafast/grafserv/dist/servers/node/index.d.ts create mode 100644 grafast/grafserv/dist/servers/node/index.d.ts.map create mode 100644 grafast/grafserv/dist/servers/node/index.js create mode 100644 grafast/grafserv/dist/servers/node/index.js.map create mode 100644 grafast/grafserv/dist/utils.d.ts create mode 100644 grafast/grafserv/dist/utils.d.ts.map create mode 100644 grafast/grafserv/dist/utils.js create mode 100644 grafast/grafserv/dist/utils.js.map create mode 100644 grafast/grafserv/dist/version.d.ts create mode 100644 grafast/grafserv/dist/version.d.ts.map create mode 100644 grafast/grafserv/dist/version.js create mode 100644 grafast/grafserv/dist/version.js.map create mode 100644 grafast/grafserv/tsconfig.tsbuildinfo create mode 100644 grafast/ruru-components/dist/components/Copy.d.ts create mode 100644 grafast/ruru-components/dist/components/Copy.d.ts.map create mode 100644 grafast/ruru-components/dist/components/Copy.js create mode 100644 grafast/ruru-components/dist/components/Copy.js.map create mode 100644 grafast/ruru-components/dist/components/ErrorPopup.d.ts create mode 100644 grafast/ruru-components/dist/components/ErrorPopup.d.ts.map create mode 100644 grafast/ruru-components/dist/components/ErrorPopup.js create mode 100644 grafast/ruru-components/dist/components/ErrorPopup.js.map create mode 100644 grafast/ruru-components/dist/components/Explain.d.ts create mode 100644 grafast/ruru-components/dist/components/Explain.d.ts.map create mode 100644 grafast/ruru-components/dist/components/Explain.js create mode 100644 grafast/ruru-components/dist/components/Explain.js.map create mode 100644 grafast/ruru-components/dist/components/Footer.d.ts create mode 100644 grafast/ruru-components/dist/components/Footer.d.ts.map create mode 100644 grafast/ruru-components/dist/components/Footer.js create mode 100644 grafast/ruru-components/dist/components/Footer.js.map create mode 100644 grafast/ruru-components/dist/components/FormatSQL.d.ts create mode 100644 grafast/ruru-components/dist/components/FormatSQL.d.ts.map create mode 100644 grafast/ruru-components/dist/components/FormatSQL.js create mode 100644 grafast/ruru-components/dist/components/FormatSQL.js.map create mode 100644 grafast/ruru-components/dist/components/Mermaid.d.ts create mode 100644 grafast/ruru-components/dist/components/Mermaid.d.ts.map create mode 100644 grafast/ruru-components/dist/components/Mermaid.js create mode 100644 grafast/ruru-components/dist/components/Mermaid.js.map create mode 100644 grafast/ruru-components/dist/defaultQuery.d.ts create mode 100644 grafast/ruru-components/dist/defaultQuery.d.ts.map create mode 100644 grafast/ruru-components/dist/defaultQuery.js create mode 100644 grafast/ruru-components/dist/defaultQuery.js.map create mode 100644 grafast/ruru-components/dist/hooks/useExplain.d.ts create mode 100644 grafast/ruru-components/dist/hooks/useExplain.d.ts.map create mode 100644 grafast/ruru-components/dist/hooks/useExplain.js create mode 100644 grafast/ruru-components/dist/hooks/useExplain.js.map create mode 100644 grafast/ruru-components/dist/hooks/useFetcher.d.ts create mode 100644 grafast/ruru-components/dist/hooks/useFetcher.d.ts.map create mode 100644 grafast/ruru-components/dist/hooks/useFetcher.js create mode 100644 grafast/ruru-components/dist/hooks/useFetcher.js.map create mode 100644 grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts create mode 100644 grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts.map create mode 100644 grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js create mode 100644 grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js.map create mode 100644 grafast/ruru-components/dist/hooks/usePrettify.d.ts create mode 100644 grafast/ruru-components/dist/hooks/usePrettify.d.ts.map create mode 100644 grafast/ruru-components/dist/hooks/usePrettify.js create mode 100644 grafast/ruru-components/dist/hooks/usePrettify.js.map create mode 100644 grafast/ruru-components/dist/hooks/useStorage.d.ts create mode 100644 grafast/ruru-components/dist/hooks/useStorage.d.ts.map create mode 100644 grafast/ruru-components/dist/hooks/useStorage.js create mode 100644 grafast/ruru-components/dist/hooks/useStorage.js.map create mode 100644 grafast/ruru-components/dist/index.d.ts create mode 100644 grafast/ruru-components/dist/index.d.ts.map create mode 100644 grafast/ruru-components/dist/index.js create mode 100644 grafast/ruru-components/dist/index.js.map create mode 100644 grafast/ruru-components/dist/interfaces.d.ts create mode 100644 grafast/ruru-components/dist/interfaces.d.ts.map create mode 100644 grafast/ruru-components/dist/interfaces.js create mode 100644 grafast/ruru-components/dist/interfaces.js.map create mode 100644 grafast/ruru-components/dist/plugins/explain.d.ts create mode 100644 grafast/ruru-components/dist/plugins/explain.d.ts.map create mode 100644 grafast/ruru-components/dist/plugins/explain.js create mode 100644 grafast/ruru-components/dist/plugins/explain.js.map create mode 100644 grafast/ruru-components/dist/ruru.d.ts create mode 100644 grafast/ruru-components/dist/ruru.d.ts.map create mode 100644 grafast/ruru-components/dist/ruru.js create mode 100644 grafast/ruru-components/dist/ruru.js.map create mode 100644 grafast/ruru-components/tsconfig.tsbuildinfo create mode 100644 grafast/ruru/bundle/ruru.min.js create mode 100644 grafast/ruru/bundle/ruru.min.js.LICENSE.txt create mode 100644 grafast/ruru/dist/.npmignore create mode 100644 grafast/ruru/dist/bundleData.d.ts create mode 100644 grafast/ruru/dist/bundleData.d.ts.map create mode 100644 grafast/ruru/dist/bundleData.js create mode 100644 grafast/ruru/dist/bundleData.js.map create mode 100644 grafast/ruru/dist/cli-run.d.ts create mode 100644 grafast/ruru/dist/cli-run.d.ts.map create mode 100755 grafast/ruru/dist/cli-run.js create mode 100644 grafast/ruru/dist/cli-run.js.map create mode 100644 grafast/ruru/dist/cli.d.ts create mode 100644 grafast/ruru/dist/cli.d.ts.map create mode 100644 grafast/ruru/dist/cli.js create mode 100644 grafast/ruru/dist/cli.js.map create mode 100644 grafast/ruru/dist/index.d.ts create mode 100644 grafast/ruru/dist/index.d.ts.map create mode 100644 grafast/ruru/dist/index.js create mode 100644 grafast/ruru/dist/index.js.map create mode 100644 grafast/ruru/dist/interfaces.d.ts create mode 100644 grafast/ruru/dist/interfaces.d.ts.map create mode 100644 grafast/ruru/dist/interfaces.js create mode 100644 grafast/ruru/dist/interfaces.js.map create mode 100644 grafast/ruru/dist/server.d.ts create mode 100644 grafast/ruru/dist/server.d.ts.map create mode 100644 grafast/ruru/dist/server.js create mode 100644 grafast/ruru/dist/server.js.map create mode 100644 grafast/ruru/dist/version.d.ts create mode 100644 grafast/ruru/dist/version.d.ts.map create mode 100644 grafast/ruru/dist/version.js create mode 100644 grafast/ruru/dist/version.js.map create mode 100644 grafast/ruru/src/bundleData.ts create mode 100644 grafast/ruru/tsconfig.build.tsbuildinfo create mode 100644 graphile-build/graphile-build-pg/dist/_.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/_.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/_.js create mode 100644 graphile-build/graphile-build-pg/dist/_.js.map create mode 100644 graphile-build/graphile-build-pg/dist/behavior.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/behavior.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/behavior.js create mode 100644 graphile-build/graphile-build-pg/dist/behavior.js.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/NO_DATA_GATHERING.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/examples/NO_DATA_GATHERING.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/NO_DATA_GATHERING.js create mode 100644 graphile-build/graphile-build-pg/dist/examples/NO_DATA_GATHERING.js.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/benjies-test-script.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/examples/benjies-test-script.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/benjies-test-script.js create mode 100644 graphile-build/graphile-build-pg/dist/examples/benjies-test-script.js.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/config.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/examples/config.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/config.js create mode 100644 graphile-build/graphile-build-pg/dist/examples/config.js.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/fastify-helix-envelop.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/examples/fastify-helix-envelop.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/fastify-helix-envelop.js create mode 100644 graphile-build/graphile-build-pg/dist/examples/fastify-helix-envelop.js.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/schema-export.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/examples/schema-export.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/schema-export.js create mode 100644 graphile-build/graphile-build-pg/dist/examples/schema-export.js.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack-entry-file.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack-entry-file.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack-entry-file.js create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack-entry-file.js.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack.js create mode 100644 graphile-build/graphile-build-pg/dist/examples/webpack.js.map create mode 100644 graphile-build/graphile-build-pg/dist/index.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/index.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/index.js create mode 100644 graphile-build/graphile-build-pg/dist/index.js.map create mode 100644 graphile-build/graphile-build-pg/dist/inputUtils.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/inputUtils.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/inputUtils.js create mode 100644 graphile-build/graphile-build-pg/dist/inputUtils.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAllRowsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAllRowsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAllRowsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAllRowsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributeDeprecationPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributeDeprecationPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributeDeprecationPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributeDeprecationPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributesPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributesPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgAttributesPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgBasicsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgBasicsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgBasicsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgBasicsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCodecsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCodecsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCodecsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCodecsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionArgumentPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionArgumentPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionArgumentPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionArgumentPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionCustomFieldsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionCustomFieldsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionCustomFieldsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConditionCustomFieldsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByDefaultValuePlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByDefaultValuePlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByDefaultValuePlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByDefaultValuePlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionArgOrderByPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionTotalCountPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionTotalCountPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionTotalCountPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgConnectionTotalCountPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCustomTypeFieldPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCustomTypeFieldPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCustomTypeFieldPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgCustomTypeFieldPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgEnumTablesPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgEnumTablesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgEnumTablesPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgEnumTablesPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFakeConstraintsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFakeConstraintsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFakeConstraintsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFakeConstraintsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFirstLastBeforeAfterArgsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFirstLastBeforeAfterArgsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFirstLastBeforeAfterArgsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgFirstLastBeforeAfterArgsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIndexBehaviorsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIndexBehaviorsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIndexBehaviorsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIndexBehaviorsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgInterfaceModeUnionAllRowsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgInterfaceModeUnionAllRowsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgInterfaceModeUnionAllRowsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgInterfaceModeUnionAllRowsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIntrospectionPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIntrospectionPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIntrospectionPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgIntrospectionPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgJWTPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgJWTPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgJWTPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgJWTPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgLtreePlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgLtreePlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgLtreePlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgLtreePlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationCreatePlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationCreatePlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationCreatePlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationCreatePlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationPayloadEdgePlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationPayloadEdgePlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationPayloadEdgePlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationPayloadEdgePlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationUpdateDeletePlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationUpdateDeletePlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationUpdateDeletePlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgMutationUpdateDeletePlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgNodeIdAttributesPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgNodeIdAttributesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgNodeIdAttributesPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgNodeIdAttributesPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderAllAttributesPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderAllAttributesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderAllAttributesPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderAllAttributesPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderByPrimaryKeyPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderByPrimaryKeyPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderByPrimaryKeyPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderByPrimaryKeyPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderCustomFieldsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderCustomFieldsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderCustomFieldsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgOrderCustomFieldsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismOnlyArgumentPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismOnlyArgumentPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismOnlyArgumentPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismOnlyArgumentPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgPolymorphismPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgProceduresPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgProceduresPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgProceduresPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgProceduresPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRBACPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRBACPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRBACPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRBACPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRefsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRefsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRefsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRefsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRegistryPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRegistryPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRegistryPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRegistryPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRelationsPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRelationsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRelationsPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRelationsPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRemoveExtensionResourcesPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRemoveExtensionResourcesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRemoveExtensionResourcesPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRemoveExtensionResourcesPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRowByUniquePlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRowByUniquePlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRowByUniquePlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgRowByUniquePlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTableNodePlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTableNodePlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTableNodePlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTableNodePlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTablesPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTablesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTablesPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTablesPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTypesPlugin.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTypesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTypesPlugin.js create mode 100644 graphile-build/graphile-build-pg/dist/plugins/PgTypesPlugin.js.map create mode 100644 graphile-build/graphile-build-pg/dist/preset.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/preset.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/preset.js create mode 100644 graphile-build/graphile-build-pg/dist/preset.js.map create mode 100644 graphile-build/graphile-build-pg/dist/utils.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/utils.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/utils.js create mode 100644 graphile-build/graphile-build-pg/dist/utils.js.map create mode 100644 graphile-build/graphile-build-pg/dist/version.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/version.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/version.js create mode 100644 graphile-build/graphile-build-pg/dist/version.js.map create mode 100644 graphile-build/graphile-build-pg/dist/watchFixtures.d.ts create mode 100644 graphile-build/graphile-build-pg/dist/watchFixtures.d.ts.map create mode 100644 graphile-build/graphile-build-pg/dist/watchFixtures.js create mode 100644 graphile-build/graphile-build-pg/dist/watchFixtures.js.map create mode 100644 graphile-build/graphile-build-pg/tsconfig.tsbuildinfo create mode 100644 graphile-build/graphile-build/dist/SchemaBuilder.d.ts create mode 100644 graphile-build/graphile-build/dist/SchemaBuilder.d.ts.map create mode 100644 graphile-build/graphile-build/dist/SchemaBuilder.js create mode 100644 graphile-build/graphile-build/dist/SchemaBuilder.js.map create mode 100644 graphile-build/graphile-build/dist/SchemaBuilderHooks.d.ts create mode 100644 graphile-build/graphile-build/dist/SchemaBuilderHooks.d.ts.map create mode 100644 graphile-build/graphile-build/dist/SchemaBuilderHooks.js create mode 100644 graphile-build/graphile-build/dist/SchemaBuilderHooks.js.map create mode 100644 graphile-build/graphile-build/dist/behavior.d.ts create mode 100644 graphile-build/graphile-build/dist/behavior.d.ts.map create mode 100644 graphile-build/graphile-build/dist/behavior.js create mode 100644 graphile-build/graphile-build/dist/behavior.js.map create mode 100644 graphile-build/graphile-build/dist/callbackToAsyncIterator.d.ts create mode 100644 graphile-build/graphile-build/dist/callbackToAsyncIterator.d.ts.map create mode 100644 graphile-build/graphile-build/dist/callbackToAsyncIterator.js create mode 100644 graphile-build/graphile-build/dist/callbackToAsyncIterator.js.map create mode 100644 graphile-build/graphile-build/dist/examples/README-1.d.ts create mode 100644 graphile-build/graphile-build/dist/examples/README-1.d.ts.map create mode 100644 graphile-build/graphile-build/dist/examples/README-1.js create mode 100644 graphile-build/graphile-build/dist/examples/README-1.js.map create mode 100644 graphile-build/graphile-build/dist/extend.d.ts create mode 100644 graphile-build/graphile-build/dist/extend.d.ts.map create mode 100644 graphile-build/graphile-build/dist/extend.js create mode 100644 graphile-build/graphile-build/dist/extend.js.map create mode 100644 graphile-build/graphile-build/dist/global.d.ts create mode 100644 graphile-build/graphile-build/dist/global.d.ts.map create mode 100644 graphile-build/graphile-build/dist/global.js create mode 100644 graphile-build/graphile-build/dist/global.js.map create mode 100644 graphile-build/graphile-build/dist/index.d.ts create mode 100644 graphile-build/graphile-build/dist/index.d.ts.map create mode 100644 graphile-build/graphile-build/dist/index.js create mode 100644 graphile-build/graphile-build/dist/index.js.map create mode 100644 graphile-build/graphile-build/dist/inflection.d.ts create mode 100644 graphile-build/graphile-build/dist/inflection.d.ts.map create mode 100644 graphile-build/graphile-build/dist/inflection.js create mode 100644 graphile-build/graphile-build/dist/inflection.js.map create mode 100644 graphile-build/graphile-build/dist/interfaces.d.ts create mode 100644 graphile-build/graphile-build/dist/interfaces.d.ts.map create mode 100644 graphile-build/graphile-build/dist/interfaces.js create mode 100644 graphile-build/graphile-build/dist/interfaces.js.map create mode 100644 graphile-build/graphile-build/dist/makeNewBuild.d.ts create mode 100644 graphile-build/graphile-build/dist/makeNewBuild.d.ts.map create mode 100644 graphile-build/graphile-build/dist/makeNewBuild.js create mode 100644 graphile-build/graphile-build/dist/makeNewBuild.js.map create mode 100644 graphile-build/graphile-build/dist/newWithHooks/index.d.ts create mode 100644 graphile-build/graphile-build/dist/newWithHooks/index.d.ts.map create mode 100644 graphile-build/graphile-build/dist/newWithHooks/index.js create mode 100644 graphile-build/graphile-build/dist/newWithHooks/index.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/AddInterfaceSubtypesToTypesPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/AddInterfaceSubtypesToTypesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/AddInterfaceSubtypesToTypesPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/AddInterfaceSubtypesToTypesPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/AddNodeInterfaceToSuitableTypesPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/AddNodeInterfaceToSuitableTypesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/AddNodeInterfaceToSuitableTypesPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/AddNodeInterfaceToSuitableTypesPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/BuiltinScalarConnectionsPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/BuiltinScalarConnectionsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/BuiltinScalarConnectionsPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/BuiltinScalarConnectionsPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/ClientMutationIdDescriptionPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/ClientMutationIdDescriptionPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/ClientMutationIdDescriptionPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/ClientMutationIdDescriptionPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/CollectReferencedTypesPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/CollectReferencedTypesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/CollectReferencedTypesPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/CollectReferencedTypesPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/CommonBehaviorsPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/CommonBehaviorsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/CommonBehaviorsPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/CommonBehaviorsPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/CommonTypesPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/CommonTypesPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/CommonTypesPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/CommonTypesPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/ConnectionPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/ConnectionPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/ConnectionPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/ConnectionPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/CursorTypePlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/CursorTypePlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/CursorTypePlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/CursorTypePlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPayloadQueryPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPayloadQueryPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPayloadQueryPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPayloadQueryPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/MutationPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodeAccessorPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/NodeAccessorPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodeAccessorPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/NodeAccessorPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecBase64JSONPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecBase64JSONPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecBase64JSONPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecBase64JSONPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecPipeStringPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecPipeStringPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecPipeStringPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/NodeIdCodecPipeStringPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodePlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/NodePlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/NodePlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/NodePlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/PageInfoStartEndCursorPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/PageInfoStartEndCursorPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/PageInfoStartEndCursorPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/PageInfoStartEndCursorPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/QueryPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/QueryPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/QueryPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/QueryPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/QueryQueryPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/QueryQueryPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/QueryQueryPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/QueryQueryPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/RegisterQueryNodePlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/RegisterQueryNodePlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/RegisterQueryNodePlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/RegisterQueryNodePlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/StreamDeferPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/StreamDeferPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/StreamDeferPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/StreamDeferPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/SubscriptionPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/SubscriptionPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/SubscriptionPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/SubscriptionPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/SwallowErrorsPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/SwallowErrorsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/SwallowErrorsPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/SwallowErrorsPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/TrimEmptyDescriptionsPlugin.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/TrimEmptyDescriptionsPlugin.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/TrimEmptyDescriptionsPlugin.js create mode 100644 graphile-build/graphile-build/dist/plugins/TrimEmptyDescriptionsPlugin.js.map create mode 100644 graphile-build/graphile-build/dist/plugins/index.d.ts create mode 100644 graphile-build/graphile-build/dist/plugins/index.d.ts.map create mode 100644 graphile-build/graphile-build/dist/plugins/index.js create mode 100644 graphile-build/graphile-build/dist/plugins/index.js.map create mode 100644 graphile-build/graphile-build/dist/preset.d.ts create mode 100644 graphile-build/graphile-build/dist/preset.d.ts.map create mode 100644 graphile-build/graphile-build/dist/preset.js create mode 100644 graphile-build/graphile-build/dist/preset.js.map create mode 100644 graphile-build/graphile-build/dist/swallowError.d.ts create mode 100644 graphile-build/graphile-build/dist/swallowError.d.ts.map create mode 100644 graphile-build/graphile-build/dist/swallowError.js create mode 100644 graphile-build/graphile-build/dist/swallowError.js.map create mode 100644 graphile-build/graphile-build/dist/utils.d.ts create mode 100644 graphile-build/graphile-build/dist/utils.d.ts.map create mode 100644 graphile-build/graphile-build/dist/utils.js create mode 100644 graphile-build/graphile-build/dist/utils.js.map create mode 100644 graphile-build/graphile-build/dist/vendor/collectReferencedTypes.d.ts create mode 100644 graphile-build/graphile-build/dist/vendor/collectReferencedTypes.d.ts.map create mode 100644 graphile-build/graphile-build/dist/vendor/collectReferencedTypes.js create mode 100644 graphile-build/graphile-build/dist/vendor/collectReferencedTypes.js.map create mode 100644 graphile-build/graphile-build/dist/version.d.ts create mode 100644 graphile-build/graphile-build/dist/version.d.ts.map create mode 100644 graphile-build/graphile-build/dist/version.js create mode 100644 graphile-build/graphile-build/dist/version.js.map create mode 100644 graphile-build/graphile-build/tsconfig.tsbuildinfo create mode 100644 graphile-build/graphile-simplify-inflection/dist/index.d.ts create mode 100644 graphile-build/graphile-simplify-inflection/dist/index.d.ts.map create mode 100644 graphile-build/graphile-simplify-inflection/dist/index.js create mode 100644 graphile-build/graphile-simplify-inflection/dist/index.js.map create mode 100644 graphile-build/graphile-simplify-inflection/tsconfig.tsbuildinfo create mode 100644 graphile-build/graphile-utils/dist/exportable.d.ts create mode 100644 graphile-build/graphile-utils/dist/exportable.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/exportable.js create mode 100644 graphile-build/graphile-utils/dist/exportable.js.map create mode 100644 graphile-build/graphile-utils/dist/gql.d.ts create mode 100644 graphile-build/graphile-utils/dist/gql.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/gql.js create mode 100644 graphile-build/graphile-utils/dist/gql.js.map create mode 100644 graphile-build/graphile-utils/dist/index.d.ts create mode 100644 graphile-build/graphile-utils/dist/index.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/index.js create mode 100644 graphile-build/graphile-utils/dist/index.js.map create mode 100644 graphile-build/graphile-utils/dist/makeAddInflectorsPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makeAddInflectorsPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makeAddInflectorsPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makeAddInflectorsPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableConditionPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableConditionPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableConditionPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableConditionPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableOrderByPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableOrderByPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableOrderByPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makeAddPgTableOrderByPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/makeChangeNullabilityPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makeChangeNullabilityPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makeChangeNullabilityPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makeChangeNullabilityPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/makeExtendSchemaPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makeExtendSchemaPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makeExtendSchemaPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makeExtendSchemaPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/makePgSmartTagsPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makePgSmartTagsPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makePgSmartTagsPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makePgSmartTagsPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/makeProcessSchemaPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makeProcessSchemaPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makeProcessSchemaPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makeProcessSchemaPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/makeWrapPlansPlugin.d.ts create mode 100644 graphile-build/graphile-utils/dist/makeWrapPlansPlugin.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/makeWrapPlansPlugin.js create mode 100644 graphile-build/graphile-utils/dist/makeWrapPlansPlugin.js.map create mode 100644 graphile-build/graphile-utils/dist/parseIdentifierParts.d.ts create mode 100644 graphile-build/graphile-utils/dist/parseIdentifierParts.d.ts.map create mode 100644 graphile-build/graphile-utils/dist/parseIdentifierParts.js create mode 100644 graphile-build/graphile-utils/dist/parseIdentifierParts.js.map create mode 100644 graphile-build/graphile-utils/tsconfig.build.tsbuildinfo create mode 100644 utils/eslint-plugin-graphile-export/dist/ExhaustiveDeps.d.ts create mode 100644 utils/eslint-plugin-graphile-export/dist/ExhaustiveDeps.d.ts.map create mode 100644 utils/eslint-plugin-graphile-export/dist/ExhaustiveDeps.js create mode 100644 utils/eslint-plugin-graphile-export/dist/ExhaustiveDeps.js.map create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportInstances.d.ts create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportInstances.d.ts.map create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportInstances.js create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportInstances.js.map create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportMethods.d.ts create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportMethods.d.ts.map create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportMethods.js create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportMethods.js.map create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportSubclasses.d.ts create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportSubclasses.d.ts.map create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportSubclasses.js create mode 100644 utils/eslint-plugin-graphile-export/dist/ExportSubclasses.js.map create mode 100644 utils/eslint-plugin-graphile-export/dist/NoNested.d.ts create mode 100644 utils/eslint-plugin-graphile-export/dist/NoNested.d.ts.map create mode 100644 utils/eslint-plugin-graphile-export/dist/NoNested.js create mode 100644 utils/eslint-plugin-graphile-export/dist/NoNested.js.map create mode 100644 utils/eslint-plugin-graphile-export/dist/common.d.ts create mode 100644 utils/eslint-plugin-graphile-export/dist/common.d.ts.map create mode 100644 utils/eslint-plugin-graphile-export/dist/common.js create mode 100644 utils/eslint-plugin-graphile-export/dist/common.js.map create mode 100644 utils/eslint-plugin-graphile-export/dist/index.d.ts create mode 100644 utils/eslint-plugin-graphile-export/dist/index.d.ts.map create mode 100644 utils/eslint-plugin-graphile-export/dist/index.js create mode 100644 utils/eslint-plugin-graphile-export/dist/index.js.map create mode 100644 utils/eslint-plugin-graphile-export/tsconfig.tsbuildinfo create mode 100644 utils/graphile-config/dist/cli.d.ts create mode 100644 utils/graphile-config/dist/cli.d.ts.map create mode 100644 utils/graphile-config/dist/cli.js create mode 100644 utils/graphile-config/dist/cli.js.map create mode 100644 utils/graphile-config/dist/functionality.d.ts create mode 100644 utils/graphile-config/dist/functionality.d.ts.map create mode 100644 utils/graphile-config/dist/functionality.js create mode 100644 utils/graphile-config/dist/functionality.js.map create mode 100644 utils/graphile-config/dist/hooks.d.ts create mode 100644 utils/graphile-config/dist/hooks.d.ts.map create mode 100644 utils/graphile-config/dist/hooks.js create mode 100644 utils/graphile-config/dist/hooks.js.map create mode 100644 utils/graphile-config/dist/index.d.ts create mode 100644 utils/graphile-config/dist/index.d.ts.map create mode 100644 utils/graphile-config/dist/index.js create mode 100644 utils/graphile-config/dist/index.js.map create mode 100644 utils/graphile-config/dist/interfaces.d.ts create mode 100644 utils/graphile-config/dist/interfaces.d.ts.map create mode 100644 utils/graphile-config/dist/interfaces.js create mode 100644 utils/graphile-config/dist/interfaces.js.map create mode 100644 utils/graphile-config/dist/loadConfig.d.ts create mode 100644 utils/graphile-config/dist/loadConfig.d.ts.map create mode 100644 utils/graphile-config/dist/loadConfig.js create mode 100644 utils/graphile-config/dist/loadConfig.js.map create mode 100644 utils/graphile-config/dist/middleware.d.ts create mode 100644 utils/graphile-config/dist/middleware.d.ts.map create mode 100644 utils/graphile-config/dist/middleware.js create mode 100644 utils/graphile-config/dist/middleware.js.map create mode 100644 utils/graphile-config/dist/resolvePresets.d.ts create mode 100644 utils/graphile-config/dist/resolvePresets.d.ts.map create mode 100644 utils/graphile-config/dist/resolvePresets.js create mode 100644 utils/graphile-config/dist/resolvePresets.js.map create mode 100644 utils/graphile-config/dist/sort.d.ts create mode 100644 utils/graphile-config/dist/sort.d.ts.map create mode 100644 utils/graphile-config/dist/sort.js create mode 100644 utils/graphile-config/dist/sort.js.map create mode 100644 utils/graphile-config/dist/utils.d.ts create mode 100644 utils/graphile-config/dist/utils.d.ts.map create mode 100644 utils/graphile-config/dist/utils.js create mode 100644 utils/graphile-config/dist/utils.js.map create mode 100644 utils/graphile-config/tsconfig.tsbuildinfo create mode 100644 utils/graphile-export/dist/exportSchema.d.ts create mode 100644 utils/graphile-export/dist/exportSchema.d.ts.map create mode 100644 utils/graphile-export/dist/exportSchema.js create mode 100644 utils/graphile-export/dist/exportSchema.js.map create mode 100644 utils/graphile-export/dist/helpers.d.ts create mode 100644 utils/graphile-export/dist/helpers.d.ts.map create mode 100644 utils/graphile-export/dist/helpers.js create mode 100644 utils/graphile-export/dist/helpers.js.map create mode 100644 utils/graphile-export/dist/index.d.ts create mode 100644 utils/graphile-export/dist/index.d.ts.map create mode 100644 utils/graphile-export/dist/index.js create mode 100644 utils/graphile-export/dist/index.js.map create mode 100644 utils/graphile-export/dist/interfaces.d.ts create mode 100644 utils/graphile-export/dist/interfaces.d.ts.map create mode 100644 utils/graphile-export/dist/interfaces.js create mode 100644 utils/graphile-export/dist/interfaces.js.map create mode 100644 utils/graphile-export/dist/optimize/index.d.ts create mode 100644 utils/graphile-export/dist/optimize/index.d.ts.map create mode 100644 utils/graphile-export/dist/optimize/index.js create mode 100644 utils/graphile-export/dist/optimize/index.js.map create mode 100644 utils/graphile-export/dist/reservedWords.d.ts create mode 100644 utils/graphile-export/dist/reservedWords.d.ts.map create mode 100644 utils/graphile-export/dist/reservedWords.js create mode 100644 utils/graphile-export/dist/reservedWords.js.map create mode 100644 utils/graphile-export/dist/wellKnown.d.ts create mode 100644 utils/graphile-export/dist/wellKnown.d.ts.map create mode 100644 utils/graphile-export/dist/wellKnown.js create mode 100644 utils/graphile-export/dist/wellKnown.js.map create mode 100644 utils/graphile-export/tsconfig.tsbuildinfo create mode 100644 utils/graphile/dist/cli-run.d.ts create mode 100644 utils/graphile/dist/cli-run.d.ts.map create mode 100644 utils/graphile/dist/cli-run.js create mode 100644 utils/graphile/dist/cli-run.js.map create mode 100644 utils/graphile/dist/cli.d.ts create mode 100644 utils/graphile/dist/cli.d.ts.map create mode 100644 utils/graphile/dist/cli.js create mode 100644 utils/graphile/dist/cli.js.map create mode 100644 utils/graphile/dist/commands/behavior/cli.d.ts create mode 100644 utils/graphile/dist/commands/behavior/cli.d.ts.map create mode 100644 utils/graphile/dist/commands/behavior/cli.js create mode 100644 utils/graphile/dist/commands/behavior/cli.js.map create mode 100644 utils/graphile/dist/commands/behavior/debug/cli.d.ts create mode 100644 utils/graphile/dist/commands/behavior/debug/cli.d.ts.map create mode 100644 utils/graphile/dist/commands/behavior/debug/cli.js create mode 100644 utils/graphile/dist/commands/behavior/debug/cli.js.map create mode 100644 utils/graphile/dist/commands/behavior/debug/main.d.ts create mode 100644 utils/graphile/dist/commands/behavior/debug/main.d.ts.map create mode 100644 utils/graphile/dist/commands/behavior/debug/main.js create mode 100644 utils/graphile/dist/commands/behavior/debug/main.js.map create mode 100644 utils/graphile/dist/commands/config/cli.d.ts create mode 100644 utils/graphile/dist/commands/config/cli.d.ts.map create mode 100644 utils/graphile/dist/commands/config/cli.js create mode 100644 utils/graphile/dist/commands/config/cli.js.map create mode 100644 utils/graphile/dist/commands/config/options/cli.d.ts create mode 100644 utils/graphile/dist/commands/config/options/cli.d.ts.map create mode 100644 utils/graphile/dist/commands/config/options/cli.js create mode 100644 utils/graphile/dist/commands/config/options/cli.js.map create mode 100644 utils/graphile/dist/commands/config/options/main.d.ts create mode 100644 utils/graphile/dist/commands/config/options/main.d.ts.map create mode 100644 utils/graphile/dist/commands/config/options/main.js create mode 100644 utils/graphile/dist/commands/config/options/main.js.map create mode 100644 utils/graphile/dist/commands/config/print/cli.d.ts create mode 100644 utils/graphile/dist/commands/config/print/cli.d.ts.map create mode 100644 utils/graphile/dist/commands/config/print/cli.js create mode 100644 utils/graphile/dist/commands/config/print/cli.js.map create mode 100644 utils/graphile/dist/commands/inflection/cli.d.ts create mode 100644 utils/graphile/dist/commands/inflection/cli.d.ts.map create mode 100644 utils/graphile/dist/commands/inflection/cli.js create mode 100644 utils/graphile/dist/commands/inflection/cli.js.map create mode 100644 utils/graphile/dist/commands/inflection/list/cli.d.ts create mode 100644 utils/graphile/dist/commands/inflection/list/cli.d.ts.map create mode 100644 utils/graphile/dist/commands/inflection/list/cli.js create mode 100644 utils/graphile/dist/commands/inflection/list/cli.js.map create mode 100644 utils/graphile/dist/commands/inflection/list/main.d.ts create mode 100644 utils/graphile/dist/commands/inflection/list/main.d.ts.map create mode 100644 utils/graphile/dist/commands/inflection/list/main.js create mode 100644 utils/graphile/dist/commands/inflection/list/main.js.map create mode 100644 utils/graphile/dist/index.d.ts create mode 100644 utils/graphile/dist/index.d.ts.map create mode 100644 utils/graphile/dist/index.js create mode 100644 utils/graphile/dist/index.js.map create mode 100644 utils/graphile/dist/stripAnsi.d.ts create mode 100644 utils/graphile/dist/stripAnsi.d.ts.map create mode 100644 utils/graphile/dist/stripAnsi.js create mode 100644 utils/graphile/dist/stripAnsi.js.map create mode 100644 utils/graphile/dist/utils/typescriptVfs.d.ts create mode 100644 utils/graphile/dist/utils/typescriptVfs.d.ts.map create mode 100644 utils/graphile/dist/utils/typescriptVfs.js create mode 100644 utils/graphile/dist/utils/typescriptVfs.js.map create mode 100644 utils/graphile/tsconfig.tsbuildinfo create mode 100644 utils/jest-serializer-graphql-schema/dist/consistentlyOrderedSchema.d.ts create mode 100644 utils/jest-serializer-graphql-schema/dist/consistentlyOrderedSchema.d.ts.map create mode 100644 utils/jest-serializer-graphql-schema/dist/consistentlyOrderedSchema.js create mode 100644 utils/jest-serializer-graphql-schema/dist/consistentlyOrderedSchema.js.map create mode 100644 utils/jest-serializer-graphql-schema/dist/index.d.ts create mode 100644 utils/jest-serializer-graphql-schema/dist/index.d.ts.map create mode 100644 utils/jest-serializer-graphql-schema/dist/index.js create mode 100644 utils/jest-serializer-graphql-schema/dist/index.js.map create mode 100644 utils/jest-serializer-graphql-schema/tsconfig.tsbuildinfo create mode 100644 utils/jest-serializer-simple/dist/index.d.ts create mode 100644 utils/jest-serializer-simple/dist/index.d.ts.map create mode 100644 utils/jest-serializer-simple/dist/index.js create mode 100644 utils/jest-serializer-simple/dist/index.js.map create mode 100644 utils/jest-serializer-simple/tsconfig.tsbuildinfo create mode 100644 utils/lds/dist/cli.d.ts create mode 100644 utils/lds/dist/cli.d.ts.map create mode 100644 utils/lds/dist/cli.js create mode 100644 utils/lds/dist/cli.js.map create mode 100644 utils/lds/dist/fatal-error.d.ts create mode 100644 utils/lds/dist/fatal-error.d.ts.map create mode 100644 utils/lds/dist/fatal-error.js create mode 100644 utils/lds/dist/fatal-error.js.map create mode 100644 utils/lds/dist/index.d.ts create mode 100644 utils/lds/dist/index.d.ts.map create mode 100644 utils/lds/dist/index.js create mode 100644 utils/lds/dist/index.js.map create mode 100644 utils/lds/dist/pg-logical-decoding.d.ts create mode 100644 utils/lds/dist/pg-logical-decoding.d.ts.map create mode 100644 utils/lds/dist/pg-logical-decoding.js create mode 100644 utils/lds/dist/pg-logical-decoding.js.map create mode 100644 utils/lds/tsconfig.tsbuildinfo create mode 100644 utils/lru/dist/index.d.ts create mode 100644 utils/lru/dist/index.d.ts.map create mode 100644 utils/lru/dist/index.js create mode 100644 utils/lru/dist/index.js.map create mode 100644 utils/lru/tsconfig.tsbuildinfo create mode 100644 utils/pg-introspection/dist/acl.d.ts create mode 100644 utils/pg-introspection/dist/acl.d.ts.map create mode 100644 utils/pg-introspection/dist/acl.js create mode 100644 utils/pg-introspection/dist/acl.js.map create mode 100644 utils/pg-introspection/dist/augmentIntrospection.d.ts create mode 100644 utils/pg-introspection/dist/augmentIntrospection.d.ts.map create mode 100644 utils/pg-introspection/dist/augmentIntrospection.js create mode 100644 utils/pg-introspection/dist/augmentIntrospection.js.map create mode 100644 utils/pg-introspection/dist/index.d.ts create mode 100644 utils/pg-introspection/dist/index.d.ts.map create mode 100644 utils/pg-introspection/dist/index.js create mode 100644 utils/pg-introspection/dist/index.js.map create mode 100644 utils/pg-introspection/dist/introspection.d.ts create mode 100644 utils/pg-introspection/dist/introspection.d.ts.map create mode 100644 utils/pg-introspection/dist/introspection.js create mode 100644 utils/pg-introspection/dist/introspection.js.map create mode 100644 utils/pg-introspection/dist/reservedWords.d.ts create mode 100644 utils/pg-introspection/dist/reservedWords.d.ts.map create mode 100644 utils/pg-introspection/dist/reservedWords.js create mode 100644 utils/pg-introspection/dist/reservedWords.js.map create mode 100644 utils/pg-introspection/dist/smartComments.d.ts create mode 100644 utils/pg-introspection/dist/smartComments.d.ts.map create mode 100644 utils/pg-introspection/dist/smartComments.js create mode 100644 utils/pg-introspection/dist/smartComments.js.map create mode 100644 utils/pg-introspection/tsconfig.tsbuildinfo create mode 100644 utils/pg-sql2/dist/index.d.ts create mode 100644 utils/pg-sql2/dist/index.d.ts.map create mode 100644 utils/pg-sql2/dist/index.js create mode 100644 utils/pg-sql2/dist/index.js.map create mode 100644 utils/pg-sql2/dist/thereCanBeOnlyOne.d.ts create mode 100644 utils/pg-sql2/dist/thereCanBeOnlyOne.d.ts.map create mode 100644 utils/pg-sql2/dist/thereCanBeOnlyOne.js create mode 100644 utils/pg-sql2/dist/thereCanBeOnlyOne.js.map create mode 100644 utils/pg-sql2/dist/version.d.ts create mode 100644 utils/pg-sql2/dist/version.d.ts.map create mode 100644 utils/pg-sql2/dist/version.js create mode 100644 utils/pg-sql2/dist/version.js.map create mode 100644 utils/pg-sql2/tsconfig.tsbuildinfo create mode 100644 utils/tamedevil/dist/index.d.ts create mode 100644 utils/tamedevil/dist/index.d.ts.map create mode 100644 utils/tamedevil/dist/index.js create mode 100644 utils/tamedevil/dist/index.js.map create mode 100644 utils/tamedevil/dist/reservedWords.d.ts create mode 100644 utils/tamedevil/dist/reservedWords.d.ts.map create mode 100644 utils/tamedevil/dist/reservedWords.js create mode 100644 utils/tamedevil/dist/reservedWords.js.map create mode 100644 utils/tamedevil/dist/thereCanBeOnlyOne.d.ts create mode 100644 utils/tamedevil/dist/thereCanBeOnlyOne.d.ts.map create mode 100644 utils/tamedevil/dist/thereCanBeOnlyOne.js create mode 100644 utils/tamedevil/dist/thereCanBeOnlyOne.js.map create mode 100644 utils/tamedevil/tsconfig.tsbuildinfo diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz new file mode 100644 index 0000000000000000000000000000000000000000..919851823d6c6c5373e1c0232e8191fc737f235b GIT binary patch literal 2643253 zcmV({K+?Y-iwFP!000006Rf?<&b3*R9%LJz!59m{1^gohlpQM~){3>dXMkV=+(R7Q z+0>y`S>2Y^Lh_x1o?SFB$VquySxVLa<(JBLzk3}bo>Tl^|MGV~{?)I4`tASGzyJAv z{Oh0p@VnpqPyPr0^B@1+-~RZm|E7QZ*^mGIch&#f@9M9A-9P`YpWplO-~afV{{7EC z{qDCv{!ISQ-~ISUKmXx(zwbZ)@gM#^1;3W_Vy8!ToHIIatb=3PH<4Z@x20?N?(_WS z-W8oaba|xbt+&RN@9jHFB67OkeJ9R5Qdz!^zwC8WR$b?9mxs9a(EHtwfBGB$?N8G` z|KWE({`ho631 zKmGRK{xARjum0!1{ri9W4}ScIzrXj(rQNM{-mIsVDYblGE4}4K{x(l9SN}uO0mD^B=Y7(|pg$p1F0| z)?E@_@0QA~UQ|W%-pYGCCl7m5cx+Q1VUJqt^d?Q|6GF?j>JiFVEm4ttj3i&3*~hg#Q#yU~ zv99bxo9QvfdeY{CcLsG zA$P~@EwAo4-YK_d$*#3~T^o`J@u@P2h%47`WjXn7HGO(c@bTxuXPrDN>f7f}vNOeO z@AWk~68rNXJypx2!-oKH`x*v8WiS}x?z4Fd}Z_4Xj6??s+x0Kw>&GFoW%IqAiKD}DW zB;}CC$sM7uWG`QJGxy)3fYKf7ub$Cat z$F6R6Z@L{_*q_>GrQi3uj<4P(8aY>TCz0z_wp*OiYpYz(dFMFoE&Jtp%0bP&oio4Q zzehBln(IF6(zSJ`x|8r==6zKaUr=3A=iB!V)_~2CV|48$Qxrwj^m_eh&r4r*RxHn; z5j|zx*-O~%zP(Qt6~E4R^6T@TJh4GvvzM9CdlCK4!OQm{HSAB`>)to(JgMTyh&{{{KE-4(&qRsPcG40nf>`U@?=k?qq65E%?-KXZ*mZtLg`ux%9YPB3(utYmmPIT>l z*ci9Q^xT&mp?-G69uFLdOK4GNwzW~}dAEE=lAn*8!R2|EyJ8)d z6USn<>Ry&6tk-JA@LQ8nUL2~_GQHyK^Jm?&YafwzJx1Aajp8gJn~

ORZQi}YrB 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%0AX{EjzmAOVw|^H1mDQGTGc+tkdP(x#H=HK3Pzc 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�`hqG9hVVD?*+_? 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

=tLtGhuh^vE~j+gdmfc{1-c?I9L1wsBOVz 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

_&zdq{g#9d$4lL(03bu=aX zt7X;N$F|vHys~;V5`jFuPAzp0zBX!gF6hx@O9pg?YpDL%Rd&GE?IEz}^SY!5t5926gBnvNm11tSx&m!m%EVe_wGI1b;p06(e}~?gRb9>Y~|A zc%{5)TJ4S}hZ&+)INN*ei{tlLaK2%>xwuP`!$TPLX_Qyjms~`uRj_r}g1_+BdgQZtd)h3x3U+ z?lIP^9}j6Qz_3F^QxI_W2=2?H#F%o@Yk~yjIW?{c_faxej5<-cbPIl`@b`^=06A3+ z*1!yVVXgu;0N4Z2*Mu=x&Y-1|GTe*TP!XIsH9viuus)e~&TE7|SGn@q<=>g!5NNR^ z@<~=B;uP}mJY@qa4^zTI%!eh%UgHv6JUOEvpA-ltFj2jf%uoJlHpRSP=cO_^I9lyJ zCv6Fc9s^FFZZEvBdT!o92ypG%3>xuu@-C1LZk;#PuB1Pq#UW`QbIi90CQ@kwv)rbx zc)jG8a`&b$@Y&y1b)~0umU;EwHnFTPi7_gEO&Qr>OZMp}b@Bl)Z2`<5k2vC)1M^Px z0x}~t9OTXoT#E|wU#aZd51@#g_l4`yVp6)rUMWysy1>!zu)62xTEt*VB z#$i)~(ZvJ+Aq4Yn&E@2N(qCJ1gwP(}!0q`ga7be1dCeH0acg^N^ySCj0%7Lf>dxJi z@W>u_L#;<7vhjtVMVF(|fY`0JwMU($5dEfsa9mK1j?B#_h-bast2YJ0)>H7Kz;7E} zlmlfT9s`5!?U3r^6$$V5d2OT84A9D=_FT=}h3^muZFoMxe_`h8m9&cWr<^JvuFrdD z_Um@=-x-=V8Mp;D_Xujd2A%*bdB5|a$AE}AJZCEh>*3mRro1u^qwhw3;|K(W-b%|X zLVehcp6{ppnrZ#ZVv-Hp#+WBJZld&U)&)Q#TxL%O(uY$;L+w^yuf!9oWyu|q3XL;7 z#>%*fZ710vP(Ax@4=8%>$I$1QnK@1DS=h3LIWGC8yhVfK9bt-`enY9L*J@$O>WN%o*w-*b$(vqs zPuV5-Sl5Hw4~}9(d-bFQ-l5YhR{=yjg+!PZ&{3stBF|7W3!)wlD8rVr10qGihL1ue zXlKA+==FFu&z1zYT8ar<$ecS8OGCfp+@lt^KZS1g60>zzsEmjJ>v+x`htIwL{DQu+Jy%&Q_xCxhjkP~ z^t+xRoF~6^*R{*5u+LcBlmdiqr+nT9bD6q}VuE|Y7}8h`u0*(>>-bH^J|Z;Z{h(0i zjN3A72_~iUupN+uoaEUA>wf%P(>{R$&%;fco5H3k4Gwnpn~ovA}@Bc>>rnl!ALX zBC(fVM)!3*stk@}d}280O7^@_fVvV!FY;a8<8U58d;7ZA$U#xOR~Uk^ z!|>Xq&UY)k_VzjvH3*bD8pS1K#!@cDgR<&oF##u24G2f^IXcU{C0*U$Xq}MQ8ubi1 zRLpftZ`S}oW$ho-E^Mu}YHX5Rk||-+I%}g1ASM;=&RJ|gZhb@x1_3whe7@NM!K|Md zcX=iRu3pE1_=JM=V{`z#?b^kR{n%2K)c2L(_ZnBxDE9#eh81yIUGg((X)Q!39Ziqln|1%Z6|m@LY-X-mR|o zwFr{h z+r4jYwPd$$$z9WYv=`A{N)rT!hrRitOCFs)&#TOu>KIpQzRh_4?iYU`V-^N|Sg}{WzzK0{~rQTyBRmA_>Ud8A#tFb2+v8moTf5+v?h5 z*Zf-y$S$K2w4Ok6G{z?%WX6nJzA}M@b2Na|x9U`%pfE(c1)#Gk3)n;Ko$tbwBi{vi z=1K&A=UO5Y*tnPPBxEf&l+KeIQNulr(gn^D>;VLbr@|X;Y)@xL@hZD)j5Zf7`4Y$E zozBQdcuZ5T@E+88=_6)m`Mgsai$%;@+m*hV%+oj7Wv(V@xI{I-Q}?y96Hi0dXqTwj z3~D)LDZ%25vVc6LsU^zsi=lfi&cBt*e22mFV7)Yc@#nT#n zB>EF2w+>1M_}=hmFAn)QQ6HgQFi1AqV0^GQ8iibYtcyL$qg~3P z1Ad(`%WO7Q5OZZW-Nvk)Sk&k-co$G^givRjRjULaGm6C@08j6_1@bNh8La^_P<5$Tik+&beZ^0|znQT49bXwDhcj?Uc<_v@57A|Bmhm=#CwRdXxTSc20|f`$O`_?@gNg0 zMnwybBD{B6{-@R;^5@JvR@dNs+KT0Pv8=*wiyGs;3v_z$-3fN|W6#UmH^*Jfl_~ep zV}6^(=)C7ZqkgmWc3Qm!^ojLzeD(G83_OdlZpwt!M}-@Tifx3e1k@+YpG_@-`xo?_ zpxNuisNrz-E7zTO6OX1^x;VD2TIZwJ4;a2<2NT;D#r?+bBZsc1iBaV6fX8FGYQjP=~sZBVuS!IV-LhC zKZ2;>ngi}#Ut48%rkt$b>7a;jOeblt=ubL@_#OWzK?ji02kusoMScKEX zL)GV{tOd?2!iA@sT=bgpf{-2Ww}sL$hDz_QREs|92T&;R65KC zGN_Ic%=(x%9@0-@B1XW2%RiLL?Fh-hoxLZV11)IP-)U7*MC!v`&yfZ01IezF`nZ4~ zOtY}SXts;z$r>agCxB0T2-r=14m7f1Y2ZvU+GR(<8kEZ|nq}6`DHP#S1D!#glIVkm zHMDEr@bf;b;H4DKMt#MqiF)t+J=fiQfsjO%E=fqDldR+&=Y+)ZwOTi9{IKVM4P4#`2p#P4WmPL2;Ln) zW1Ot`8-#}qJ#=K)Fq>`k&>SahiKfX8QJ~`(oXdA?#L4+;Xj43-45nA^bFB3eXxD9o zDloVe-!%`2z1+^bgtlr!D{@9ru(P7G?#AdgqgCtFL!6e1qMlKGluNU7wRxiHeJNBd zz)V4*kpAobi24aypUqcT%WjO=+PH5D_NY@=S(3IBOa`lhMqNC^k^9-13nQubd`IwQ z8E@IFX49zxVNuz~$~0$j&f;$f_cJa{FAQV=Et+#~>Z0#^X}j8?wZj+#=b`tkhX0FS zqU}jle-v_ByhV7elZwcS1{?Qv?wP=Qy-_{80<)H8MrC7O7Y#~fve01+-!nO_(-Ml2 zK&f5Xik2yNaulT^`f&RM{)J&R9-dUvgrMA8r8&xi=M(I^ zJMm%02#OCOETnfpJ)e_8?M_gzk_jNfzz}0SaE=`UW(eMHbW)C<`!U)Gma7tv*xVSS z!8U3wwD6?|Miix`)t%rg8>&8YVQevyBBNz!m9rtn?LEx^fDCSgDTb3%m|qI6Gm6?A z8H(K`U&|Y)wXsN#EnT5Q9C>T=D4MMcadwimc!+6 z>EIqE{MJcV8#~R6K+KcE(gno2)P&jqoa5yO7D51YAmVz# zk8_U`Gz={Tw+>VoK#Rn$@ZG)e>9wYcd95N=?9i+$FjE*C*x7v#H{33&c);TVH8V+@F z3gR?K4}^BXA0P^=ALX(t^D`uGbeUlOPDokbrJn8|Py>m|H~=1uIWHNgQN6BG=k9Ge zX{1M}An}_MHW&h2*g5CQ+V2!zr)9$n5k#pMRz*@MlvLgWxld$yKosuC@z@3M7k2NH zt2&||A*?en;Dw*j%>6LkpSj!bgQI3;io_0(@m(PxNc|sN8vjrCvY4!dV(~|^Y?TV} zlLLS6G&I-7Dv#jh@nge45l?Pph)&f@>6tkqHl|DfCto9)M8+Vm5vrMkX8t9U-^~b( zJ6bBpKiFPJAjV?ocF-UWq>^_nZ;blH63cS1$Gt{an&jeh^Lv0) zxA&D)rZT`ZjowdsQWN9@y=v#x)`{W*{du~u_?)7?vi4sZ07G6i+^$LXb(A`|7Yn_T z)Cb>v&rY%Y1)yIGTrT`zQE*kTJSwwlS$-OSVk)E9k=Wri(YdjNusw_i4NwNrgXBD> z!?;r(wE_RW4=DB)&IyDe$Q%U05+vK77-5M~AFc71a-(VW=_zD(z^lc>pPSzNakLqxd80wjcTt2 z`hA+fFfK5}kz8lHgLA4CLBT{{iw|ZVN4`hCgpxz?5e7OT%?XOw*(&8bOhN+=9PcWo z3!)`NIzLZFBf5bE3u!gEl=-82OHE2{1A9_lX*jp`U3ruQskndl{YFaa1OrLYdRBRFMp5R4h( z_E0vO97y+NJsyj%GMz-b?`3Ig#~UZdaktTLZ0yzPMB|iaZSC!yo%{v9prpMKJ+d#R zse~4o@4{YnIr9#}R#@&)yr}kKb6aeKQGyQ{O&7=!=yxoL_y)}{Nz(+W8KpiZ0q}fJvB%CdtQr=t^ zW849nhB^sP8NQ2%qH4oB=4|Mqy}-zU6)pk1riv&BSbQ%X5`Qa<`{H=tZArQGJFwkh z-9|LnYNz*kNaPZP$9G!aw$;oF9POL3w>=?r?OX5)vy5OJaEo%Sz#0-u)&W?;TSEd;GKmTr z3TQf4T^>OjgH(Rm~eJoGc>)v~{hCYsx zEjTdzPi=P=+ZFCmK=}u~ObLWBAK`)S_{mWdgy>{a1!WZ>!kqh&Sb>VO1JV@HYRP55 zjx|v|2+3yw!l4-UAfj#U0M-h~s5-zt;{Iy`av1)rg*DFt@SYFfjGDm}!K`34*0b1w zV7v~56#*$&5FhS$;8T4ikB>HX=q{R$c5CCh-bq zr~deY7?+Ud%jrd4WN%H`)B6iq__>7Z0hB3RCMjn)y6vIkenr0Tu>^}2evxiC&8)D`;IJeKDm#G31x=dgaPR(3 z%XtHyJGLZ=acL;m8uHM)ukz~v!s(TFf`+igo+Ep%pe9d>86Se>nz8&{x9lg5L7wpK zRL1iCl@NB}BqzhkEg*IT8R#*Xify~$p9_L6)w>fk|AoK^e?qJAvodpr>4`0Z`N$jA)XSw#^t_aY}ulkXlfKm+C0}o}`C8T|EeIXOYHXWUs_Bmu-;-0gnyD6WJwP1U% z+bjPBi&(Rlu@(%tTH!AZgebiG*YcwB@;0ALRp6NDnh#fW-c&GsB8ZLZ#WX%F`zDnKPYvqc3$fRy}?}V^*s+K{MfrL&=>4orT_Fj50}LBYk8RMx{V+M=wLw+6)sH10h`4kXBM{7Kz0L{%Z}$yOpm}zj zV7&*W&uK^^=v+2hrwff<*lf5Tm?MD7G2{0s0uYMe(3oYWl$ZR#ba`+vY*=J=4+u{w z1y~S0dw_|Y2FIB#|D!cC@!;j|@yDwU#y*UD39d7+C&`>&kdSepS%eWOrbom8h&_lE zl=T;dSLv&=vYC{o>nIu}z)|@wf>=%&TRgMq z?HMTz{&#!301>0Ue9vHs$%sK7e5LmlX7s|%w}wB%%b_JOb?&xu8Bm~9E^Ky}%g|C( z3~TvT$YLwxnU_-+7_Qcm`j2xbFR_~f0TI8z31)02YAZOp*JM>%kON)raQmJaInf{>yT9) zE8r&b{zfUbVcb)9rNggB*!A#8UyV7)d;4{B-zjwgSYtb*UVxG?^1n`YrLS~VCyg)#9lPyR97i}Z>rh(_iibkm|=Z<6| zk(D*_TT=(2c=R)jDtW*5HsY*)I5fNlCky&#e?aumu^oQXU0*Sm9{isgINd#*)eMPb zZ+jBYB(R{h?4_+l^-V}9%Z!L9!8F4wL#NdGiELuE3+54KdSje^_5~HIg=0!%4t3<* z(~mY`Mujx)kO4aF=%o-!u-=^~cij8nMlo2P+G(`~Jd-s>22ZJCv+!f+r!=}(seW&9 zHbZNJ#4h7m;U2;?VanrlzRA}4N&?PY6MjuI0dtf~#fpX&2uy}dNVjezDx(6MHsKw= z?zLP71a@gFi8}460p5devTywLdZri|QDQf@0(`kZaQgGj{u3T=OB9W)u1XlE_SN^} z>&s|=q@;iYq$BQXli@L^{uXOIoG^7Vvl)g3i!FrO- zxh(Keq;pLz)lLH}PI&)9c3+(5r3?Xo#O$@=92*bBTPs&euL9POFQwCXvD;72IS1#^ zZXskbU=brDI&tlQ@!+{2=8HY*=Av`x#Xa(%pcLY6uC2pLrI(C&YektpCR7XME+=hf z?}^H*If=?dQuh{!BT5pAYlp;g$nz3ozPwN>ESpn+rXf_=8LP{OE?{UfIOtU>(l?rw z>P%Kt?guyrjOR(Hz$HlE!JLVM1w>8$B3Kw5^yYl^#;OpVt_^G`udRTTJ!u8Pw-urz~>q17rz*>4I z_So>lOf97H@Q%-1m9|$mioh;p>PjqhL8sJib@PMHv%4^>gH#T!zP}HIFRe+BOUou-J=&>OC26?0AJ0Un~Deaf9?*Iow>s>{9)TCTi>_9K|)H>}pnrkqA7BNIJI zTj5U9*(390Eypi^%3a@Nsg5fx4XtfX)`)apMD9GsvY<^ZZ?-;Wg!E|T5wPdedV98Y zz1v|hjij#BazR6XV3a&8LFdph+wiz(piWV;o z3>fQ`{oL8d&{3RRj}2dwHb4SrJd9~J&c9GwrmVma_U7^R5o9X|tkVN>hc3oAf1oKI zmj>V|X7cFjlR+&L#;JFqTGr+!!(jzv?_1~jFwXQBAt*RJ1~BCgAYMD^mF3K6WvkvM zmZ73*?d>N#%Y%yXUYrp4q5img*Im1o9Zb+7I=(fAs7ocHM5qVG9Fx-HD z_$eC5$c#8eiHBs9JSCM4_?`U*#+aL=&RKiylKpGpSOQd#RF}0g*P1gk;)^kq>uyg% z15u=wsOM50d(}l-feVSt?9$OJ8~5q{M7yFMJMQl=yqDEq2G zb12zj)=iFdXxJpJlqUIM4m1-AT4U@)yEWVz2l|#P_%>dSiNO<8Sz0CWMa3s|3bEK4 z45eY41?}6%Hm2lNy*NUTZF=PwaLv-1ocro{S;{Oo7Bh;K+mViefYDw<0~vI#7oi?A zN?BGRJUZja-InKenG|I(4J@l2hi$((lWQ3q5<8khy3`zHp8AyJr|t6EO@)@QcW{vs zQj-lxY$aBwAi)OFPTEy{Q4h$zCc;OC9R&T#6}%c43Yf*FHUtms@@H@SSCwxFa21|a zQzS8yK)MS%Cr#h7sVZEYFb2?5#@`tTZ`|O4pA9)hN*NhU8M^3;s_VgFkq98}8cjB; zF+h;=(!A@exIMYD=d2kky_k(x7 zEE4lUI0aYb8J9U~F>#gCSZhGAq=;JVfD$8OS?Ix@u{Oo#wI#1I%H?9&>zb`)6k?1H zC)DWzaar88FjbEU>uJuK8Js;4xQa%)#A!?zyCPQN z3C;Kuvrd$mvk}l}#Ip+yCGOG)bLd7jDBij#wQ(p0TAL$xp7b)ANn0^vaa2vdEXi^9xnX-dY(b7<&a;+Pmyo7Ij|j1d4o zOgxc)Pc2z$oad-O?+QFq!|lqc{*V9n@BQjue)|0Wqo4oHKkbiiK74-v@zeiw%`9Z* zH;0kh5@Ot|oMa@C;JNK;y-d=oOxrS4n%bCY5lZ5uO?0zYs*dn8sY51uzQS%Ns=%Cl z5}{Cs>H!}jH$g}r#3fsM|EpiVIsWeR|Gqx`nrkN=nj+!gBpG$|T)f-hyLuoUU@5Ot z4&C~F>;n7SVWcJ}-)e9|cuH;L-MJ%ZDbU8Ker&4ywV_g={}sB=fJp_u4!Ug7`m0}j z+V4NO{Ob4Lt?&I;|LMo~??1o#hxZ@<{?muG{T1NeRDSj6=i4HF`P`3Q#$Wy7<9hd< z|LRY^eb&Ey{eS*~2O-l!W#^WCx5lJk!wM-mUp{VnwAI$C=Q@SMCUNvc=vNFTLP6L< zs;q1vV=E^13{r2or2#RSPIO>n6|%B)q6ULCoHugF&HfG~yt86Y@0#+cCS&xe*nO(T zX=hQ{wn~hZ#}*?L=-(kp@XOK5TFJ0)t8h&_j>KFJW5We+DExaauxD|}+XS;37PF?< z55Mg1uYURV{a$ZB`iJ*lcKXl0`?z9#`uxiL-Tw8R9e(see%;~!?4Ne{%SZm3>my&g z-LDJsWr;-60Lo;nX$2S{Q&#)vDx-n#C{Rd2vZh>}Sn13c_aQ0A*fJW2cxG`XmE@Qf zXf?0#A>_NjUv*K^JwGAUH>+WrT=2>o8-R;kqkb_;Sv{y( z3aF3Lq_4za5Tgmq1ZBoh+Y%xwbAb|NfVCkA_bmmX7`>2UpfI7n&#$}vM`wLrAKtEa zUpD*q|L)WKcX#&q(aZOBkN@lEd;Ik;c*RG*_L{s+5>$81=9D&E(@x3fHCz~g0XC__ z(xCG}ooJUY@LbjYjK~Z7O*$N1l6k-2MJR{rAfI*>o>vRIs==$^Vui)y%^B~^H+xOl zN$NmIUrLY+-SjE2DRN|kO^ux%C(gwXF~)5VafkwVbZsc>!rQ^Pd(t^82`buwbi#7T}2w59wM^Hex z>EqahYd-Lv4Q9S57z+m=FyU6{0}^0LR2^Hoc|-rx+mmsS$1c@18CsVMqd?(V2``t+^u2O2GLaY%Qd&*$+}!LiWLjpCdl}G6C_^O5s}uvS zJgzh#oQw(+7{RA8fiMf`fiRe2`c?DMDsZya>X@CgBt;^v_47Fg>mi=lrwmGRyzFSsJg7H7~DC0tD-_Us0anYVDxWU6as!3C%Hb=Oz-kJ*SteNDlcW zHnjVEfeBhNY~zJyb^y#GCkm!v5WC8fZ*Nw=|M7>9KioTJKX}!??(<(i-)BDYwX@7^ z16J1qn;Ufp+?K(qPc$bSX`acDqL6TW$!1=1aWs8KlPYWGsW?^`e)ARHN@g&Aws5>T zrx>)f=9w5JxO8VY(AJsz_KiFlpV(I*vAW~IVs5^TGcOrTMIt5Df<~CZCBd3yCD&4y zgSt(Nro!mE37F$zrmNZ-DLgpo!l&lC*+UT8X%%W2RHUV688w8@89{m z&!6sW@}n2<>n8u3`#SpQ0lxea4*x-bz;&))8L+cdeZi7gcMtCOi1 zxnBYnz!`-z7mYFL8`VcXp#j=^z)R>1Tc=*93K08T=(l30sh7GO;ut(u>Al%3bCE!} z0CE|3Up9I14*eHj@6i9?_UX-MzjwoW@KXMcGuf99eeJmSR!F@t@-gNZWy#Ei3ez5{ zq&W`?a~NoPMSubF5zDnBi>^(B^^&UQO!vl1t>cP%Gylk_;i7eLaMz3&6I_<8?K@|p z+0k!ye4{U{L#&dvbn?>%zkc)9U)c|D-rjp#KYIPXZu9@} zlWqRdXa1X?{;$`juYp2TW6B}UA|_}u+Zs4SL@vGolZ(Dv-$YdtBfU6X(S14&2iv5s z3>Wf3wOZ%8R2ID!!Rt9kXrG24KAPY&ODZUk$7$te(@XPHtUySaG3^oz*8ZeBXJm3G zuN3aDMX5F1(Yz+OCl_?bQ<8$m3w0gAwhSjVw2q2$@y|ViAh=y zA!y>%ktdV=5rd*UwC>$tb^8^IayYk+Vr%IsP4SE>#NmE+5=TT7akKS_jH7VIx#$L? zr>#xW1{VvQisMPEu%W9!Y!xlONNor4{%+v=(|_A^q4LxqUsTAgIiu#Q-d=v z%Es-25mplE>HOmp`n6hLz5{>x>CN{a-oA<7zIyX6-unLh=5877(X09OTTuV`Z^4~E z=u6Qh6rr=Gk{Y_mTx-A3F!^#6_;tpr2X?i$(6n}&M2E`Mbb0(x=$_0i5>uDbyIyVL zoQp~~u_v3$B@VG1Eqh%ZjB~p6r0eDjVX-foFrEf9fjwU~nFacpc;&@#MDLa&7BSFs zSmwfT9=b*(QPmE|pyp{DD$EQ>AJGesT2dL-7o}-0tG5i!0%WAjLdfmK7r+mn-@Ltd z!h7`k{eO4?Tz|sTTc11?bex*6s)q7k3pU9`Vjr3vV?u`$=^Rxq1;gouq?<58#UKVK ztIh!P^wg~+GK`3;Ab}lSk@~bT#?0vwL;xD!deN(HUjR&6DWugk5l?x*!IDn(w6BUU zD#M;aOHaeehH~D?w8-r!C`v>BbD`vcc=nA$z(WE^f4U&>B{iPW;e*(C0n{3U0;}7L z=e)nZd5FGz+q+Kwx?3uDuOrB2IcrK|73zI%3=a1q@kDZ(SUznw`B_>|5 z)5t>acq;X_o=1(vhP%>2gT@`pcr2yMLmEd96bSK>6~(}QO)MvTV=XtbRg-+@nYVZLabY$$w;|)o-iIh7w6j!FsN^(uvd}ugbEH|_ zQAi-9?}|$Ba*yghOn*y@K?IK!BIbZb864ZBC5D2p7=4jS9-97o+xf+3`Ct8b<$l+b z{K4z_^$YN?U-$z2_&HAY0-;P^MwF@Tg>Hg20J4}yU+<}dd`>x+m;%yq%AK*;e$7FT zNobcya!SPykP)vq6#Q^}3h8A=kT&k=VDm|t0oH!@(%biVCNecAwv(m`Nt9?@8OWTF z_jKa@3QLlVHnbu>Nb$*mNeAeMMyt5SHSZgeHMOQ|Gk0E%i`5zcMU{X%(PSpYu((17 zIk!Lcf90RvzIpfg)rYq~eD~(vt8aVn|M=nk$9sLWM=$5st^cPS&fi{Vw!itEf5_97 zUYb}%sd>h--m-Rx1q{wf-eyE7dGtzl_X@DT;$LihG6thKuJTkx%q5vC<~Rd#tM&@m zm(S>h5ZJu1mc{n~0>==CYrlO8U~R@?cQ$719yJpt%Q>~9ws$G)Sga4!7@xXud%6;AR z|NM5-fAW;qdNF>Od>rZ2ON4%Ag6YaY_M~}JvtRuHJBbb^16|)Pv$SN2EBV(U31t7UR^|32jZ!shCfKWpu_1 zl-d(zsa}k*fKhsTKL3k<{z?Am1^nlC`$x}i^;s*hkc0evyNdS2O*VtoN2(ZupTM~= zIgQ^DXUzbv);b>Km6m<>+e6lef4So+P`1-e(Dci z&##;R`gZew_g`{-7Yq;)!l_+$JGmfL!s_o0+@KgyhrCZG9GGU+?qSsG@R^xyKp@`f~Kz zI&LE}FkPaT8W`5D;Fv|rf@EYW)&c^{4yI9tVakPt6S^_h^2isHgcxb$QP6!ePLQnj zqBq}#zrJ0;tEzeLt^VkB{Q4dE@Bg{)z|&vw^wj6Pz?eL+>NHu@f?Z$%FpJC>kYD6e zrpL~1#PcyK0t3q?Nq3$|4W>8CMr3y`SoIxNMD7YE2EQSY{%d{!+N&a3hk6kDEFa~( z)s6AFFq{;9?R;{AReivRgLZ|GFl}GAT%d2m$`WrzUbS5h4dTo)b?!CL8zK{0d_|Tw zk!1{*jCL%hRcs}t>}}q9yi}Y2y|?FHA@^H*mGGc;**@2pA!`;G@Vd>=qCPGi%Cs;G+NuUUwH-} zx|r=kjD_rj(X(}|N^L=>X1F$H(pJnNZJ)OH%iDW5F7xQsdwF}mWM#G>xpig|3x9W6 zgh2TUjwn@5n-udRm5KnlAI-x7+OIhw9n8?C>%jQKK0?EoVA+PUSoWU4i6t#-tupD% zcroq90i~uPRk*!@Q9UUtBg+w6Pjud9mnO397K{!tyyp|&S8iIQL$^^-D|L-%otvy! zZ`U&BXv(8&t0CK1hHe5I`(<2D=h zhabLs_31ypP4|Au4_>%C^CjQ5nU8$!Zs>$(kI`-^ZHX#Sajuw$VB47#c;WuT0Sep= zlBS?`vOWRTbf~QY1H49Cr&9q0liONl=0cbDUF$V|95PX}rUo`HQcvghT}(%aOA)(p zfosXFjk4mbi3#@r^ToOtkte0Hnzjca2s_G<`0nnVe9x4rtp z2Z*pky+Yf;JLppfk}Y`gkowBPrwjSBffPe8E0H>~-Bd~Ils;~eX`d^G@9D<|=R#<_Rkt6al!Wf~6n0-2+geM3R6y(x% zJi-YVQ0l z6~JmgWM8z`s-Uu@mnLu_*8rwvpj2i?Q&%c?b2)UPTxuQ@8886y9bd25zxu`J-+u5< zUxUi;-k*CL{OGm&y1{?;?!)(g`yZ0L*8V!nQ}Uei{#H4ApRu5SWTw_mv1zr(g3jL( zRfX+)Ae_p3BI5K^OPo@1!VTFXXD&>zx%4?MVo8<+Bpzz>F60pA73CSDw9L;*CED$6 z`DfPZeDvzw8Rh*CUoOI90#+55#k*q-s2zJ2-5y-Jr@jp1F!=4?#GUQH9D zh-=xuf8Zd! z-u@fHDWBiG`=3doug`z;PyhV?<>|qF!KP%@xE!Xt9iv_k95EnU3D%yf>6%6xv-i4l zPGn?{dkElfZt6H8FGDbTi#DMn8pUBhM2ab3!ILSz9e(0aWL*Q|-p~1~@aVPs`c?Sj z>%o2P`_oe!3u%gFdlBuikuINr0heJQizA(TVv-Wz%r%M{1inCk}|otnM`HT3eA^wsQ&TDH~FxjlI?R&iu0+X11e)?lu$EDG-UeyBn+2&YP=7k#s)D2#pP|yX?<0WC}qDNc2Rp6Vy$<_amp66xnQJCN+?Udk zsOuViml+c_xj|hmRVXm*iyr1GnM`f~lGBiq2pdnbS#DQqxPk}U6I#yTd{d(#Olzpd zd#^Q(Z`G}@Kh$6BU$3`+e=lwF;AQ*iZ?wGD*H8D~?7_ry9PkCjRQWtM-F0ICiJqay zf`beo!lX8v%_TUhdNpQ8XKk|)Rqm9Y*52LmI+6OA(nmX)LE>CTppEStw!~>Ww>Ir| zrtfFlhj{clzIet$5gVL5QBR=^iQ#nkK#pRa!{wD%0t?y!LuwwfYiV@Np{)ASe8y=j zX0DJnPqqVva#}Cy1)lU7#jcU*qXss2x7P4sK#;i2eUAejw^m}nWhTbwJ&J@uSVhf) z`xK7C(Opo2NsHqNMOWL4TxQY+Ad6SoW`x;op2d?fJM4-!5B_K;&I8S|=D=T-=D^W= zJGA-2!kLc$qEm)tZv9-k7VqcM%A_{rxUW(XH&EllXWuMY!|0wj zWBt`&@?q&hW2KSW%(8Sr6_f(Vimp!T<9f34np?>EhTQ&MQw40Fh(P12K;+T$Vtdxb z|8u4=mA8uL)=DZ^?)mRxxH>VaToACsR3HB06iOsykJcx-st#pw%!(9_p=c1X4($lU zae4Om{ru_e8@qQ}e(|>y_*Q~bUAY>V{FG~5N0#)_Y$dnaHp7@!R z9gD!xIy@8ewvdb|eM}0ZPi~T7#cL}AWe{=lad2V?=NN?LBcGy~!O64JZLdffugROR zYw1S{f7LkvshF$8f_DabT@(OL9x9Ew>TVfXvV~%H?LjCzW@Vn|YUGq9&_)^M-9=iR zjN~@&Jb6=2Lb(%5@V<=%{Nd+MuU;rtJbK}N`U6#YJ-_T|$5Pf2AUM{>)KAM*M2}W< zsl5*HjXQUfv7+*xMloGCthq8kkwj6^(pT!z&LaKZ#wG1oOEw3bWAjLx?MeGs1Tj+P z{}k)?(AzuKTxs-kr2(hwaau-oI8ev0%M9OhI-45*Jgs%NX1({+&P2XY@pfu~DHCN@ zX-wH+n}F|Fpy#HlXK@(GT5N8n+pJQ?I_q{vzeFMK4bnb%;l6e9*->q;^|cV*@sDr5 z_jjMy+gG1HfAsbJtK;DxU$-ywH4}Itn68{gLid{L$c&?%jDLG0RjJ2o7u6=9b=%IE zbbC*GX(d#SrEc=ls}*Y-WRk^f1iZCmHG|-_b7|w{%@Z+k<3_Ti&{{`}il@&4oY>)u=T(aU$|Et|ijY_Uo#7_-=tQ%%xTH31f| zwr$p$u78+Q>KuoO5G^tIVc{*KdpbI`Z5>*z3Ub1orcqx(!W>;@Fzc*onFn31dHNi* zJ(oTE5m&qhv!Yp_ONl5?X?TG-<50U9wTzA)rIaRrP)Xme| zj;7MCw^RuTkJc*rMnaeQ@7`R0aom2mJ2Ly=#rwLezhqar>5Qj7ZuKFd zGo@+P_wK#hKxBDf-lI205$m;8Z!sAxZ>6N;K!*9c(=P|bO}cl5q!H34LRi#B$Y~v5 zhZi$USSTAijDorh#YnnM-~Fsw1CL(2pB$f(ysoeNQ=-z=SU4xstX50xGDr=>>dkT8 zAe6a-Cd%=m6^b@z7o4L}0zO1T&T*PGra5>Kj(JvwjLI2;(-2k-RBm(B>iGh+w=AXL z1-QN3;CpEvXhOh~Ae%eItc|OMa#~{{B;h-j(Xwgb3IXXH|DE8h8cYeE*^g}XCO*9! z2#ig8w?5nl0~avqBYX~|Sp7_l5c>7``>Q`b@AnU%)(;AFR&eX-QKBcJQc$}kmkm;Uwn_l4c(kboubI<7T-4BofMh>DkczU~JEp^D* z2jjWRNj-4j;Dg)Q4m8Swcejn0A!Et2(Kaj#I$OzF~RJC|y7 zxzt+%N$wlU0EyPCL+zW9wTg3kC$yE9HackGw6=P$i~)~XdUtX%=*B=?oA76J$+#^K zd_9o2GMQ`I?Lqj#WD~nm-$r$xxtFU|VmCiu>)Sf4oLgHo)tzgG#b{1r6uO1|06 zzxwd;&8P2QUBA&+AN}3&kN)uMIAF-wMl`R={)rCbsO-tyex^i2i zXkAyvPm`05vb0;OLn?yL!*!4dAas-?|7ZQ{9=cbwW_l&Ys&y5 zEp!lWn))@0RZC>7XV!AklUhAuo4Kt}EoO@x1LB{td-mQ#cpf1zk$-%#hY4@{= zri}t`*RBgj{kiP|SYA`|9{q}mAH+mywmhqNT0-5>Ht|jdp?N6h(erASd-I%V&1#)= zQxfl;rK=yGt)<#}XATpX*G2kctjt@$8qczgd>M48TY~b7@6$&w+l%{|=k7_W$2MWo zm|M2v{R8huL%OpM z1{s+bWNR_na^~$57=Y|Bd{^l(%srWdGqYnQ=Us?5kB92w(7fp zM``)gZL4f)rb+@o3X{H>fl&jBlAEt|^{e}8S`V@}(Qma0Tjp=S^>(g8#hupcgBS0o zyV_r;`sK+xnPcdXw<%q%t4RA*5#~CRV{*JrEpE)2%+Uv^oe?l_6A|*+1;{nUiE&Eq z#cJ1tgC@>mP0gEMZ&YK5fFV1ctpc)i+AuQAPXU;_6{kOV zLLS^ZEj@Vke!8vWbtzvW6Hzp;>#i&ftgCsk94k+5`aIhlFOEzuTuH*FjSNOaTOEki zo1x#)(IE#7s?kA?tfz{)ZomrgAo|?W8FQowFNU~YD$QECeW8|>)(Jaw$+1yaYWQj+ z2ctfn_fcDX#Vsnwz!CVJDxi2LJHs0clXWzNX{FRsuM{U_PNV;+l}6cES(%cPW!dO2 zB%6p3^Gn;fI6ZpxetJyO*Yf42>ILaMCyQVk*~hAr zWpWwX5Vjm2iOAS;pPcSmi(-I7Bt>Yx1cRu#Q_U&ODF{RH>L97QX131lO?7&m(W^*j zI*}tjMtdoi8O<5=XiLeK?eY~~^D%>73RerOE0?lHZb@30N!y5S}joVtf7O_|s~ zYR!mTRZ{ZadeNEA@Y?|5pZ@UfyxDJFz4Q!z^y>ZO$NGP@*E+xaSeH~DOEBgtB3zPP z?G!$cwtnC?;>Ikpjz&xYAcpnYPB27nxz}8FR;dV5bQJ_JQMaT0Bjhp7lWru=dEjv$ zV{V^qj3P4RHm-(5)p9CxX*F5-deY|95B||vN@-2&*t45PSJ(wK*omwqf=$ZA zua1`pG9GpH+AkxV5QV~qJrQ3s%y7`c-)3F)$atzi*Njw3j2w-sw+aTr{c=Ne5o zZ*CbrmTIdPdn}T-n!Sx{!r^DDgL(AAy_h+S=?S+VV4UWqm8Prd65ldIpW zNn9>wS%|KfEe{~zRDggt^vjk?l`Czg#YUQWa-Km0n@2@i)H-#PYdk*#6W(&0YWn#> zj2^v!FYfHIT4qm)anTmJ)ZQe`TnLsYb8$csD|=YdJthOCBn7^+;LuS-Oe# z`S?9xONZ3Y;4LOYc&ciH1JJJzmw`+1=G460?0h;DO)PCNuibt>Bi@(z(rKj9aDn6Qf ztf+(xz|YS~bh;+|&DmQjWiu1ey>HKvDpJXQL5+_wnO|zzCW)ZN7@MqRlM{VGa;$xp z5knv?tUa$c;IY(i8|XhH1=pij?!_&&(J^xFr=EH)hZvQfJlAP~qljv0>Lpetl$;9Q z=8*`&(;G>U%Hvq6E7c8LduA%2v1Q5LmD4IAqDHh@P9^(3gL*dilim0K-{@hFUeA}O zVnv8PjfK`^@vfM&jCL-0I>Vf2lgJ<}%Nx56kuuwYeNmbGpEHd36EnLgV<(ysY zG$q?X*>xDh7O^FQ(;pLn`!YG}?M7?!lL)^MEF?vG*uImR79P#Lwg9O{$v@}B6^FRK zoK5OKY1s!GN2irJ*BR_yJJl_cj2?VchIh1EjRv$}o+^cWegmSJz7>OiJOlaVq5PY; z3y6B~`rTHT>X&P4+pEqUYS~s-XoIz5DXCf*D$vu`S-X26@vBz4q*|J-$hpiNr^MMw zH(2n^rYWEtZ^wykZoPE@Sy+fqapD)Ol1g^sxuJqwUrXm;amF}7wmLPCO!Xv8?)_PyH1moot&a;N zKTA+|-v_L48HvQ#9F!8-6sIMUG}cA>Vp@GiPRisexx8IRIXjtNdZE)?yd<(BnbXvX zA-Z~-jH-<*@|5PYbJG>*e{(nf@aUC$e!+R#(bNdMJE9#9X+0*a>5`7rfK)zsXlW`X z=0XCHSrCm=wwyilOvdw~?b<}9fFWuZ^x31!Q=E2%QRc#@gLHTBiCc{!rD#lltu zcoojwWILN_sj)WZn`^R0i?>6Lt6zqRd}=w0#PjSmvPID?!%BEh(dzbb<*YeFiepG~ zi9HO6K+c0!fZ$w52AON0>wXjNzES$oD|g#~Q~6TUuVfV)$Ff}}J-g{~5h}drL?m@I z|jrBA5`Ua&{dd_{cWZiNiQq4p*tXecu#?LegxAY###alWh+A*B+%wX)R zv9-$@1lzjo8qJ4g7fZxz@rCpJy}zaZaPMgJ=#{&z=-1cv%Z~0?Yh^6NCEN*nVK`K2 zuov=odq?jLwH|I8`i#uqGIvhu9-wZA4YXERTVk4wgnI? zTu61wv)PPRy!TOk+p61>CNEi9Qq#*qm)fDR+H%IAN z!^coahEqJ5*MabM60YsSuC$r^pO}#0o8>V5yx2Tcy%9 zzyw2wd9Fs=%xerKrNF=eRg*Dm)mreo5_hI#{fui`kMM|uQB~?#BQ_IIg{cc4G_s^X zUm?IQcw3TUXYVpgbakJjbO@nZ3VHU{gNGKD;9mM9B3>AOiHoKpr}uN6B^$LUU3PnO zd1<=w(aUxVa{1at<(g9y&D?!T30(Da%$05Q5~;V$_knnPqYkxKPh-$?ZpF3X&8=WE^oto-O?^Pgm`*Iku3V(e624dwEIWKa-YX*& zH(4H=?5qJ*2lCuub79exoFwmBPN3uP5MJ+7wJ8R>y7SrG`BY=66P*oE%R3VBlbt$* z&Qv&>w%%H(6(~hNcX{)p*YCxRt%Mv)qqn7~MYo?_eMZ?+;acRXtq@%=+SE07qLq~~ zuBug6U5$=>&l;^*Y0+ycV`tb_?tK=3%@k041F)l7k9;@HDloGA7J!I!(NnSTljj)u zBzMv$g8HEG1Wtv^2S91Ho#Qkxtuu^F`>C~`F(U}uNzLi#C1B698FI0pCVx6o={BT9>+e7rMH-n|nqk3Bq7=%&5#d zv^~%2!$bpIZ>NokdJxR{EWWS}aR3-;4YNh+EwXm$Ig~kvDWVp!A?pT~!THR|_%j1S zJbL+F+}9i~dZNil-Lp7)>7^;+>{*kH%xKqX2kCG|YM3Ter#@?x1XEpFGUs)EeCUYQ z1`&jriPxlBN?p8D`m!hlT31*l{OQF(ec%32HEHFDkWwp&0iv08<&&Z(F?07bRv<*8 zMAOcaiKrUrNlhper-~2aJwA&wb*A)Z@`+@9SE_)ltT780@0NO6k#!C`DRvl8PseN5cr61{4arD^F^PeD zI#?)@4sc~eit?1k8K2PubyOsSjUaL*ON|%M^>2ET_gggDpMUz{1L~?zulD=5@9$2$J$U_oy087)zSfvKGV-TPFdndJij>dk z9gx1H5X()qP?;PxO1}WEp28b>#S}XOHKM!Gb=J)E&)K;M=%^aGgsrM@ID!kvDn8qV zPpUC>w^zoxvx9=3wHG1ebKG>A$_H@ zY%cM8Sn4|FnIQp%q?f6uRl-uH*ey% zcU3EoUA>oz4{N4wO~>pP{HMUFafj)Nj&rnp3E^kd)fHctz=J~1mMf*0o%Sic_?}kV zU}+b(5wM`xZ&Z6bYYZu)+Je9$BRb%Ufp*;G88{0F1_fMj?w1M@3c7cCZ&$H^ccgXR zmZ#5P@HCLdwu2Q%TW^yEt^782tn1j+OrJFBbZKj4joLfJE;O%XUZ!n%G z9Odsuwmf?2o}H2Ump$calavcjEscBMKfL)OG{2MM61-Ey(>BM0>!8o zzHHGJ;|#0IOqE+QXMI0|ch7;Ywi7Kq!vraWWzI zlt43>Zm1b^!)nc=P+H$y_95|FvrNUdrT`?#7}6-Iy63nJ=X2=Ib(mYLds8CH(k~@v zE?H8IX1%RqjP$o6Y;s~6pBON*-U`oy;m%Ph@SYYIskf%8nf}RD0yvCH=@|rMv|m+6 zx+lFp3lje6o9{Uyy}Dc~_n3wcUcKi{@h?+RHA~sdt)sOsm#Ugx#%u$69>0%YL{Ef*&F6^P_XhNtQ_9;)gk z_a)YB?^rS!fX`5`DBG%V>L6Pwgse`L8YO4yrcoQ~)0N?*Yg>@>C{xWCUn+s}@ zvXEI3zKdR`n@nBJ1+R(TUT6O3$`bCkZ|*&PAG~reK7AR7FGJ>ZLLL>O{S?Gs&_G&v zOk!(Hs+YtU#(dLtJO`^GE$U8+4c{rrxZG{Dvc}A<()^?2GRm+xGIU03xz>tuYkKk# z=~=oA%7HM$gfn4|JX@>GrEc4Mb3kPhyQEC`H#JT=W$DG!vYEPqNr)LLI@d9Z^nTrI zq+1cKHb}WJ%o353>joN`W5IRp&DOq;Ed0X@9-YzFX8zYG3x%BCiA^QLaq1 zP18O1rfon+=%j=I6Lsaq+X7E?+7y9e3+}I%Rv6arOuiR}zC`2-y%mv7q&A_H<0+~I z!_<_%_tvtM!u4%_g{i|mdK#IatQhUa<73&VQQgMgK-&)|;TX)?ur8xD9jDtab#nmb zuDD2grq*0L4Y)N0^laa)6AZS(&An&Bn;N6_;QSK#_LBNb;=K^i?%huxy>vg_Q+b{8 zm&fl>+_H!iH!A6vBn)5{$%fV?P^AtB|DCMxwBKD_H4FFYy#Nzv^2re#GPQ6JscS1Z z26`m}%8=KSla*G(>(TByeQ9N2_O?oxd-o2x!Y|P8IoiwGoH*L>Z4u)d+4ed~ha>== zCG~asIcEx#n#+Dc&4nlPDLB1_d;&z?U3-y2%#>-jI()7mCMq~JHiI2^aSwm>Yk&Iz z;{NB4Z{B_P>cjf@={|Pn!E1Sk{xF|{XQd6acxGcR;k?iH4$!Iy#W~zZLmXKsL|R;ZI%rHU^Q9S}>bP zg_SBjOqN)%WLq?wo~MwnYbHP_V^dx@8+HbV$lc1?2ZlRQ!c@`S!0aBpSpkrhbd9jW zlIWdW+n7wv)wZ*5DC{h1q>)7Y0nPGsrT)k9Pu7p zx}-VRs=JKH)h?C|e?0T^W`oqB^B3F6CDq)IOBF1iZ5}u{wVj-z0QMis%WfY`8O3Wk zToX}()_V1ch_2n;&_5yE{qlUxqnGgBuJ%}*PkgF7x_}~9+P)qDcvZAAb_=Kt_b|VQ zCJa0G(2CV;FBQK9$w&(pD z{c?+4HCR9G3WE!L@yZi90G62PR@9o$vlbHjxW=|^*F_N5q%SS4$*kC8D1!8marUXQ zQ<2q*&Qo&u0RDQ+E)P>Wt(M-ciat|Ob)1hf`q7-Kwi)Gf?P+q8-#wv`LrzV5 zZJv}`-GR3zV8jM1RK)-SqIRrW;jRuw3 z=H#-K!cJz;D7x-|@j0&)LADDwcf3wbRisw(Uv2CqLL7`EU~--{+(9-qS=nvMu$qZh z=Y>Z2lx1?(Z5?sBR~D*8SlePJ?-IC+jkjvb!5g$eUTS4}+4!3hbZ*m;3z$2OyF|EA z9)r?8J8k%sw$~`rf;mC$QMo@XEvFVv9J2)!$lEr~A3aeh-`wrVJ$U7wK?}cbsR2C9 zIk%Qa7UvYcdfzG06wW3#RPjk%BMl)wqPBseE+Mb>-qQ7l%<2pjW>IOrfj`l!XlFB= zyE0Iypu?DjnZy7qxvKPWJBIOd8GU>7vfVisxh*m>xuoJnGI7c?H*$`Foq-#EzbqlA z?l!N$*K9*8pSF8O8jVI%!uQ%aLYXxnM_(8J+7!0bK!BdLYr3$lz(;hAA~EyrRrP13 z#(4DF-Pz7LqFoSd&&$=Xw+Q23jLX3mf@WkQBq*XP%Py zcZxWbndv5bj;)$V;HYXTk&g~9(yn1d{sVv3_L@g8-t)um_+qwi7uxXXJh4X0iPwST ztYb#!)SPwy=P2ROSo|#g)wU?X~J>wBLJJcc4qA;|#WGT^n z!!+wT?b$HtrHr{tb3a^thN8}%x3@jzrI&wc=X~u zgW7%NDy6hJc1+oB>FL;*h#`+2uG|IFK`9PWPmWnGXQ;K)E?HfXOIf^^43Hsp@<5rG z13=R?=Bkwn9caO7SgL&Ebi z4mC7vQ!otAQE3c+=BeGXY3_mZgR4w&jE>t&pE3Iu7890@?pjZ2yQDO1*<`qGryXgX zTT{aC?_aOGJ@W^z+VhdAr&lV>(UY0X28~S}yK2reX=#^~_$T0%J4$(cFWP`hJrJC_h}^-6u<+V6u?*yTEMNJyg~u4I49$S#;lSX_bM(yJdR8#C6-OFvwOk%?5it%K6}AS@$HpG!Jz};w z0K#b=1cz#z-J{*cm0o;}K6=@ny+*&{bqIDP>6ey)lyR(608x}8MiFD`%9lLrXwoY% z;uF)>+DEeuMC&BnH*-JULkn4;RJ5a+^=3`mo@m8akf2|?O5dUNde!7~8_{3W2)Pz2 zLYPV5MvdzITI{hMnuV0MRtcr;p$ZHl`$#^HdP&wU6aP%zQ>4C>b$JYX9o}V9pD)Y z+QHSl@nsvMV1UCy{eIPlOsC6Hwgk#xhoAL@e_@I`q^ zmkj2*pfkl>8Jw7Nm%Zl_(*v`9+T48ds1iF>DE;SL^(sQvK8Z=@z1tj#$v_h6%|~pq z)5VHs02O;BIw4}Y$|!XEVanZBcT-+kWU$QUL|x@9rScP&j|iJfwxPsGMW$59ZM#h} zq3i#l?hTsl%CYmxL0c}VO0p!kTJE6-J!Lkq0qhOT{7)Pkz(y8bOg@@qs!9%rf4gIy z$H!9McVBk&=tg;@sHjRaad^)GHok8yPrH?g*RXV&;|Pe-fxhixQg?y6be2+7&0=}L zr4Qdk^~RMV)p7U9{`)smNsnH=Hy>+q@29Oa3Zg07snrVJddZX^7Ll$j$2OQfiNM=d z)1Fs%@OW!bd)XNrx@TV9R%N~)zJUT;}y5xNr94yxb2=u_OHxlsWmXHPd; zntGl0K$RskBbzfCNAN2Y$cVIwj&fCbw@+piX;%<-xH)wL;fy2w?qmJyukq8T5B~MuxcAZPcjv)=YpBj{x#4DAB0F^(PR9dZ03E>* zC3?bP)VrQC0J8DAw_Qq{okBx1 zn&GcjYHq;bxW71^8$$6dki#ma%@y3CwpOR>Ou*xwA2&^zT$vCG4Vtky$6Xmtm~T#; z+uRrsZ`mm#r^;oGV(hflD?%wd>5T{b+5aUzf4TQyAH9BW|6+6BJNKqG%WxDSi=<9l zHrX6@T$F~uWrrj=E~wRrKh`Y8hWEA$3>tKmr>z_*ib}`IG!CKrqd>I_yqwbWVJlY{ ztzdLWuc}h5z~KgFwR3@fT*#sbwVG9WaypuNQVLS~on3A6tO?#`s^J?IW!XKJwj3(mz~J`M>_xU;ENNdL3`K#QJ@(FQe*` z)_9rW=UHp6Jfe%WX};kbj(n7%G#`5r(j=jEnI)k~*otJXo_(jY=C!=rhrnQ#UiwlB z3#rCDG@Be8WH9;>55Em~&zam?;eUIm_(dcel4=#QLuYIu-mPnR#{SV7FM<%_^4eKHtCp_I!Wk#r)`HynVd& z<-}8M;6tyi`jv2+47{pD6%>|d(X2DRfLzGXpdM!E%}%H-e0FGn2VqHjHIbN={N#efF*}hXosf+Kl}y%?(`kDg)~wDeW?QjW zDpY64sTi>pZ0@4_Fq*6OmWE?DO)h(~$$`Y5BX+CN(m(=JE22)NQjXDVu9QrwWlOM=AedVJT|cMjv04Ni=<_0Q7n~~ z`cNU`g+-G&UiNCcDF}tWPmO%>0TQLgbe(!P);5<+m}vLVMwT-Y7QJ2Xi>3bNr}rP< z|KwlS@9$l-K6n9dlS=v9kyefH<fB@a8orS19ej1MYwxP5_2xmTo{P2$mTwlm zJvr+zFN#Q2+FAN)dePmXB!w{koo(d4@!-v4)y|2j$fuODYLGA;7h!=5k|SEDj0w(? za1&1GGjM@3+i0hxytuNCUDnaIGe`ebEbHzG%9d?-u5Ul;zx(?8_$l7~6rX?c_xA`} zk6y{Qp0G$+>_2LS3uT1-xE=Pcx~?>h zNl%4aVXLJAS{<9etXYLr$SHlLEO`lM)Q;0uxSa7*X6E|88hYz>_(P3V5zt`y80`7E zf@~*VG$jD<6S7hgO~Kp zN3D?mjkEgh&ept*E~n=;EU0ZRZE~a@Xe{~c14Q0rMXpMp|HzQKkfe>ywx{uO%8B7` zHebn-)w0xbIiPiIwNQi~b#hCRZxb`KlrvJc+)0B;19*RYAd<^7mx!1xW`4|p-rFDtRak^fCPFiok)pnjALT^_61)1aH?tKNr}+|1)Lzxk(JHq zM>PrwQwF$$JjtAuBn#ID+l~o3gWa$QEz&WhT2#2-7ll{sqhm&xwbUc|iH7DCQ;RegF{h zY-Aj}*L*b%M(Vz@1%15Ezk90Uw}j09@agHx*Y)MgyN~hZYuwvuKYIOcf4(n)$5h$U zcG-rgC(PL1aET5PK{>Krd~E4rCUR|jOKYbMUl&fh9wt3V)-EQ)G24`~7t>T!s*0=Nt*Vf{8m^}A0$zWem~>Fd*a zy2pHa^y1wqgk5|{M;LKMS*SpJpkbqLpQ_HSd#6qfyt;=2tv=qeaZ^cEb#Ki6-+JgEUH{bG09Rj-?l1x$auI zR>)qHPc3!^K+vw`c+qQ)CnhWypmfP8bH^8jcb;EJUt>qJCjuTUy)*xq5(`oLR zCXQz!+$R~`2JQi{ogmvH2W`}IKx7Rc^jXMO>^z%IZ5zMmE8qnB@*0>5plf$JsKndU z30p+p1w;B(qqvN_muN^pm#S{rTocccY6gxqO54}1ph6y@&`xeJkyDp``F5AD#qfuC zjL%eh{$BCr~9|xp04B{^79ZHt(LBF8UsDw zG%LFA;u{K5s=Nq?YoGBGDLg|rrT%I&+^a{b@Fh0CE?{jFxnnI%>N0h`sdUMKcZ|yZV{M7Ccdx;rwofM(x-L}M@09qu9599uWcB-Z#wrw8BX>%zumHI9fim!`685+LD*Z!POsFW*4sT3c~Q>cO}HZ~i$M9H?tVrLsS^~7=Icp} zo*`c?+YvR(mhNr!Bs*Wgy)}x}R7x<*?Kw~s@dyN`U+KfLi>IL;yy=%->c(5^)o-_d z^$$9*4fm!4A%AjC*&2c2F@;WX_yzqR0x>akx98fQyAakg7+Ld2YN$2jtkSiLvmvZadU^dtSk0bji>(h$p zE{OtJ#a@(=#QDK+40S0Cs;FgVJPyyr)7&$|WNLe8ohxZd=A+PvdnFodw4xGIZxW!z zt_O*(BssK+*{D+Pvj7>lOihvuVUE#H*k!pt!3Lx-PC;K2ER9tm7AGpG3VB#a>tuWO1q%69%UaN*<>9>g21lW zBqdKfb!jyLammCe*l3|?C z)#GCa3dh;eZq|O#GO>5xQk`A<)G|tg|7!)dYJ>FKa}q|N^!07k+Dj8C!v;2P?b#05 z|0JR?cj!8z7M@3e%bi#D!I|;Zc7)~_4b1uoD8D^ucnz;JL&`!|k>@OJVhIQ?OGjWI``^=W==gJ)I}WMJjKfkHQR-=frXs?SGj=Sc*Lw-4 z&12ZkyC8zGL7j>VjnR8;#oDQ@H%(ihHRmzf?F=}|s`#w9p=*_xYEN06OPK>D$VOXx z@~e^pQhKsWk*Vn%YkCFMYfo@x4J9jsh#>Pz{LSa-kvrG7rZU?W&9K@5_pJalUfS(E z;`jdL-TC16QEZQ0x!3cEZ)rH~ZPzn9&B3#rNtVi;t+ND)>XUk8_>1Sb^l&liz2z{CK2b3FpR033xD~U z$`QevJ4(I}G5DKLAAbJqAKw3ud)GCOUcg&car&V=KUqjvrg0i13neEVX>s5`jKnD` zFY`j{jAhA1Rf{+Pgg|@0h1Ilj&a>(69X`7p-VUQhkD!{a3iB^PjoXLn`k;~IM=_B! z|k(Q*2pV0uxH>#_Dd+< zdgw}JjvRgTS)_R#=k|2dhNi0X8o^hcWp%3MCOd&)HhQsO-%&r!9afYe$?B6VXw8M` zZoq|=I)K>`Ez4~tpAxBR*Fzb$rIpCxXjueRWJ^)+3Ae&+xAw!+<_~tK`~Ki{yPXmZp_q!o}Vj@sxNW zPk2hx(^@~|G!vNnOh^;tz&!afWe_19w|ENmw0g>6GtrrdNx%W_Y^hz!@o3Pfb5%q* zDKG4TfDU@+;McFIp|s-St5H^63dR&qM(LWM6^01iYwNj`*zhPPEioB&mwx+1fA#(Q z=%u@@54?O>A%7N}<8AU{$D@T-)rd##uDvya(mP+w=HB{h)=N;2T+R8^7d8mz?Cy=w zek4pst-AU%UWwz%%pPhxwUG%qG0k+z6@TgHbP8dRb!?55gCvmAH~& zQ3=`lJ_U6tU3D-!eI{XQQ(B#vEZMZTwT7iUXIsY6EkR@6a(k+&ZK)@7jmSnw2P~rH zTAe?qPJmn4kME}Rpi?==F2o1S2y#NLaor`G?0`3&?6#t5J`FDtr^v#;nt>Y)A6m|- zEecc_%29W#dT-gU9=&$2TU^gIpJ~VQQO0ZnEg|Kxp+~0ED=4}ub)8%rA)=P-lq*q{ z8uz$h(k3CPmPk)yH#&>q!Ko=tJx-rhXP&#O>^KgKHUaalJw-jcwRHPTv7Q!LvYK<| zONm;JUS0M)l;$Gvn3WgNmvN$*v_mg7XAtXocHOAm#;ROuQmijkG!{^RRncWR_VRst zCaAwl#a4GO*z({NeEnpf!w{)-S{Go_Q?03%t=`lfazcwf zQx|{%W6TmQz||K(JUJzLWY@1@l;UR`#v{6^Jlo`3po=%@iR-IzP5}H~nZu~q9BWRe zI)3{G9uWF#9yUrVqyWshGe6DeTv^gM8+e`K zhNz>p!&S!^gqeJXwW9_8xHJxvpxD>#NA<7P@BPCc?%mWpc-dYz0>0g>`pmM5R?{8X z7oHG5gTmmRQX^^+Nax}vd!v*cetLFb*@;6%Md{OBQr-NW5{mr+$EreTX;R{1?sMT^ zh7{?+Cyp~Fxvf_{X%=X4#Wa;2Wm&r(d^Ppb4pnvvw$1=Ps143-?IVZ2P)C-AoZn&E9fodi4g!T+_-oZ0u_n|x0!FiBw%HFH=aQ+!thuBv|xyuZPI33wWQsu>O#CYIN)!hX*I3J9HMh_9lnPQXt&YQ?GN<7 zeR=ow=?`%?+WqLIdwHb)^yjYZfBv8U^FRNaIUzR&(hkNTS6jN-IIb0w$_qhwpl_+y zb>*p@3+GO8_%M;R4jU^Wm~9HsMG#px;r701Ze6tnfXG^B##SKw%tjui)V!O__3Hku zR?KZUdHbx{sx5RBy7Bl?Yw!#%z0M4C^13kAIJ+zW`$E8FR8$Z7)LiIEx6-o~BK0c- zr7Q)m)3#lXhBc4$1U*64Wkh?~CjBOUdiwhQ>Ep{_|NR#dhM%6jNcSG}gO~A^Wh>v? z8q>E7Nt@cr@V3fohL;uu<=TsnePb4|mu<<6$h+r>7|{4?Yb20UbwwwAqtZ)WsaHvh zE0uMA44$L{Ly}*Wu&TNXn0+t%+NuT%W!;AoXXFnf<;t=eNKA`t=i! z_fPk(Rv*2BzZ@=QhD-VR*&c}7%2#5u1IdL(X||A)V-+sIYS5U-Qse~qyI$mEH0H!G zQ}#91-f0gCzgUkcOL()D6@i}m*5le*MBYW28ug{dhV-bl+a^vHhxszc=3`h!0rW1l zlaU>%nOK$X$%x+ODZ7eqU)Fm8s#WIj(vzIA4<|iL=QS;HuemUl=sH(nwv66)rK~uG z`W$sg(i3UieYXGUk1;>_`op{V^T+)m-uXxW@UQ>l?q=%I%Xzz*dPzvE&RrnM;+{9- zZ}&l?@Y;|uzS}zccB#47y<~%TxxN9DGPg)(;!6YSnfG5&`#s5 znMk};G=u|R9HbqZs>}D3=l?hM$$&b?b(|%fJeKro2KSCr=&R7-moM+$j;B3%?QSbK z{pH+~GVYeuy-K+fjwuG*mU^6j>#NN4nf9v-P5BuM%q|uT-pOP;faqsiNcFxvagdX&kQQ-h8N! zUcB3f`jQTATLOsgC95So1DmDr`aeQwzMU=uxA{1F##p7Zxo?fK#I!OdOyGq}1Sm#Y ztG9WM;<^<)HzC#XSUSmrjLNIDCQam)TMoa)k5mX=V@gCCHB%hKU6%Lht8A-N&q^jI z3EinPXH7=)%IL(7E;*ax>>LQBTvTGL4G?Yk?5pCl-wn^~Da*|ak*5@T8re1H{OX7L ztDC1suidT0Isf^Wy3%gOb;daT`3yLW?K>3iy$-Lx25Frjy0H`3b?(q3N7%RS6`T_n zB#+FMXs;FJK56e*t8d!Y6#A?v@UB&${b;=%I*oqHSjxXR0GK@udZhL}##kvg zG9jr=puv0Yw0!ZrYH783R8&|FP^TN$UTU?@$vqJ8#UNn~M1B=bi=$`ZDkrVp^CZh@ zCEezj{{HjNpMQS0o__lD^f5kuz4u{#^a8$lms6Rc5>0I>Pd1L+OU|5R2l5k!=XrPO zBIZd3R7z`GQtlke4&ot^{rs1V9i41n*9eonz^G|c#4YFYWS;8N$+0Z0Cvms>O65H5 z985I5@MSG~JDG!yLEC+i`8k6QcniOOq#f3c!_aS@H z=d;U*cUtCZf5m_W%z!*!9AIe6(azz+g(QK1X|VOArjws2TKjqibhP+&Vf02Ibtsd<){TbOT$c*3SM;%s}#KF z8tt6Ihgz4Vo;I_A)mAA?{IL6?;v8qUS6|kDyzl}aKfM3=E06ZkOL*Hq@89PCNRPLw zAkb7&IIZCDuat$RW8!gL9URz``S?|3dW2s zVMOd=skaf*tO#h*BH1gLl|%_3A%?JQ^(2N^!GZTosW}1fx$SBE&DUSq2S0l0e)&kp zcf=yR*ks2mGe}yNdw5u3IPEbK!b(bb+4_zYMoopI0XoOM6m=1e7HltdvWykj@dy4bFyS4e@B8s^1frO%`4n1`4iR~QR*pDQJ(nerIAUS z+A?X1VWy{m5E-(hRk(%y^lo!c{MtPb2dvlwezmQ<#760{kV34a72M{{BmMs|lX&z( z-p(Y(%l2t;38}fG9=4@i0WPnnVD;mxRH5loQK<%C2b!2H-))X@nv5XLa2%*sl~PZ^ zw|uPcnbGKaX2QAZnbk@;1w8z)m5Kalk=H`If;q4pJ(Jdd-&sksY#L}e(S{g#?I}U{ z)^@0;1A}zB%(e3x+wq5GGT%jLM4pwrXf0-_$-wSSjq}d zFr}W0q#Uc)lmWO#_3)%k^1j0Od1YortJbxAyC#8{k<)Er0^eUK2fTb_J1PKZP9jYi z&D4=&Uf1F^ZGInF=w~N}u3^XE2Fx-7ho^0sDk`V@Y|`iD51TX}8Up%mMy5PUj>ay> zR~h~Gq5kIEL%sJJe(=Km@|4ql81>uHb+_n;bTnUqj3pd8_TDF~x1JU`<+h(cKp6`y zG)Rt*ItTHQup}J#eE?%gvt1-MLJu}?di;>sgvC67}PNl3ES$DmdDoAF5^*MSMzS{ z=!aYxX7$l~aW4u){N{=N!+H7~KYpfF^=|$C{fB$^I*(q#*IK3LC)-h6ZaZsT?Cf3= zC>g}W)_1E@YQ6p&kVsp^T&Lyh6fyHDq+`pKeFOu{$$B?JfwQfOX>3aGRMIRslH<@W zmKVq+DZ}By-R_6?VxO?Ktd6oS9~%xMTt}|fTh*N7YGt(KbgVQ@%>Z$*fqIpQ`b;uF?Duj>>2}Va3+R03A~|a?+CAP%Dh*(*+LFmD>sV_xof|CfM>YzG z(tFlaCFR7M89-TZh1qea%X8Y(N13E{(RHFyF}a#(X_a-oh|_Io;#bMVk6yaleQl*mGM;NSkv- zZ(ePvia={+z?0$MZ?V2j27vF9A$7DEX#>Z8E%5{g-If4nzBQPT#O8mvIF-kw9Zhp7iot7?V)8dcK$uD-J zJB<4dKUy?1LZ-aX>9IxKBCjeqzx(80fB){w`uX$S7W$(X@71(Ff6pU2P9Nc~`hnVQ z&LyqN`n6Vt^gFHar!fmy?XKT;7%OL7SyWDLTjC)6@6ZD<6SbLB?!@VP=f>p5n)<9o@x!GT>m?`ZPJmsTSvluw;f|dOgk#2IJ?F~p@WqCu zof296#K^N(L{(Mo5eGZ*ZL;1Ufz$VFj))vo#{9_!P` zkFf}{z5DX@^ZSqY8qAMg#oJuCy>Ll8SsYCS=sDA`HkdUhUV$J1IWHf(?p82!4XK^4 z{N>VQCYST{(X-9KJ-oS_ZiVKB!)Mf9s-Kbv5oqnFbBVapT!8qsO256LYh3-8wH=j? zp?}*AiuPsA%|>%fUAU1Ur>8+l2wp_Ds6wK43=5??eLq?n=3t~B%6#lIp) z|3yJ8AH8_D@8Fk*8V)pY_=WzGsiX7-FhAO)hnQ0l9Ya!9>6{~sI``g`m8zq7>amz# zQ+|ijIyHrLVfbujB_Ynqdz;FUm6{}*Oiyt!rWA5Znf(hQSw4E@UbAMujh1qlp6VkH zkT=UqjU^G))=D`IlM(r7=gr@e#e&gsmHmzt_14E;r^&|O@1fuYj5BG8qVV;R(q5{0+}D z|L~`0u*=CQr%uf~vV#Pas+G>LvS{m27|6Jzhm}OgamCEMVGs<2&B{_wFB!|4Xc~ih z+rf@aP0`!vhSSxW)>K8|vUWnf5}?s;-?_?(j5=U;?vs1oSY}X>$;?E_`DT7 zYt1sxp3M(8(zDfbuJ*8Lt9#J)Zc=yE(h8hxtz?F9{*@yV&|@ya!O@IE_$560*I(X$ zTp#@X=a;W3KhpX1r+a{x2e05Q2Sn_frjXq+VR&koRP<4XH*u{i*D?9Og6Pzq0Mw;) zjWJ0Rl$gq9GdkF#4t=qz)K1y3q!VFhT~y=@s$|Ta&RA<64r9GgA!HR}rRYgIz_k z;i)cqf9cFrXW6E?mz7(sWinwS&#*eNp}7Y?gW2G1I1`*)VR+BA0!K8RE&h6^-PEq6 zb@tYvg$gI5FtwV8>>jtD)4%=s<9@&1zy0=o@ap~IvHmapL0%>hF=>|tHKYp#18a<% zq0&3>n_TxCqV(leM{iZ&@N(~k7@httE(^SSIN_VbsVh6}7QyhrKd8_#%`=Z!p7mdV( zfm1q2P{!qZr8s5hIyv?o6^^!9rc{AhC0LZc|6-rHF8}?dy8QRwBxmubPamE>-@QD4 z^h)0DgXM?zJQb#(hnb*d9c<}jEW!S*T@A$uC&;r*k51itan;buprseBrX(}9C3;QjD^L|lKig-`C#xP{$ugYX&Z{3TH!qE9KKC%KbDyk!CHe^GS>h{o zmL~-ZIb)XAFUzx?-6}H4T~51#n5Mamh@-hCLSM^~0_V2NtN=keGNiqk_}I>|z!t_^ zPx!Ac_TjzR@PpUy)f@RG$+T1LYdQGjS$kuFy7mbCI=Qxv`8tt?%|O12A#6S5(ND^! z%dB~OJ)GEj-?FLU_A(AoM<&<_z9{S{SS2!3KP5GF8CwVZx7(eQ&u*ux(M4+mo@JCh zs+@f`OVu8|8OyD_inwV>`v5%z+dk!8>%Q*VzXq&YmiDQo%yHWVACDuS$fh z$xo}cUH=?=dG%m_^Y!WJ!yn$?d$f;U!P`gseS*lwntR?=yMsKg9b#FDwUF^vhmJl; z1QLjayB%{{f{9$5gjRK!aJG^y-|M8an_pNG^)op@N?)oAF>zpC?%GQyoRnq_%eOZ< zT6zuO-qvP`=erRiz0!Mzuo9}%wvPpWLBNSPVI{FGb;qF<$$fNJ!YvkEt0Y_~s; zldBvV7-eV9TjsI6YcE`2*4)ee63(xKq9472w;>5lKRk1y*UpwG`1O{~*sZyMyy?WG zg&Q-0Ljqns++oW*`5y~VlZA~;(CHnez*sFD{%eX=kmd~}y|Xb2)nk%Z@s`#?NMuWV z#u;`yMI;mIr7@4FHq3`ZRA3s%hf*R5hQ%&*0~@|TW-19o%OD+{8~9Ia5?YuzElY z=3SArFRKhr*Q~7v?sJ2sSN2G|DmI4|KGTtyyG--JzIE6eI^bu#@P7K~ULW$o3wU#z z(|?d3?D>vvZJ1HdjJM55#}XO@AM|+=x`T6d&vuH|d&r)rAI9rxYpu*Zj~=wFlt)W$ z#cjgFrs@EKM%2a!iC{@Td1eVm`$29@0)k&neG60ezKWH~8By7KgV?To zTn-$fiX?4wJ4)ua>@+PLexF~_P?9{7j&v^0`?`%ZiIM2W__K1`m@p9piN&GWD=kl} zJ1iLu?k>B{a(XYL93;SCL6=MLM{XdOb6fNdtq^S!^-kI%M#o{*z ztn&D0^VvGrYL+=aidqsaGiyTEs>SM-CQ`+9q;hHrt~Sc6FRO?wORBEBgxENWpPm1S zrOY8eS9~|hL}_yHDLQ8@`KmzcDs~cGNps7gCtzxS}&`v?p9>vJgJtRUQK2PoUiq) zUFSKQiOGmM0Xa*7W^SX`4Vkg^NHJEs47^sFNSfXW<7`5&1hr1RLLp+t9rtZQBIHW5 zcUjAiO}0AFtD;?*hCx$!aIbN^vopk=S|bvT{4~74c&B4>>{cfb-tNy^*z?b2&S_kVc)xKiHm`Qh%p`h%D9zP1^ ztQqqe2@=MyEg?C`L;eYX@g++){lah8cE{@#1dU1nOnj-`E9 z?{oMG-Lhn8Cm|umQMHt)Lpzc#!|L>5y69w| zwJzXMtCQU?Ni@#ySBk*A4A&LdB0sa37ObGW|D zvuMt#=Vhe}gfJ^*+DeJ9-l=r-*pHVoPO&_4p(3?nZqZ~mikE!J_Ur`qsJe15J?#=x zWR*Eyg(v>9PO^_)ygScxb}NuQ*Xh!2XL1WT(Gm)##X)RZ@dR_>cyk@s*(!l~j_$jY z8!Kh6&Oq-{8N!x4-Yy}zdDkIx3RvBU!X{7CfK)g)9`xH6G2JnM`edJ*vbT2}knWbR zJCD_w$VF4awH^sYn5)BB>%C2@4R8nY^827A6Cf zXhI8r6NYs^#arWiJZiv>M;&0b-9Fa;?{m(h*YD+#{y#j@|MKT;{QvvQKly+8^ARX5 zX0B7+Z4Ym$%78gPo98|R$BPy4Z=-XMh`6ses`Y8mV=TVC`8*@#PHUA9{DJlrbwvpNl7K$t!fgv&I^>Z{hPmdpFE3&K{$l>O@bEWJKaXC# zUyc~<2hkt$H+KWQ7%*lGwlzg+L=QkbG%l*sqHuVXM}%{<149N%q}w2oVh>sA%q_=) zsj1mH)+NB#%j$Ussl3g_C8V(HpI<1-?Qzc3+kw^ zsIg-=P1i8=wgpf+&{BeK;Gai5i_zUa2_>~~KQdrz&!GjC?dgIEmb>c=|NT&P;mBI% zUhSe1@|T<&B8?PP3jDLRb6kKJH@;{4g5sLVxScZo^{3DA_3Qh)0hvdy+?`J?=xToD z8hvieu^<-d`2y($TemuFi@CbcRTwy7l#5Gtm4)gzv&`+8P3wWv7zN2`avR46VEqM8 zhk9roldGl}bDzSsmHI8cDORQmISiLrMj&S!=eEL3p>uX!w;G%fcydi<n?uQhLbV-#OBsh0h4Eqv{#mcie(2?HO%PdtfRQ@>UPE!rRl7xpA5vI+=AAA_c^{i zefXDnxBhsKKJe(pyS>!c4u7k{HR+Lu|XwR5>cf zi9O4=);Nh#CEPPe-$b@iViQ3j91Fz#up=E2m*i7^FMRj1akS~E*<0p#F`^IO&_R!$5aPFfg8E}wP-&0U-FGE@I%lUvKJrMRbduLW z2RPbTOIrD!D*oMh`ux@Z7+;>C{9h0F|2|J2U;ZP2dOtmVd^3{z=vDp2)L4J87e5Dw zU&Yy&Gi3_metf{j)YYM_2g6FxDO^!tIa~# z6F*g{!*K;!ox>#`uA*1Bemj41lK(}4T-80zgUGFs`x4LB*9TDakk0EGQD2{kz*dG+ znqbm_j;K|FAhvaYdIf`HJ}v8%vM5TI)GFD>YlcvO{wj3bZm;;47Z(1lNBZcsyU9?r z@1$DyHFoQJENdPd2x+J-xpXb7gRtHwO5ey1ZEk_<46IP=EDNO=g%lTwRa!~A7-h$t z20Q!_&mAk3MdprlwqBL|-U+*(z;l>r+?AlvGo4T_q1_fjPH{ zNs}gXz20Z1OgU$9C;2b}^~DM6PiF zh-=9}V#W*!-#w2rqK+Xt?jCji{hLqq(X00wKapN;dT0S@i3&x1nNL0k>&&RpWs|4R z%tLd}aTvRJwz_1Elpq#f2eng2sbv0eos2=~(^uKxt`P=FHQpnIAJVL~q&W_fqcP^~ z&o)NyaT=Jm*WF1|6< zqsH3Eq}faM+Skl`&&5r0T+Kp*7v!Xf8p(Y?J8hHI>=36Ey-; zar|I~?Tf73t4o3Fxn5wW`26ON_R(wj=8tx6L|s~&IMIV$q|~8%Mq1sd3wDV#lQ`M; z1n{Oc$KGX94oJIsN&)T7Tf?Rnqo_|D8WjpurJYNsev{8~c&_*}+Ht-7rnj5pbY$~_ z?7oiA7ET)gqHQNau|^R$6PdAU9*d#rRQ4;B*j%EvOVV&)$ir!{>TMmgbufGZISGKx z*0SqZ%PJ-J6a+JR4bfW;+dn=(-1zbZC=d_#-i6PDm+;MJD^Aw0%}Ho;FGn;nvXqmf zWU6E|j6I2)Y0kvZC%IdaMT2?wv9dK+9S4bc^k|6bB_1csf97v(cNk@9l8GG;4 zW@2IpUQKV)i+OpXk5LnN!;qYN%DZq+X?3sO%y4icsJP@D{PnGLkq6DTUQUL2WvBP* zd_6l@{@xO#tl|@LyThST)eMxUQ+WznJbQ9~mv>KAmouUxd0JcYmN5_9_L!^Z*gur^~8kC>oY z7la~EV{GdB5NMQ>895R{ypWOmZDw&+U0Xd*#GG}jkp`2p1;(%*@4`?OStPwnpCwja ztsnO}#aExZgC1N-2OBM2FDblN)L>HX$u4#Dfzh!91;!|=wI%~QMU_Jr zsg}MhbbG|w)(#DAF+08hELiKNvN)1DPUU&Znzwb2zp#_+qgU_FV|}jOrFOE|SR5l7 zvyyDBHwST%2Qxi~k=9L?n@g_gOkA1EvksCBA?)l$r1S5QhF=iYv}doe-2<3f5d~Go zXKYrRKCs?yCZ?|}&VN~Vv5#K7H=k= z`;_a=yrqEamWtz=?!R_Fjsv&Y)vIj52YJ^GzT2cQh}fyIN(eeoKzglX_1fCjCTFw+ zFkTl(wB*}P@oDGw{_eNy>BH0KcOUP+fgingzZg3Gul$`0ztELNp$Hgw`3{*ZW75-g zjyyf>GUwdQ5&~>kI#F_-6tz#xNh;mc`UKUIgwtc1b#q-^k8McV<_R*i*luLHsIaE7 zX5VeJ6(#1Ap7S|B*)~AfwH+x_1f0D#HIq4D4nQA~yBbN97P2IcoSeD#an!rq{ zq`IiPdQd%=mqAazyI^J{&5VC$0Fp*VdMPp@DlSrGqksHh?YLCu@#AXD(}5r$kr}Co z^ka7RHY2&#w`h8~P|E2fco_q3yx^s5=H_c`AEfhIz+WZnX+ty925Xo zCF9(PlW%wyCm06JcL@+*#j7Frpd$mB7oN(_u)ykEg(9)|#NvgL0MK|EH5~26v)17O zIQ%59Znu%^zd7k&?ux@7ylmgM^KZY-*uSOcAjjpb0TAjaK3Bq}JBFQu3hsFuxIk<% zS}fFKkJAO2sWn1(YmEZ2@g|6sMhUfhjX?Lt4ObZ3+6K)%6jXE%Dzp+fa96n1CI*;3 z6YVuvAyuJhsA?M78!o@s+jE^WA=ZPkULBDewYjTiCv#=wn#Dphr!{SgK3h9L7x*~a zmG{pO_aF1ge|b7t_T}wep2&lj@Fk1*>j($m>t*JM z<3vcMIB$?{+t>=Svovl!4o;l~!^>WVc|I-hR4+-K0N>rl>A0W;o#V9IrQ5xtieXB+ z%IUdWLd{bEeW?@bX)hh@e?36>M=#xLjDK#pHOTZ*^D*7Rx8)Imvk=@BWc73bP6xT8 zhD0G1o#Ig9c`C2A#2l9C>z}eT9LDy~D2zm1>Ai$d1x@#g3rd2nLlyBRGaexf$ zWdrCzMJk|pov{#}Gvq)(fNQac^GN{B%*T-48UiE*eR9T7nj!7#`wBt9{^u^uS&F*i zkOgAI2KU2tt|rDx7;5`Vy!5BfA2a{(F@L`6zk2ZEy~Ggj?^%*Pl_z+EY>4{K0ta0cg!Y&1`JX|7T_II zaaG}cZq+atO(6CuIef-()@cw`#zKQAvS9;xnsEW@zk1(XPPs?!bA_*X01J-WzerjQ zfxKj&0c72o(NBk=g4bD`2hr=u-I*r=mA8Jgsek(^fBw@efv=BUx7#7Bd>hylTHIV) zHz;%)B|P$;6x!t0HgfH_0*b2y`Pc}HsQ8Llp?=t{(Xmco1Rw>QkP8kbv3+zoS=(gAGz~+Dd^!)ROxB2wt!?Dl# z^zQxV=ejR1ee^os0#3iH*A}qZvSe?qs5(Ot)b48|jc8|Xqz&67>wqUz4CKm+rHL8> z@(K_aJG zjcsRfRU+#;8wSyc8<+!OvoL5PFMP>N3(Z23LS#e61R@?W3Sp3+`+<}ejE}J!)lLN) ziy+^KTXBS@S1(2M5v4CbG=;}Z+8&^MgPh2h4&-OgnxU8)EY1e6Wf zXTbIj#4f^nL#2p*O=~?5Jc_xI4!nhvX{w*dD>mxa*WWMiPSz)@d!3|5FWt*G@7F2K zNsxfx`frdCNM6<-fP&`CR&;8!%nqdxC5-R89X?wT0x0_of?v!B$C+(PLwBH0K0**Q z#D=)?if9Y)dIOi2sC~8o&>I!E{>Z;Vir%AF@D`BR{-EDpz5tOa!0BI2`2CXgw9yuC zqk`pB8inj*b)b(NgLzrC(^{5npBpr(gZ{Y{G|U(}?Ts+bbYMwbF2fpz?Mx!0S#Qox3%y^Pw@>T;`JMIi*51AO0x`s={P?HmxcBfrdL?hD zF!b$pi~u~|M@~-}NL%#Y1Rjc_212$pyyal{?pqh`bZfU6JO==+6LHp9K4M3YHo|rb zENaO$Fp1@ekeDgu)>N$lh~6Fjvnifn=})vb(7S3Xt2GDpIG!4}(RS z2G{ywYXpJ_w-ymvSL*UX712W{CNQL!vF2F@_4EpNG7kI;fQ};cBt}`aS7A1@;q>P` ziCp`QkIU61Mb@nv?VrB9d;TU_divAzr~3fn2e07E2bI1Fzx#xq5iOk_t*?dXgJd*q z2;+7wKPd7SB9_#_V9bblDd>1uOG?!>o8;+&3~@T(NlhSR5j|#SjtRgP=GA*nZb2PI zW3HL!wq~VRp*@@THoF088aDg7(hJ(EY4slJ2W_LmhwqlMIqndT@vlp@yQZERLU3P@qGu9Q+*@Ozt1*JJ;NvuAq!+v(j zd&*Uv!m`1a+`0&ebE^#84P?)UPzE0Z$4rA1(zZf=5=O3C38@HF#}x>-w@y;S+Nv7g zhdKZCcb`9f12%nYDS}4a+daeNgBS4SDCaA(c3T`T?Tm(LULCd#A`hyhYY^fA4+HUi3k7^#=_j~88Z(v|C0c8IAo zV26OUAfTEh{oq=>7or`=V0*YS$<_?pho?J?9W4*Eh7fnUq$llFf<;Tj4Y>m|F*_lPDUP?t z*I-gQprUDy1polVnsNjUJaoac3bB7i=?2eGA~ORKisu4ONjkULY86dcwcFWzn`x$} z8OuU)l(dXvnq3o=%aD>v5T@5Q^!@~~O3@CH8}M6m=ZV!q=QJGHD}yl=$>YNu9)OEC zUcKvN(REO1wAy`(+7dq$^MCTh@;%YZgBS3%AlOUs(I##!2$0x_cdymaoEsrvyMf}@ z&cu)y(sfcsu%)2_goeG1T@y{6LQk4_)umxbf{B1v&Ws^8g`y@}>;M*?Wf$`kq=H4%8Ic#@G{9=Q z8Td7@%W~mDwc(VmSt2YV^_3s~b5s?y1V9MdXM-ZAf^sy<=@2CpzLB4=U{u1z2yn)KZ=> zB;VR`Y_t0uV400dwQa)DeP2GLsRwls`AVi0DzOjC(1wBRSRgYkIM;S_CXCzH7>TEs z8q&8LVuH^c(N2N{OWu$5jc*Foh`usjDAX+8e|-1!XM6j{dwQk^uidZrbpJ5B=HO%D zaG=bIT*@r`1K4W&HdG;I=xMy5)rgA0{ z+GLE?3OR1H6DLUHRio`Fzui-J&%%|+Y2aOpnscLQ zelKI)Kol7y0ob~otjn0?f_kv=43YqZs#_>Au%deCaRO z`E2E#w`G?i*L@m+ofyLHK!n=7O~kBj8jHR{f0y@xC!qO}D}X)a%D7qcc98SG+Q)n1 zv_~)6Edb_6oFvjc`Vs`98r=N4WI};cNFEBD^DUO=Y6zt_shth*bjYj9pDrga>Z=Txi`pX>B8-V@0|NG zMTso1?MIkEenjiw3Pe7%aP6o*Az0fz=Kv(SnAS$xW^Oke_W8pqY55)dO>Yl8*?qU!9iqmM?N z196?~g@}Q(5aOp(n^%uohZSynKmqm-*}s4p~B(btT**%DvSi=PbX6Qfkg&2WE7X>C$F4NqDA~AHC-m!{jy6Q-ig0%l2e6gv z)PS-TZ7k=-=)Q5^#%UyFW2|{P=TdD2Dwx%oN3_6vM*S!*3~J8QSWQkeV3W)8Y<5Jk zCgN?^h%WuMxxbo>j%WfvP9*v|;(J3u$tsA>UaMfUud#sVK^CmVDsHn{1g;v0Apx;@ zws{>vAQbEZYRv~DSeJ0=0L_k%&5N!+#$ME{72iIg|NN&7Ak&BExA_znKjqW?UjL(4 z@g;++e`_fn9xwy){u;mo)WjMX9D$s1jq5j3`UoOi26bIrj_$2r4{ZE{;^y8#Z75UB z8rQ|U9(3hKH+Z4iNpLTKbzWc>9w3(cy6rqj+k(!0_c|A{L+AjhmI>Osb)&JG6+qGu zZ;9ZXjjq{jDxWjYlq=deH`8!NM%?gbSM)_|ge)oOybGk1s1n7`fgcZV=(=?$|1ZDX zyYN1G&3-jnr5_I}f@Zl4gp)ZN>>tH=l})G3Lp595l#3AUfeuaTSr#mW50V)80Cqr$ zzd{sDRl%wN%(W#kT{JsNHYSI`5g*B}MAwcHsRzkT`tr!B{I=QnZUsCk} zBBy|T2qA>jEUR$Mz4=N+?TFQ0b2sg?w~*8Zb6GT5deDj)FbFdgB@+z32DK3!Y;AHX zLPbZf`NInL+x+?c=jZqDzT1+2&Y#~u|F^r&sRu9MZ9iXs^z%oaiR0J@SGRqtvWtT^%Xy;HW3iZ+679#;9pEuGGegxTe^$uU5dhyk?TQdq*lt z_Mk)-ZR=)pdP&c`6$t;8Ig%f}davW5{jm0xSK6lPLi{cD@-wMv%heEiM@UPX0-YX0 zUI4>iLo=yih!U6F0J;E;Jh3yz9+0dfKb-5}vEe}-vlU+nVk~_8F#KuWI?a7|MGpCn zjh~x`$gDhR9==+hvG+)z!y0-k(JWzKfx?^5NNGr)yMRnK78mFN+jRm5Pd!9iOE8@ZHc>6l0Z}LMz z02Eqp2dd4LnMjhoA}zY*cF)m_dtW)%F*!#_THhtgQQ#fVVgyDhB*U7sNrc zRqAnO$K}DWMc&si+=x{+I1F(*IF&>1|JrPLTXXhzr)L|dQD6L~$T7aE1U;(H0LUd?B5orbJT`MS+ z8ir#U3?s7IW&VX1c_xAt3#hmqLQ*FXXC*e!LPic>tZF)!tjKBs=UsP!B~drkoYPO6 z3Vby5L2|_p%54ezAN_hv^WQ$$yHC$|)0rQ=fG_n--@;yFFe3NRgB=(e7#@505$&2k z*J&lu8ZjpDZ9s9ps@oEa0r|2mB#U+QRk}N48rUaU4OX#1Z8~zqplk+$XLVTKX7fA> z3Hu8pWZxhxUl_+3zFo(Lz!ERF)hAo*CgbR7+RmUpg^_rSC>ls37JA3$a6^-}7Jdv2 z-hAM)8E{>lo} zdD*V+-KQSBj;~?heZ(;2mz(Pqvbhj(Hvrhg0ngSpxYV+Qs7HbZpyML7>l}@{g&7@# zF&NNm>9VX{HQSWt$etJtCOuvsi&@)&kW4Y&Yt31+L%(T7OmV6D z?!}i~CV2n7!28plnVtiDn3#R%UL4fq50$MDxg|>`{}EeiOrTD&k>o z4^`=XS9T(v8%QZ`;RJjA9=LAwA-nMwD)ZCm;?G*(`fy45e6@LHX)IyI#aJOd$m$Lm zQxm-$r^}O;!qFxKYJRmYwHZvzbF-iSh%mRm01|%m>b-VV3SbXrKxjQP+8nSPCOV#D z3+B-i1-HWG!UOY@)5l6j9GBJtSDQw{Xgkx5tSdndvJ2c~g>y_3tpX%ILhs5F5cx_6 zC<}o@xA);>BRWQyhh!Ek4Y3w26F~)_qp=V6(}#EQ*0m0Kmj&Ob?K85sod?DyC9i6!N`>)>2=zM zvAWLo!6y{w6Li*RT{`qOhy{f8AOl)tY|rZ1x~yTl4>=uY$I)s>w}xDV5+_An=!B>c z>OEy0kpAXk5T|B%=W2U#p)4P_TRRC{cLem!y!0w*gaH;L-~~1;Sy~5n65;XO3EAmr z8j*pChK_)nl(VEQg3%@mSZP4DP3v+5yYZHqfS#?5{s#)qdA0M#-MjDKe9pVN!$+^( zoska0ex@eEX4kMKqjiqhg6S1ioBn&p8D1fXSAuXW9 zaUlAj29G}N>cuyxd#tkg#sqvEqw_*?xQc3Bj&f%9&VaV&Myduz0Rn6QvH;bs7NK&F zZ4T)W*@9jM{Lvmj4O3c|jpS5_*8~C-($&TZH0RM4-cE6laKZhcPHp}pckaLb{lAB$ ze$P?=@b=4_=XXd@|D5kWKl$7D_Zq~HUe8}m+W*}k86Z_pA6F*F4ykoryyC(}BDlg~ z3P8qlTYa6C850*tvM4lGcF(xvJLumH>3B7TBw^Ylt@%_$p&J_ZeFt*@hk%1VI(k7aJn%=IYW>%Qnzr z_$b1>gHSdq4MC0>GVC0E#ei-7|Hn3;_i^{&eeim|vdzMXgg!9QujyUe0=yb&d9~zV zpfXg>s+^}yZ#wxWs$92WpN zNPTYw#I4X%2kr#~L&7*`Zy+ zz8XS9H5c5L#L$d4gp{C+>WJ7}ZN}>3yuQuwZ~b$WoXGM61p zJC=4RGd(MVUkq%ikyZ(uYDoXA4TjI&xa*>6*dP`n(ScBItET5vLEm zi>m}j4DJFAdgA_2x2-78X}$o_IqDs+?Yhw4Z6natR&(&4lJIInPYN+}0@wPSdHR;M zLC&mW17_NU9Yh&VKsE0RcVuImGG)fWjWbf?l zFQ1?9zOo;^rmt-EK%j0|?!65yG9Tpy*)=xmOdvjIBNFx(a>m%h2yyfywMSE*L+Hq~q~jCR zW?~7?sffu!oP#k8FRg1VR&8x>j7-5HK^Jx#VpISP=0gOk2(WmdNbMrRTxJ;gRiB)- z|H4-PZ@=E^H=pg^1O4dbd}Wur$|bC7a38En_=r!7wTw#bv_ibH>q2nRxbj>8Hi|wC zc-@G}6s2f$A5wDsq_pT5l$>;dvY8%lR<`|7>C_3CIja4yt50)Gpdy|FHR8xnWNE>Ow%tkR{!l1-pL zz<+7Xqhn?Dp(E^;H`CD1fD|9m+YY9o?KON-5TF!?&vM&w6BtjhMTTRq3EFP0fUf<#0fBq>E0R7fJeR{qpz^@7lpfOZ6yn15ff4!*@N@bxe4e)~=#7vO;V`w-6M(p|v7wm5vd?kF} zJC7f{kgx3TMk1B(INWyg*fZb&2#mkba&s9CT2qM_@4?S8@eic~Nm|oW4d$0zYN2szZ^GvmC_-Iw6Le#&vIr z0Z})S!=zaH9JAJ*2>n<{=}c3KGou8#EEB2O05V4KffoQo5`)=Qe4SZ`b#$_8=Jsl# z{B?gnrG1Q_p6u5?|qK&mE05pVOy8?BUB- z-^hUnrxA7@z5r7}w?o5!h>!0P_Wi;BeAhMf;KjS;l(#?3ubYZgDOqb0%oW^cqdEfw z=GDQYmDCQ%n0YDU#utnkc(Pb?omv|v*r^Tl4XW14db{*{*Jl+uEZ~*`@-SDqZFCYx zCP7%Fe%s8{pae|@P_&Zk90Hb+<_ueNX|?U38M?`-r2`WQXLHzYs*i>UEdax2O9K#> zkZ`}wKKp1MXy^_=G@@NGoza0~dlCdKwIgm*T>jzH^P6{u+0tFm+oKonH6w0$)*2r>QlAqqG(7r)T=5F}w+P!NDj_7qN;fN{N?$c zj`_i>cT2SRu46W+RzOgquq$Ck+J=oA29GW1vGgdjZOi5k5MYtjw$Fr=zGz4|%D6cI znd`l63x*zz+!?t!b8{jO)*;hIe5f-;8y#BgTrZ+zPZ2^?@o)l47Z?W(%-wPaC2|)I z?@>OR%K?)Kt|G;BaKNVtS4xj)1eNHR-dd{XwiZzF3+0Tt;!qtG#vIvYnGj*7F_6Xk zV_Nv(k8l3v`=3&eFJIl&_u3W@Ub-6vWc$PTwx_uaSd`rgP6e6;!Xdy# zc68fBwV#zXLA|l0z7QVQBf4o$VzC`m*Rm!%Bu>jB86aF9SvhYs6i*jOMzA#!fgx*FS99}*qf4M z^y7Q3Q*DlA1A-X%G!AGJhcUhZI7({@(!Ra(^jjFh?-0E7!9Lx4Odq{+-?#Mt{uT|< z{?Pu*fB*0Q<^P>{6JLL~eu#52L9;v?-p_$tipz*doA#bt^eQJ;CkmO!$5z}!kUO6S zm2DRt8F0NL4F{SE!l1IRA67Fv8|v#=I!Lud9!dZP-8< z-k}LZG8F!Eyvw(t;a6hYi1!3ThYTrI(6S#9a$91SrMoVdmy@&d#DGl z?ZD2)**wwYLP9G7bjF%&>6SPb5m9Wu6=+`ipC`?u)S*o%r15xS6|E3LW#0EZC{kc7*n>geGDpTIZmE&VU?D(YiWzYYUm;D* zG2E>gg~vlMGR{Pz+8Sz&Zp}jf0FThqr_aBiFJ)f@(z;6?k{hk04TH zA6UZskh%9k8p*!+a}8G0jT8z&j8%8L?7`D(P>jk6As|vJPWPpqTEl8pYv1LhkW|<`Q!7uH%}k)P5#@x z{_&$%@glR=^1H;)~003|ViJ1H(>>t*n3_zMyRWwM8*Kdi`#rn7)Tac*9C$inozK zgj1geO@ChghuB`bxtj(EIm~7d@f8A$cSj_zV?w4g3!vf!o=Wa8h;W;%igKq;j`nZt zHCpe}6bKj2#=39i%zY>50dp5H>~jv1ejJ7j(5Txm-iY^MWuLT5_5yBJ=g^pYv++^} zShF7r>#4PteWg`zGJu0w&Ww%5o~Vz_r$NNg*IeY$Z{^Itt><^=>C3$b_0bFWnu{dh zF+&+OGr1EKNeQJ}V1>6Bnj=sq@~d%%3Ht5)h{M`R%Wcyxu1qA%Hd577T^_30n;)BCr7%BTAH z{^z^$n#Zo*?PL1Gz-RC~bO;WtA${2qNZh7Lb@5~~BKPA5Kn4RedYocN@sKle3E4`$EfbC3aMHlTxmz;lVyXe~6O2y8~=5DZ|FM{RRxmh}*hRKV0$&$HJ8 zl{l%Vc-OKZ-7hxu&*>j5?z#6Ky>P#d_WpV~3hrkepL>IuTO<&r6o$J2uc6gGcLgPCjbuv({1rLwf4gE(r2lI+_Y6#;cQW#WGu$ zV;U7Zw#l4)xI@9`NL|kqbQ&DUtR~SAd;>YTLo0(s*AQz3zbunhYm>O)lLtYDRw~dv zg0w%64>gk(YD0;1VP3{_liteNDo9(aI*CUxSB%NE6zYWj|M9OAzUz`(1h7& z{SQ5}b~B{!upWVQB=^o9fcXQo)}vL6)eqRGP^9%2AwBi}?c4W%e)^c_`D4aiKm4Ot z@U_eU8(=tkZ6s&2$b)S|5dHWiJQ;;pTH)d^?c){Wr$( zr>ECac^&fiek0F+XjYZf&3!I?? z?Ezmn^hHw65a&Lob%eHZg0>8=%*KnxJ0Z<&a_L{W$lFxf{> z%xS8M7CgBdwF301yYt#6cs3Lm$D_s*Z#ubs4gdbV|4YW_C+OAQ+|3Sn@bbMjKj(0t zBA5^OOunM2!Efm~CKOn;JJJMwSZ^8=(X0c8gkUm^JGWU?mGyvMGL-v-+c2+uUX_0O zZfCVx?%4))1FCC6L5mB5+;)@z2AHGs^3}wLjWH=f;%*BR#wEi6l{!g!>NKRr>S}=i z#8L-}rTVxkiczE0H8DZFP4=a$`>^!fb9oA;)I3RcltBZ7%sSJXZT-*R!rOoP{PWwV z&+q@3@1FnLT}knym+{ti`yG`F0Lva5d`qq}(~uE;qlnG}bzOC0TD;K$BRJ2qD669; z9Pltt_|$gej@iHCtAEfYIlg#dbOA>E3FYF$u*3`q7S8sA_yCoaTWyrQw=#6G0 zST=Lz3Yr<1xH0-e9m;QuO|2uqXE@AYtmbE9?(>#Jm3S3xCJ={XZYReER9>!A4DuUyc>nSp)ibGbXl zDMx&EymV3!bV71uF*>5$RYEtJYFmTOt%|%Ohy9T3-Zr?$*OM!24^aFVvt{(fn{UpgU9Ih%x)U@30GvTq7NAU#F$OPEI}^&D(=ord z80h7JB*FNTR^P2FkEnB~M_AyhSYT0aKoGZLPL;=Jo3~1sY_KDPIu5RF0Eous=%bQW zj6gtk=|x(Cg(Cdo0+g(V*x78I3$Q=#Fukmf7-DIaj#W8OOv%8weio3l#DQ-|FF<_u zXx4rt;r%)S{KLohAD+Jc${nfrgIDm5d;Vy1l>!XlY?5m-A~SotSV&6)@*;#nax2|} zM%)60tsy3}iSt5RzM$q{9xxhGV{}k>oOQMHq_}rF_{uRB5CgY9lmG~R5ti1@T6=^$ zdjt}%q}m9Q@ZPM@^xq>goDe4pWGM_>GmuXt<}Ef%j%$wLBMxlU0n1*?%drPvJJPa~ zhad`M6c3noefm^zMfPoX_;>#N?mWM{t804n%H2Mu^8I!!y^R^oy<{1#+-)733zLXI zoZ~{!0au?cK025#u@6YL)@3;2-Jso^5Ou~3oESVZ;i$RlIXS&^DnhNV(PkGUcU*#^ zwb!_fb3Y7ZzyvV3T{Ic)xxVJ?##m?WmW5%*CX&9lH^oAsTuy3+CyUv zs(ExHkhLvuF?om;npW-(@5AOHNh{H$JexN-R@D}4zy?kvesp9D?#|78Y$)5i26AhL z*j8w<*J`vVRH#m05OhShe*2^bPda0Ro;0CDYoIUUBH79kc+swEFuV)}#{@yy!{-`@ z!>^a`=B)$1(+QV)7-%WzkR^)pH|-fjSWaWoG1o_J7}=roX%P_02E$N9d1T zx$isrTkPom!@phI+2%QM8IlF{V*y|&8^$GR0xP`+Oy;}=;jIpxtBJ^jQcjZluJ9H< zk2fGW{Ak$$t<*O+wUFFM+SXKQO0{wvi|nVl`?eQKwL(@BTHcM2uYo=L3MkpT1842C z^C-yAoG|0EYzC5>gByz*XTvpV4X|mvR_z`WGxO0&QjI|9!pOu<#+p$LZvzVHh*X;G z_A&jZ4*oQn^VoH>ka+9FaqORaar7d!YOJolQa>$;yLH(GfTa@v7-<`+#T zAZ3947lBC*w?1D3{&4vIL06QEmze0?AwZ!(BOQQ<6=pfHN}|VJg}>IxL9IHt!C|;G zdhIzdB0xn*17QR!g%_1xO5EEFyw7&8hI#a&{aR5vv6b9}zoxZ0 zJDBzxdZMdF>TZrxfKYrj*zTK8QegXm%h@n$Cqp7B2E==Zzz+b9O!(9%1LDn5&Xj{R zdp~hI$~kCjPcp}sHHmy}0+XOotr!F_jp1OzIffjsxf!Mirk)@G+V z)t!vQ)@nM?<*VhzzOovwD@xArYBiYYUU01K)2IB1sFznWwjRBJuXPcZn}O@07zSC? zo@8a?z7^1Jhyd<3IM{=7JBQ$i)4qLVknF!x7 zh_bYeX|zRJ$cq^r%Pe@NIy$G;p(_jR6Dg20CoP303s|tRsuTT$Hh2)sbjFC9>@eD8gD$4q3uDz!8Gn3rQy;x}FB|@JZE7*V zW08&!6qy7ux&%n2O~+A@iKk$0_?6l^;OBv?1(?(LYMcO6)@GsYK^M6N7kZo>xBzxv zr(+f@kp*_&Tmjg>c9mdaf{EXWk;_pu8ho}74d#CB6 zSMDV=_3MrrnsWeXUyN(TZJ9vEKs&srowUq>aiV!9PV3r?A)s7(M!3QgJ)bisj6ObA z=qh#e>P`bf-&e04HX_HQ6V?zqNwknYH0@rZ z^7B)Dc^6M#tDBdTxd$)bOKR#j#rH5m%rs(6jrL}~STwyjHt4k1B7thZqMx4?_P zIN%@I;*%0&K^km2_gJ*hE!ax?9P2z>&p6~jB}jq&E~*=pJ=Pm_Lbb zI7b_`*{8T8#4B&v#=m*{{>xnf|D%`fc01{tp;Z?-%nZ#CL427)P|&SFa?lwyl-0m> zS0r8`SGO@8#KJh!b$6Vl2(P->w0+y0U8Zm;@$9@RV6R;cw^5C~@f`JZz+-ui7cS); zv`KAJ^+i089OqaK+z}ijW|;_*YZ%j+Au(etA7f-GW>`82ay4gUB!hAt1V<8=Dq~^> zUgxR^OFZqH*u4OL0>5{anG?m(3;ih#_i}vD#r_}%;>yvfp>B~3k#bP+u z5FN&CX0*nwvW}xwgv7|!Pqu;q#!lN{Y3-f}fCkI1-^w9gwI)A$*zznH0?{f<~gmj58)S5eM~?{mze@V3*!G$nj+OVXys(u(#|+$C?t>RT(E~_Lo8k( z75f18P!pBTKpYF9Z*L69@zQ>v@3sj!5ohm)Fakw*A~JmDxZTd*!C>>&&b?#w(JS|I zV*2f^JHUc=aL~~c?U2x%4avBSVf(aHg8Y2eV)RC-8LZT325iPK(#R?hrfN}VB9~zM z@YN71Rtw2DiX5DQ5$?npP@Nred5lk9C|fAoDBA;cPb=_v`~Y)FmsRa-v(;=Mas$QL z41@9x{f5~RS;#alqN$_l5Mys4JBCOPn+~b)+2noh*m_vHPNVQEjoA_6x^CaP{}Gqn zu(xmX<5NA~Rd+vn0bgEszY2nps@RJf5H`Tq*9kp#YE=q#+S!^k)C5UuEGP~TK4qB1 z>!bj%8)?{);|zmoFX!rt9Q8P>*+f+du}2zsLhfg0g9LWvSf+W~yq7MB=@V1$0n#J; zg2DHQ)S=e||onf4bLpc<}1oUX{kTwnIQMJfiKk zmY&h(h4lqWj^KrW>1tu(Y%!@rv6+y{!HJ|~A}j{F=%}3|N9{8``UEH;5O>kV=3!kl zoAxd{xCC8->

Vsu%UC=iIiTksN0cT%G-tN27_^WavI%k!FFHf36gh+!hV8&p5gk zFamwZV2q#*T846b{)YM%8bwTDtnF;4b8C>fcumGjVve|dVE^WqzVAs3AH8ZX-BMp) zznAk`M!^DUh>=6ki`jB?-`2oWKk=kEA4G-eDO16pzH&qGl>%yP6y$oj7x{MNZtP>( z#^Da#m^XFs`&>9FaK%|`3chl2Tg|LKbjcP4`){?~;M7&{X|RLVcji2}`Penznj6RN zXNT$K#BCG*f0pC@=+*o6 zY-ap>k&1!P0Lu%asJs}w=d6L+7c@HLj5O`IX_Hw8zB{f03?zL5-kM_IeKX}S4grkg z2|^kx7)?)rE_hHFLNv;4>!Es20(hbQ&G3|TvLjvU}@DFh?~o%6(MMDQ*VQX?s2T#Z z;Q%LJiPWc!4h!@;95K>s8n5WV6mD4&cr?}ml9NT&?M)b@PHQHJX}+Wm=|fKlUUaL* zQ56K(LsY$6WyqLHzC{@+p&LIVXW_IR4O42{qg0WWL3)M%7L3Rw0A@@?kaZLqe0nu#OCB9OM(?YUp%z68yhGyB0EW43Y5%tSQWf`JfYzJerg~BgTa|zuDL^ zN*>9oA}yc?pzs>yjY{3nA#2Ug4_t7YGw^gSXei^Xe`oIm}w>&Tv6(< z$^f0&9r6N%&)k-(W+MT*wu|JsEb~&m{(scH-|ijBajgmXNR~&IG@kJr_;LU?A~PZ* zBhJGN5Sba#O^Z#^BwLc_;ynAoD*ox=-uq`?Zs^9aA%h~bc2#9XuJwH^4-2on|(QVJIhNZGK#8t;ESH9rpqZ}XIUt>XwC&0 zJ)pagx00oIY}wAd+y_3!Lg^5M3~S(RuCblDok6_4w^nHRfMY)aLT#vo9T|Jm?RAZE zaaw7ZvJI0{G6HDAWx7vJ5o{B?UkdWjXeW6r3L6;MOwk%`20|Q;m71CX#QRgHZYfS)qCWS&W1t6DUHX1>1ibZ`mGwr-nR#Fa4w+uC-6Nj>4@7W2%iQwA6LuUk}9DB#hSN2bz;qC9< z=BpDQ9^pTpy_C0?_-kArFkN?x$%Szw#M4uWTqYRODLSWsX+bA)bhJ!`XskdtB6%t8 zj?g@}0EPO*%DoKj%_B3VEh04p6a?dy$x~0Q<$I$hw&D)ZgMOMG@QVV4w@9Z>6Sb5P z&?s0esICkj4m?LA5D=Tw$%Ul<@H~`b{&7c+OP6&pYrX;*YDnbe6`}^>;39uetJmRdiJt@_a>GfI)5El zv^@`|&XC%N7ZcQwmY-`72~?^Ba*)Z`cWz+kbQC-@qS#e{?s`cU@w>|b{KJkzn9ZCS zv>}8E9LgxFO<^_hf4Esggh*}&7NyRCq&ncNF4uSHKu2}0Y|6nkYh@qDN86)8qTvWV zaU`IgJqNM~Is)EVWt<%to}r_qpST1qGza?VEXvgIy8@^=8+wuJHUabhzq22F3q5)5 zUb=@jM$2y0tEUUj7|{22AwZ^qH8@=X>+7kt`@zw5;QO)R_}Cn}U8st64++ZSQtP@_`E+r;s*KCphcYMokiwq{$gLT`_R-Es>6a%yY=%d2>zw70k*n zv&C00@138$h=w&dhBMsaywZH}T zH5dmczL4F9asu6Gu_~fO#=N^8h3fLg7CBT{rpnC{QZ?py*IH*KckUH?F1*o{Y zEePa03KH2zaRV-N19)KJYjlC8I@_G1rVOM3Z6-8|AeJ~URCmRTeVGsQd-S(Nr_57c zg7{Y7O`<7akTKVRGL`3*wuJaidnP>4lznwys%HY$44Q^-PxMv+9|QH<1Uf5xE>Acc zQPBdN1B5&@A=)_Di`-n&|NHYjTJiA{3}x@*!=qR1v)AyR0RCm_IBO8fp$bh$i!Eo_ zWsREW>{V8=1~)*!=A>;`$D7Vp08)3JsIxXhaYCRP40W(ydv6tc48_!Ko&k`K55hw) zi8;JG(kjGv$L`$(Kr7ZnmADMFU?>Vu#aIynP(U{;@owE zxPqp!5q!Heg`>qdWHyQ7z!cu817ffQ$y{X^vNuS6bKrE@eQapcC#dSksg$mQIBvDE z6$fj@1-l_%qou?|WnEP;z5UX0-eW9ioH~a86UENiWn)1OsE3%3XW^0rDK}sYxxm*r zvvmg5Xvk=%d0UO9je@Es6Dr|-(qwp0?mReaqPrhC;(Pi=4cIvo%jkAyj_oQLt*?F$^w3Sm;MQK zyjLgRf5`oK$oTB_yYE7Ne)WYB&1f>wL)k$aP;+8ReBRSYNI@q`OX#^AN;MGx*IoUgs z{GAR1_yHh)5O%yB)5Yp=M{ZdoPN9Z-+r=37xc*s_nir{eT(~}0SkT#@?N_b#XB6Ktc__{=3EoZ z^y53gMcLp!!c?%PtM+ZOg@IS^2kJ?g9jdn39cRsgdG0(NK*Fk;0M)cHg%O`k9};G_ z-PQtdzfD^on~4g zMXG@kcVOR(!v93#K55vbg70?*K)lqOh^uAi-g*wU6p@u{JYugc+yjmXsmTcM#=s)C}jWVZAFLXlZ+&SCU zLPpfR8uh>jd9<_f@5zXTZwzk%i<@`Zzz+#EzP(kAnQQ=J1{-2O0@h7}w2XL!lTo$J zeV&11k}X|q5PI1|faht(V%w)4xnQpN>jf(vdiK`6(Z{c%Qv~_t*8y*4O4NwA*zVUq*^Ob)aQ?PKSmZM~H1DjbRNgtj*vJ9t~OE zPrz@{66eP;%BeYa2)JDqr#K9$yb6Ys*r#}P)kY|Gc3A{8;Vpv+oEFp3+dLDTh0Lmk z(`%$QkqJrUbQ9B?b{142h@FlE<|xj*cAVakNZ2@RN0MKU;2STlnNx;XAdA@BT!mi% zShdoI+G;XxuInGaUDxw?r}XUQ`~I@_Z(lT)4e~os$XavX_)U00{q|FSc-&)t_7cAIaf7+cA_apa_EESzv>)ut zhSh3<#y28UVbMfJr z4P_{}`TD>|AH-3_V=KIYa0yL7*)eCDNYC9N`+t2Be_p)@1O6wk-;4e9MBD(>MZ#CZ z08eg1Qi8*;=E&$~HiW0}rw#(pk7~p7U`eXsmWxQ#9XbQY!w??fuDcHfT%Q|AS6E76 z6HIRziUdSUTirso(qk!LDbsndVMh|EY`{XjpxN_sH$N+aF#s6--k_?{Z$~u6?^1{_XxL-aJZ6JbT$*YNmIYEuv8| z7v5pmM;{u<|5S@QCpsQ4J_aa)c0D-+bX-<=6*rnrr%}Od$R?+qafYJ23GWUy95uQH zw=F}%I_b=4xonLVaYuPs$pKk*PHQSaORlkG)V`x+iD0O@ZktR*>+kyCOUG`+{b*MS$o;@AU_#(Q!od1$naqz%lpc?O~-eAhQDln=B++%72>U);7($U$r!!2w!45#%H zePXNlOy$3gL^SsaZ4C=W(CV8(5f&TlKtG;1c1l7^b&IpI~{=BD%&xW6o8wcUZ{ zi4pJ-FX!C?Pu+$w{$V>!Yzr**C-#z9hkNHb2lqetX*fTi1|WrbNNBHaHC1k_SHJ)H z_5Seg=lHZAl_Q_Mb}xBwkp5Tz4iA(p7te{81Z3?DR=R@Np&$bOQqZWQus=c?Gvw>jRR-Jm+Zvu zuxuw}I3#+NwUH2N&7|PvgTW16-n}-PH=RBP=#YI>o@J*4et2{@_--|2;&lbG=Y;D@ zPaZsyZ?EY;e$1c$^6*6U+3R*otmH3ea8$Ofd~;yP0u19?u0HU2H&Hq`Lr*de62?GJ zO?Ie+?^AxYr4Q1vo5$*>P{n5Hm6Jho0Gb{GMxaI22D)*`tanV$WuHrmdk14e(epT= ziLK5kLYij801H^~+9&xl7m%u@C z9rPuz0hwK`D(6MKzwC>E;4JF^cR+~0ePQXPA8qAfJ+R^1=#t?68LIv4kqwi~GjOQ+ zxy+fBM3F{udrAX9PiWQx=?@2p!~2o7)ZiX~n-x+q>KJvCDX#`pAz*^!h;>q}ZeVI1 zpNG)UBD}y3fzlO52o`g_Qr<(LXDU$2X7Xzy1Ea+rNB_Uq1ZuH3spU{qEtR z>a!Q{yOCl4LB15z6^aI#;V!ehKq7b7T_pj%mvTA!4aDfvxKW)GTtlX@>;wDX|zy zFJISx{rTPbBt%c+G>gX4u=Yk+hFTlFeL9X;9`>aSe$d6gYUy+xddbPRWM@*VB8j=ykolz z0*Je97U(G;x!B=Cjqj)kw zHMu*?IWU%wk!AQ*&Vl#SM1Y%d^R=^aXd@xi+weJR;I)O*JBMu3^z7_7EyqwP+i7wL zQyLh_1{i9qXWv-3<0_S-&%FSl9e~z;i$*-SzQ28`YxnFGeBr`E($<8B1L^igse?NA9bpW{V8@Mg<{Bio`{m#LoF9IU*XPkO z?2{Mn`^~a{3#$3-WhlEK#f)lUE--bZCm%dbI`Qbo7Y{J8I$kG9*0JitwORxEK0&*> z{0|C;CO7Z+eN9LYkxW60q93P{>mQJW=6SLDzLhcbA~-e(ig)IO(_1WvTO z79)Gba3>+_fmmPd<88TV_E~=5|K_bo=0U1FeIgmcG5nHR-zWQ_3EXIMuTZ+$y`*hy z-vWk&$8~ZIjD#kmb$ZU)wg-|Y;Z=d1kN`?xAskD`Z9UcmdQ|NK(fn1s+AGtp{?p~c;x1(D;#b0MA4 z5Wb#xQZy}iReRe!r9t+w&qBr=z(%#^0heq-f7o_ECZ{I>OVdFWg949w=??I$dxKu& z_T`FzQd?UH-zE=oNvlZChp%*zuj39`c2!S<Z8T+VvD&%u?7KaG{imPeQm2dy@x*p|Up1pdv_vzOM zaI_6#l(yO1fC{4XM&K1A68u9?YBHY{c*`+?q6^Pk?GT{c(jCSS8)$(K?g8dCIoe&j z5ZIo8&C}`z(TfUzf5G6yt-UZ8`#U%EK70A@Pw74%y6Vc^gqw{I1L9$gGhXaSv<;UuP+3vJ^6VpUc!oc^KXLnS6 z1z|D-O7OOAvmlA}Xac0Mo@?uZWxRd-e(q|#emG@%^2&V=T5I}4`wDPkpym#0SJh|o zK~}F#cbzyB!V+&u%*rP~41_9pLcD3wPvFbhQEnr}Xx~*Bg`Dva!60$+%BTI>uTcp;ZQdry3!0i%X!wLRiP2bs=l^|><9uq=| z0+9XsqT0o@1neCA%q zIWbRQpxEz@)c+nMh|gZam-=$vw8P_2>(UmAH)<@fYt2E488|^XvYQR3z;6ZZJd`lG zozS|(uuzxl?gp9DA?+J-t)R3uVsNc$C)aKe<&w3UGC^pzh*WR!m z?A`&~Du?Vd`fkIIUpoz=-Ql7#g`?F;HeRRjhOekm(Ge2!90KbJH+cCBB;10Y&qf~$ zZz@(dY-i%viSWOFczu4%zvi2-0JcAVx&{+J$NTrM-#+??efCOzHx8yB_zTihFROT; z*SDiDJJeLMMF+-Uj0<3w)7O}1>6phc{GsM!%%mJp_Bs5ou zLF|Y2^@be+W?uoQYSLEiR@aIA0p5ZcJo#EAqNiecxFU?>w#L?FfFHDiHA}$WypG90 zEm>?RqT&eEOLM~BM~g)%7t}T<5Fgdi^LFb*crwjEYK?T9bQ+kXBD&=iih-GdG`DgG zL~*N4G*l}4w3fKgZSBhd8wixdOxrZ@3_}_$Fpz>S8+5)d1sVsWj7l~yN6Kx%^`GnG z4<9n#z-jg91^eX1yKh5&VfjSpz?1wE(coy{+M?tzu*=76G=#@&YqMNwSWTBS#>rB| zaBH?YDSmPjCwSS5nBY;%xK`U0Go2YgVoAoK{2vww{eqjd%E7#fOs`_EmWj0SuTX z@orx8?#$+&Ucaq3uYdgM5jo=7D|dfIKW~}B&MJsmmUKXmM^j%o=@6V>`Z^9?RP|g< z7EwRu29+O{41xo+h^NmETgGDDBLE(nC^33FoDRr|fz8@+z#%Z1;J_aNr7_nXdU(wO zPE_S+4&J1-fZdf!-OPPoQYuGEraT(m%S4KGF-t+enb=1;BjLWJ#IHijcEYl+ORf>%3#G{!uLWmox86CtOj5oD;WQuDv(nnJ8ex#IyIsr*Q5t+ zvw?GU?trk56V59V`m)g`Her49uB6R-dV(%+OLqDB_1o7krG%fobT7%QCSlyByjLaw zZ)5eA&SzuzF@~AwIv|FIwnAV`#vrBEa3qb8fy$hS((D8Ayv`KZAlB-fiT)4-ulJeC0Nvr{$KO_M3Na_d{_1lUMEbY0FU^n#Y^~YDS zKE8YN%j40*lUMMioe@RuLLS6@p9CqjwN7Yz4KQb5gqA*m+#AR_a?k@e52WEcL@IguGM)`vZ-!>BB(~2T=^NO z4$I2gid&i1NoG1EU2#=9@q$)monwt>;(yyN7n>Va_@P=DSI}{0Xq#KO9tQ`sBY``1 zeS^_{$4dLn{wW@*A)mc=_gaR}!XrB%oWk#%uC)>Kz<6u3fdfCr~vh+QW~SPj3yf1ngHRjc3K@o6c^q|T0N>jTBy{Ko>OBw znx~~M1=gC+YV+|m{l_=&4*q%%%B)Xby{}jGk6+K<;6A)W#;}md!ha!7V?6)24 zDu984aqt**eJzV|P{aS;eC^YE--F$)FNuu3PU1|=yC;LF(np(uc&4jU>zkQ*Flb0w zXKzt7QE%&1u^DN2Wvwl~y0spPN0?1~v&Fd#t#fiSA1LY%6zn%<`N)dT3Qs=}(7?iw zr`dwG0}L){d(2{Z$r$8j%o$Yaa;w5s|g{ETxmBD)i;mRH_b!g3d>rL~6whc|B%OMlG2bU_K4ZxkD1wHEbK^aFgBcKb43>*Zf=JTi*gD6@wO5NYbl^|PNb)4#hJVo$Y=x1 zPt2SOZ_t4WslfHhEP;g95c26;F8w&_!_=d}f}F)?I7BOpVgG|~iZ0PA6aGoJLDAQr z@2RUHR)dV6&-aO8{igPKo`(D-8$f1{g zkh@Y8+%7G~Is#~Vr39LT8&;9D>N3YUnFWmju;p>MgcV=$epdcQd7zcN3 zx|T-oN3eI`b8d$ra9h`ybT-1oS~~aDaC5;WmOL}nLB2nMaV5Bf zq}I>E*zyi%m>}5i0r5$w?~Z>Ks8ilXLu|)47$;qM270ejxvoF)aJ6X8uxYm0cj*~p zNb{JTD6npQ2vzJ0FbuY3ViU&GOd2@ZHOcR8(U1S}=Jlt1^b&pc!rimHKW}+wO~zLN z9lQqSX}My~o;2OYRmgOl9vIGJ{R&q14stEcJ^;hUKP3TpqgbbVh)DKQNGo>Vxpz#- z>`)QO6!;|;0IJ@sW$XPmoIleC;FE_*yW+SEB#71wDY|{usshcP4kRIvYBn<{#X)aG zMX(Hn!0sk;K^4HV5`6!3#sEM4;CZIUZLGO$cR-VET?S5r1`zUF#mZ}+f<6&{+l5_uaRojf z49`QCYbHJ9yr-CYlH)V{)Qz9T*95I|pYNYc??dK+`>x zYjbk-F5Q9`B0fN1?2br0it3o@AX><}(rYBnNaqZE_PB4}Vh+9_t$-Av;x@qY5C7la z9)*#fyk@uHfc~urm6%*3oO%e&``Qkf2vv8y8tSU6V3@P>zzl|{K^LI;DuCGol42c| zG*^mN(WZ>;3O%Mu;zJ^lgI$DY5AKx-PLfl09qab9Wh}*h=9=iBGF;1L7itr{lBx{W z);%TWb;?pc-DrooHhhSzYFHNEAcp2C^ofor28-cVbG1{YlqD0Nxsl!~tZ(z#8b;z@ zzeazTZ~u~S-o5{C8s^Vly_b+Ju!IXDlY$A2;FOgFJgU71Lk=A6vc+!*LktRz?wNqP zIr7780c&8{A>m5`tXR7`btasVbTUpHY*o9mQpaQUHlsGo-1`PYl|IzL_X@HG zdgl<40R~Z{<`iWzWR20gQbHi;9IS@x!4?o)n;^puzrRB_~D7~oa)p7V4d0w zMSp`Hmq#;ezp9IV2MRlK_+QRs{+jFKyZz^UNZWt%5`KSa?c1Dz1~!mjg;^bhos_y# z3#2TMwq~Het5;gHK1SDGV+aDuMhaBHvYtp;h2#vx2vTr(sQ9MudDW^pq5ax$l=CEI zM&!}9Gv)0u8|27MxEef%iMeO+ggiTrkeC6Nq1~}rm`Hi{utDBsrWQ*3YO~s<_d?HA z5MdvArUGKV6T1@aI4S6;Tn!aeSi!AV-lG2NT<|wPy?guaYrf&_yOXaz=7+}&muIiw zjp7qQ?$6sK#E?gu2WL;Eb-EJ<-}q!WvXHIwh^>w104f|6psZOa6`iB&EJ$;@YL98g zNOL8_qf~gzAk>#_hwD5}Aedp~(knUxZQ^lPdc(g)4*XGVfwW2y%=<{*w=n&^h4{PU$ixt8uDobb{A+U16p~4s-tkE)bU#H(oQyB z=+UjSW$gmrNKco&xSg6y<47Ie1BkM*s_-K{Zf*KycJN6J5600tjsy2T*DZBR(SmCD zaCA;>K`Gr7_ZYWB93ICmjAMFhli;N$#yhl@IsT$;p3xwL3eGsR>5#9cTo@gZG{n{# z4zO#~j|3;ChVAKK@;)(8PhCPYn9R6lUc zFFN6_nG5H9q@BS`Jebq$OB4eaIQZv+JA)8<>^nMS)T1FkxOg{j=MYZ=naQ#fsz-gSiO|_3%_A4s8)lk8UWEf@ z0coo?o`|J5id^1pE4nThY0aB!ZzgN&YWt96KD@Ah`t!SZwcefod>k}2>#$}Q#tNf8#u!%F#@$wC``s`AqJfORgiuj%#p!gINpdJf(`004FRV`oFK|vy(d1WkyihmOpeSdlX z$DiLldKy1_>At_F9WPq@qP&mP1&|nSjFoj^YeONJ<}-zoFoJTZ&WZXs||QIDT@Zn2ZpaNw`7iJ!xkT5}>4 z#``#^*<1IC-rAXz%?y20YdHIwtMSQ+Q}$hjO0lU!O>(&rhrpqjdya18hx8E2hB%H6 z0bb2cc>9*;{^!5`6rcY3<11{RzRo5pA4is+y@a<;K>vEb4o~Ea18J|7ZhI0lP1hr4 zi`GbOy;cYURZz3Z^rYz6q}D_WA72)0;MsRBb7A815K%E}6Nkv)Ln(pW3psKj9GE5J zEL-t>LREUU7`byy;%g^?fP-lY`jO}SM0wx&Y53}x6 z1w(qX(bx67&cMg6tUcYSU??{#ux8zFGll=f8}``?cl!kHzkbY~GdDMtg8RASUpz6x z8%GDDx*f;QqyB#L17DI3KLQlvqkJd0nmuw@HE`oD%u9A+Xj6iLZA$b+d7^70^Ta#d$n^}$n zHiwn^y7;qPnQ*8Ft?8tRq*0hRL=E}+hMKq2!*AcTk3M0ayKr|`w0}8Njm(RwoE_j? zUr=)IF(RU35zs%242|awtO;Xly@9N4+-o2^)tA)<9!E~3yFzQ;jgAqEtwXDW42Ht> znn*MQoiw2hSg`Nie&`&Mm}h4?4+lUCvn3$JM)OFpVz(prg3p|R0MGQ2;Dfn;0jAcb zxc0Gn$^mN%VlPD*?r2F5TP<3jB6E*6;1xnAk;5PnJbF9e|HF?T;{8wm@#fV}pFTa} zRX%(5Zogmq*U>~0-tud=rlXFTObK{nro(Ee(Ti2ZG}I_EBfuDcLI>xdPBAd^}XRV1pYPnp*JAf zt8%oY4XD68n`@y2NY^d{b@P)w`)q;;@yw)|0^qE`!H6^ggQA7^v=h%gN^&FsX2`gED zK*IHoBJ3DAZ*HlxXdcF-yHRU6D?8S7@J<=A&Cg8gwGI?tc6%`;M0VS|r(RV9nx;z) zPD~ltNlXL4Ge~iKg#wbS)@Q(7gs*`FIbk=TpV1BMuoy#7&CpkEbLkrnk#q)hmwk!h z8$v^%8Ogis?=^0EFc5z7s@*;A-a*CEsCoe8i+WB0w`!LYO!SAsl-BTn&CVg z%ELM!uz1Uj)Oym4FP+b;QG|M5F0?QD4p1n^CH{jRPS=Eg4_EP^A$L$-1=g9Yha2)G zuohzK=?#l4P0cnTA;#Rd*k$RD*#7a z2UIarKhX=818DhHcice707Mzn$B}^Z3Zf4+n-x3lde$I`a-?k$085PZ+@%S5fM}7v z+S%i*J@K#|*t^Hhws1}0*<{`QI^|)39}#_C;R6Et_PK;{dXu?x13|Hib-=R($VOw-`*7Gz6K_(LZJ19K3=D%iSWMa% zzBpjy>U9=C9w!B}ICzp#)wzA>e)#3XFOSa2pS)@>CX;j>L#m>IrZ+qx+eVb9xQ|Jv zR?#q;6Eo!9shi_q$xoi_ivHx#d2C!Q5;n^-^!k`6NNm+E=FDOA*clZO6%gAFg>vbs zyTjESqpu@11Raxu6$sR0RvSL1>jI7r6{FoQCZL-o#>Du`PC%tpZ1GG7^~1u0h0Y0! zh()=n&vkJjsYijD9UVv7Fr=P?NBr%E=&z4CJI`ISyH4@fj}{b?E4IgKvkouXwi<6t zRVq5VcAI_RKc7&8;-s+VM7kh!U^6Lz((;*;zzN$E4qrR_LPW_qQlWn40%y(?!?J3l zK~Mk>dES18PEN=rT2)(e{h)UjCZOhXS>K2DT-|h?ft~7FZOvgUyYE)Zu{(*?H{8;I zn6vNUr%RlPRjrA`3?GN$NuTjiTSfv@iqtX zZO9PR3m(W$%!x+{tnR&2bsS5pNUO$xT(V6$u>w*CL}d$|-BvzVXLQe|7j9<8Q+uh7NoB=*_d0f6L0g57QThW0LLa+ln*$)t!T_;2@7 zrCtr$Ixuu_JXMH=LQsxVyws?%WFiEnr%lrlUWEE?Ar&zVsrPFWwc86<_g{Wx{l0jG zpS_YVUE$psaXoxx!MD+;%@mCj(yq|Ofe2nU9{M#B2f8>vp#|#H7_l<2Nzqa_1l<)g zTM#|5b7kUn0dCYqyK!5oi0d8ikUT4ZcO6zvtbSx+*_Ci&% z+EMt+Plge$(xTpgv92?YU|bmP_!{lqg)p;YS>fFfUdcI;O~B}THT(|;4|}3I$x8s= zVOAlCsaK})*+XtoS^wvkq3^3NgQZ7r-6t>L?Kr=EohiYa`7*Lu*9HMW7O$p-1s2ZSAAWZ_H}r=n8cXfgN&%tpx$$?zCn4y_kPYcdl#9B zE#B>0chT(GwsN8m7h~XGVvG_EKo|ulVxaD~1ih6+ENBUU%EYFnDWQ!<9Ypc@=58r`Ni+C>mt^c)f9PHoNrZGCEF2om>a`Sdx% z+7jR17UpdR9-R3R+_d;tHGE<8>a>ef#zl+hP8jvT8MiBL@7O796;0HjRQ~AzzdUYr_kmQ^NvzObzeA1 zr&@dVuBS!Iu_?0E!T}g7u)@Hf2lWLUb9D;cvKS`gJ}}AkjbRbqf2-e)_Wzsr>$6wy zrT1%_et^ALMmZr;Z{SXc*U7z`8IC#Df!*Ca6DNsezS{ELuTiCeB}TZp&?`Y*>mV@J zeRd3|owfWD8e(M7+MEK(UG%934eUE>G8{$H$WR=|he3ppt^wbnq98itip-|t?!)tx z=IL;)UAQ+Zz1kRrS>D1P)3K#OVcibCjnj)q;-P#gNbu=^kf6YA%dOwut^e}=M^NoP zyhGLI1rNrvSMbFd#Tj6jD8^e8C%eN9Q&V>k^VFkd(plQ^Kmij{c7e>M>@(1da1c}G z-VJ}Lvo`JOr2n2DKYh)Ue#(!ZAnyF-&7-97vsdtDn&{u&vCUiaY!&G7Bn;})go2h9D^iPN z!#!~ts9Oi$7>4NF5EO%L_|^t!{9$6~z+?h0twbFrKV~?EVI_pl`AWG5CW64D9&tFD zZhKTmTCE8m#2E*+=#`33MRWskrkZUhNZEaLISq{(Xp3BCXoG1tCJ_oaj7UV_sb(Fz zYEV^pM@J{0dD8@8KX>Ln3;0>_9PGE<)qma}GCt+2>q0-cVV}HsFJ4uXOW)-&P^2&F z6OCDDb9$TGTnng~pdPRzO>P~wCnz<2;^1;Dwge2a?XfbGaIEe72)FHBssrAv=mKY$ zWB*Rkt^+iio5t;oc;jZfK!Y_GZn~6RW3sCsf#pC55IAa6SG7qkPVNNN*+EL_m@l=3 z5jzXxE!wE#mvLHdBSFV89Caj|tFHkN$G))rLu_)ttvmiE|MvRP<$U(4-AW$Ymp3b1 zJzN8Qo$QShnh{=#X?0ck*3K-v%<-rihMdSoNibVi*}8ewtUZzj4VT;?g2F-CaPGNq z<}$M<5EcmE8FiXCDnx`XciNqZC6+bkBpnrQg<>t45~t$)0( z>X%XCqY>h>m+!^vI_UEc+sis0b4Vr=fF?4CSY=4Ivr3@vA>+wQ_mbJ1daoG;Jq*q=<1FgZ4=MpTtkpo@ z5Hd>_SbQ&z7|_Pbz6hVqvbq%55xv?5D<40I&)A!8mK3x(s66d7?(W^ zqQ+>x2jbI%07b!PXzr8KHvU012k+LonLvhOfK%QMfmghVw>!_Pm-wR3UcZ;F>ug); z9E6i=f^P{QH`G1@Di;^hfhs(#vlF2j7_0I$nN_H|P#6aB4jb&M=H5j*URIkh8Z+MM z8()=U02>6qBCM#D0OBCPd&|r+Oq6`m;N{aS2v+hk;Oj_Q>HwaIYG2$HDvX+R#G0$^ zb#~yd%f9+WyD2(#3Vyh5d=5CIdo|D&6tWGk=9qQNhHuq8xFmOvUu=`k>#9eYmnSdX zi(8}_N+JcazcsHN1K9QoaOUIEZf79BNqcka8>e14Nf{lC));-ZzU^3|6-)*vmu}+> z*mz6<6S5V3uZbf1!2|z|XX8tM zDP+??d*W0XQ*tK`JxUWK(s_21bik~vVp1h&V+{g=w1#BvZj1n@;hxbuc*`H(f5=at z{_|D6`|xu-`c8fJ^1XOn(T`Qc-_E3JF6RJYPpd&Gn1PCOSB$7)H$3dsO8PuGFl~m3 zPx}n_#ze6|q#2W}LB7$d&Kj8TSXTt-7}QT~NCR}g&PlxA1|%x9Q$sogF$V28pOiV) zu&a4`olY%$a!TOnd>SSQZY!2gyis@4p_t|C_MsDTZpXe?=V?uPqcO3lvwR<2c=nF# z!(R;5m2XDQ?~l*__4UV3@pk?4=GB|m>(z&R|L()Xf#H*v@;i9<|MOX9-fAkmKWL$l z)@ewM#}vn#9f$qkp{KY-TW7(QdFrGsjV+kwu$&w?1(d@|wBvvdwyGDl`HQOXu{J?D zfjDuVl`!rNog`!4Ufn#Pfr41qz317YM;8uPP}UCyW&__13dSLDurZ6^IT@g)DDuNg z;@B!X(J?*;-V;&UaFiraAzey4Bsa-wJPWS+H8$ag@olK|Z~t`SQ@no@Z@*5LaDMa1 zWd7vkdobPqd|mTsjSV*ZSO-PVqXNUB6tA{`-5t4+IY#+jl9yDQ-iCHr4wy7DahR;S zQPqJ+vH@g&VgGw?q?OKV_c4l)AmXUT=pFO1xVvk?kfU+Y?r^Fdv33KhRYAbIR;mp= ztnggRRyfjBsI>e@jATzWf`|rRkag9)eb6#5)ch0WVd0AkspMzshJ|kJ8Z_cZS*Y?><_~NyN%@@pYWkBsgmcyI|#3;PN=p0R_vP@HHEf?<& z{SVHX808ow0=gUfX$fkMuVn;z7UuLr7b?G&9bg0soI|>oAdQ0&nBDWE~6n-_*TZuWiYZod>u@c9YfZ7G$*~!+@{w zQuSbUK@g+7KnZ!8f4WuIoHgYIbw`& z97L>f)|<4uFn}f$bZA->4W4zo71L^M_z)L!&mLnIDvq%quek?lTRlcxL?Q~fz;a@O zzB+~KoOtCY@P!+-aGi#SHP)l^6uo* zhmY^yK7YC=3qN`VU-Bxy&TsfqHgpwNTS1BZ2}ak}CAS_?ziKq*&43K2UnsJ(525V{l8BlxNr4%0m`>|#OV{hlb5 zDNLhna!*>fPxklkzPx$!`Hvsp-?jTcdhK45Cc0p{?%@E0d-Uqq~9F z;5}dWWZDtJ3RP`-i;>wy)7MzN8B>n2adyP6hj*F zMPtJ+G{;$m+JX`6%Vy!@nUr4_L%l0HFx#MrjUwaKF)tYCX6qmy&4V7)xKG^r&6ju2 zcO4RsUc6twy1(=$6ByT`@J1U*Khay-g4DyIhB)^a;WH+Zr9HOIEacoG1{q}7?Ai*3 zb89CD5Hlz`L(5^q;SXiFrEOx|#LJ4%MgkfQe6wxd5_=qCLW{Ys=G!rQ2fdL8{34d1 zXu~wH2M&zDS=Q=>C^~?6bY=rU1rBy<<+looma3h(WUzD&e0vf<{qDUT& zq=I5J{faE1+uiJRri1$W2`7CcJ&f`Y;nX=Sl{UL>fgzX6rV__S17}0;FwC5(ouN2) zSmHbn>K^xK!~5;Q_&@xA9_tU!pPoNIeXx)D?rwS9qgV3w9QE@z7oUMcu?iSLE|4;y z>VdLJZi?@_r}lCBSslO0q`9PUS;YQwkbaAuq-V$Iy-O`RIQ78;auG2+o8nu7j+X6} z1S`Z0o^9$anxFItwwjjL&mB=SSV0n&E-(y15NOCqNKqXH?G@+^@}+`?5|tL))Q-0f zzG>%d7NEIzH;m}DbsmSuA~0>EXwReor6n|fMh@Jm+5PTgetQ4rhkW|-@m{6Tqu23O zt~;nAD5}Gp;_`6j^fspP+~Ms?)So>%{&Yjbb|~RCRwz-b15fLk=#ssDlN^AtI55dW zAP(3`=Aey+m(a0M^S9|3L@3;?LxmO>l$+?1xA_$WE1Ztxr4S@#O(GdPal-dyu zLqF<8R)pPQi55YEg?+Be#(7@@UC|hb4k-8wbr*8PYs0>WD|q6(7*%^7=&f-(e|KC0 z=K?W#v}KB`4ZOiC1z1BH4m);CMA+T?bXXIUM|BfaK8|w5=M@zVCI-xOgXzpd5;x}4 zde|9)%Ehsf&}$uxPr7BzgeJ=6-8-5RY0Oi7>xi~ zEqB}xxs9fY-7*`Z)22^=I>F0*)xPe<3?%4ML=(WH>0XP9l2;C z_zmVjG^TfSRULK=>pLd8eg%}pFZQUzI`8G-sGpJ z{LAN$c0NBnzr_sx-h+Phg1&Z0UZ@7YLiLSXpDVM?fyStFwq9(=gN5@$(&MbyWDCAM zfTp4c8`?6_Cp-qmr#$%N(hXv05xPu!gKkKJuKw9ev?-6J*VjpJ{foP!Pt0MA(2~f5 zgDy&E2$&rK?{HMDu?ED5jnuPbA^Uqg)CpxX(EwmA58yF+k6%kT4 zRJOo~NfR4dL0ZrPS7Gh6QzV0BopM>oB47@+#<qsd zf!eIU*DB zXqazR93_Gufh9t#zyX8z3Cz|sfhID6b4uA0L`-%(PgGfI~sPeBmZ*G?ANpowzTf%&%`l@bvidq-(N zSp-iX#SbV*O=z?QdM{tB5mYf^E)Q}YYS8*p0Dn*UK>c5zw>$Q~yM4Sr*qbkRhX;>d z$Jg{o-jrj_UIX;ijfzrQH3sSivX!70V<^c{m1uT#53e&>tjp@)^Jh!*+0ZDU!ReDx)nS;VnLau;&x5+Gawo}QxM0nJ$0=6^jz_OBq>-M7iZ@)d? z>$yI?%2j;yD&9WbpKEsHOt6#pWbcfwdCAp!POlA8j~An3mZzx1K9KUe3=AyMT}`4L z1+Axpoka#>?3li)9X@-{F-I72n{hoDs}vLbm57l*-*lUuZ8qVN2^_k>BX$q-rdO?R znru$x0>vLTjER?}CtxjLXccl)gA7?=0Znbu@Tsc6!k<|JIQ$x@cw}i{+9{4SN8Gx0 zVO*?U)P#P0y7vyy4_>%ie%ts%|60I87y46BYKvwXFw7B2xL6Q{&SJ35kcg>K2USz2 zo#`N?ba;^%h2Jr{G&8733};~I$II9CeW(&*cA@%7Jl zwCk;-g6w$*rQi3h;&_Ji-~}A4pq&~9vxNgL!UI4^5K_qfK=*;-mK|v)0rLU$Gq$t8}&C3ufUeY-{W@k{SMRl zr^wHF?p}8uym+sjm-GPNyv7XBN!FEDY={yIkj{w2PaI>R`)dQ zWvh>c{q3sF@Lh&fBUhlerq44xulr{0R;O8w6%CCj`!*Od(U-mtV}}y$D|VM9m}pJH zC?2$lwFOqUnAw3hXal8P<09a=jrR5;N>y+!OQp3ZSmDYBN!WiiRHB{RO?)hz_n#`>k7jkx{1b~ zct1Al%;*5t3$T<3ECf`ST(!x(on%K>7jXCHHXEXb**BkIef7QA;rM|#H&93L!a~z> z!SIE@S;#<%*J^WbQshdhn>TQHIL!bY7gPYkdEg6mEVlNX=z6ZMu-9Df!M++g#ZizChetxo#AMIXM$D>#AR!aT`y=_iNjd`{m=y<=P zNv)lIlF7q}$d)oLd~I_h6kTh=Scz^{iG{k6vB5^`l|7D$q0?tH;39^(cel|JqWP&A z=|es3%mTCJ1w!U;dSv_PwY)R3{kk)wEdq7n7%)in-8$~RKGfDjKWzn8>YdkS5$NHbX@Ka9BJX2Yx!)8Z1mFu7d#Vw%Tq#w+QcS?lmWP z97q?VH5Y*PXn^ClP-FNG0*X9hKZmi$f~DVOw{e_D{ZvKJU6R}=wTfoh6gA%saN7e(1MI$Z?mc62N83WSp}JCn zr=tA~2whC)wQu6)0oiqDUAZ4j41uN1wXG6{7JiY6|NHa&^!%>w6?!~+;a*c0dlB?5 zcf!$otU_AQB?mCO~!~-|nbakZJ&?tmf-$o|0Z5pc$6x;-#dB}E0f|_|% zijJt_Jy{gLdf%L5Nn%ifilW_VHdLUj3;r;+?hd>b0zoQ3hx?V?wcAV2ci-bhtuJq$ z>aHL8!Hf4&blN{b$Sry{)0L#l5%gu~=)E8Biu>Ns#^acdaaK6bZaEPeq^oxfGG=u0 z-6;<8{mZVpwJINp5t|sjG;0-&^2?uWD4hl{(l)JMP1nsFhRZta`Mq{t^+o;}hsvvAm_!rQT z8He}b(e{=e-uVKZ0q%o_WOup%w*Zj(a1nH=jz%j{Qi-V(?1lAmJh1 zu;and%$VQ$=|9(p{{C%#d~46~^rvq&^Y6a>f6kkGp2kP7Ae>pVAGysH%cJ zwI&j&OI;Dc4#j0qqoFl>Cvp$?l>6=zr@i7ieAM2UUg`FTWxWsdKVcf(n30G>deRs) z@jbg_Te(L_TR^bfni|s&4|H&1HiJmHTnarPqqI<_!LbD|VqXQ%jCO&!4Id@BP-vB4 zGFetEa!|b-m%t6o9T1vFIQC`8G3ZpIkb{JUbq|xJ?QVqNe|+e}4M#=F9ib_X5?AUe#M%AOG~UQB5I8Q>=h%P<<|Z;7nt~(gViwK@WVe3@`VS zo`fcfZ8)$4{=Fnb>NEi)Z>K6w6@sj3kRw5X@;-=v0C@56l*{Jt;o_fvHmv4fUcp&BdI4X3vJj+qc6V@4(u3=8Ph1Gj7>20T zFzuQX<+>LUq!Z}-XW(pbMGlz)L#Wmmrg#+FqL432HTeL9gw!I*!f16DDie@ijF`&p z_S;K3!S)uylVb=ra0(vt+UPb$FV;>6a&fJz^w$M94Bk^vU0H*&`&2iU(mt_u>uKn2 z_qn%nwKah)No*uXo(8yB58cCmisNUKD%Sg z8C+76Uo^X{nFz>2gVSSjbdS+R1Vy>H&dg2Kt{5^t7^FV<$LRNBoFQnD+YbRtD0yS4a z3KquT^Li6D;X6d=Wue`29CgFp)L?@L%?o`hayyAf9diiS>?o7O= zw4)US6WhTJPfv?{d*V~fbM~IIz$!rxh+01=aIf6uKy0>MfP}+x21?^zj`=MaZRfbf z`Tfi1yc*R0tK0FTm+{uB+<#IrY_n89*wmI$y7e43{hX^6siq&iCNjB)n)FsaQ(+1% zfZq>wK#_*|b;551uQiahYX~8Kv)8&xclx4}V*}KJtosE!#gFm!wHwZOyznJSct4akZIJZ>H8}02JRw zV-SDPZQ2}x4!eDA|J}Fedd=nYFQ4<{JG-9*dhj~F7SjaX0~PW>U?2QrPbRus=c%i{ zvvVySW@Z6*KwGp>=jVeE$X{nM#U&n~2rw|10bd0)nT??TK!SFj?J$Blokerk5}s!O zEAv82HfPzp8!@9j%TSnc{io3^VZtT4Dxljm)Tzh-M1dIv%0fr8p#|d187NYx#$+c? zmqM8pMl9t8%z}0^>V0Qy&(*|R^Vqp>56s`ek^DJd^Uyqc@orz*Zx3~2-m?1T@?ND3 zcNr!XYo8RflKVkW^lII}42w{50ns-=-QF9V_fn%Xw+ozlk?oYTNHQgnfe`?(liCLH zUk_z2^C39UuUi?zP-h5gCEOC5;UH>9(^_Axp^0@Y0|9rf)93JwhDtJ&-yI)4He({5 zmp^wc(IoQX-8+aVpn|s(4mYx}#>y#3zDeO-fQR)3cIZ1i&8Pg!^QXI6f=4gjYnBVJ zagH9;fTH>J0LIl8p9virne+UNn_iAWf z#N0wa=LouHljym_tJIP}8MV6IiG9VuQFBiO&4H%$y=X%p*Ns-VJZrB>4WD6CNEHb; z80XdMLfEdccfrXkW6iyAUZO^@sYD{=r&{{eYg1=}lWYqJlYzkNZDjAa{`~zP{&eqo zK6>45U(#>t)4{-(WlEPE=)8xh>Ft2^${DCfVWxeqaqn~9XwQ;#9814Ic-3`9LcmZ(Pd_I5NqdVw-=q9f>BtAQUU{!h=Jp5ENYl{|X!Ui+L@rJOif6Ig{cHK!?y#n~N=4QB(W%q9|tlcQF_=ceHw5$9!w|9_@pd@MVMW`U$(qs=Qa!vEwui1X;8b z1!&Bz`$cR&qQnkACAO_OH;mgr{NoR^jafUYix1d88sVv?6)0T^R3{rPNF&CEU^2LS z-D9>M{=y8^a9Up=VJTFkMS+&U3p9(k!#+IOfIW1EID6?5PTf0?l3>|c8F6i1-7OG< zt7cQ7`WVdyzgxD(JKI2WC?~JkbuLIeb*nS|qy6cJr$6Uke|-Nj?owwSyn46$@BHb7 z9qhYpOW3vjNZLLPTZd~XOyV@7#=X;Z*wHJuLYWNXqV3Y0r|255g? z*j(Wzo2VLwed74)UVHD;xDqV{nAH)&7l_+1)po$drfcgJTL@UEbK6+?clM`y)0{^y z+ONm4g1+GSQxo)9OMtNKH3aAcb3ovOLj0Gsj!1Us4A>8fus|I*@qsGGy0?#ND7_>o83Y`b# zxf-osDUD)7^#)i&eLGklC`@Nu>ieQj@N@<(Lf<2j11NMjik5gNNwBiDMrqSp-`Y6j zo3`}7{`ReXeE!on-0{Du=XV&ifBEz|KR)@#v_IeNgnsN&zJ_K58DW>uHuVBKY?ER; zn4SX}i4g2wmSE@;v!pFU+|*DI>T9uK{%L`E7vfGKkgE^n*7U?Tfyt)Zxg4b(CkoJi zg~}$Tthad&doS|BN1HtJy0DLRKt2!y zWdMDqHFYNkq_z#%0AS`b0@L?Uko6!rm)y#SzdP^WzO{F8H*NRmrF)HT00279TCE4H zjWYcJGulDu&4QS|(X|*%iin`p*l=+K!bZb%xJ?ZAPe-b+mTWksg$nonhS>_JMhsH- zI$)zrZcWD?xwNI}Ep4+}4q{T?s^DXtHt@GioQZQF(#l5>=hvvYXt56{q^v_{FcP)4 zkNF@XfD3&oVVGG*3!FELO_~!lTsa#}YW++Z!+>lY8n@Z3zx&hsyOx*-FWQS%E%_G6 zLgVTsv*L@5-gwY6`YvF$c>-Fcb7K0NJUa?$Fir{Q+K{<~(f*3sY{p!8oZ$_nw(5+8 zIvNw$8-x752ZW)iZBO4M+Y3cHFL<~UM)2Ng`IH(xEfBFYl(8E8;bsYZCXk)EdJ;`c)v@P7&JbO>uw2fds zu)fxqI>$UQ;OWY_8~8C&9mN}oLCtEow|W;}J=V;uY+f7XcZXY>+oBM^Of()5Pa{=M zMrmYggrHN^i#PS3fR%av{MT1WxQ|}G7bM(Y((Jel5|ArLKad~u5th+M^k;J(c z5q?`hNH?PfGcPQKt(_LvIS~1K)Z?fj`ZDbxBBns zoL5?Zb}vi2blHsv-7Xv(x{9Nf-I#k_NZBgO9+d|aP20oTL0hsq4H%JofgL^NFoosZ zghHp@c^j$*d7)bx>;UePM{ljC|MYEW^EN-;9ko7s`EEa~>zlZwz9#Dy1E{X`?IU|M z_l00Yks>)#B?paGAk48Q)ylQ^;l670i-pFWZLA6B31H%9qL(buy~)L@o{z|6eu$`Cnp(Ay9zNN#B9qj6b%xn>uU?T3 zZO%}xFl;5{FGv7jL-&_~vi2Yx0+LoP+i0MbHa{?>tb4Ql?J_iQeYUb)wZ zPqA=pp40a9b>#+ZfSQEP#MyD7$~>s(R5126#d0rqVV`q0oKlVkFC-$`!l&N@)dyz+ z6wk5+itXHo;J=KKWtB6oMpoAK;y#mzlkXe{ctq?rhCI!gjnW$o`?#!94_RzW1J#C@ zYArPIVgzzkY)q6*fjnww@1`xMoF+*paw|BQ10jNgD7cR6k3UgOmo#p(Isg3WkLmXA z`=_7oHFxU`AG?6BfyiaL+FEUF+~!v$*q~H^Q=ZxV6kMI>peP1?wi^+&rrKP|!4-oh zo+Y?elnYNSLai{ZgsUzB zOkQ7}KsO*zvjW4e=E5*WOx!TJm$v|Pz=w5i&b!Zp#F%p? zbUT8Z5)a%c+b!_tAK$!x|0$pH-4D-o*JSwM)q71%+B!DMV8FSEm3m}u-wed>0Dz?! zK#vZ_gVdq3U<5f02FwWux~Xmf^A{YK)zIQKLC!&UxoT_EI<@QMhUCEj`yR)E*6bo1 zy*MGs+Ijk+iy@y4PEW*insYjcwY`kR9SEx<#o9_R`B(?FqwOI046L~7_S(HV#HpGn z;0RedaNmHi1dPLka*N_-m<*PoC;e7U`d9D$%f0&1N3YtiEu-}F^lb`FG{j(Y3Mbin zbp_g(JQ_-EU_O9zb6~h{(QR`~MY%ckGp0zUQ1=lrgxk_KE7~C>>euPJ31sbc$X+?$XQT%*#WGVs=*c19l|tUrq+p~ zcwnx!o#}&@Urns5m&`+)tv1(0IWJ``KL)PNoUH92#YwPgP^)bdb+<1Z{K*gj#-@-h zdwMNKt?uwOk`z-4L!E~LAmGrB7U~cHc0DbtZC`#mk{Hn0WaR`yWHF3P=b!-F1f|Mg z5_fXYl`!G#@S?JD{gOm;Fs-LVOKLYHhi5zRJD#fD#~M&Jo6gO%dcijxi||vM zb0fY4VsHan2MBMUbh3}ikkIvFsycTMRj@zC>`N`^sBoVsS(*!@>6X;4hBGcNNQ0De zeNBNpMX5dR4VEN=;0j-ADg>lK(?x+?s;s6MX{wTsQt~vp;!b&cO8Uo7pFcjo`~K<2 z=eX-9eDvzQ#?QO%$|qVwV1BjP8F*xwbK2sJ3))BoT+~>CdbJg2o{=)o4qVse6eS3T z3w7%NX`k?^bEEmIQ7`Ored1n?Zy&d!7Ul^lW%Dh@wmEQFXKc<+EV)Q7;{%H&dNQK1 zh>j+F5~?@0HaZ4RxNgy|X9Yq!);sl<3B?fVuHmQAjE@Q+XbV$KYO)Pukv975F0Ljaph+<^MW-Vm{q&#ktzkGjIlO(&F;H#faX3! z1+BOw0avaq71-X&wr|XgaCTT%3}&}jy@AjJ#$PSipU)XxG16?es2}&>%ktTAvOSw5 zuAXcGyBDRaLI*Euo#t_d?JYi0jt6AGK(<0haSO6JJVEgVHi8NXV8U@ZK&_q8F8@Dvm<)tykAkYkuG*GN}oc zNOs;Z=MJvI&%g+=mi7`OaXAW~KIZrNmwOuFgBS1D4|V$P5Mc2d~UdVHL%`9C9!udJjyn``1Yt+t>14|?@o>G{6 zl^6H%B3~0jI>40NYdTuq*BAAIH9dWJ|NQQrW%SVt z`D#(tZjt8PNViTfZy7(ceULaS9XU`;tc!A>niHlI_Nj=Z6#hMDj`9;UFjQ%@MtK0o zK?j{etvGsLS#u8P-L1LcIw1i6YD(NDFxHqu7F7LRsDL^iyLWtYha_S$s12J6a~g&q z?R1gZ8xU=$nH>NZhOCK7U0>3?%bCD(P1uUT>WGFsO(xh*#WTXTSJl}8ckt~k=P#f0 zu1@&qWqZx0UzbguNgKagJq~`o*?6E3QuqP8Yj#uLV=6?T&ukhCrz_19SGw={7rT*3dCJ9 z8ruFEsvp2byq&lG#CW;)EFZjZzj~Hm@d08uV?>ANV>bjlCPA?@Qo~7c#s>0cP98c| z4`^8264inrsZCg)eDN>D^%ZaMXmIv-a+%<6o%o zLJLk$hGJzTk9mzM-#&(9CL9HhL&ubH)gs^V=KtNF-{14(KYHozyq}W?0RY$*^x@{G zIU2uG+Qxa1^OWTjp9RN9OGCsRJ08@KM4g1h-k5f2H6%xB*qPcQw3gwQw9qZK&XS^I z8)7+cM+qOo(6^_czbypbqZjX`ZZv+fH>i6SZafj-ds%MWe?eI8D(D0XS8pg_#j*hQ zwn|{7A`A*a1jU>h^X0|D7I6kfeQSdP1Sw=Gn&BlxcZY)-99^6s3Kz-Shl(V<=JA8$ z3o8J2#}3B8(*y0sQhUQPn^uRc4)2uauo3zWY90SA>jeTx4hAZY4q)8ydF|aDTEsbu z)t$?SGKvlmbliK=?a}tPj)!{hc|LmGUS3tcvL2KT+N53AUTQ<9SVaru)H`|A7%1s! z3i>&2RYOrP8tCH;G^e%N-p@oaBGEc1Tv~~d{OCHTAgl#>d1x;dH+NhCF%JZ3@!Tr- ze@jTiM=#y&9K8P|1FmU6WB{0GBQcxOWL<+~mlZ=Zo=dDnuDNB*fza$p)kWao?}cmg z*c;G|9C;->;K=h>K5e2@%m7PIYFp7g*C5X_THfzZh)!}^`qcL&bAOhUt(w$ znKoo#Fk;|ek`QvggrF`C)qVu6ADc|l8ybA}+3L%soxG|K6%&$RM{VF}?Zu~b0Jm!7 zDv={Z3+#d(u(RSNT)aznuHE+OsM5|uXRb0l6hQ01E>wayZ#F`>zq7SK@66n~1mFal z(oP#j44-hegv+Nkto*+mjNClm{PJKUpX%d%JpZFt@Y{p^$DagV;y=*W9r)U>1Yh{o zQ6kS7sgU4^psgI>{zo3pwif4zIw~;@vn)RV$54+%VN&DSWtrxh7;7JZ8P*!=S~U(l z#)ksGy%=;R5)Vv+Ze2*b0T%~+{)#I6rKN*(Jp4EZc!PL!NXraVJmK5wJr%wmsfqLu z_(ejo1j6v@2fdnXIXXtOs767LW>19Z;kE+A$ZDGD}tT2pi_joP2O;mqCj%k^!cI5YCr+S}Qdo7YusmsJqW` z8akMi6ky##(%Kz|gN_58^%q62y=iHpl?MHB1(mLl`L`VC8!*q6h6p3tGC+tLb$oY_ z{gx)pwnp>?eGLfh-B5u&%%j8P9f6~773x=!-A3Qa+BQrWoH&&ifVaa=96E&&2CaCs3ys@4arom5d z@aMV{ta$LUy(ZP;Cw?sOOSt$DbHK8=Y}#r7iSVe6;m|46T%+B2?bCb2k|yZm{A#d@ zVY;L*TnN$qyoHXknC9ljlbiBEkr;qOF@s@ZMNhFyl5zXD^%D8z|?}7Rv39B zxt+!QSN7dUFW$?2_oqvZNnN%@7_s^Z_ww0Iba7PFnf6H^daYYURA&pC3GqRH|_Rp6Ry zcDQ=ZRp7OeSJLfisw4=OH*me9?H1hWvZ5g1ryT@$G>V*v(W+)I?bkgc#MvYL)BuPm zxk;XC4VT6dR|6PEl88*n-6PY#Jb(IZ@BGV~r#H|3bl(4vAMI{5>d}jNM>(vRg9iLN z7aF4pTAxlx)#)e_NsM|xS@06a>~>)cVKp$ZYQP*%5%UQ|?I7N=kS`c(Vnkf{L?$t9 zNSCx)*SRrkQDe}wz2b}-0&Z()nSGV1D*Z^V<^|NQpaW=}(pva4losJ?r ztus({OO8WBLrsgJfa%Hu);P8Y;*C<3zW&2#;4e!TmQ zeejySW@6EZs#bks?67Ayh#7NF;4+j~2a=vp%6;a>U?OXKjzcP&7=hgqDCe=b(be#< zjc4Loea;1i8oio>Qi3i{0e(6PWq(|#<+}aG_Kl&{z*o|m8h$Yr>vgOD95n@}0Uhel550Hb5_vHC%8tCKk4YTr--whq3l zlK4CAgLWEZ9p(V{9d)U@(o7PaodD`D;DDd2^TW{MbdjnY6ZFEG^lF z6%~}Nvw9Rz;<^tjOau$&85)D6VUS`6-HM|GUEZrpFX2QCG=LwLM9GJ)g1ySbIFuCL zFn4#w>xR#cO;BJ#S2qZ-LUrqnuUaAqk~S6*eNo3-D&%`U`E1>qnX7TnX#-90$%K zKzwBfNc7zm0^!+kxS+zRO+*@WqZxCb^3{A`V3W$6*AE{7NNE7whwy=OY@r31!e|9t z$Cr5`U)axnZ|D8TcTYdsn|rzPN3Y#$pWD4>&mMco*b6MSoa2Q2-K;T$fu1cDGssvlrMBPDY0rI|!#(A9G=Cg<}HdFwOd;?Jp((7-k;8 zEjrr~psCkVg`SU&s!H#xP)Y!U!IbJvO4eG{*;Xc1M$>_6wh6r>P;r7dVMdwgSto1& zkZ#fzrhLKh$0%YwZZD6-zqy|2y&T+wm+j@_{Hh{G8?#U-5d`lSDAL-~Mg(YZLe&&z zOXmiV`9h->9F3G+dBgh#d+s4~=^Ee_P54H7k0tz-2&rR&4v+7cRw_9+_BHXvk@eyR z`!~eMdi2uWTJ`zoH2DUwR4r#L&r_&dp9&{AI7Eq3*c?;H;Dh#g1~U7Hx3-lHld){8 zbOmaiVStscW4dM^lNXQ&B?j`w;3To$E`b5Wf7FcRivtr}p`2^3Mq?uVof8bVtCKhY zD%!&+8oE}IRYc_UxZ%d%eJlZH5}l^8kV;h*G?}0dBdNN1U)R-gHb!h1ZN=i4xU#e! zFj(J$A0qwzmv`r$0`cgTd#zj!2Sj|icnZ`dq`SIHSl?}Jx*^) zW=sq@mp>9-{z-dAM)v^0NfSAxHnRN^eVn4MzrY&R-wbm+d3lLCj4FC#GEZV_nZh`~2 zP+S#b7Dqz?L+R2~Q4ij0GzfZfruSQ-{_np3&(9y8K0W{EdoS#xm+oZ%?&~8ZMv-OT z%TWH?@nfh+yspk)Kh9P+UTHB#5|dO(y;m7f#CpX1 zSeJ9PM|Lz7PDFwy4wcwr+QcztBo}U$gv%!S48U7(kW_BpQo(UhF17`2?$`|5gkww2 zXtKc^99vzGxM%J%nyOb%;DMthtPePhuwv5Q0g(e2V)ca5&W0Zfe)`heFx(^1G1dt~ zo@FMt6ZC)e>G^Iy=c8BcwOMPshJ9c^<5x2-ygAtPxO!V#=g`2B0$ngfI$6TDAw;s9 zPLd1#c1l(*g3+X*CUyAahGdVR-fYma;fU|EOti-=V5)i?lmg!ZC;uii{YS6a?G@&m za}-TmCsAq{tt(o%4G!f57)Yu$0CT-9g`0IP97q}}VQOn`#Y^u2EUTWq7A@+?19h5g zJm|XYo2+XPx&Td~$X-PZvjYX?yuFp?fIZarng#UDfSQW7F!y=7Z)o^YQ)g?ilS!zy zVTj{9Y@^P@v`9L$SuT`>*|63YLUE@STe~7?IO1v{dPF`JE4rPQbhg_!^LKAPet9}} z{&*KK`QW8{Rp}kQf=GuXA(b=ESZAtl88t0@BRen~?=vk`KyQ*Ur8k+D?k=ELINlT1y?OR~W48w{+wFEczmd2D`&7efVPdrOTpUB5c9K+lH8i$vvq(P01D67c+5loZ zStA_)SmgnXC`Fd2F*tnSTweM3+DADry9q;?J@BNgoX5tn+lUlg+h{4iNDdv)3gtF* zZ39-QW0YkVDwdYEeW7&Fyx8&fshmRjZ8y+laS$XBSoXd`je9Z|Cy3`DA4QiPvt1yZ zxe5)&eaY=u=D+_o8vpd!K0lwQ$PXVAb#M0~jgMZ+Z;$vt;1U1&5B{IVALN?|p?z%t z^sK0vqu~ zwcF&)KiIp!zGe-6^vd1#A%BD0K|4movg1c22s)z+atx)&I4kAk^c)#f@n4{!#)P_wsGQGVyJ?27V8pov=tj+NbFp?BR2Q)je3^{eu> z!#D{=I|y*sBhg^VGExSF`&Le(u}pa^1l>-9<;R3)B=*yU2;Pgcq2L=vO5H7ySKwf{ z`CK*~q6G=gVUfr9V|E}&jU8bJ*!d@6ytNC&((na9@M7G8#^|@t^B?L{{*dqP7H&Rz z<-R@9|LX&`kpKAYPx_zUeR%u7_y6a=AS=iJ+xrgy@!6aI#lJki`TYFu|2*&Cez4E~ z$G89X|NZs*D_guyHlE($Pd_ukqV9xI;9k_QTyDOuQ5SoutUlh^eS1IS>2ETY#2Z{MLoS^ zOkjiTwb$0|ioUR9g+vlv6Kl?@tTDb%8}671x$bflJEg`(u2!0354rS`xVPK$?Mc8e zPK9)<0N-c}mFZ*{B3g_kxUi~8EPcr6YQiHnpgptUJgdEy;dM3%xLJTx%4urC2k-dc z>G2w)qdttz-nn?~olnz!`br;a{=*9c>FI&F9sfQec-a!G%mc`zE zKpKy$A;DJ)7hR}uRg@>n*Mv+!@1eWTDU2!DOr(`pI|HJ+CcO=9g0tov4q|?7KZdg$ zqCUV1jjh)8`0bl|jBQ=p9?ipTH&&NIKt=n>n&3TDC+QQwrgf(kwL&-7z+4T2 zmq&NI-aFw(2vc4Mv?kq2Rwaxk=m5^!AFCsHSPjUxidNy4Qfs%Zq9B~~>45*ugIEtn zLUI@v0XYZA1L&VFT}Bg7f*7N;4JO9+M76Myp+UITkyb=&bIt?=5_K)97o)`=-hO_A z-|M~c#e)~_*AH}jFTU11!Yy*-wb!Puel[&)z0-(V|?| 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 c>SSa=$5`W>3kP#WT=7lABI&p# zbYbJ7YHdCE5tH%Cxl>xR*xKdxvs!h{q;&zrrCZ3*B@~kuL)%uZa=5rX$~~=5LeF5SJ2 zT>*48CGAy@@||i>mKQ;>Q*ekAJzqj(FBjgQw>#eviO&ui12=3rHSlmwN|-r(l8Sq#D> zxTtA6dcs}ZHIpb)-cfa;w|1`2DFVE66&nuBBu#gq+d@=gc=JS|aSPh_k=)CeeF${M z)e}?WWccr+`1a|i%aHo$g!<%_yT77u&#C&x=d0If0?@_G2uB4F?pAu%+PW7jb@oNa z(R`h(Cr!TSlJd+RvuYw-9c3~HXoQ$s>gHE$Ri#ZOr5Q2-bzyLxRQc-I^)|pVefSxt z)W)5CHUq!RRCHKK$qu44UBz%wt{zr&Rlf)gK*~m{SHlK^$&u-$96TSK*)upv%Ep;V zR;$q~&YIOEPMwkWs2KfjJEvivzu4zj`|zjN{SXfN?De~?JbeG6?z5fI+kquwjnP{< zwf9yS2U{EL-L4iGg^6C ztKk^AfN;kxNs=IQ>xiV0j%%&EX9kAR)FHaq0F9F;+*uu^9zrm;Nk;k_^=sbC8j0E6 zIv6)_|9)i1IZh%K1?(dNLOEtU3dla@eG_1w1hsIBuSI|J7#57pUfPKF7l zPQucMA}6D>+TbwQOboD(EVcSQb0q<0qm!h$m9}R|Rv;K>aYtH9Y_Rub&aT8{hB7Ke zQ&K76CWh*Xu1}3Can>WE?1Lzz3e4`FGP6?NjOFPwqGc&PPm{Z}*>CN`=hv6(p!#U< z`|QQLAN_xOQe#o%=-Y^_dtKX4)8>aJfn7uh?~CydJ6Fze;m4j!qE$*hDHmzm#ZE}p zJ!Pi02mBklmKS%=<~jpqWp}vKv6DAc>JX3omZ4u~p~x^$#+1=*r`2076%}C}Y= zpd!hSGXS(wypbYLTZ$2Y?nR{5R2T7*v~%GcwmV`5)2jzkO#vuYJ<7@Q_7U}+>`>?) z3%=)MFr1i?rMxQ=k7Ir6*51g3th}~G%3^!z!bp?XOv91DMPq!M7zjaOTV*FkA@&HH z3-3?v1?#aRh>-(?v!C0;%s;)^qJIDSVZHmhA5)Q@yny%ql3&Plq$QYN??E9tTT;Mq zX{yp*Mw~ITR6&t8Ag_9^B`TI~pG(uOr+dzaJdgI%s_kuKoJ-iWgV84HHPuT!-m~q# zQq0(!!L!>G(w-+~EH;uRkOH$wl3r_Bld342)NKW3>$vdB)76IOG8ZtFfvTp5l)A{3 z#lcl`)pMv`Aj3_$r&*~(G9@Sc3MUOiwMv8LHedGr!hZITAK!(2c+97J>I&ZHSKg9? zOU5jDt;7Hdt&Tp)D$dl^^3qKG)Mv`cdv7O`M9{h#_LQ-*GSn&B=H$PQnyQMZ?Vgs6 zZ8oY(J~egqN?%x#Mr<&d-WsZr+x!Z3b>O-ufVB;`&hTIIw6@GFdg`D*fm|R{un9Nh zXtgay)nb60vuxZIuFF)Jx8{tyto60t5JM+lio>*H5aScl`KK%Y-4Czq>xVD#)5F2k zXRqLW^5Lxjj90FuoaN2pqjhulmOd>lO31`xk4$Y?-2E`FUc52eFtpH)KkN(&mIuWM@`WXq*c}7c|;F1Y8Yz3l+RP^N_(G<;G7xLbe9SJ z z%(%{I6!VF5pXwY7fR5*UkWO+w=U<-(LQd7o%|0p&$J3Z^K>Sg{vrQ*Fkb?gU&tz93;8O5dwv4A5olC(|0cb@wvQIJQhAEAHsat0xwH=iXy-@k(XJk^PI<)Z;^= zWR)XcdacIQ#x{1$fvRLQZgLxN`Ril*cHViIae3|n-e1_alTNsit4sW#c3B<@RGYk` zb%J+dM5@k|OUS-O%Mz!GB`424+ad$7+isPQgYBD2W~(Nh0GZ-E(|1x&)W<8+iw^4Ac9)2YC6yf0-!QJnS2+9&1Fv4D;t$4WX0_UiI&G15qO zAoXQ06A=I{(52&y+lxxss4nCsh_@;lYeEKSgbLe2(kyJ40n&t{!fOk>T`9?1OVWr+ z?13Ieb}3~SHdf&HIq{5eC6y9eQm#ONI~cWOdz6*{2j0ei-#p8>_}MxI`X zZPvt4H4riI1`;^~(dc#L+fsyRzf?+`Q9Hqfea;X!UQ0D4`fnxKC5D)7GfSmczUf$- zlm<3oExg}j2K!H~plx=^vutgv_?3GpsZLHvy-vQn0!ys5^jEO@Z~ycM`|_usUKq9b z{uciE)5rI(pX22Z@$TpN^e{jA83s_-`|?oqJb4UiSfXU@F|y>yqL3ofbdcwnQyik0)DnB$wbsyady@SxevzNN zm_Nc4LYAd+g?aW+;aEFI&)3-jiqllEt$A$kDO1JSt82mMu-M*{NUoV)Vdk^74!pN= z);YP-cJ!^gY-7+ktY0DQg>i)ho@yGmQWG3ebD-(A#RNuy#ESU&i1pP1ku;l;I=u{o}aGbU($NzG#k&Ru)0hiNR^b_Fg#&^#Sem7k_^>4YX|Ib^R=~&vOT9r;FnmreaZwlm75_JC6+LYMgOAUbH$&~d7 z_qAT9^kIDTCutqoB}rdrNH6NqM{^>1xTKeFPH6~l*BB>(bq$}lS2QI(vuZAUjMAcx z#OtWQ+QIrn1AW$>+R!r!)8{E+f{s(Wr4!~5y0w*+YG%%p82loR8fl(GwXS;aV7_Z~ zTG?Y2M2g%Y-oKZL|Lu2wwD+&?{`mU&HQs#(^Ze5V)BpPE-OJTuf5_5$@@n4WDBnsJ zt{a*>&jyK+9=6q159ilf*YmPcnS}aU6xD04X_Q9d)sFVOm5>6#vSiixVGJgSfFN&r zcGekzGp|h2+%$%%k#&>oes{9n{fNzcv?kC=6~%bIxMp0FoLV!ggVlkc6qT;@STV7! zpbLOnjlY>f#o9}zlt#L=k8q4eV)Vog^KzHIg2w1I&7$Vg{TAl(cmDOWe|!{!dG@;9 zUeE8be(PB~HuXkK3J$sO{pn@yqB{}%IgMi(osrpLuwBaSaPWJ01Oe){mC%Q@NOhO4 zp4WsM=Rnxi9)v{^Efx5U{=2di) z3=4v0J@+)IHBUdWN8M6ME#+#xZnItU8oTa8dZ8>a-pV*hyV}ZS;D%~@^>KSW|M_}Q z|JT>}^p_tVW}m%+_fP8EHfjvOL>XVk0fZ8LZMX`733B>aiID0n5U~oKxpgGza>`5nE zn4ZnO6IifhYNCx+6m*t!(z@LnTURDndJZ;#p);2<7uKkg<~0UKk;Z!-qi^;Pd~563 z+}tf|>$Mz)VbV+^1MBTwli8HntDVRy)R;QPTHTRKA)l%}uHo0Nw{+)!_z*vR{PJpF zK0f-SK6~wM5H8=5qxqyPE9s8m1FX&Er7S~x%rSbV>uE!)DepvrJ7MUDg=)HTKaIm! zs8z>GHdAIotj)$;;;~N37jkH4(C9!T=}8h1EE`GuHrhX$A+m*BZdRpTazbNMKl)7F z(`iRs4}92CjhTk#DaP9P2R7rvy1~>J%$?UXTO4N5b}^Z)FCD%v_pI&krdCeLi>PBA z6s>ND&Ck29k8(}VUbP>U5F1qbRd&Qlgv_b4#cZjHNU|mL&63g!wq%RPX1)y|w3e77 z=!YWv@H$d!$_M5h9$4vq}4)6WZpij|JU2qefN4|{bjw2&u_l4N9WgPFXVmW?i*ItcSKu@ zh|!j#)!xK{yYGlnhOJe{&b=`%+nbSFNR^^{EmD$pj3Hy6>(m?~o{XK}7VJQDmgex? z4!Zf!8o>gTv@e=;eep~e9J$jlycZHzW|phV@1c|)B2&eCEiwy6{CSW);1A@H0C*1 zvLhImS^})iw9_Qb0HJQBT+C+$tDBf_(vdSlJ>s9XiH|bybjG@^AS0RDLTs~~G)kci zmn(^Uu(R!qkr+akiVh|U^nBEgah=lpb#rTqlCmysY)OF7bxx0SPxWn7=tt_ifH~Um zV4EJ|4>VnViOKxB?({dG82w$G_uu1h=DXydQ~Oi#7tPTj6b74&IMc5EG!UdR;3V^0Icvp^S~ zZFdaXyDwk;Ca62X zDz998&bjU6lZ_cPi`XSvf~Y-msuKu6W(Sn@muD1+{=09N_Wyh<`7_4+^y^>BKWy!l-&_VVn(QC~W^)V?dfQXGbc_wXx`F11zE zmsz?FynIa5BrTd+l%spn-QdHod9ET8c)gBq3e;7!aDumdr_x=OXi2Xa3@Ru%8zU(i?n#}_Sgte8wdD%R$Rt@|Ycl`RnV;Qx3tw?9Ov{og z?~4Hp%l*j1tNiz0J{iMxkG`Ph$5@zaiq|a>|TcoUkCC z!X+J3_66>uhg1`rv0I+c-~9CM<0B)=vsdlcFXR6E^eybvgoH`03|N*vb~!#qNsvsW z4+Vdoi~FFBKjeCcr3_0ooPA7GA5=)K!sE_B0hnN;)3T%qdxW5~EP5QwXiEKTvWC8L zPtEUG-x~sD_EPnnYb>y(l%$ScT1gH*d1ft>$bwNxKTK#r;k^jFeFJ%QaB+-8?zA?5 z$6e}0ka2h(dSrBoQW}O+v(B*UBqmtfEsykj*y;ZV3;pZ`yscDxr-Wo0)X7K&Hgjbf zK2)-^DajMG`7o)uYwu_6(=0))NR3FC)FzCVrij%+<}bmbH%qa)&Zw@f;qz!GUpaiJ zy3^Y(mkbJX;oXHzMd}*H+#{ZZmFF>z0ySzHturktKsYJ`>xDnrG`82FWsKCwHYSm+ zRr6`=LHUeHp(!Th8j4$7${@(IwdYmV3G`rKXp`JNroXw+!S-c6n$&sr(*5Z4nzyG| zQ|oB}j}W9w8r@Zz;bh?y&kSE=0ep~;1}><@d2mQQ9|E}{xhBzOrYD8AjvAuf&q+ExXID(47b^}UnfR#30;6nlM2Yr(=KsBUa*wyUZND+i0aX z$#v48NDAd|%xrBjOTUtn$B^6EI&3bj zvzKRhRYjO@Ubc8MwGwLuy-j*vc4B8eZpBX7eRzTsoFbhLG-)yf4hksiLQnubZ3|d_ z6h_@g4=*E)Q$6iH&VYj@w^KX+cwOPo_T}~Sd3|_p1pYAFY52U zyB_8D>8*Mwo3`-UBd66{o=MnH6Jh>>15ZNhM-?Q2>{x9qkjCKofwY zD1{McYs*c0N%$&uH#Uwz)SA9s$Aq3V^6J`mRXdxiEki$H?lAUq7vf&+D@n@HQ-=-1CloitUltjP9~(*^5$l4#vGuF)>+{IH1U=5 zPMxr<#$s3)TuZhr(YubtFWax*Qy2I*w37r;6ybVV<0MBhO#Tv^)UjHYTJAD z%`^ss>&MFJy|x&)T;bpR>688Z0+ZkoHsr}m_ahiVI^n%?#!o&~dag|q!%fkK<=uNk zn`8uQzFr5R-d2k}WM?afBiia!*$nP3sil4ir|0a77c8Grjx$KMj`uk|7degc-6p_e zcYSrQsT+ygJ!V3K+)q8YEm!PX3I-pbT6%n|)fl7kU4^R8e9y98u9a5nbunpN2q}(o zfWyz8&S;W`mz)7wwdV8$0vO$bVSIbO`NuCG-#s{E&SZ|`w@Xwq_Ah2-v6-~$Oqq^y-4vDlbF&oLsIwort)smLbOpU14X(QI`Wym;L>n@26->luxsif?J{bD%pY}&icgmMKbar@a|h>l*V6qsUHa@be9*~} zHmJN97HP|(I?~YSbM&?AC}m86TQ~YhE3MY+h4aHKFKiFA0Tf-O?OlBk8+6ACkOH$` zAv=q^kf~kVQGLsVvSFJ6DRR4aZ(sw;8Vn?9^i(c0`7Wy?2dTZUOqq8!+re|GLz4|C zT;WWdtsPAZB?oP@w?=pSXldJ99ozAppJ4vg+VE>s?@005>ga>Y!1v4gH-E67Uw=uL ze*F6B!$T77lNawt>V=U{AyS`_&y87OucXn7O*rDJwH1wECcEbv6~)6oTZNDba}}+o zUZVG-Vxm`XYEeMx-O}8n==PnpQ$nb9S2ry&OU}IT&WKw*)eLeU3vj*hix7d1QF1+{ zx4lMbs2BQCfPj?-4j>oloK|c#PdL}^DE7^dmN44Tu6rf)z{ zU0VkGwXQ*vRFADTP0x_s2m<v zDWlmYJ;-+5~z^IgsB8l(ahc zv<-v5rMwTEHrkqJY8vnaJ%V1e zu~0>H6w--(kDPTkX89T&o>TU9=dYtvqt0C!)Dq4peM- zwaBUL=+6c|dEm7&964;slwuglw2ph!rgrj0g>=e@C^V{Q|XEL(5Km;d%h*_LN7+pogj z1#kV^*Yl)R*(bBf%bRSI>X4TFGPj0)%=jF<)ujoqq%fKSes) z%38G}ng-?^x!6VzkE}QbM$~EI>$L6Xj`+f8Xp8U##PLK*ZH~juD@!GgO=;fR&f(ig z`qqN;jcIf;T;m)mpkV2Lta&Qb4LZ$c#S8Q@YuQx$mHA#;aRD_%W6V4xyUQ#6;menw zUjp~S!_VlG7w=cs^gq?`>r&%OQY%oQ3NN#A7#OpeP8o4@?RM5K;T#RJ3>+YI`%l9b z<7H%XViwL2v8}}ExF(9IY*?4?Yt1&q(%NT@Q8bl# zPO_q1It0pmMCxehDFO#_DFhBm>qz*@A}Xv|vLq&&3PxouT)x5dPUHn3{4j*MNTK-K zl!*MPrCFIWSAt;010S4pN~<9Bs@`={zkc}n_2-AGg(t7uuO89APMgo`8CY#`Hh_

Loc#o`o2>D>e_fMx((gOd+4OxsVNm;mZs5azJRQP_-#NZ9gCBD$pd=RYjXoR*^r&%(H!h5H}t4-ubUKR(*$K6&B3U(bL3 zD?Z@m)B4_yIb>g2qt&|V?9?w75UK;+liE0*u5`Qi7XFJg^*8Cj7Y_N$*OLMsC2FtcX zeO(BB@~onnJvqZj>3X=X{fdpc@OSUH)Xim*SOC77Zy!>XG}X=u=_88G)Y(WG6^X%2T?W}!|nK^?z^no&A=@o%)VwFAXNHWPe72_+FjZ`Vg zYEq{mn#Q3h38v48-sW@4KD%hvl5>m3CIM`UpOqQvT*D-DT$Zb3yEd=F+Y@O{ODif< z*{3QnjIM61d`)3z0ZZnS=YS~*ITVg1TMhxjt$@wT)LPr+#0CH^XKx)L(57X9C5t>< zcHX|Wq$2b-6e;gEd0ejlm$$i^PanU2iBB&JL&`&J+LM>^z9aK?L@jF-#sjKo$s|F> zq-fTC<{ZayVez&aDf+5zDV@~IrmI93Vro7V2y%c^p_0`SSTmX_gKVenB4LFNSeX}$O)*KUwn4X}M6#LP7|2`&o_8joasH2dzEt5CWou|gxb^|A|E zZphCuq%c`c(aQphV>8-l?Iz4=6H>GPToV8|yGZwx1t-Kv(;n^TxNJWaurXc|K zf;fPSd+JKfdK;x^G2N6^c}8>z0b2xNlTd7k-Cos+iZoGpci&t3D#5fwft782f`y!G z)I%G_T{1Jq7h|jI%$R}1;03tv$q>~LUkrMt9BFOLeUhi5;w!O?=VkFZ)3m&0O2Ri+ z^8>C1<&@8i?!`eA$g*^7Al$bP@LW9d2t+HM4faIXc_m)-z3>r$!tUmrMx>^%GkxCv8Rt+ zu11U)-`424YTcffi*EzagKcD%x%Nmj=KR#+#_$v)>x9r41E)oqR)Qb6$vVMao|sul zD;3~4dZNlQP%HH_fFYX41V2L9#J4Tx|0d%2SaTXp4FDZa$e%{TjLREEMafZ?qbd6KeGs zlxUjHx>BAXPLj20-U_F^D0|Z-3$*alQ#aBMyZ1atl$B=TGpwV!dkqaM6#s zxn};(WBRw>?2qen*r)Y}?}h*C5q=bfc=7_?essU%m~d-Xg2ophmzl{RR8V`fV2A;W zlzOXWHQ?y7Pp+a&`$lqU>{4L`QGppjhx))Ezb0GyUOOQb7T@Ue+Lh>Idp{5K-DR$K zcCz7guDnbJ*`OuRas`)Ro%9GqUdYRq24`F34QrW}lOc+`Tx(ax>Lc z(>}g!HMD((0oJ|LbPa3twQS}1<#hXR|FA!FKRCg8#963X2{u@7Mt1B z)pS9Qb|&YdkpiV|!w$JHz&$}CqB$U5FqqOfHLbxY(n%EEx0!Qokt9?zg9A0UoLijQ zzuLQ>KE8Xkwt<{r0RHXm47QU5dd($*LnL|S(Np&AU7Dg5jtn|~ zHWD`jy{Mpf4`CR5cQ5)j4?nFr5SA{Ud{%3F+Ct}tQ(hDwe_Sj|=ALJZG84R9!Vy;l> zC$XlDklq}8;w)QQL&_FSvol>gmgbiF!TUDO%%k?GqZz=#Z7Zj?Yd@JVH;wK+FePBm zRWy&osg2($u80KeA`4S0lgS$#KbV%;q^hE(n8nw|)Y!8D=0$?8O;Ebd)(j{TP$oGw zW}5w6oD_;i8J6u_lC+RKjUuB0SZfP2H@mJ|#Z`QdqZ*?<$8-}j*>^(bNUzH*``Bk?ayPK^bM_Eo; zXk=2Z^AfQ7?Fq;{w@C^pgR|ow*Xs43R4hi{m%6J}B!StylVi&{qi56W{U);6K360` zmLvnbS_H>@SNgQ{hNK`-wN%OsHpxSpi}+@u>7L@h>&nfOkm0sC z6CtYjX-UseaNJ`o2DWPk2puEg$5>X&K4}m&q&LHVa*bKj*RD=#wk(@kvWG?8%B za@qEC{vn;ZJ38Gwg)pC+fEJX_{CMlbc zD8HO~{(%en{*^q;_nzK=yvCm%l^UPCfWQ8-w%_OP%0k(D65ruk^MGY$jbim{m%oRxFBZq2q!-#fiU|HJB5(F;vhaase< z?q^b#CdHPv@UJPow7iL)!Q5kv2`9@h?Voq?zvKHw{crCcZGxY@az7&X`yPTELa{+? z>;l3>c!UomjjOFa8A&S)^HV1~4iOb!Vm?LjdY7oyY!uQUTIh5@(?2IQgX^a zyv{auT(BY^ar)8QXEiieb)8iR{OMs{Wd-vL&80P!ERHfI_Y=0oCB|$~%EDM+$$AHw z-bGFGb{=i`-yu_@gQKN^FiJIYa=?IlPytz3@I>344)iydv==PXqmS#8m+nW390UP* zGES!T8Uo%6XjEA0mV8fgQ@IW+X+}PadbA@HOD0VQKM5{9V9-2D&xNFN)?hfMOIe4u zmTixcmJXPXfUS`RrXktRZI0r<-s|_-3wZnbE#JHElZ-T@d0jf64QQe3~^P0+@jLdSKD+l&gPs*v+GPknJ3*r zz|R75Zn9H4PyiZ9ms~?OTq9_#wPEwLsX?G5r&LWmuW``QS)B-=FwN9-c%2cY$!1wR za&LL%MG6}8ILLuaD1KAWsjW}{D28DyB_kl2IaDH zCqozsXAsW+KkDADXRhQ*vjg1vD2>!T<2DS#7X})0X@G_J+7Yn<+y7<9jvXqhStP-i zCAH>ae!H;_`Ie?Kld|s;x@k08EfyB=zauiPy?XS zbX6-t&4icQ3Gv{s4zS_mqTNg1lGhre6oy0aF%WwsVPdypO_)f>8V$r=vftkA{DW}Q zp1o?nghk}^J>$YJ&vUnvN?Wl>D0}qYTUn z%%vmno}+Rz4>@)-Ot`V zW@{^@DRsDJ$jq{HWO^X7^QkS8F^lrbasT$4`rXG*AN1iGlX-}KLl2Wr%yACe*c)BMD z<;CX}{u@=2UB6E)?mQ`C*4#F5Lw1ugpm$%=lyyON4jg+aGl~$~+vgOWt5~i3Xbf<7 z;@Rgo{LiyNx}41Km0LB{b!I1(a1Nedj7Dq3rOH*Vb#I%k|Mb}&+O(g%XtxN`S2$0J zev;?1WF%c-X+jAs0JKLcOQM{W98tIIW2ek(IXJW1<(b`=R$%6%MGpr{Ah4|~g{P6ZMrSi$k z_O0)x1Zu)4wE#_Mj|YILCV7q+jzsS(geC zcHS$w&FRu|$t!oLW_9Z>WM)&1TqK`!dx@&$V55o@xlb2x>n++!CLtQ}B~)70YFy6D zrD;K%6n3w*$JHrq8OCVT1zD@@boyL-L~_eATbJtx&F5-cTa81|c(gu>@04!8o4>KO zKE~b0x2mlo13UT#RY4o~xIbtn> zyGni*(~6p1o@KsOS2Xm<981 zNVIGsgw+z4=_y%)74KTIv@HPPCNWK@#JNqTmiRFdVv+wl-ohnE z;RD?U(CcN;!>Gk*^I5`nndkaX511FO#}OGE4tjm`WT0?Lx}~*z_wlFqe`O;0kd^h^ zmHU=SVedT-tsZDk;ueLQj;3SATv!b(P7F2uO0@)4dHL;d@iM^ zfqNsri=Ho(XnS96Fb7HtzL7=>Q%_6ps>!2nKb<%j;LvqQpB-{T3mE;VGE}+b5L6;j z^6-Y?cG#dacS@Gb#D%NU(^UvJ;p$XdH7g0}3w(cMXp@DRw?7Aq@W-o1VQ z`OTOA=+V{MbJy^8Tr|EPUq-tJ5RSOg+3>x~t1sF>-%wPIK)lnyO{4 zm~u;F9Cqu*{%0M*B{k1BKFT%;3-qLGOFN^VJ_plPX)=_b>1YE&PS0YcOlIg!LF2Ew ze6qdKJ#{=b+59G6K7Wdb@%<;S-u;BPe+_uI&b=QEBZ|KauvNQSJ_n*|p1H-mZjQdwGc;*So*|>GkRUlf68eGCX?;Z&5D!H5>}3 zDv9h=N}f*Mv@g|p(lBnD3ox$*%_^Ix)+&jyf2{@8vP03yo=VQ{{P$$pYJd0H{_ZdK^5dJ> zZy!D3XD{TppD;JKk|b-|f<~qu;f>^o2H3^ah_y!cuqfN<=*>XuVN#3b?k%Wz@3VWU z#IDU&Qa@$NaREo~y-Ga*2ysJjbje$JXOv~_4(DAqKztP8CoT^LjlxT;hb-O)tSRQ% zQhlXzQX#*Ko1&GFu61@{h-8(O_97e1TnA2yS4IKY1NDamDRbw9OP(LN-gKChzx#xL ze?8%E3(%jul;3>Dt(G+;f;YMMm4@xY$Gcd;7>{b5grm^?U1QSJo!8Z6UwTNL80uQ^ z#>EPGWNt5nut}aGyOk`pwc$G-CzwSrInO2&HC|u0qu+G}1uW94U*I~)Xt^RgS&$9k zte-NAT<6?=YT^|;=c)X4BcA|Z58RRRPTLphlSnBS>%*sSf)Nm5(k!}-_HYH*+;v&q zw@I{Ln}7K9Xq5l#W&7pxoIKAjdt^if^p3P>wbCZPa(x#y;D0_R;EI!S8xbB8K`KaU z4cj_6Yo&SNAZyE`+N5EC(4Z~Jvlhyk#ZofSV|}kO2sFzCX4lxZ)Z4fyX`Ph$Fe0}d zy%$hPeDxsjMCrvUhdL={AVgO1m)5kBH71Gx9%rcwhVB)dP!dSs5X)pI)l;NYbJEj? zRyPh%!*egWhmUoOO#8$7^x-cr@#*E=+lMdPXRqFEq`SO6)=|)R#EgsIIDz=9ZKrRi zCT07MoE&lih2qOpmr{|GM;j~mz@tRzm+nMK+XtkKLLjK;p@mR+mQk^oS^#a9=54l_ zW{I=UZSZVi4GVlsnR3L)Y+U_Zmdqo2WRp3@E{&Xur!i6!^Hmhz^@apJxQC&b~dxX)h0`%Ur} zQiu;dS@e`zi6~M?n2pYM?5umVT~Cra`%-Ri_w?bWC6B1g+4}_TL6zLQ&KIRCI4$ zl|$S`do4x-Qq+Xn@9HskGYgrKdL-hrfF}l+0v7M=l)2hzB@nDNu1k06v(9ybTH&#Sk@MhVB!IC1iJk*V44i1{rhs&IGwP+c#9#yGfs%_pC_MV; zwhiuMA6>@KdZyDbJQECQjbW$l%+D{rujPyf+bBaNjes>W$`+xUILXMQ&K^ck{1W9) zlwe9$Zr*K-arqoJApl1TvX~rMqZhZj`IYisPbXt}@Mfhu z6trWJ(%qEf%yFwpYA+Q>rl0E&aayjY;?6#EjkCf6$4Q|Kn?1Es%B<&{+9*_sr&6vj zJUoCZp7v?Vq))o$rHlL8+AtVX2)HF5{(lXjp1pd%s5{EfktJ-~Wg~`^+->h(h}nVi zOvG&=c4`#e$5+0@@w?U2r&>@3ZrL+Ef7b*H7mqoO1KFe|g==6(6V06&1+g<5C$XB+ zkZRphy`4ev)HnlJlU?@lmZpWJk!G8FR-i{EC89vOh)qxB4^9}Wdu?NY6#&vxx7O4G z_6z5VtZg7Ef>Ne-#6+tGM4;93ObTi7c)shy{pNbFK5DN%d);nlim&bS+51ifbnV`y z#mZQMy6~N-Z4xEU5jof8&?uM!L}j{{iy=OiVluXlo)w|a2ojkxn$u_@!0HV(M5kcg zqN{HjLQ)n?=e5UezOax>0>n^La|Tg_UQw7@OQQ|AEnQs42%1U_U3u)S?X^I5M;>5c9=F2>j{sW+iT zLc(s;tTJ0EtJGRkI*xLSrQeOTqmx6r-7sY)^|N}5s$6Bke#~U;G&k5Uj*I|~Kykl< z_mpW(#|1h=bTn)*Q1FM>x))w>o-EX|<40?j6n&hjB!91b?z-gR8cgpe;#!~k4jb|N zKe7uxKfQZ%9(`G#y?A#=obU6Or`lUL-q6M+)>0Ed#*3gv(6a686d0S}PWyp`lgt$U z%-Eszq#T#+t*n`MXJg<82vFV(~CyT>2>FGje%qx%BHdJI6f}pR5{BRK!lu@ z=G^mTX1f6BH5e;#;>&rAeti1ewa^qDsiev!Nh-DQ@~L$dexPNwX`5Sb6x*`7K2Nyg zd?7#`ikggVSh~A?{XhQn^5OlL`O>t>n~Eeozb8kV=FxaZ5z zQe}1r*^~E*yTZ*;$&&F8lhQ{FG*QvO?zPj(867V8vL#jc@H?f#I;}3jZnG+gknJ5i zYR+7I)-;fK8AzuzkMGSZd7nr%v_Pk?`M z0EkMtQ_9MRbzUKT#$0+M$q=AzL zIzyg4GzrpiNpc!}hm^8+hKSic<#kHS)G>D3t#@g?^^&Wlrtr9rb9UC-$NHase9L&^ zy32d;ll}xYzWLmWU?*YQazQq4}qRJ-L?|`i9ET5zB}b;Q8{5J$$~wbW`P?x zhqcO=uxw<=)1_?2P%6`%0WS_nR12sH)c!1()tSgevPufo09Og#yN95D_H@`c`o z=pZy)Za2igdmkU(7=Wfnd*UZA-R;kBf0d+gp4UBBj42Fj)}n3@fERieh!z=zcg&SE z$iH#PzxOoo83UF>!89%e%lex0jINN+XoQ}eDp+i~YYn_f$}Nuuz0rhR?;Z2wYTq-l z8AFE=Me0iVN#GiM3G%A!@*hlV}nSb=b zYpD0K;9Vn=Y*i)I2*x?Kv^WFygXgP|K~H;v?A`P3?x@F*b>!5uVXNA=u#f-sb8sW~=GEo-@!d~lFBx$drg?w;F|jM2_0 zZIm`g%G2#scr4Nap4Hf{l9Jxu~PVbUtvoW~? zGG?gKb0Fgtt|U#hcul*MJ#!fYw6m3=shrrNDA7xUA_>V3+KS5>>vn|ryT2f{=g~fd zr#*M+Zojgx=hwg*3ZuD4KdON@{w%y6BHZP+UMFssLs?+AhFmADj*O*@fH@SA^48#z^5Z6sRe2SBBqG7w~@#6L0hg6gYN@R|kLf(Y<|EG7 zkP%5Pjy}Yof%j1$YDYb_rP*W$Db=*342M}d*X6SPYJL1uynKHB!hVX2=ki#I^W^or z*$C_Rg?)V)1E+n zYB)-+RQ^0f?phw!ybsmBzr<8rCZ^F&>|1V6H+j{5@|bIAY(&z%xlXMZxT0jNT_@O@ z@SM5(7>OUGLvu-_Fx{6v$4tm*QuPu2?73-lpS9{5_;Lm@!B$&YB%D+t4z2~FCJ!I% zg*ZGPKK=Oc)cV}@`{si+BD^(w=55b~g4IAUQ{Y!z_xRaz?Y`4semyvIXc%E<>4iAm z8hZ`5bj5m!W--t86;j(!JxtddVZ&tJxzx6$eHAdjdym_nVnWxa*pj3@g0s$QUN!(U z_$ab^>2)8rK&*hDJh{9(1LGojT=Zo}!0N9wu)n!Cx)mB_w5=;A2^eJ54G}uTNyT$o zsK~=_L*joxlKm!L+#VlXpS^nb!-%hYV(;)z$KEy0+`aBv`4zKW^JsbOJ(|g?yKkYt zrrN>L=e`?Jx=rUa=V8ZIO*5%RTCmf%duBzQD^#_$U6~h&vY&_45H0(-d#cN77PG|= zoG55#pl0n$Nh$MU5e5$%aY~dGmyyN^9?DsBwhar$!LJ+k3T##@2n1nr+v{xcT23ZJ zFD)bVNHw*B^mbLNw@{aVvh!<)7Yk1gBRP@JVX~3jm{LKliI>+$b@Vo zF2&T+tJrZw=VH0`#U07m`1L|WF|7O72Y#5=wX4u^NNRn$wu`k|e;&m%~86~E9 z5JqB>XG_$XvZ4dqd^gHyM+1~fB7>qA9TY?i+3S)>PjQ>zciZCY!G4k4|MdCoyGPsN zCokaLlkH#k#Vufr2$0%Q$*9W+Dhmr)cxom|hl`h~Wv#O=(@D#-M2c3A!OpeTlBaTZ zsl%mdPTHmKo}eG~Snk_Ok}7ox(GM#lCHN1c+3iKFmQ#Ae1cZrt9-XIL?C+F{=A5UH z4vylv_Tkapfr6iK2MNiCf;iJ&n|^vzqV+{W@h|U+>nrB$i}VFJxkit)R}Ey z9{=xOpX`-xdb8srApiIN_TkU+vzPLl-`+JN=s(d~JH_S*!t!&++O_9YlbzCB6V@da zC>(neBrPu~LLY%70H0@NTAd@?T9ut0{0p&a8$>~rv*Z^-fG>22-%F^HxHt|7a zRm9d@_0R&x<{vmf^S^BC%O@RjWxJF zTi!?<%vLn(bl?|qIv<>BadLyPpK4DVVeZkhdXFJ`sUL+C=a3YwUxh%fLkBsty9|XM z{*Q?(lFmrIaevx&iM)!l`mD>&S@4r0OZ(Y_sd-1;cRQ*DXRWE2$eN7^~1LDdqzUecL zU;uIgtIT9nPD6YZ&SQI-(=w9GNR-k19tB;-j7bWZBzz)wlJ?;zRp=;@97`S8PKmkl z%~RznoO8REm2^Q0p?GMgdeCVa%jP+xt}mlC&|X7ORZt6+blRr--C|mgG(9VVWPwwu z$IlcQeqb!;-BYd-45W;c^DIjJ^v;Cz`c%Imr+fD5eet8ODDCXaBsEDnn!L+aK7X&c&7#_Gd2m{7d=#7V>+bc;}RTSoFHY} z$+s!-eAq{3*@NN4!M@P2oN}X;6zi>>**yxcGR6CdQoWF0biOvdwRvSLN0w98{TnyM$6w>h@j88CH2NIdJrG3b%Y9MiRo za1lv}*;plp`7q{UUX|iHWD+>w%Xz@~a64LY0S~Tw_(bF@lMU`yi&aCzauiCh*O@%! zzqKa6`(*p=f4uqW?dy5=i?!_Ir?)@8{rvXfruf+_d1J+S?d#OtM$cu#!(F?z+$&Ut zh8G!3^{{2!U8FrF!1$HQ1+lg>nZr(JERW%R5qZr*Dto5v1^!1*%k7+_xoFb9T+;Rc z7SP6$R;}K?W!qRiN`{tB&7z{?&bqF1O>EzN5B8L0*!Df5$ZUWdsx;k_VR&9`j(u!4 z=V)PCaGBRp4{(+NKuL%l2V^gze<}#+PLC0HTjKxn`NJRo_%7bO#Jg~OM~{AypS*(K z!WHn2Iz6=|9*Y`v_F>vq<)+g!i|heYm9aK@`F_MLPd&Q~pI4W+Xc@xqUEbAZx-Kqk zu8QxRz$A&Zjc+aK9Ncy_fUOFK{x(ao;^0t+&EeevLqi`5&kOpXrboEYG z&#LV>b4-=Wuc;kE3nyUu@Xl}Dx@JysIw?JF+?=;{Sg*CLT8(g;)y|F+7-XKM9xFMg zNfDwmwJgM0 z=QhFi+jsWb(m&5fjX0t zQVwNmIc4t*Xg+6QtU@iwcX!L9Eq3Sh$~yYHbad7%E&=(t(!)4q7cQG`w@ghL`%R4T zt5JR}9&$Rv2{y88??R?voRxQpo*_B45K->-HVJKUE?LyrgwO=98Cxop=zLM9Rd!Bi z)?V$bvfO9)v@xw$)w@KZe|U*E%U&M6O`pAV-!d@Zliw@c<~l@3bo)GOw<0~CqRV@> zga!oC!Esr$DSc}vYhL_Fc#&fwK?1C&CR29~&h{y8*q9JgXa>HcHyoW1)7|8bgBcRM%I;_(6qa_YT(nU(rtyaAYNN{&X*97 z_0+XmEj=yswD{df5?xP=KC+sfnOp<~tKo+`BS?eZLM3*Ujy@BL0{g`=EH-!K#nRq> zl$LibQ+m$5YCV|5=}7E?7mcW zFaP;q^9z{MKY#x8)63`B-%N!+dlB!2WaBGW?__p9T)<~63F8%6x z4qyjZ$0@TQK+36kh{<^p;9*HGSC`a#MJkRoktmcIT*?c>VN<``&GE3>Ef!{EY1r+@Ot_ zb0Oaa<;H480N928XbZ-HwctB#dwL{kBPEoOpqFK2PaAy-N4v8}`x2g0-EF^Tm77d%LbdsUmW@6pYT`+6!8$D8?#sYi$H z3Eok9u7%jE^{T4p?3UKJ#3p<7+w@_h`?!0tEYlgx$e3Kcks8jHJ?9Rf4jHm z?ZZ9Nvsdrt%lbFW`#hH?6uIyib4Ro#MOwIjkt6Z%?~J(yIZP-VQpQ-8Cd!Yz6POiV z7EJ6)@=OMQI4`}r`F%M#?DEsLQ#xV7EfWVq(d2ios+%;Mdkgz$@gnJd!Di2sk;x2_zpb-Z<(C|xufNdRE*Hth4 zrK`$6y#E~UKfl>;Up{_#dHapI@3R;27APTK^Jz<}2HXnQrXy`4KLxvJ)O{>OqJhvp zB&C8|Jc)|P#ylzz&nX$>F|1u<_)F)O#NsrleL z3l4k^yxXbUh2I+`WqcevnGXiRx9EZYCEojo{r3GI-@K1Me)#;>K7V-h#eMc7-k(>$ zjto(YOTj6Vt>t`TwTw=h-~dc*iG1=-&Jo|%;3BN1Ij}F9hxTifU86O=3$-0vht?Bi zzflK3q3GN(*|a!_Fz6%B4x57v!F3QzV z;Rpd}Y?oU3-z=AiI2CDw^;wpc;?|`_D?{6Cp{b01m9@B`=N*V%@Sbq_FUMX!zde8b zb~EzX>vuoe|C&t0bh|shV&1brnqza(r4QX$Cmr$KRReFD#KzeRvLreq&9lu_H}2QB{GC>D|Im1P#X@5o8R-XCWyA% z(f-Fb@3>igluCQ@!rdDKzm}}#ZocMm8@{7TPm>*^@o`Vv)FNWm5?-PNd2}eab78=h zr~;ybDVFN&WrnvS=+FQYwQ_b;qoteF*QjjfK=yD%k4fcd&)YAm>}}*NZBC#qXP%BA z9vkgQdPF9=f{;-gY3R&trs<&eSVv-LA>6Cx(z~}jVlo=e(ndK6GiW>KDn^f@J*UQ` zZ}TJEill`KFux1_-=8Y*{^d0dF7dE4;M$DLrV@;w@7D!N4>wREz-TdvV&VAb0EB9u(-^S8@^%CzNjhCLiYQGG)q`yHe*Hk}aMz6JuJwf;l z;U}wR=E#1kwnHIAM{VPh6B?XYZBhgr^J#1JSp5pYGH-2rZ_{MC)RGIcT5bEv&r5+> z#6Qq7`sY&b=1c#0e&uH`;H_Ud{~Y!{&35jGL6@{0Jt5(%aTX|ir__}a1GyTDifj=K;6qW!DUwHMCp=!e*TALIW-=#TjzhO(OL!Gsi6eaSo~J$n>i~ zwBUSpc_i-Z~LTQKGc7DvHy641Ap?;eTzQZdUuCe3p(@|dk{a?ds<7na*$GoKhSS|!vxRxUjwEX~IT zo5NLZCx^CrlR+D?39G&;XV+c5UWbAS7nnd2$p9{(naBYNvB&~TkE(X#uOuz)Oz0NG zNXEBQMm_zo=UADy*iLKXx63IchmJk^?M~^R?9(H;=d%~>TLM8v3*OYt+wq$F5J`B&8F$e3vN2p?ahzRKD+F2Pf-pS z%H*l%9Zq{rqlUOR-#H_5zHoi)^lY2h?WvoTH9>qE03&& z-v=G3-M{w_KYp~&Z?=85 zN8i&YFX1m=q~rV2zrIMJFTemDJ^DQSXh6Rq*e;`|iqfvcDU?Kww|Iy;lUCJ~xzt*v zZ+BR@JqgW3YTea)!6)w4W&xL51wOOSg?ve+Em}%4Q@-6Dg=^VRZ2Cq~!Pao*mf+W% z<89xxv@V3E%WyDcph0V(c?`AP z_BcP^lK=AA{%=3TyN~hd&7bYv+s&Zx&4-WQ8U{akIq#mce6L@Qt0k2C$pa5cl1H04 z&oKhwx}unxCHJw&rf2%RZHe-JEA-+m4-{$h0>L7IE3q>T&E2AMecfhIe8^S257=c( z0b0|a--p-B?Q?Ez3`Amb((VLR%0-4-OT6;0N`;LkQHmP5W4~&aC`pl)SQnKt_gacs zOcR~fEKy=eFn*}WMq%q343kG`8Q$J7Mg#a9Zre7$d-v(5H*WsJ!;ImRm+tl*`wGbe zFby21r?RT1Ry}Hkwn$rtOX1dR6zKL*g!faj(^{=WO}3s`-IuCJoB_-XI(qNx5MK8S zN8aO9bgZfLgJ2f)a|lBEyxniVx|-K$fUncWJG2h8Yv^^e0W4Ep)3;^Bi2EmF}{Wr6R4~1|t5` z%iEXF0gdVHqm0Xw*X}+BEME;rsr6NZYKUtMod?KiSV|(^5t4YxnHK1kGMH^Q-UO&j znPJ7$MMK~MPtpLDoG);*OiyL!WVKSI?{%urj5_X&xhDt{iE+DgLbz426EOdj?4W@8 z=j|*OW7DC%--u5t2$ zb5&Z+oegF^*hyMOl7~SP6Kc}YYC;{|ijpKp&q*++do7uGE)d2ga1Jz3DXf)%7y3-w zZQUJHC8m{*lKAAr=BCLAx)r&khVxeX!qLlV#ggO#&0f)@5?=|eZD3oZ1YB3uDP)S~ zZr7DSa>;AY3bYCtA3}6fzG%Mt5{r2og!s>IU*3FtXK&xX`DUx;*$a4orP{uZl=9ld zX$RT`yyfJ`izwJ5ylxSHy2Y|v!x|c64$rE;A@^MfUruX(O(kO`&NQ0 zq)`Edc6z|sPX^hM*Y4+x=#|S)rm|@l>;0~Saa6C0;y8&iY9`vES{VGSQhef_D^i+g z1VIYLMa_g}n9c@;ZdlncABs)8#0uU8!nAr13_@eGIc`b?a(l@PvWlF-eL7BeyP2VEv%m7|aGAXGg#u<=HDV_x~Kn3{#p|^C8x@M%(g|8L) zuFjlkwsxvWpYm|@`*)Dv&tAUQ$NHNuTcxigQX=lrMys=HiAgN=m<=}9DRm+>f;Eln zr)tXk zRK_)>N*)^-2C;W3yQ2u?Z#bu1ofUN%(vA)Q0I31O=Lx62H?qelwDytB1Q%~f2C)!) zikM@rLHkyq%qwk!-IJ$1zM}cvPk($zq~%YKvZK#lz}JWRYaZ(V`4#W6xN4SzwSe?n z&H>(J*8?`??1Mi(MJUt|3@nXOHe-=0sazm>Kj0YMyyEtmMSRfIZnaGHI(1vO0yy<_ zU>vAtYv*Pv?5 zxUS;V0lfGY2sh2vs79q{EgJZS0-$4=K`ZKQT8Y#S8-z}KQ>^j-*`>kg*nYN9wXEe7 zwgYgHON`7I^){m<%S%${s>KwkatDz+b*R)m$5QlUo_oT~CZh@aew;-!M0U=bVp!$s zt!rzRdPiqPtwHvV6Nq{8x$7y(A|*>s;QAKvO{Bf^W8|I#M_0?!INp^sI&}LQRdRSbNUq3$y7(pg*n6(j+f5rq(7Mo4nTb zC0h}sr+c41b*HM+PR_|2xWf?!YgkS$t+}8BzkO%Xq}liVD{pC5hAn$k@0R6Awk)gb zRf5k}EGNcaK|DJ51$!JG$ywcj(F7Yo3Hf26-yNcZgEl zdNn*;DeP>JpXh0QEhCgLMql$zcrV})q*`b%ati0c273oiAtnDKXAk@`gT|2?x2i61 ztcnpKwlpUoB`$5TfMrD@X)d;EBO9|)pIJ%%LZ@8pz5Se(8W6d-~$*u$^o2 zb+|Y?+B<3pL?(UrD2HMnAfinQU2adVGnSP$1(PiSeKLa>S6h#f_CXIn_!}=R{dj_g zmL?pk9Ri%PgSroMT*e@`mR3|{6^68OdC;@FEdEM9lOoQ9qLWriw${2$xO}(k8~gOh z9(_-ry>h?oPyO4Qucf#y7LESVR;}AEv6stS4VPpGMG&Vt6HP4D;EiS*)z1!$qyeNN zTVDtmbE?woF;=Qie&i}8hh4p`s2Li!ILOS}Yu}lcf!^YQNnPr(j57w#O(YrT03agn zuuCb>^Z}zqE|o*UIu%yZNqrVZ{6kI-{>!bmEq;y?d>_HV#s_Q&Z9r~#_GKB8k}f4( zNZGiBd-FhFez1qK>}RjsebnXau4zP8!X?*$(R!k>(*=Xuu?$rzofrr8SvNIqk&Zw- z$&5&Lja72hd~TvN1uS>pp@e)mGik={TL+1ds;UK2mJPn3O)rqx91teK8Y z^DUA#(8le#%F1Ebn`(%P*X>1ToSJG6w2dmh-9QA;$>8XIWpK}mHs@Jf0z^5*#%QHL zTiS@|7j`c!zjqu6`!U}6H&8rJUb_1+@YhG$O1YfVsp|=-$ES7Ol5M^QC8B zFd=Wq#mhQ0BvdQHB3pTO>O#wzj;A*Oa3M zah8D8OJz8N?sTdgtxCDOSKVAM~SVAv)r(=f;;I} z@}NJRmO7|$!zp2DK;u1qawACnCA66E{`XSr4#KZ7Hx0kMhn~W<_bJE@+bN|K?!3xU zMe%j}CY>g>i7lMPZ&N8FA983q3T3w{I^DCD@C|oqtg^C?jq7yH%M-H6inbWhi_Cdy z2Kz05iFnyX0||O$IU{*Zk||u74*)-R4$nXQkC$+d_D4@%y?g6pdTp$Zy!+XuWXs(B zp|s0osxHsvGQgCh?C9X1${Br?HRp;1{I+dZJ*88ybnur!+`REa0w^WshP}C~UM268 zq?}n7f3I|g_HsK|(i1(|*0i%moo5)A;h|iwo(wp^lk+llHMdxLmGCQy6e71R&*}~n zpj_Fb;j@gkpevP`Yu}wjn0p4qpG*grAN1s=%;vk_9%X)e>2~*e+){n&!u{fb=I`Za zWL8s67$GTC5)NY0eF~Kou`tdFQcG8*7r7#*G&2hFy7%N)BWki(hiEeJje1h!Wk-v2 zM7r3DBk_e>HmDn%-us-KC_N)>ygkOWG}mmajX9fHQ`#_nX1nu+U0-qZ>wLptu=5W^l$i5U1i=qxp}&h2xOHS1!^1#0FiO!<;c zpqnLM-KyJ>gLvg?0hdU7uHh2=8EZ6IlFiq?y;dEmL4jQ|dp%N5p%Z4?lx$=@lbuYO zeU&j+<92*g*&Hg@bfts$KA{aT&fe37SZ*Lu=}^d|r(SWTWB@8d&N4OkwPT$#_d2)H z?q7d=^ZC=GBh0gx?LPMKb$(R26akjt9jj&dQf$+aj^x^kOUpBIDP@(##o*y065&}4 zn$Lq5R5hcIC+kpIauDeh^^HGvBO4lX98?C0sa9{PNj+=#@VjaL$mTmD=Y>Wn)9^fN zHh8_+3xVhDp1f&pDG-bWm+Aa|ww{*kTqn~wLyNj=D|L*Oz;ZJiw9LajN0?uLNULPP zl9C25TY5?l?`gg}FK^;MK7V?Y?0)w8-BhIV&)?ItI|HrIG)wI*t=V_lWQ_wJ^x$}h z2K8L3$d%3@Z%ZC^rnw<+j14uXshyeWj_%~hA0R6j!yBUY=}66x^(wm@)icjb#u5Cs z(HLBlkH|TXlev35UgyYVuFh3c8*AqzsVeM!wi+}Xuz(j%rwZB|0LlpNPj$=`T!Vpl zNEgy-mwB#1v6Zzhntcg7JwkU?d0dhD?#H+9-~RaaofhsmuEV^&#yMI+4tsjU(>0UoiL2-s!4M!YFe^= z+u3H4mC1R_yrkO6ednPf&=<5eSm==GvNtT2s}#ZGWM^e7gjg3Ap$Wo^YbJE7Ib~_L z6W_MZZcIvJ1r7l#9uw_UUx3X(kS8=#(YHmutd=9F5gM^-9uzH&Jhm;@mC~MrpLGC} zV=V&kT+XDOW)ylg%Ti;+u3A+@9$%OL_T$T&&!6JagMIe$-F{hLv4zXM&l4??zOxw0 zU2h*tRcQq{`rhj{Xq;B9?c6-urKQaCV%WP6l0JERcEII~gMqQHIp!jL%^!O> zK)N%eXCScT9;-j$#oFxiBGXO$XRv67q*J$AhjTMbi9a6{$}3}u7-uYVOz5?0ib);g z6f;{f+NCNQa)Am3?EpP18s6Rt{NRSNAa-uGw1IV;H^-sc*P3&D}yHv}U^Y(3)? z@Hj)(F}*x$PX4((C?5y;BszaXtJGPB49l0>$JV+cvq!n7Trkj@q|=0+Soah;)pO=J zm5|>_t$6dTJ8F-GO;8wCBv;jvCr?}OQrPH4NCAqJdB?c>wf|u69woY;y==D!n%7h6 z>^f$1Z5#(J8}k_3?QE2JO2|KY(>8Kl0VPt9a4%h_MP(?neQR70zCFr{fcG?d<<{W> zf$dZpbIhux7uhG_vz3YLyC?6rJsK~XSNGy=6cWwbvh39xWihVRYLjtEuX~a@nzg!9 zqHt`Zrc0((XG?XEnYMM*bq%f`+ksMfQ3_XPZsBLwzP+YtYP%SD+*R+8g@0%7`|Opw z+xxy&qjs*8HX!+sx5hjjO@HdSR(6{oX~uNijAS8t#(va+Km!!kntMr zm|zd$wxI`u^HV&fOsSZOkF!ff+)fhz7Hn5~ps|c}#)iH!+R%a?IyiwKSlyFnWbFC7 z%voBXW`J6f?4)dv^XO|!jvZiTuSnUej%U9mn~Q^Lb=xvv=8~gLl?oPL*-B;w4y&5_zPMMdjT$+^I$KLj zHPgndKT;{KLDCBKPhZ9=&cipG#<1&mD`taQK2f7VfRHM}Y0r$h^2_ z^_9gE4#}Ob7<`m%$Dm^G+A8;~#x!rEjcf(#wG>(pT*b^X3PN?}&2{HfUCx0>j{H^f zSpFi{&`X4_AhymW>@GW}XrA`qx;+Cx+TNGf;&S%N{aD_~Av2Pw%*X|NCM@=aHy^Zm zk^y})F7NyqXv(pWtEIK5^Okhl2-!PsBl-X6H2Ub3dwCjN&rcL5a}K%y1Hc4V-x&)* zk5OiuHFP8geK(UD6^;tupOcc|>e!x7ZklG4a=9M*I3XK37FV3UdY+VM&u|}3883nK zN<)gl%)XUwVnZ{b8ehk@A!n@6vQMj3Q6Vp6?J$oghk%TdhgSbyG_PSgo>sGQ${Bqf z-COJeLGabHOG^WTc&~&nQJRkEdrC!e+QyC-(Lv6kZ^G}#K_9(#ujptHeg_zm;tma} zHAINH7Vzc0v1%jC;cW$-QxZfeUVw*oD0`T#vU+ff8fq(X<_@OLsd2HrG~31Y zB3lIoy^ZLp&D()#qCq<1NL}E@54W3EV_jBQRPvEZ*A-~;YA$}fr3tZUtUM`^A-ls# z%CxNW(4wJ1SY;xi?Lh=BkRD!Nx!kGEJ_~p$I0Cm~>wjHu z(8X?UC(k+FvJi5!seSY|$0%dSJg8^|Emy6e9r0yTm(CzE%e2zhu69vQMlM-vI<;xu zoV@D>8s!8_Mp^UrGioMo=2>|`0M)e>n4nOpdZ@)$f;eWgbt9$gi{jw_a?d%z8 zRdiWWWt}od8w#g?oZ5i=oRiZGlU-Lg?_Q|oM4q)TN;$_cPKXub?nc5!LfrsIDnrPt zBTvgC@o(udU;Jz19QKn@LL0o|-N*Hd%wIFr)WOf~qR z)Lz(AlF^2b3J7v(_H-7roV6`7UJS`{7Qw*Ud$(Xb7t94j%XuL=e)THh(aZMQRYG(8 zm0A+Vpj3S9N7i{iLuw9p8(^t zSV^&Lv@=?=q3gu<#g|9ak#FC%yIG04Z6%AeT31iCKoxT&H1ucw&>}ixwM)ax);Dx^NfRan4G-del&me(|La{ll|yb zd#Q+ezU^D>Y;}M;4Ps%k3UWk}tc|e~DaK68N;ZD4$$ndVTcjy*44`?l7k`W@*pat3Jvl5sp08Di#>OouCU4*{g52nw8meNIFe0iXd?1 zvdk_oCC1uy^t3pUf@`W%&Te&jN(zK`wzwMkHCDPExIoM>^~wb&v4%6k`-Gxzk?w!lhLK-o!ee5H^wbh$1Ww! zd3y@|*Uw)+efs$H;M2@md+chzbPZ4=w@ zQFJyLO^(%Ndn7o+V~*(@q2RnPybcr4TF{i-=EAHO?a`4-y3=Ux3#6h>V5*h4CHSsY zrq|WCYu@f^-37L^?&K}eI1xb3bye@WFDnl3i>(Pm})tF1pwAQ^&R&%j~3kvlzM|6IhERMAY z>-xeuSMubq_$*(US-qT@ml~6a+n5Uf0eIQ1wI&&>(d<;1L&TWxAF zrIva{Vb5urvO0t_Kis+WE?VUR;ac4@6+>sZ6O$dOYLoY0HmQdSetrGv{`)f||IK&X zg}nQCk2Lw{^?cRmoHoaLF>>tD|>H`4oIef+dX^&`NjT z^T>6Jenisrxv<*hHWfvdw>^&!EellCoFSu5!0|72^I~k9%4Y9G{cCf7XKh!N&CxsY z!X>Qjp}uo~u=6cf+>>9|cOAg(+DXOdn7I=&th^EFKFEaI8M~}qOTPxQ(vOUdKcdzC z|Kl;+N4?iKe)M|2_G#v8E&6l_Q#qe)Oe#q|&V4j3yO6YGE0Bg(H=h{R@V=k}HP?JB zufFNpL3+H7-aRi_adwKevR2PU;h|e;lJR&=uDIy+h?Ug@zL0@^!xprc!MRQv@w3QR^2+~5d0isP^R%(SI_C96jdertw zQHxDQ4yjEJMmt9fqa>{eQBq9vaj02O#iv;Zll(sRsZ)1V5;vZ2Z~SL=->N$^w$Pdl za##o_cL7)=iRv2GJUmMTE{g`ud`tY99rNCR6p-k%l%}BLb~?b>TWT$3Td?uetyV5* z0dVma!0Ot6_U7Js&cFZqE^!V97Nr!<D~$W(d+nH z*=CDw(j^j1_%ph_y}Mj|+EzHSfvBK!RINnM%Xb=JZvt)Gk_$^cDTAF5LSdW(h1BaT zZR?yX=}Id!t-a*<3V415R}KL6+W}9dv%vSO4R@%qR)cU^^Vy&U)>y5cv6s*@HDU)N zGrR$WlDRi-d!NIMfDP<9eUeS&hH+$qO`M8R6*${j!9?O$KhZAt$*mRR-}I+1A3y8) zYUAw?&Z53nXTzm%2xMK@zeAJ#ngT&6`{=_Gz5b+;2s ziC*&irJfXnU(~e$b!&%~ayHJcNdW+rtw1~@KGZ3Bq_)>Wy1PUAIDFR;!(9na1(oiQ zcyS2+&Cd_^-fh)`m+qI-*!suv-H<$H=^<4jSzew7snp}F2~jsN6$&j!6Dl$ioNJ7j zH5@gPc1o5=xQ{|$9=eco*Q9g|EP8Hy>6EtnMzlpi+ELghO}n#mdV%OU*ISL>dSm*y zVn1^yE9AHH)_RTWW{SQ{}T_itv&3^g$oImS`vS>tU`AjCih5M{gGu*LOAXt?iH2`qc zskxuR|7y%IJT^UvYmC2L&!Qo;XP1`B&S#7;yrX(#9SoM(SDIpWP%k5wQ<$sWB3y9O zoD2YXTz~Cuw8WsW_!NhAp~(j0_wd?Fq+BN$mC@4`9|W7lW(WzOpMw^SEPC8?s0F{X+ zw`3`nWdkMmbbGeVCAsladg#gEf}vJ?PAz1VHuuaMaJ{22;3c_qdOE2v>>CZWp#TQn zHq~3eR&F|^MjHtAoC|8E?a1SIOCu*NQ`%3hy=}RrK>XUyPj_Kxk6yN$^vfS}{^NY! z{CaZ`muuA7i{x?m${rb<2&ZSF;<9aRXL>Qi)fLU*Aw-gMheDAwY5^XE8@x=|j+QA( zP(3tQrwE@~7W~`TS|)cgI&yj8Q4o=s*`L#{bW)rB4zhvm#L}s zHESx6%5^7V->5gsbE@zZcXbJk?Pa8nJ>EUYBa~KI+j)liK#}~yNdFuA`2N$^r?+tz z)bik^d*wJYsBE+jl{Rz&$n-@|Fv{6wMULeOG^F&lW1VQ|E&HnK;D!ftV(o!}vSkn5 zGVHp(&V@_THFDBwQ1)f-QWS1`(tLW~kj7#xm2wLM{AbxbRw}JhF2Gm^iBABFw&A);?`ONyUJFbBv{xNN}V!e zrm?|U*K1l}ZFRrMbl}UQwls?zB#E&PS+gB9F0$=D!nP>f&z3gZ(cbNpp7(}HnMLa& zdEGm~Ki}uJ+W60Z{_*MK`+GUyN3Yv!le@D<6Z|-$XsJk7`olyR=rLp zF~COxOy-2il~FcRFlLiRs*c*4XB90MCHur&Vb%y))G`Z>n0DIIw)=@BjzG2BV&6Ds z#OkXguePFM3i3Mwj+D})miGT9(>s`g_gIDwAQ-1!` z&RMG^5P{eT$mZph`&3jgK#2HLFChpiZRUcfG@lDjG^jg63d|!1mV%=&77v87TF0u( zw3H^XsV21~CaI2+af8mW#ZqrCfWSPTROBq6)=X9#rs@jPBXk2s%4u-L2e$6`i3Ia` z>f9Uqi4M+xfJpIz%$Pan-oT%CsRIg#q4ZgK31w@>7bebs{`}>qcW>`r z0Y7-%Zs8u^J5z1D$4-3YJBa9zUTjK?w1)Pc$N_mjVgRh_ELvwR;RuOW5B4z#3xM?P z4uiEv^n%xmwcXvcFK?iI=M;2y@Q{cs%vj>$3H%aCeE5=8ge3Z=wiX`mu0%6g7u`Hc1A zDD$hYU*Fyft37(vUh^g3vnO|PCSO^nBk`@XoHVoR8SE~K9k^km=b%tNH?Lu2smJnU_9 z+ve(RkFFaq@XR&)lx<_Gghc5>UD;~RI`$Y$F$#xQzSFvmxw&A&TU#+v@`1>bedM zntXXHb{vEO-8-L9Ezg$H**gd`{>{-GVnnNJ<&j!R`BH7Q!cZRf=qRa{IY#Psb`?6V zly2bL@zK%nq*dqknkkn3@*s1?_+LQ)KYHn2qk1S+tx0Fc`&?V*&SSNcdp(E#WJF(* zO0T(#XV3FG5*SGjkLcZZ!+w=Y;-<>B_7kf(X{@Z5#KroVXP&y!B0QgC0FaXNOr*KJ zKQdFs5H-syYT?nLE}E&m3>aF>ZG**Q;u+IVQY{N#V(zINBg&Qa6Bd z(mPv4dy#ktf_v7v#ab;d9TZH`sD*HX%*62TFxE@i zSnow^hFIuaD>eA&hmL;rGkhgPcM@mrQrc*GS?q4ltd5IN3Ql(?9j&F3o|d)ds+GG2 z$R1KOu8TkaM=uiIUC%^k-AH0IEWy3Y=V&YLcM8$fwx0lblm>zrX+i|P3iXKN+ z>IE?t>$+>p<5-RC+>>pFkz-mnx(U};Tb~e(Nu!Wi*DN_t!eujGREx@h*bhVSy2NMdOSxTq`c}J85HRVi=xJ0a;JVW?YJvJqg6|41@2kF z^Oxc$!Ub#@V%y=+IsH$}N6lCE>k)J?Kd+?_dVDnQ|c^8nlr^a^$e zu7G^Ge(~BhiL^Z8jAaK#4~gFiz6re)k(pItIz3BuwY}(a{BXYhaBrUa=w*8erF^~& z?hF@usY{8yE;3W6@eLMDg^Of-GG+FGuedMSquYS;*g)MEvjYaSLhkhIy7=G{SY0tVwdGRnO>K}6uWLU1yd`U1$@=znVkG+QI#WO`OSeAG-+%TiTdIG4 z`{7=`^wF#LDj!Yzpg}q#NgjT^lLRr|CZw6#(K$AO>a7`9dggfGyX9g%F_xBjQt&GA zbve9*U=H*O%va)Jygbg#RnwW{Kr1;X1UUfI>f76hrA>VqoB3GRPyXOCCHe-AzhfhF z;}A3@)yD4;J8iEUWU|FBTC^7#9SyZ_@VWsyg(6+HtSe!Mo8az`&?AjAgOkOmsn**M z>3{Ld3io=cRK7P=9uii(m+U?W)URmY<0048b*Y1rCG^$4u>AgkYr?*n1t-hB{1eu!h zp(RryIP;}c=P21XXLBwDxR^~d$D&lm1xn)FSS0b5+H)h5Ss`W#@%C+Olj{R0{r7DG)0;}$438!0}cb#Z?E9m4f{X6Y>rgT# zvZtY-i`8=*8V&t0>|F2&p2s+v_~eu}+Yr`krzG@tfgmuOHnWBI;NpA z%PXE5O4Xz9e$LBR@TiKPLSk}Xx}($!kd0Uh#n>KmrH~P{Cl9CiG3$ucCw(nXbS#q= zuf_JvEea|FN2=Nk5-m6Rs|1}al@vJ|1@YXd#g4w@m8bh_e|oyxzk2lY-9Fa#Gwyjb zwJMqH#axNfu#?5zQO|X$H5!a;I$X_@o3v<@z7ry1h;JLFAUm3+Fr_NumMNMga<7QI zN@+@1U=bDT=fn~fPfFRlPOYDr4@D3k43`aF58cjWK5De$cSx!HjYDh+IUtW8x|LwY@_|xZ)AHJP% zkO2OJ5AmZ{^>%msJ#4rwB|-y$6T#CDB$tJO#F)X^vNStl=ms(7fZ0RTqApZr%G|yy z?>m0Pz|A8%W<9m<8a5iE7p%{|iEsN-kY;T0HvlFMFe zwVvzMC=Sz8dkP(`mZDyFTas(SVu#bh0)^Dov5`1dbp;3q>B-NWaYeJ2FD_cbZhMqz zT6O1cZi_4N*bUvNZzhr2Q_BO#3rUcj4(ZzPUBhwNFg!2JF@cxudVoa}@jTw!*-~JJ z9+~ATb)@UBu}3c$LF;IPe9-ak_7G-?h8+d4Y0quU@e)PupVjY?w>IBMto0o^>Cu*h-7jRumpC%NqUc zoiBPiLB@zdLuYGmYXCQlR`cdGayjbeNqN}1odo>H^*a9Et^#BE=F@q)FGP9pLcVtN zAzoA1=ryNd+xYBD@v0lF_R0*7lE!Eo_MWGlJe+~!I^ke zF5>MRZ+(wEQPdlo%3dop>D_HHMA8jvnF?PwK;kijF6v;uP(kL@28Q~lPs#+XN{O~$N}DddaWdkOWs zz+(UYr#FASs~LOr;=M*HsE2q|mNC6F(E-~u=0c~F%gA*USGFb&Qm4~VNvSP$^L`DI z8H8Kpl6Q@+tuKCu+2a)aBYDuxMU6m);q*Sc!Mj03y1bNp`%ra9Pn!$EQpIyKP2zQs zT^ogTn7at5r7`M6JF;NP&2;oC){*P;UezK-*xIAh-~c!%&+!Y@Rx(L`k~4#k2zEK@ z8iTUV?I-pR@816K;}@Rllm9C)WS zWF_{999IHq*FIWWo$LEf{?sKp>_Xz=xA#z=-hQ~ZcY5@yy%u)jULc*k$B5QPfQDj< z9f&0@$jT`Toy39uIBURlexJ==zjG=^t;_T@u^+-zSQyGc^ z;qhjpUNrC9Lr$K=Ww(rcwX++R5S+cLb(IrrN$&Tl_Gef--` zZ;si$8;M7+-OF?9{C2Hqg`JzqKCrgU(NLb~c)9w}rkD3%x8Sndvh}J-th$mDlXLmD zlnr{#5FC92SIsMD?syRoRB_drClv3>$kZH&$tc6Oi}APt(B2?gu*lJU5W7av=^7c+|xJC#glw~^}Ji&$IzuB zsataUVg1!pnBKijeC(>d907d$gcejAYb4J!0&Vo^;ySIPLK|qJ({b%KW!Ea!Ekb-> zUtBb|dz!Ym6$Nq@VvN@M)j!>^^{YXWgF(6KY{bMYO6u;+-r&;&FBGO?wow6pk z`DcWR8D6%_FTSk}2hsT2q22qfTMRgmx(%*F4gkd|uY- zE2t-DH-X!7`$hU+Kf8W?^5=8SYX{axFX8P6b$$nR;Zqwe4ag*wn^Vkuxh>-&F0YLa z7#+k}Q_=>sDJOCUse>Xj z8ubVGgPX*r@O6`0g?3{>C2t*S@Ozt%UiRd5FOxxWGxEHH9>nQ7_Y4B~NvZDJi(ThJ~~{^tEh`}*##K>5Mz z_sauKL1gqTa+-*j>|K?;WbxA0EL2N+?pIh&9X*GVm)$GP?yXsKUjVcVSCuXx?M7={ zix98U9u2JNR1}MU|C!{nWrLAk)ftkqvL9BjlWI_%MTb1I_hZXsR)L$$WoZ zj_f=y8J7%DbD42n20b7bpshCRCC*_Jd4Le+1j9>BB|G$xGDjbf|v4BRo5O6;lA=3?TUJHjml|3 zqgamHOQrwqX9DJ@C;#kEfAKe;e|rD!?T0^qeiQG`y<^U!7xd+W{*J_KCW#H#si`v1 zn&Zf*)r*ZKyH4-3&pBWqH&ml(Gc_yqWaiZLuz{p(@{rjkILK;6$~jXhv|+M#w0%}1 z=FN4gn z$u3UDm!Qm|n~tH}#|$2K)P^@njDKnS97&hRKDzAO4(WdP!_!fZukYT(y_o5v7w=`C zZaklJl<8#Mr)fZl1<}bV+UN?!MWL&0u3~Ov6PnT(%G1|%3SmqEBLIO-veOphicBU_ zP6bnjKx{HS17kClgJwoWe|@W{`E4#Sa+y=zi>KTzZN!m3 zlq9qXVBiivFm=xPb8KTW)`!&+AocdTbWf~Lug!ZiDBsLWdOricnf#0$_@#sFch498 z`lH`1I6ry`Z>cZe2_d5rm2b#}rSeXMTTLmCjkX}t)2++9Eexs|ZOF7C+eJ~naS99V zy(>!Ul?cueSXtePi#6F-Jp=WNL};JI%d#{LOF~NP#eLK2)nw(9Xff%aZ&;f&_c81U z@rcA9v3HX6co1N3w{%*bW->@-b5S!LB6qix_ikju4!s=uvf~KNXAo`ZxyvNomQbng z{gV1Z-YGsly+2>>QV1TrcrQ^~&-3&dEvmKJ!8-ZX5!st7D!~nKMs9HY?8>Ehol=Wn zg4a^IZC%wGMhRPJ4O6Q+pgJpMZB$Qk{~k)Y9nakL|%J#%y=>-tA!S`$d0D&m_a9UF|RGOLfIwKI)Oy zF4v)HYIEe~9VyR+r0ZBR%j#CWt_;b}_69J;-zmE#rpvkJ#4uxc0~T+@&G;$bF@KY>nra7{~W6la6<)l$NIW{Ud#cR{WB9R9p-se|N6+?CGy*1G$ z<}Dsk2p#Q(jXP7=p#n+^D~w8PF!V?;b(eoiQMdyPcZf0R8vT_?;= zpN6heq8GE~?R%GKfnO+Z&DL?87Y>>oOa#*Lbt?2#;+LN0&Kq$BUo$4&YvHULX_U|? zdv~Tkv$t#FhQ>Y`((1kdn@XyiGC?hKHf-kHw0_?w{qMj1)6-k~!T;*--hDsseE#_L zN&U_H^XYD!__51)%YmuinjEpp*&KHZWKE4@{c=qc(5^`*ONIPtr0UsEAJu)Mr99`X znbO{sAUed%)g^~6iGYn%cB*4=*T>Hp5j+TzO9(p`UEl0;b>8v$p zS)G5k=U4!goNXy*{$#j zRMF9W6E#qNg-z<4mjS3~Dx4#cyObSyGo5mTQ-F4YfuaRO^HO$E5hwz;<8yYY+Q&>X zDC<|X7HMBj)Dhlh_?{YDx;UPf43eJAS7$7t{S&#=OKK zHVzSIXJ@vsZ|0N1T@>zXThdv2mu7fucaKsgLAolS;(*mu6wp5R9F`KSRk(zgtn`HM z+kqU~MCt7Av+v@AJz?)+MUJ%UnUADZzF(V?(KN_Q!N<(9L{W0I+Kwzf&mC<1w#(-M zb)sX2NUQ5sgSWiHRaToy_Cm<3-9FR*>F=-IH{Wh2?mgTGui-Bq?tf2z?0+oZLQG*A z>OvTms_BeKG8Hqm3DqP^4a8>ZYm(!|QzXmWdfN^Wz!U$hkVCK(P^|zY%aKlxNf?)1%CAM z-7&cmMeU&Z`jKA8+)GJ-q|VRISX@z(#O-}stA&}-oROwnS6iO?6?@H+eOI4OSgL8P zvl|zDg}u6POVS4)K`UjgqA6lk<{RhSexvHFE1YxNF`C&j^Vy9WoobVIXt!)BeYuUL z9fTDG&&DMUW4kj`o-G|zsBL3x6geab7+hlR(4qkGjwbGlZ6k3QsgkqUqr5oN{CM<7 z#&hxZ-96g(qgU^CpVYs9v5r#b_HMe{mevR8))aAYz#$8^k-M0eA^eEdz0Qz0I(<%U z5~p!z-UqLhkv7C6X(!D>{s?(xPfNEihQVt^5#4PW)WKwHw_E(-ie;O!Su*7Ht?0}G zzPw82e(=nO7&lSN;hon`(wvi5+A*>hfv=ij?+QTtyxn9NZl$6M&VMD_Rej))Tt-aS zn}`Z zXT})Ipe=brW~3>nBgCkWq4e9(8Wb_m>`QxYks8;k&C;2?>;?gf(?fTUs!+@_od+-^>b*7oQYDpJ_Q1b=`uO(4m(OoLet4r_pZ;=hl=J8XynV1gqnlO} zn!b{l>|^k$EvH<)%PJke-`29WZPbNz*Ire}lTT#2o1p*yMkE%-4Bomh|>9=eGSod8Kf@UZkSKQKiR{6bOpuYZ5Ae0c92Ss%Q9 zFQ04v#*#Q(k3>Zl)elvF?z?=sBzkNEvig~4p&&8gl@OH(2J(Z3A*|$OQkj<^fXB*) zJbVPtM;asLk>TNw9#e8Fj`Q5APC&c2AJ}?&G@CnLG8|8J^&k{+WEf`^6tKY)8wg4) zLQl$v{&!6R^**;SPJgBMEX3#pyHfv8>8;asC2bW|E(*%w%`?9lOcohonv&AYjG_;?b&gA+BY`R_@EO@7>xc3*5 z*MEoD^#0oXzIpP`pFV!LU%z?qBEF_bAtS@Qp^C-ct0h!te&sQ(BP}lgb7NoXEjtq` z`PsH4dd^x9n%4sk*v4^KQH9>i)+~Jhm>gWdR}kAXPtCLVNr{nUtNc*Dur6RQSW1+~ zO3zh-r0wDlMg~+NO0Jd#d`C+C`_@EUI(TnFno(P}Y(gD|!G1jgRc zg3+P#&h1pG(Z!4ATgdQ#`TX|%r)R2%jIu5yaY@-Y;lI56%*@^qV&D4-EDJyBU1 z4wnpBT^qaMMZOFvY^v64>RHcXqINrq`+UOR$k&Mb+u#Q;-fKgf-b!CKQl!{pZZ4Jk z)hb;TY-oyMwSnl~gN&_PJB_&~ZbaVoeKylPBP>=Kpw}xZ&(t&V&t!hF$D8Ltjnp#YQRco6f0o=4>O5GHfeiQwDIYsIo3*8WOGy`wlAugplTYPY|Hy z1$)qQ`C^tvYZ&~mQ?DUj0IRo?7hG{to2T^RFr1uQ`rFiZ$X#OpqgUKo#IPDcko7ile}GS29oXhQ0^?&*N$^Q1{+eP8q ze~|os^fJEoVNK$5Aiib5nQ8&zmQ%#gS=w-3B);)^w>3z1X{3x4tN~Yn9W@rdgSCbX z1&uq5RC_Cd{=IK$Y95NjrpD;_uQg z{@oJkSWenbJ{?}aSgPzfvSw|SNN#Cmg2{=}X8~&kCc3u16~9U&Z|rS?Lz+Du=mIa2 z-@keL`OSx~@8!Oh`N2!~GP3loeLh;{9Yh!e3+ez2wbnckiKR^pY|3c_;O@g> zP_wWBk!|hFlV2!P^xfO9Z||LE9=vQXA7}XnDa}(;A2lz&+Yg9PEmSSjg5ZVbxpr*< zVL|iC#Q-PCs)xNO7pv38poy@+qg3j*l_W;#g9O6@&W!TKh9AYt#0I~D2R%b? zxG35N(fH(4uin3Xf47?P;I;eyQ2+V)g!Z-jZ80JVzF1jCFnVlmaO6`#TRoJ8H8S6d`v&THGiW&o(~`V z-u&&+tM?ko1r}dV>J@efAi0hG^+ezNywf4<<9N>l*T*)Ln2JlQj-JP+cJ3M2R2&nRNvM_WcUe9J|`Pa|!|{nH!&+ZX?EPnh!P#k;-9|6ZU{$H3ENOn&Bl20FK*1&gh5e4g1im=smbNx>Q? zI=RuPBmz>jJ;05`#ZQNXbLQg4##WJ9!+VpRF4;^_EZyV6HqJWJJnMxbyFfBi8H<{r z;3v)AeK;M?HutsFfzFeFvnFUfXUR^Qq~)~H2ug(;IUSjhSNwcHq{%|mwy`J=$q?h` zjs$rwRo}a8KB@gSeD+UoKiu0MJ$li8@i71U-&@J-Czm1L0jvx%v(Gw#g?CBnk*DyY zq6?AJDXS$lExi9Vds(OpHupO@CBmyar7?<)+-%Y7>e~2VNNIU+06eu>5?@D=7MF5+ zE0~3>MpTKmr(b%tL>D8@&=$&ms1D%eWlM41Vr5+HPj45q(yA}dIj-z?YXfKesDwE6 z+5zXv9Bq_NP*^oE5lY7s$;}9 z$=jAi-=v);xj~-O-E!xU8j)*X(|4QbmW5enodn3sTI@Fax)qP-5`YQd@T9xcCNudx7_e(#(MtIPX&3LnL7H7Fa5Kr`;Cms>85T(pl4xE%Fg~-j0aQ z29B((omV-4dOH}0vg`_w#gUB95vSUV$xM=56_4u5NIJ*rc9=wV#lk1GwMjj{d0nYj zW)wqKYfa8sp&qiyST>Q;$&*Zi-;6a9ko%@w&KgzaEWT3DrRd75rY+t23zf#dzW=km zefso9-<{8&-`+z*JbL|Jizz`g86Isj%MGldAw8HGTcYaOA!rU#d@WX^B%IpnEjhc= zRK#sHY^8A`ZMtf$FW-B#EtzCV^$UI6Mom#D?Z-HTtJ9F#x7k(rW@P%UcN+rs)Njqp|(WszGM?x~GqJx)$_OD*GgJAI{rW;}bFt-)0o-)D~&eQAs_D8SX%aT<4mSb_#G;5qb1q?yX%A~ikpH8{1Suc;Yj$DPC z#(Elo>rx%*xZ#`ij>Ijv-=QB&f4H7{p!cq-q~e^3_6l&WM9xiXB9zfyaPGLalbA-y z33p6J7k4IYVb9b+n}nPN=uI`DA|^tx{9FM~Nc_H6uCRIXrD{;?4A$$$H{W8GL@OU` zL{9bihMrP9K@%Wr|KdP%!k=EBw>^6GzCYDJ@Kpb=|MNe2uH`@fkNEea+|0UrPr47(5X^%)#wdYl~51_2#V^>2OYBOW=yItIxz<(5(u(3#%x-S zs$DyWg1);|nwJeS-EI7#wG7Vsm@Byf+BGMSX;M6$mda3DS~P@#p-hayTlx>w-W@La zyj3rWkoHl+p@90!8I?1T#wysXvZYDqzrrlPzVx?X|-Fel)eO}?vgp>2~4lIaHQO48cxj_n>u!8cewX1=ZK|dH9+*nciYnBH7r5^>(Xt z723Qz9HOPY+Ahs`Uv`MOsJjFgy|lx;N_G-M!RW_F9bTFZ4t1%USK8;hSpxK7(~~kr zZKKcQdFhg7yH$^x16a%~iYDdu)q6yq{9aM@(d+iw0M!B4$|!MZWY@|BCLqboQs4=% z1&*_$>9V@_Y&x{3IE@)T7pR2BHHa0!4Pi@i_GoP>Rjz_5YgK6_IjQwgk^C$fXFL9i z_JYPUgDdJ%*U~s^6+U$MBY?7smP_oUjYM{-R;i~rI%4XUG z?ow(k*E#B0+bz1)GFIgaueX}yWW-RnIqqM-{p^3c_wju6vfVz;?6``tZR9bVEC#4v=;%P%`nh-fYtX^pE64xx^!3A+`;(bR zFW>ja`ulG~)RO*~pSQd&B@e%v^x-K+hf|99wRbEcN6bBPZw5?ZF#Qo|*LW$n80nfl ztM+uVJddiWp*7ACje4*Mk%Zas3aq($O}TL<8+C^wWqQe?tWrUiT;xID)(41f#X$p2 z$s9@sAcxd?tq$T3_C=1pHrnelL^{Qcl!|((QflZL8yd>WxrUj{Ia{-m$YkR0G zI$mIa|M2y*Kg(G^yS;hxxc8BL@Cv@hr94^qbmTK6b6#6RPXR$oIy&&d!|PnwiQ53P zShpGl$#k^ZB=AlGbC~wp_G)9M-6AKulC~vzE@{u;dPp~sq9xp^=}u?7Zi;%#e8t8~x^ysg;HK zh6AFf@_sWo*&TSU8#-@#EIl^a9&NnrNiLc-4*xNgbY!WswwaF)8se}Gp|@|UhH<()>gu5!3gket`r zj7Lf;HFmBPbF2<{{s7hH85z54-s%2p_}i%b&SB=ki}%Y@>ilEr-(X5=dCwZ4z#F>Z zw2tAwiV_WQ1%|SGUXxJg-<{z1LO{VXpK_nwdZac1qXxK^BdqZhnvs4*9jO*Kdk_%eQ7u1%SM&_)C z`f@J(Jy?q9f45VO`4@~;u@>7;c7EJy%h<;Uo zAmUwnCT}}03FA()lovejfBS}nc=z`6msfB+k6ysn6ujM#{~A_+I#QV__q@`@Go7U@ z+opWym##b2S)zd3O9c0_E--xHrD+$Abb7aW`PeUV5FxwBV&XEx3JkMum}m+|kJ;0} z+VV0HanR%?)$HO;TVAJG+XZXq*>F+fti#l+9=}X54bRkNPtBS~3`vrY{(scHORr_g zk!A--%_3PZsal1G1PM@!LjjR+Gk*^R=$EKr?&d~DF)|`M9xUcWzg<}S-W!ED_uT5? zfw~5bVv)&A-*NVKH~+r1ay@vlQK=7Hm{MR3)HXAFvnYj`VFMbCwAdomzSVBGQ2#Ds z>CtQVh@O(4;Xdl`@5ya2d~{*<6t-`$PEusTawXT$Y!8s%1XGcEY1e~VvFoF z=)`IYM^|=QgBKHW$qhx5pPUV&C^wkdA~TL%Wlq~`tpN>xjv<;1i_C7XU4Sm#(S`9g zwLJ@l)sg9+)=mV#Nh<-mZUDg&*K+&py6I6_$f)hCt*i3qeo`@?S6y62Kf4k|18% zx+uIY2rwI%1cJ)hKvSQCI3Op@>CCJtH@XrIf5TEei&5(_4k}mU%b2RE!%`hH-~L1w zcjCH+w1lgvCcdkiJC>TF)XR09ME-hom}ULRwxj1 zv=(jQp4(_G#uZ{n*-P7Xk@d218-)0~U%q|(b${~n)7{(EM=##(Lw#|d=S$UGZE7PImFsF1*=@esHgOJ>)sajYIOL!Z~Ld8-|x@&EMkvdx!2j2 z=Zci4?Orbgy+iO!UQx)D0>cO7(?&5Nb+5pOWn#%<@F%KV)^N7h%MzcDSeCjU{F-Zm z%WUKxGojtM%pIAe(5amQVZSPvw|k>VLJz{%Zc0Qq!mJ};YABMaYO6J>88dJTt3~4_ zcB*1m<%C|ig>g+olg`2cD8+G{=a+hqe?@z)ODGK^AAQ63Xj_c4s)TdC7y5=J&AI&89M|CsWYXsVnlx?-ah=&3TF#|DhMCp2&>|k>dsVgjhCT1A~)lqt)yjO2)>50NdDl z-YdJ5)PsF30<|LIV9KMm0eGQ`NH;yZ6&nSetr9TsX7#$XE2r077J8`NsuiT+nOo{Y zQ||6V{fG1A!~2h4-|oOYdJ*qDU3vB39uOGkKU*CON|8n+Ms61caefj0{v3tdvN3ZK` zm32H*pA&C`lxcAh^|$ zub=JX7t{*RhN>@Df8*1~yF2GcFYK#dc=>5O%XiZ%5OvpP*eZ1?!A>j69Dt1E!J|}7 zM)S=D=@@htrs`?94c(>oy$3fCz6vqUc1D?zbyDe-)$G`zxoD-(pRpF`#Ju(SYU`|5 zsGX;La!;ajth6CEo<5reDmI)_gUb>6uE?_C1H<*nRSFLB~VrnccJ&eoImQi?ZcHD^h6udbtPRk7ZB9VS+GAm-&zbwrT`uu1 zlYye`FwCOvFYJ<5Z5~5X^8mHOe^<||aXn%#Uculo3YA+KsB3+%W>1;k< zC3#J2?m3SOzh7cz`?^tR&g`-7tg?M@fq$Vm7#Wpb*G#1t^2V!tmlBd^P?~oi?ms<0 z+$(Q!J=c4~s|PRSn@uTSBzJCjh;Ez1l7uv-C`1G%Q`1Hqje|-P-Pv6$PYlH_c=4}D*WuG+~MTsulVdTn4 z^kN_**d#Q{shmk)tt+Ka>U|w(r)F13=P{HMty)bTB4L){IA+0Mt6V!JY-4ycM3}Ot ze)^oF(SDr!RSNl}ol1?AL*S;z6KB2dh-9EhfHi@H+C9&F ztQLihufC*g-gI60&*rpt75Hpo=&)+-?89x3kxLt9XMcxY{^39T>C?wgFLC6LpZvW0 z*So#;2e001lxcmMKi5)I$>sRSS$j)qz?ZavFSaJFO!3!Xu+LrAHV;j6wn)`12Vst# zN3zpX2d=yNS(FrYW|g#+G6(ea({f&wt7(AlxC1vQ(A#(;fR2*WZiU`(&O>u4HPH{xsIwK$V1{S2sM5Qt&!{vP1PRBcGoPNO`GSP*S0U}lYiPPntRJail zaG>SiW|e>QXCCFtPxXK2d+VR}yXW)K&!0Yi`h0%*#3svszI${3=ym<^XPkc0mn$R! zdg`MEQT-x=uy#|)wVh&Ne9f-+Lyfr#ts;w~eOTf&NgZF?Slx)})s}jZ!@fb4O?}L5 zj4p~Dja<3;5}glz(DXBwd{(6!drPFsjML}N>P+B2a3{J zCgKBhtCI7xoK7FRZO1a+MQIF-+3EZ4n$xTKR^OwgMByUy_kYOuu5@Bpx)IvCPjLD)$9c=*^np3JqllmRs_PeiN_NR~W{*NzxK7QZQ z?!BrXynr`V>h_a752;t~C=do`q%v}e*t^vPF9rW(IAMwzwk z;jVpWPC!M=r8!yQx(SA3i;JF%JH_+j%Xcf%_|MLn(qJ>AK2Ix^HQ7Dkwv5bNafwXX z;_2V6oPJPa{rqYF`M#t3(aZP4maF_EFJIuX_3Qu_!6AI>9%jSXurk2Sx#W{V;gq3* zucMlxM4ux8S#~m}M+a&(ve@l}o;0%UiqD=~!I=vf{$Xv3I46EmyVm5o*1kO%!U0SznDzVPxKea+{{2cWPXybxPD$Ve2 z8u0JOE7omEDUFRK3v9HH5*R40$Z15>o36`;jNY{n7z}q*gOimjLrpp>a{z(_^ZDkj zV66`;X%qY&wXB|YjdsS$C-KA5R#9|nz5i7IySqoDN3YzE49%x02FK~uH8<~-LgDNh zNM<#8mfe73Q>tPo;FKrJhD1jsH0Woc&&xsk>l z=#L-S_LIH@u-fWN_u)Lai?Pug8T_PZ1KpW=Zt69wj+8fL?!J&8iq9Eo)wWD@Ic6&a zD51@EsnHwY=ssfh$p!)bPVborc=4S_23!Yb;#ICAOSk5O zXZpj<_#(;St!Qf774^>UjYTW_`e}>|ms-Vk$mzP~f~mXH_FAZ1n@?MC#iHc`PNJ63 z^xu5MKmH%Sem?i^e;>W5Z$54Qt;v1Y2&xeXjdmLa^lk>%o1%(9_nOXNCdL&= zvMmv``hAvjU~afnCNlHr?x(Gq-MTo0 zeDz?^pBYh3AQP!0E|62oxh-`5;pw5iN^iXX85{JwpU>BOM!ZL_>1`xhzoR)(*jw8Z zB&d<`EQ7OV7>py5y&ilK=#9@)OP*d5*QY7xxunbkRr1;fw(wN zZWz-fT>XKiYRQio*0fnx7RXasiSy-A#_DlIoFdxTt<+m<&);K9`}X)iPC@7y}H(gVl_Wa-0G^rW|N&bk!?asLm4}ir*m>T(37z z^*=rDpPxon?_Oqn_b!qiypBIU-}$|76sMQfA~M#f$ZZbLuX~M#sf~E&-scQ1X(pl0 zEIVn}=*7fKVhBnN zruYeEf+ci>;Tm^B1h+(mAI?Yb{`lE``O|;BS0{V)GQL%~Ke=dvOw1@2;70TjT6zyw z88C&Mv_tap)m@yxKrGt;e=e=Em)3;wDvh|5Yh%hgBk!GCwzbwy^PIv_rW60}T>eyH z(r#nCie4#iCh)jid&a=)o=X)+!HVAqB4^ayz<0^&i8#2`0_7yCBbYdrb0$g&N4HCx zv(>S*^{e+zox6|*Xh{eBcx+ESSDVTt@aFOU^N)}B>AQRHll$ORe08}$p5M+Xr=$wS zwse==`PLVNHx-e(o+~lYz?+>~VcoG`Ion&Oa0%dp0Y$4|cbM1*1=Sv-X6+;P4(%7f zZKMJfj^tdaM@Q0EcZP z=%iq8PxX4MpO9u=j?UBZ(3yB63*7}UYpyuhrJu<#Yx=8S?|=O9@xHNne)JmNJly`1 zKHnqI7T=d#84?`>dNAN)avP2Jh`#%_Qg>}VYoU3OWA0<~!WWG0=BN{7=bZ!EhiRUQ zYbWv^!B9VUF7LJ;DDI*3%NtiSRbFYha4})TJ5$V4jXBQjd!Q(53N<39kvxN6%e74l zNXtA_2113j%jPCgs4EUdJ9`2XF zzB7?~TdPN}@5zih2WUdAwQ7~66*yER&|bIy-HQJ z)R%9){qg=UKR(|p7yIr{pFaKhZcOLFOL_bGeG$cwhESLlrw+l=6Xs;@T zEj7ot1QU#k=s9@|i4B!CSMItO48+rQH%+yr$!u`uy)lcg((q=L>LJ4a&t(4MF}F0& zOwo2>=hAj=Gp=tP#U3Y9qx&?w6~+8dcOLOQ^YDWg@irKn^K-P$Mi-P|e6$?<4yYBf ziFGsxJEcJgKXo0+F;-c2D9|s`oc&T)wM((q^mdyow5^tZJlSVREp2l**B)vx*u2zR&?imI@@M# zXDxJ;+9G-)OK$K8{j`2oJ}0$VS8K9kGdLXkq?B*b3;+4Yr~51of1Yi8xxdkR^orix z>8J1e=-g}C9V>Y-!z<}vDmyT|Q=}FNY~9{bGqQ;0CwbZI>oG@YsjV|xNxRim!rb%f zZZid3>%_-ppbkFB88U5>mNI{E@#*Yg^A-^qi}bQ3AU1wdt?8t~i*9u2oRw0>WmWPz z%i3oc(kx{Lu=BDUyB!Xh1O2d!Ey>ti+qv{ksTS|Zm8R=R($CVc71&87TW$7A67=Jv z{`$o~-II?zdJ$j6u6~mKjCMs+m!u%t%v%hU>`aq&K{U3;MqmghV3kuxInF#EgmCvk z!t0EhZKXh$%du=65DJZH?AaYEeS+=grzV@4+ib2-BOKq#t8Fx&#Vd>h4c>H#P2sx1 zE2gqdts$R_|J13-)`%v(wvn}RGESC&e^Ei@agBZ5C11PL)utowfxBvFrOvCt5@d4h z@NKTOZ}|*=^L)#259s>Xb^Gywj-SeSp{TS$y<@7AG-aqZoGA!gj|LH86t`$)F=JR~ zf{gZBg|cE+uW1)C8MLd@9;sUy^&rm0xCOyvU@?Oi<=)%Uwb)#oF(F&eb9?M{HMB<2 zpe5FR@lp3^3)G*=*j1vflPd{`<8jH^s6QV=_(h>Cwsfp9!^)O8dlQb%W6g%U1f*{A z+K_#X`~(VZ0O>vFo?e}ce)sf1|I5AR@1s}l<_-LBLC>JGmpG?gspCdDalm(+@(^mwSa+Fswyr-*2)uMwYN?@My%>0Sg zS6iv6s=KGwta-jp?QIV>QaPBqY92(Q&TLhSFX;(?;>x6keNWZaVvR&IU`L{@k5tlB z7eyk$Y%Dp@-Z8}A*R=w-|G93terLD$L(ikB`ziKEuicLiwf-b8`{T+DcE6@@=X)kXdHKkmzV2t!=Z|d5$aoWZHzkvh{E%3h4UuN6I}QHtr7gl#0b0N>VQvu2gj+U@@M-wDY*df{$qWcp%*PXyV|rh_vF zBlUr+d~$y{P>6X>&BzFKE*?6Th^FZ5(n@Y~cNit-h-JHcOWX2M<*Fj7xTU{%^pN=s*nrNdx3 zUlh%fywq7+p2*y^Gm0*fEFAfI5VS)MAL>`~*%xQ6+nL4N@wi8?+iSYqGe&#sm;`ao zf%cqQA8vIAK^|elRk|jE9Ee^W075T$&ED;r&eMS3A-cVwnw7>;T*FC-Kx@kQgBw-E zU8{^7BSlA^%@5E^y?yHroppB}g7_S}&Q=>IK%q!ehJ+E(9j(Fir`ztLxU!TtU#hc* z%v=H4dRDA!y>VblYj4r4o&P&~XRp3It=UTDJ=t@e$5y@lkp8bPeS`1K5)gv#-o$D@ zcrkCgf9a)qkD`UvT05uZC=u`yTZPCmC*x|`&0(I1?o5}OC|O2uy()F{0x@145$Wk< zJvGm>wW=7gdvp8S z=ZAdnfj)TQUL9!0^JD_73g|-HZBtxb%iKlhZdGlf^pm40_nvA<3XAiKn z;judZ0^V6q2v#^vou&mXEqv8#+*Y=OjJ1PyYl}Pa`6?ZEYE>Z0m8fa)wiXxLBQ2@3 z_Sx2!ng)1B8DewIG0qARt<&tEFrD z>fv^7p6LBN>!a7~_AnzahZ$UTy>K^n#?WXbe7l6E?(ImLgEhGhNPE@VG*VLN3}YJY zis*6rrZ5Um$&wv_f6UnJ^s8xF+N_g5k&aN;v5rcv7*=$Y@@kWG>WnQ=kau#FIZS|h zE&EKSP3zb)YnrBYmySpym<<$j9@6^5TB0SFi;R-S*sB$8nufBo zaObn$ad=<;o;bBN*um1P%Yc5@!_q~D;*`%E7us#q(7=?^A;FhrEws)}rua5iQDkL3 zZ0ym&?uk3ZV(V3ALt?s@UCHIV7X+DHI%oWKcCCAktCX=jMu1wptTak)8Tl91Z>PK* znvZQSJvm-Qxbn5Fx(@1=@9m$@=I{Ud?%Vs9W6jgp|I3F@cagjgUc{HD`+J@)j^gK+ zZxX9*i*1clR|Q!Y2fbLCNJl#)n5Lr#e-n9c@II}{%G{DQ4>_Y9GoJ{VHoopI4bm~S z8b4{JMf4V;h!nG>twy@6#x$#MGES-NzhC)jMP=R{csMZ109(%mcAEW9OCfm7xXH zcQMOIsRK{h= zIY_sJJh{s4m-VV(jJiPF1#z()D)k`*#?M-xd@2cQMODm+mrp+%oR}?$=NI>!)}B_1pP& z?}z&6#k)PBesB9U>e(&rEHibkFizDtF#{5AH`8b~i?=@7uAsXBK!YIYY1N=rp19Mr z-A!?G!ofdV_$Ggy>$1dMnA5~wJ-kY zl^9tDNC|5O3TTbfQKgXQ)!KcL_Ej`y8N5g(@$OVd=JtY` z@UBZ1M(`Qqy0fGuU(#|pt>xZ*X0?i$tuY6`?#Op^zDw2sQ>{L?AU&L|EdJK`%eMjH z=>$D^+4$yfBjcaXmro!5a^A(~Pe0%Lu|9b9-pZWDz(Y?ah&M*hH920pT}s+aBCm;t zf-gd~TiHrS&Q<#|sEFuHxcnMtP22UXwi|;^L9Nx*CarCX4m+WvWc!Ev!)$iW)$NuD z2l1SIdr9Ghp^ecYy|vUbnY?r3k{d@bV@?-E+nVQ0h3ax_gG( z-MwdQ$+UthA>X~YR-V2KNl^3)$YW(BW2AXnfNt2Kx>Fnu(EQyt-vAoO;+-OC64H}9 zM%y;@KtpB3OJu2nlEP;y32fu$f^VF0`zw96vQh51n?8K->b)t3$1MZE6>4a33mtZ>RENjk z1%hCkdO#CXHrhV3X>O&?Ft;%-=w<}*(H&O=fWfPdW=f}^(M7? zYExakr;@n0ybPnKUCDu2*<07hgYT7;e0%lwch65XK79Judm6R}FW#*{@x^4z1qVVJ zQ1NH%G@$kdY=~Z9t+mESU~FpKjs4xIv&^N*MRl;;vqxD@_prLcyF?b3yC8BEw*OR+*&)#cW>2h(-z^g2E_G#J?ijt-|^;FZuuL_KG z?Rn*O@wtGz&y_N%Pid~48~2XYYLRVhF7hn5&$P)I-gS}lfypqDA?i_Mo?EI7pnQHc z7?dG!CAYV%^}J7(eet2RX7RJ;_TDuc7dy7&3MbV?Gj{soA2sRhV_!DfJZgn%ajRkb z?XUI$U*f$x@&_;6Ys=}=e9(QRpewWsLq(gme4E#r3S3I&t4)32YJvN}9Fy=tjiaM> zA7ORw3iIgT_8he@(&Ev+uYJWeO)^tEq^mtXv^mr302nnoVIdT;HLQVu%{6yia;ZImCRv`6o%y9_&lP}PP&@tCfo~NjvwNysqbj~ zY2KX2wPsAOCe=kiv@^^uK5X^KX7~j9Ob|)>HBCB}hvl+?*QJAHW)!h5^8!@LD#ZNj z-gShnIu>PArJLi$&GV8r&#M99^;EBwyQ?2~@Z!BSAPh!X;e4fL$ClnmwGDJ(%dF4r z9RpHNWh*V~UdA#0%tsi2!Q_(qI^ao{iuS3QV0yhgcyt^Q+1EOUL5k3>MS5?k1x(`k zD&f6DuI3XPm&y-vT+T-d=&78#TFPg5;e%BnqVCGzV5Qy{2cMFATHD}vaPAR0(6#8S zBN2;cSTXl1$JjBm_sEwhfFUb7;Qj{l>CJfPqgU_css4ti`hPw>(AIb_G(5dZpv0L#jP8P z2F)=^c_z7yI*hqCS7UP|(KWs1-LAh2U`>OkC-|L4ZpvL+$v~Wod+9Zn?zy;F=XB6V zr=T|H)h`YBxhbsHns;ALVKKbt>9Dra9tDa|tKYp{|M0J8*_SWp=k?*&e|dSZ|M;i# z;g|FI-N$b~uk-od&-T%)`NPjvK(#%8VM`=xJZ)y(q1g?bA-;+v;dReFWVPD1dJ&}b zRl8=dTGH^$9pV7BBcr7*h4S%gGES&>In|2I-Ns0>CKr&=)(yto;D)N_xP8j|BG5T- zViZb;eI==sm|4%r166#HU8wlVtW6S?x05?&*tCiYVTKLj0m50;QX;!2&;VicGzM3v zF7I|UHOJ$T)2V|m`Wf@zeaip*{FMLIzWn@d{rdHwSG@P#eejyT^{mMN$ra~v;Y5&h zn+>8-mGG8o3fa}KWgHzA9CT?4*mW%r$nXHt3yID(>QLfxDHlfH`=n^%RMogVv{kZN z&^XCMDC@_o@KP->lGr^hS{AJ*xo$8vQo`uNOG(toS~@*;#lj)tn-cSOgBY`PYSvi` z|NEp^MGg$1d)+OMH1PQK-nVVyaC{FIU0U2p>()H|`}5`V+220jy_S3Q(%p_GUQV&O z@=qw)XE){WfOYB&2_L`NDK)_GvfOJZBe6&ts!puOos zn2)q8b*nyG+j7YHEloLXZl1*=Wwh{N1vM@K1_)b~UfS%j+?JOfx9O$7h3#a2IrpFG zqu1{CnacCHNy*NdoO#TH?(+fmxHy}oRC+5OlLgq^pJ<+=mprT|_JQqmYZ*>J)B)MO zry>&;6}1>QNb6}Np>GO^W$38ktDQb|Nc8@?%)G7y7dSO2ll+s1B(Zh{^hPRci@5Fz zFoL}(g`7ADq$6}zgnisB<3}6qkVze}V`i!8v>s#b6uBT#UCzI0p5D?Pi_z@x@4U9} z+v7ie2C)3?!~L}PqZjY>Lw$Pp_BzhkQ?UG&Rk;?53`nDHcu3%^60`TSHOko5B6Uwx zjYeIdcnC&T%S!^(2M~xYa^L~9j97}ic}~cnwQX)v+W}d-RC8YW)tN`a5pOqSSxyAY zM@fgDR!+G$I%5mvc2yJKgXmJsEu2Uh%yA`+8u*$`6cIcf$chK+0e>L6&xJMG$wH)| zjB!m*P1@G?`G}6s23qSAv*c4rpxYHcw}dG< zh|CR~+1#ciw)e{A?ha=L2D}Dw!c5_4&wA&ocPy7&FeNQT{WjJbb90NjO%Er>od!6> zy6yJ&%6zHM!#p>HkXG^StFGCp?wYkT*U7$8nPy7*Wnto8n;VY8pW+UH%?IBz?8Fdb z+Vr8}-N;F6BX4bNo`Kj8&!r?XVzuyNh<{Qs=S=ia= z$gz(m2q#(wI{@eASCdS`L$d15*js08^3!E|^Eu^WcFv?*Ww2e}PENyPWA;tfrq98j zMGwQIAe}I}js(4WpKKTTspUB=-e+}GO8FHxOcDN_6rJF2FHmxDoi z7U#yT^5&c8jMl_(uD9BTxZ2JZsG#GxbE-TzTGrtm-G}&F&-fo+p7F=8=dbt9xsP7Q zHy&@*iy`AJ4Oc*KjGTd@oiukpJ635!IX`$*b1W3I=uC~G*D8?H>zvTl5i+-e9NXA!vnJ@`#imp>GR?stV5T0r zSNEsd6|=hmJ>E_2n)H-zsK1DzoZ|#5Qk}=kCS+r8J>K6vJ>K{C z+K`W4!dFlBX@lH%Da(amSXnBa5=qs}cc8RZ7V)_wD$eI(lf2m{Yrjq$gei+QA$Ty3 z^jcb*bVq(@pbB~zZ@%Bkixb@Q3QO)7? z&F}7Wdidw_@!P!*?}Hcdhi8jf{>egKL29_SP>Gprim_cgVXa{Y zW&%$4yY}6Vo)D)Vk~gyDHTqfB+bm{-PvD%gLhAq_y-DepLq%K$!jAQd*p<$rCzEZ@ z#-;VC$KWyMA|z4OXrLX1#;<7Zrk9L3GBvzB${=Ypv+izda^B9$GAI`fkU+wF?ZPufg^^IS$uG8A$ zZX$`MQDGrqUae_qYl$7)ylO@6J=d5;OI9w2tI_{MbiZqOB5|}N>2O;h8`@EbOq&Ul zQZilAt7U-W3OaANlY+VJOO66Xf?p{B5$UDxL!a)t5EA%S!k=;O(pISKv$+mpPF%cm z5ATz|zadYS@YHG^(wNo7Ran*4fmv6-P+4uS(2@2PscJI(rC;}l-=3d8eSQDwBoiha`&p~VVLBOY+L6;e)*)?yvL_SEsB4Oy zv+@i>RwvZLQ$76UzWaQhp6;iQ=S8aLcN1=pUcMjdJCc5qmpl2H`%WXRR5L?PJm8X2 zSyuY4n~2qrC2g!ololc%n|aq+k%bbKam2r2Sc5fQBII5Wd->^E4XK9Ne9tqvfAHLR+W~XW1 zd&3}fa$~$;Omo5Xa<12wyi9uOb_<&yxiOs)wjC>07?+(PgTM?7y(&ekTS0cyoeS)q zi@+yXdC&@n;Z!poO6viBohqW1aKO0}HyIx^0?dVavy)qGhdbg;m+yAw_^0#hJ7N~+ zo+RSYYxnv}emv9HQVcono(gTeekH8b@=ETtMfcO>WUfP@x8@@;i(!7+{5ww{v$eHB zZQB`HD!|}OSUoBzqq)W&B6NT1zWR*FP7X}(X!F+kV4DN#VGB1GmepyZQiNa>`` z?=z>F$52WN*(P+#W6E1hN;MIV)eR>C?B%M`1HaqC-w>zd3Zn4%?Dh6So}8i*R)g8# zJ&Pn+d*U=>;+tn(!^=g_p&io`6E~x)xTPiW)gqx6D=B&LR1mFkI6}%Gt#A00y_Vcg zT@x}rj+ji<$E4I(0k?np^7Ypbhh5UQ^EQRx!Ap44+xea{zSQX{g1|w#%KrrV*1RBp zpwQcyJK-^}apWu?jwUFrhP4?0e?2w{wqOKZl1EXphU5AMoNUN|bMq-fOG})>jt7n1 zOBQ=Ot*9kuzvSxtSMj3i87fD$Xqw9rd~uP2=yYR0>ErM}Wz{rr1dMaw!;G~kFlU9G znKSOoSq`&iOU4mtTyg+V^VBl7v|g>;KH1-V{qo`cU7z%Wm+dw=^K!6Z3@P2#tY@s% z$2$E;BBoqSlIo^KJSK^jGhvxj7v5^C?p|6MgWXw)F>xIYPUvP@v0_smFU)mvtIh>^ z(MiQzM(PMQ`y#&giojK^xldr<9B6luVZ~`A_NK-}r(X@?3PJjy8!M$vE?QNq?281O zfCJ=uQtFyE|6tr<7w+3?o4K_`h_zFe=yS5?X!OPV*4t~@zy0#*+vk1W{cOM7d8UtE zyW7)Dd)_1UvCpxgu~WA-GS(;Q4BhkW&DMhYB}2CB1VPkis_oPggERJ(?MQ7ls)4>C zx#U53x*25AUgD6}?56?f$8WIH8rg>V9F!VwpQ&E4LS)IKq5?Oc?3Nn)%8>^D!G^a% zV1;iVs(vO19ydm*Ev3e%CS~UF;WqOe&cAzLx|rN0oT_V&305U|$<-YPdaV1u**yO6 zyRY`~%U9cfen~L?<^AWc-|WM?{poIk@zKlp!{f~)DV|h#Ny%eLXkG#i2%*!!3Fx2JS~fwJ+W! zwZ!e@sfC$&&6cKa5rz@iA8L1Kyv409p&m}?zGb9>gNu`H$$PVyy6ueFb4=eWv*5U= zO0ve)No1n+n3!=w^cI&J;0zq6%jZnDZP?$x|M>NM{&@cv`{<>6E0ns!4={(;Qk@0G zMXy3Gy|4*Ag$l_TqY8-uM@~U_TYAsOkE%f4E?`#IDraBuvb&veMX;B zgjk<}F>0{0LT@n>ZS|?mGHkEt@5TphG@Pzq}> z7I0JwMK*|ZGJQ<*rZS&rED9QUyaFJCf$24+enE8C+$+UXDY#=-X4YLu%m+xpu?G{U z<#SiC4#p;S^fsmR!#VT*(1b#pdDMOj+U5YJ-?dww<}v8v-eesoFdg0g@-OM z7}yCmJEv8{Bbt1Z=N&m#3X2?TduP_0N?i@W%H%9hTpWyy%%~pgiXN|-`3;D6bwx(B ztl9Mk|HsFA{z9`Eo1NXA5I%VIet7ZzUlg&PMeeEXuB$mUgbCMZ2^QDUan2A!X?=&* zM5U8&*$H9`Qr0fHo33iD7o^JtIiJnZ9D>vi+ovz~u0w(;*Old-*Y$tOV$@DcxxJwy z5l$3nkk_{c7Jc+qdH`$4YKHh3ls7QMDpN;H&CC**Y^St{$LiliQtRvjTb`dHvlxYKG2Xm?SSG#R1S%Xl?YPaZSp zQNWosO0rD~)wN|~wAB+0)xFSY*D|e@lE_GgyOT-6w*jUinO5HbzM zTwIQM5_lMAj_jq-egfGsAT`oxY?WK$mb<^Ys2Mf$zKN|RVk;E6EUu|fsfU9&%tCj@ zY=yx$wMh;R#}M4L%A9a}Ta^R7BK6v@w>hBcJ<92K$3{vNi^0Y!fA}&A68ZA1AnxhLnv0c7n_y*KT z+DWQrh$3_{4#L#N)~+|e30i#Q-Ih`)&u8oImA~Jlsp2hLQ8}tf9*Ts8Yvn z0VgISz_^9M{Kn7vcJI~u=w-Xjo0gYX@6_Zc*=oNPS9dqkrHd<$|y) zh@I!URydd|B!MMyFqCd0WJ5v%1e^b1Oz76&yP>BT*C*pN5;gTO#(|iNUpeR&_Qe zC#}qXW`a9#$)~J#E8O_)A3uCrcK@~e;Dvj6pnw1LEv-Mv_eZLu8-e#$>2%M{|5(`@ zDsgWaX(BA~nvyTB1Fg-cziJi1wk^`N^_6OcmHMz4&_2SOn(kv2pma1FO}K6=PHu- zY4>^R@X@mov>bVP)mJkIp*Jqd;UJdyvcjnIsjR`(F>|AoHitT1N7mW>bHZHJHhm^R z1xqJ=rMmKnQ-lf>?B)i3k1cbn6aOSSwAu=*9Z3T&^lMAX_!Xx})a z@UXW56sbsufw*d>wzx?EL91(ZKy_C@z-(0bo1Zg@*eT5~#rx^E-RA%B^N0IN-v_VS z?bGbfXHy!cr53{OT+Z((1{jn%Bw11`T{dOAghS>6|8_F&EBZIW79ptBi6^ z8=h7p_q;0T^;$ijDqcqM*ivLMk(;<^R9@|MwP#Nm3*6{-N<#lbgLMuuNxY;<8N0C9NWvBxv?!_{uV>MFMazMS$a~dt3^>c+JV(0BB7uR$psft-ySN z4@a(?CIu9GNpaWgaO-WDrxMRh&?w z9^MOPuBE-QOJ*<-93k*EvwoRHJ5T+i4IWv&|PihRtt$<5sD=e1vLbNSEjo+pl) zGmBrqu(evtJjz z8c7#9y@S*0)DS4@x5Sr!{POkl`;UM8FMc(Z?~!~Sy?(bZ-j_l~IkH=BWtTcjESQ=M zS*=RQHr$jIjZnvWSAsV~)yCg}V7)DpnoE_SO&;w6({XBa@R4W1hvW_vS`NN5oSQvD zQ-bIrWUF7N2Dw`yfX{x9#Sm>A3Q|rQmd_qW(ChW-4Q6>A{M!ImQ9WT@)Yjz+rd*1e1|B;!|J3qgCKKp)#`_b$7dVBPIFCK~v zh?&@NJ!Hf+k~>!pDXJL|u;it5Qkc2#(_}_YJy~{^rwTi}IJ$>sg2xkc^ikOkN+^$! z`A7W!sC&C5%W~t)(rkuJieh(*()^f>&0O(5XaF2=0FUEvII4om%1A|KlHy#S`UrVKdAosIvsP6!|TW#N_L8FIEiJ&x+<^qaUnbR!| z^W)egAdol`F&ve^WPxTiO-;s34O~}K{6Nj~RD*j}7(b*UOHnbd3x_kSSmvsl)0{=R z^z1Re%K`uNJA3!j%e!a$7EZFypI#W0dl#SLhrRI!FXb&|p#OP(8A(qUBMtcu_nn41i4fP17OIm`B8>{oPsm$gA89pg;fXwT(b4mFLCx;Dr9-LKTf>PYy; zw3Tu>yRGh&6eoP_)6(5T(XE6z=nDHm2lxVLJ~;gUPYV!;1U1dzk0+UUgKkYdiwVNa%Wck z!HfE%huzO{r3;`-JFv|%`F<=db(U@LrF=Sg^|ny4plgyC))HLnW%8FZUC%@Vz zj8TS>g=3)3iw8@bB=3~nOOe&>_|a5OzpY6G29&iKi9A&!w>E8BCmy2pc$O7q?y)*W z;Mo=3PbKmtUMF6Il24IRgA?>F$Yp{_h*QG=qn#kd*;^D?v3t|+;sUaGGun5g#Gih@ zU;Ja(tN;8hweKJA9jhL_e7_19%Ae{d@sQD8RH&%m%*HHVI6 zMj3P4;p5gYD6xu~<|geyD!Y`G2Uia({HD75>b)#PCkFpnMiEUT*Fq8eHaZ$b8rRP* zhxL|`$3B9zxB4JGIame+)5|M2Nu8xEmdxoq_FX_o&&nOKw-W$DeF6e@7=4D|w)Y%p zT6(GB86Rw|jq${NyZipPudnIX2YgSZ^4R5j;}EQ0XKc>pXKTr*itKjTzA*&!(WWX` zgyZ)m^eq?b6WBf zt?ta2Bht;3fv>fiP=bkaE_Y}||$?Kh^j^Sw` zx+pu;QZszp>KZi{$dfWVbi~q9uUfLg7#sq%_G0Oq%EE{os{mHNb!Q*@`00r!`t;>u zOS|=6X!Nm*cw2qy-}*PM#6zYhPj2(1Or`Rq%MagRX{W@Et!OQI&SitDKrRGv{B%Z0 z0#0bdEj&x!ZH+QdF5LX5aQv69HRsFVM|Q)zLX+*oM)Ehi>h4Hw;G%I7MqkB~E^zh= zkBL!)*zIVof#4<-Dhf;iC+P3#mgN`E3&#P;jk zmXS`TX2)+P)Nj>C|HvqGM%OEt7i zAOj>Sy7nFY(2MPyM2`C)s+;$29kXuKCd%it&f8||{~qtcKfS)ZfBN+DM3^0=q=@b)Rpl0*zH&{F+WFBoYm?Ku-l+!;$+Z7 zbh^el+xg;m88T2QEVjU8c@;0bD-8bXVU`zp2>r2JsUY-}wbCw_rh&0|=_`|V zFKbIKJDcZAZrnJG%;n2tJHekTvv=}7v#iFnT8%>-LKhRwwF1|W(lj5y6sIyNx@37{ z4zHvJ?CJJ~^ZsQ+XnGg+@otFe(aZPi=gKEJf2l{bYlI<^t6`#yw9{-$`)->CF%t#R zi*cAAXrwLXAJ6~#t7B+$Db*uLY0F_xJuOY7+?m&MPP1t&QYlf28&78vG_2q9LEpY>k1)#+n z0|_Fc-OfWcJn7l70|7s59tmmHUV8<#zadkOx4al9??t!M5LiCS06tc-@)@UbBunEg z+H}NSJQvT9*LPPud#09h`)dT;q~RG*SK3Fe)Q7aj<|jUyR0zq zpCN}VGKd2QNfsB70yja$_(p`%qqf7$bWfcVoL>XQyeMP+_y?b_$~rfTMe(-+r`=#DRFEQj{oK(r{W8;TM8QWaWPN9ldh=t8K2W zF%5tDOlz`{zHDaqdtR54zC`X-H}!kfvGF0kK}k0%Fz4X5=?dXS z!j$$_;~#gs}Ecphvo{SEM*{yYCw7qGTk|qnm}JE zS5Wd0a9hoxZ>~9i`~t>%efj(;UZ3uBwI02Kx5Y&H8hoPHbsF@H1}amx^fOl1>mm?K zQf+aNt1ielbJo&x>n@rXW5qU8%02OK8)NiL?sIY&eVDD5+QQf<+8g+eP9xZCT=`DI z9`p7f99c(?!pQ;p?#Y;G81d|bzfpU+!n7%pXDx`zrIb0*sGzfGnRBp}<5zq>DV>6t zHGScsK~~?pA2kM1^Vd4wFvMcaAIfd;>9?<+-rfKBK6>4555Dair_^#E!yyF9Sp))I z0Fgj$zuOhfm0Zq2l>i!)3HTLlw&+)VJK3p+1|S-E#p)g&<FSth4iXXonhSnHCZ zwj~p$(L=XVjfvN}re%zFhw1Iq^9E0c7Nc7iPqjdf7-!wr=ls)G6v%aLy-yc-^fKP* z>9iA-5~WUtxhmkMQMIV*s#+NvpuR5L_1T^rr9hIp6Xnrd3fPTGh;Fzds+4(hSoc=> z9Ocxspxjj^FH%T{g$22;&r*)>TMpBID!j|1*Y5W0+rNH&$2n8XgWE2o<#;N7|?Z1Y!SPQSUPQve8z!^J7qGn zN(O8D?acBB>)AzW9Z^ba&B+9J&0Bk{OjM~@QbE(}u!u?s@%Xl9ohdasO^>Nzcj3sH#` zVk(^|-Dr`U)pTm?^~PML*NlxZbJW|wb8L-Z0OtCtT-}x+M6#5|HqT@3Nu+!CbHLw^ zKvSmZ�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�Z-K3YeXeUkfVaOG=Q5U!= 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

pii+89G_DFD2a6zjuD|gk)TwV0T3D&s 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 z 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�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 z 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 z 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 z

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

I+5C3Jr?v&4YbZyl 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

Q3Xs1v~Ym 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

oSUauTJTW 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 z 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ⅆ7ApyzDG5JIl+?@=S-7Au#Re1i<+uYa$DBnK6LW z0ba;O>M!NG>|8YyVy$Y+SDPD?I%GXLqH|3FA3quBu5QLGwV;a;@_;;baGDh|*L)h% z!RcPtW|izvR3aiW;1Gi@aV^O{2INGFEV4pk)1Zd5Xg|yfMZ#>z0&jtk(@99IL_|Q7 zLmtW`8NHu9_M8w^jxZ~4KwKZX3<$JioxhNs<*PTIcc+zCKkzr-e|%#IC^&IGD@v?ITzFQwn)SJQ!b1ePzdw4@%lF8#tWdDsC&9C^v=*J{LK9z)4 zwGZSo^esCOquoHs${jQzkIT4%NYflM(aTMfF>2JF$nY&)Q$uyYqcJWB(kaBAwjuoI zAFI6o!RN2`kG^y;9X`DN@aEBe^4xdyWj}e@PhR$um;K~<_LBzWV7869g>|3;h-SEF zA7El2vc`d@tG1!U%LP2e+7Rb?TJZ+%u$kl4&Aw^*u-tH%Fzsd~XAJF>6a2c?&n_=G zpkh)iZuj5+0B!@cC+nK0MeIHoqJ-6#aeChf_g?etCGKZZ3GvJZr*hd@tv9AaO#~3d z2teis3iw0>l+KW2aj2@UcW!skoEnJ5+Te=$3)@fXi&y*g7xg99=SQ;M=f0ya`^n3G z^0J@2>?hB&pPV>{m@w~Vi!(b`xOBdwguWal1Y2#Y?H$gX5~=q0NKRW!%p!G_3m z%~-0SOGk_ro0TaQ24K9dAY~(9ZCKNuX!q>(h{77H2DEdAgt!??8@@{eWOZg-fu{pg z12IUuj&ru=)WtT;o`cR-*{*#c_4@ckHd?gIGg~Dim;rFyTyqt2&O}9VDo9vS+ODVe zlfU+({p7mL-hnfs09xo_>u#`3bUylgBl8_V--EUL8- zj=2?ZzoH#oWT4E|CMjaScqd{V&zRY81xyDyO)))@SsPC_zW$o;*jR96$+us8 z_4dp9^27bE^4$0JWmkFGRbF&TI9SveQ8kwYYaxK6m)? zeY8NnfB)*kyLucL_sqBLNhf8$b5ec^BI(e?^k(H~3cI=j!!@kMG@K@>s+CsO%k#V zwXWcdh)iAJ$6>`j>W9WmzTc&u`*I#L{lEV%>(v+j6t6wgxxurJzalVjoYhEE75GZ# z6be}|fVG0TlgDnBAm!y0m9;ASlykxJXr%;jdV_nxW<@frcGrPKcM`V451#gbX*D!! z-cy$KN=f?pPo8i-bz#7mErCp$RI?rOL|%g)6iZBx5A|3EcM+gu8`7*~mnb8&pN#^OAP(Am8;5ILf)oOP&eWSX2NV`Pyd zWCg5X#+Ghl-TtjN*Y`TltTfw;kW!7nfrDJ15|lkypv#e6Rd6pLy5c10U(J0%7(+{T zU%LUgl*?!XqUy0bb3c3AG#qGQ3@~cj_X1ttl@9}0Blqlq=f0f#I^>Jj`R?r({vn^@ zr%|60t<3`Bi9rg+sDZ$GcFoiK+zSLU3yP__cN{ihfx8eVI)}t{gGW&tc_9Ht+IFiR zTmVky2K4_H$p( z-821__h0#MeYyRMFJFInYPo0vtwOpmLVEhb5DDI!skC&4&dHf6yO8m1i^uYLVj&3- z;ZHvI?2|?Sc(o8ha4i@)I?B%&&D->v>HDaIs7{QC`Kg>q9_{0Y+P{wA{B#(&uZzny z6i5z4cJ*i=fEUg$IM0i#3HL>lbITPD->I4+lPSqFdS0Z$7}=F2=g=sS159pWx8Ew-XM4Yc1dHtfL4St(`o{V1eG-PmPJ} zRL9oi(2Y*e>n53O8-r#wIE1CmLXADzkjaN8=#%FdjiZwdRU_@aciZ6fg9x|Q?cc^` z<%szR>0q*-9+RY5mt9yh37I`(@09_)%{UcZnpta^P?VZUXI=~%Kt&+L*0+nRN~2hTtE<=lfl-+%Sy^#^{6+-kPkCLxe;C?$n85T3Ra zfl4$wcg@-$tfywx9-D08xQ6==Di~WfWU>IS+fhzQL)PTg(WPbmXwTDR?#eLEhO9K0 z%ZJV127UhaM)m)(_piN{CP|haMzUwRXV{I=NFxa#K}y0vA1DElG;?z^cW*!fe@PN% z=4MsV6P1~a$n1+g=@;pK<5jmmCaj&ARhc_Z^{`PjI$h0EUkYcRgUENkH#aw1>sj<~ zWW#)~HMLQmiRQK4bV2IZ=&pNe@V>0ojYiiw81~pc>>HUtNb#8ak_b%%`_erZ<>64F zM^k>^D~b$5K4_AFqYKZx^F9-NUV82m7lR5uYpkIUda249%?4J_O*&wehx5ds##if_ z`xJIRPCC#pyOI!5J5sH5Qw-9(C98B#1Nf!=;nfFgk9&X?pSzJ16}SDlmiaUP?%S`w z`B?q_uj}LIis{!qbw7QPJ@~$i4B_#Uq0yiG_{s17GP_+$j7ov$tp&p>b_0rL-{2bH zA|hP@{XXmifl!$HP~d%3b!aVsz5+?GC!7#5=fv}10)U(kDk5Pz4e)fj0auu8gMlad zZ0`8lhx2@&#K*7y>QjCE^x^%dmkJ~>v~C!H=L(>6*!Qgdfj$i#%n5;)rpeql&%rEl zhC2$N6H%VvRF0bn>Qf@*sq{H(YSh7~WB_zDY7kt`CA7f3iUG<7o!_J-{^<`dlQF-T z-$R2pq&^85=%KACot!kcm!!=;W@qkA*fk9Wz<3vNdmc)GrP>9J&x!?d>GWFez9Tz2 zF6|4IX*E8zUPlF)V(oK}HAeX1`tpDG;jt-z17L-MF<0yoL4+C+?8L`~G{ayS86VcY z%%vNl9C`)_cd?LA3VN8^9C9w4cX0ygSOU}+G(7WWQQG%p{XMgPx~~5lc5e|vX==V7gzK$MvN;63RF}>fd^a}JFc66#V5W(G-8ZJ8Tldw^x1sG z(6A&8fzH(cN34C=I8oF3`SSnpSg-eQ$v4_Dk(6WtfXx%jiRleT%J_6P6o$w<;hN)fNbV~i z&NH<1o3B58ixJzy=L%Bvr~3H9)g6ZmNaUU)Re{S_#&D#jU2qCfQqIMOjo~FQ#%=D@ zVc`8q9+#r>P=b0f0pk(Ch;A%y@B;BBZ&;`_c|y~&H>qx2erl}MYCY1X1CLGz3|Za|t>GiYZ=d76Z}y-m=l0~2$hn`_ z12Z99wPvJP#!O{3-^-&{pXZ6{YahB2iLEWX*XHPB|t!dS0OqcZWReqyBS7(bTC@Q zyN4+-C%dr@vUJ28ddHGEhn9r$3V;fyffh-4Bp60mXg z=DwI0K5N4BoQ+d|blz)q^5oc;3Xn^a)7wgBYS+C~BR5#7=!feC96%8pMq`SU_lTSi zOmNLA7>_{jXZ1If^Z`1wLvYoS~lF-VIJ#@R`I>MvPsGbOkiC-Rs#l{C(ahUvt;Atw~=X`=kA-S8H_zaNM!B|H{%pd%_KcB zk1yEcAhx+`$g|XW*0m+WXFz138!guP<^TC{E>7)IgTe~~xz^i_WGit0_2OJlL53(A z^4LrYm5r^#&; zo*v(S_SM%Pf8`(EKcYUqeQEN;jw^U`o`GbzWv52#Y`<=E(Kt|X_28X%fN>*cb=JSk=S6-AigXrv{xM6M2{gSXROV{8vc@JXKv!c5#g9};{&G0vJUa$P#M zR<-yYxt1(fjmvQc%|I^7BVsRz57sdT=iJTr9mTW@M*NzcXI6>_W6-O2&NvklE7{)J zLu_8;4Jl^%b2^A*pT)Sm?%_OlHa_Jq>sS8nyKmorcxi#3)p0pj0N_9$zh1vI6N-^C zyX%pg=|wfh+H=xMiaW+7KZ4+-95U!EB|i)q5%t-+w|C=aJnLMyWyKke+{)2=Js$t) z2Blzk4BGqb7u%%R<6N7lYkTJA4Qr4<1PFud?6hIG#zEP`W<RqdrgGkqf=Yfyo>HR!J&+`aLrZdNC-W;fi-99m;aX!zin&q+CiOfxuI{lp??o@ zLouXonKZR>F^K&jjx;1E-N+cgG&>xzYH^&9Y$Q>n7J=ZyT2oL-Xe>b6J#V`>wu0lf z>lGvdpCc2Q%?An-Of;n_1~#d8{bp;Rzth&><$%v8eKk6YH2e%rT{N5_QMTy`@NpS? z)hdnh8fq>ptfug8DCTh&m(ExyW;U82>*yLfZ*!JP66ZR7&`+Mc(YP4;7~>C`tDtK6 zOfe$+x{Y=0LKuN4K_cpILc1hZ0|Ux*+qu1#8_){sYgI~RMFjf*e5mTocE6M__}7*54&(z%WC<)Mts zwb!!nu@hCUn+udz(%1!U+pD1THd&Lu{J%bG@74R6hb@?h>&GKQH^F_IfWEXswYK~L~~v;-pDJl)86em-YUg^h?U}VbN-bN=earmsXo5{eqZ+&{+Is!HGS#onmVADV$FJe z;eaC#5{)F|==8de8TgpsN?w_FAu@H(i$JlvdtSbfc|prq5FruCTD{9JGdnVI2{Q>~ z6*Daa9m>?6!E<^4{Oa1TukLG`G~PTTzi-dTZ`oBDb#&E6+8(&t2I;TT>^nEc%M!$9 zc;`+0-M-c^BJmy4=7y&3N8Y-F(buCj?WDG}pCP z={(kZKPI=WyZ40}GzQzO!X`rED(Jpz$w{(Z6Fox{+;Mi{#lDB^64>cBFx5UZbQm1$ z6oVNOkQG{=J+rTTI6q#>Kl=1n`L|!kqscLbGaqDLVe4*L}(x<&W~dKjr|K-p@tH z+6O!wWVsTPTcn)hN97$y2aMb?1YO?R(iOyv#m(RjE+SL*>Y1PyaUKjT& z`Q3+SA*;HM8}_45*YULv=fy_HKg|#2U%h+zdhV5TY8M2thcv4LvKch#>)eaZ=~@#9 zi**)E&5Na-u{GYrn2*6V(pP!$!EQl_%(TQ1au#OiOoj6@GSEK`j-4a=FoOIhKPCziyzNSCFVqg1kUhYBGr}*yuhx^iliPIm7pr|=Uql;+7b+OG3 zm#gSXn3Wyh<w3wUr=vh8GB;u?aY^Vk^y+Od|Iqj0%&UKQQX}KIu*%7unpGCZ{eK;>(%|H9_{ujUe_N(__{o>_!E!mn{ z*rDD_bng<`+~9X06m=k|Yu8+R!>zXAy$oNxbLYBtIE+pzREQ&xC39tQLw@9Q+bpl^ z13_s+>+m4tc9+gYb2P^``b=?hvQ`Yic>Sc%-m59#4vvtmYryw#bF~AM30X1s9;#|4+rB8Cr{ zN#J=D4qkbf1^VJrHl5{{)}224K(YG#&V8HW{R5ifnFk{@ec6FvIb`bDG^BmyJZtB< zK|nIx9hnGHsbP1v)Y(36&mrsK*_S}y`w&JcJ_`LyKRa#cXx{++2(U(nJMKymbW(0U zYqMVaaGvAD|F%sEW(D*5QsiG{Hps-VnT0_d>&? z7&9jn0dw@j+P*22W;q^PpQK`_`=H^x;Ujk=ukAixN!wF>@3pCyqW&r}Ml*Zhrk8B3 z3fdd2jCGe|s6j$gGz8o>0JL?2Mon@F<~zYdG}I8RGus#6waDhNIwosr>f~mLJ#T$x zt2o8 znKX^T35dfF>|ET&nku~!&$xCU*20K>Z1)(pbKd9IDkvp)^5b5yu8c>M6762@JiawY z1=>kygJ;pS+^KZtV{p~jig({(+SPNcop&C^SsN$Owo(FW1_s+D6Qa|cJ7}_PX&618 zHFK|gIL{Naf6bPpuM*uF64s~S1wQH%18rf0A~z|}+dUR_IkQVa%u6Mz zhp%AA(mz$Yd~YNE5B^R{mp}bazTas5$Db+S|K&gVPd@!szVP{PDu$<^#*;=lL9U;Mb=c>47}|KZoa?OXimkH7!?%lvp`FMp?h z@xyO_`&aw(fB$F7p-~s&7M?Dx;AT9c_}bF-ly|a8Rm??5SUUH?=1W$!4$7gVHBm#= zZNCKb&p`VL&kH7Vd{x@Cc3v3gHqeQK`ocXr$JOzy912i7xXozqM^ic0rqV>K>dF*# z6p%72H#%Rl4sZl&bjMFvnC8A=}Rj%q5XRT zna=C7$~itO;3M7`yzG5C1(5*GLj)xYh0Mv%& z1b^ua5#>PfF9MWL94>emt_`?zPR|L4f5ez}NcLkQFi@#r3#d9U+@&Ak z=A=8$X6k$vCcO6HJOfzjufMIYUfRm^kO_m2@gXswa2@U@;B@$A3Y&`ayxWx+z<4GI zDo%8^3}7pF4Y1?g%NMq6W~`YwyaTytb?s;w=GK1if+X^+y{V#1^0)a#9@CgP8yQu( z!-M9oEu%*_hyqS>^(^rB5dB+nW}sfb8}V0ubg7*s%s~=LK?0s<7aV7TaNa>G4517< zl1{{P^gQU1V{`pn2EX>)~IWLEbRdyNagN+)4PdZ?sNHy|Aw$PVVKn4jH5P{7{g$?NL)tuNfY z9r2W)6$D;vV=QnuR-HAj3==&&6F9`Y1>#bS-~?wbPi)TF**O3Vk8!VHFt2CJ_bU&9xuYEXA*Yh9$WxxOM zQj9^=h~QS>r*5PEiMG~9+SOz0r6SI7aZkKSd0t>z8o?U7l*iGrZ$mfbM?%|A*5TTB zqN1|BYjSUg^jP`~gIXN3)_pE*aeh&E{pbJe_YE>TgcW12IrIUkWeiK$P#<8r1!QfG z>9;vVN1cRC`4|q7Mr$KH#Ni7tg^`HX>h>{YEQ2K;@nHuB1_h!wyDP_>g$d~v7J9bl zUiTV2d5F-F*ca{@H+Z54L!FXUYrw#gn7LBey_V4FKe$fdL+uvlYejX(oFmT0jH?5B z+gx`ML;MRl9;OFlwp|O~DBfM9s{F$xhl~3PiJ7)TVzgR!nF@OK_ zzlr>t-|4n1&I?}?%q9Vi6|wkjz@!x@#d$7UAH z)6t%WG6)UJo&|v~8u?e@epg*9XEt~4G4A?oQei^9c%iW4ffqE$#$7`(ULpbAXPt{0 z0hkT-5p&AydEs^sII6GG$^-CKh~HuuHw3iijYjF-SP8H;U2TT(fY$|hStHCc6Ac$G|Nrc89|M0=@-l`dA>r54Q=8df_s10%D z!iWR2JAPsI(9yg3UB#v(Yp^`Xg(PZo3^!k6(^%FG1HYxG%za~lV9`*g9u*%`VS0qV z2r6IOpNX_y`EdT$JLP`;s~6?4TS4pNgVFU8fVua0tg3J+(md>k$6!TVV~noeHjkUE z8<)4O&D$U(INdp*^!2-A*@RdCF+U5a=#vlh;)1Zm1#v!74P4gGR=U+W2yjX%(8h6 zl!e)Bu%Lv*&9aqYn=V#ieqraQnpM~-H3ZLq?(ArM5*^TRJ{7BbMut97Cym(bmI?KJTwC|QlSb)5mV z9ymTHw3h=QZ>t8Fl^KpEgYQl2aG=S?OZPV5zi&ZY6uJh6t9U(c4wsyi``0+IKl+9L znA-PGzxnv}uik%p-+%MGM!fd9`~OeM((k`CX$yzV5BX_hN-T`GO^3kuM~=DYTB~@* zy4T>`%466w9^V}+#+{@oQ;-!<;SluX62$9jUb<(*g(Y;szdvq4rt^JbqhRd(S!wbB z)KI1JNie_7W-J&j)&yv$88pQ>c5*|)b_Hn6aWL<+EoFOXxzCd}+53W8ZhIPr3JvAV zP!d(&hzPp?2aM~)y?`G|dA6(m>33hf|Ifawcb`6d_j$zdE1$W~?zr(3gfo6mK{(*P zx`~ssf}F4$s_IZFEuL$7=tKjci{Z}GYCO{n*Wwf;W9&I&K|i3t8{_Is+q0GL07e$k zZ4my99$?1;Bsq$FLS(XfKaY=I`*5Cbk@vs)?&Gh%`}j*7-3#L*ntje3nFAh6$3AVX z1@g-JBi9<47+RlSo^ja;tdxXBgUYhdlQRe4?d62zAV6(q9`jzH^p=W zdU%n8Aw_z&M>3ecfBx_M-U;C?S7RM|82o_kKkJ-3r$AkiD5w@Yk6s+w_)zTOAFdGTIa|% z71l>9=AnXw(<7$k9EqkOS|32VAw8)u+l{^hDdmN+R$4nybdVv&h+b;*0~xk=aQ;bUX_ zqXhm8pzv4iGj+8s#9gHxBB|EH3C0P+837)HGxVN0=i=PEOjMBL&@rL#vvt+;j)%8k zsJ4{&k{f-E&b89-|8BcX+2=?eHaP^Hi3!q%VNK+ESj{(i`JT{R6!H^o zgc%ykxs;G!?NtIw6WV2?h!46rZudNf45kE2ooCuZxdIviFN-O8pRpqfazLr|_U|`q z80rDr8&JsJK1FcqPg`>d1&(Y{b~iE$$+b&mcAQ$aVx#|X4e!3qkUK->#cRcy&RcTc z;D|l#5s&h)qP!Tn{Xh93!~N6WeD$sW^*jIcH(%wuU({Fi5jWsxx8iG`($8+i^~L^T z{^VBt{^#EV999nX21}^{*#JyO!cuZCjE4ZaS3CLuYEo??Sox8bbYsD9eA>j#xrauG z<{B8g&luz2-1uXD=r{-Nm(-@-hZIg3eIb9ocV7E&Uc7hy#V_l_H}&xcir8-9TAf6b&ZNrqI_uoENYA zKl&|c?pvzo6i5=TBCcoQPyxi4dSUY=59GyM!Yl!lsj0;kyW(u*NnE_cP7`TQp#vC^ z0K&2^#@vrkr)qNv`Ep?d`tAqiNmQrxN!zvVP){_&Xvbf7Ge}D7OK8B93y)?g73U8Id--E+>s}$ZUh5t@f3WS!?xkm_@4O&zS zGY`Jhg7~gT5Htsp+49N_=G{O#4s44-sVm(J9xuW4Ep4=O`Cb$W(w1^sI7hA_PD8W0EcV=d@GC;wY@7xIID`tkb_qo2{@iVQ`pZxgAAAa5N<^SWu+tT*7w7o5DZ%fHWl>dD3Y0o<+`X**cnHA+t74&@m^ST%hN~ILy|h&(Wzg>zy*x*{hQ97tV}cJ<=(|37^Ra=Gw5baa8;v+u=|i2Rk9uCXF(>4X~PO4J^Fd)4{}Q?L~o=YnRd zwT15(0OqVUyn1%c3%QFfu*q46Pc|6`>1WwZQ2Wd*-rT=NZ~f^H&EBD3oVRZ8Tix(h zH@wvipVtl32@u^KDR)~(N>+x>9=)ec(wNh+uI>RF@v3P9Pw2E01F^tEm=_dWF-Ere zJhC@z<5y=Pb$U9W!U-%p?gF38cg!}{Ws4)$y#ogsMwfo*rp7aKL7vT zi*>`V>RW%V7+(8qzO)ynpX$i|_=gYPDu%yD6~jR72h!dAK1*E-*-klPJxtkV$ir=?#TUsfWjqwf-=5BRB78FqIHJJ%G0>La&6ZsQu;3to*q^PD)is8)cP>!{El4gJqPuk)7MxVvBs0+l!7dE@Fib-{{NRhuNOXi z{fqbMAKv+=Pw#*6)vxNSZ{I;$_M&s`wNLL`%i#~Pf_Q5=yp<4dCB$0^@rO}DY{z4^ zBy^ci_N(_W^Ucz+j`&@30W3@rb2de_PK0;f0Cc<#fIW&N?Fc$`(!o6r*vxhw63GXL zcF;wX-5$dwIC#ukTr=|d`Ag1>f}Y@XHqQh-i&1z zF>N#b*y3ShpN?TNm=G}Ty>zq+hQXc4bvq+dXRAd{ZB1UWUlup~FMeJ^eD&Rj5AQ$y z@?C!IAL>)S|LPaNE+IaHe!TM8ed|E{;nfds9f-H`;jMglDI8?2dA{xwqStI-}-v#Fhb+bt>v| zyToYZlzGc~&UKwN#KnqJPS2sDl?OcCa35m;kALFg0k(qi-HKc&sgrdS0;bPAx)4m( zWs3MAKjs*vG;?E=O<_`i)d@~iKDRUhByyHE9vzg#rD@;QBL zJNzM*4R39Sx4Pl2Zg{I3{xIr>ERi+Gy8F&W2#I(k0@Q5Uh{`Q6f%PJ43b0_M^*)~h(B(Q{CXe+lLK>4cSub*e8 znhhoM$|xSL~KH(MIYa}?%HP2zB=#2H8pF!=rmIv~yGJ7M7t9ne01Gv2(K_o8x z_o;KpBg+qX+XHjN3YMvV|SdP=eR8!@Uw*<8)Wlb1Rt6~x&LMu5~} z;nmMEw6S}Pqm48W1g8>myLCEj6K{b)M z=(miwubZPl=^fs*+V%>%tYakCBDOy0)xPlj|3^PB8ov4X{xAL8`VqbNH}Aer8n65e z+xyxl_rF7wqJKd3gKlT!rsIFQ&Z&j)hebx!qi-D~is`iQzDCnFbLb|hX?30or%US9 zD3+Jl(KW57Ed=^-iCL;1J{u{_7>VWXS>E1pFAUC~%`4^?`c^=^6%cO)#9IOJf-@7} zWz9ZIC#6yXydnUXE|iS(jBv&Z zeJYfk;Dv})dq{b0UFwJAx$BTrWWm4!RwJA~uq&EgEp=I4Rf&xToe&=9%C<@`(V7z> zvceU^aN0N1ZVm(mp}VkK#|gKy4;?(Kk~!UW$^j(e+B9K)`T743e_lX*`}H^PKGa{< zhj;#0{{FM7;kD1`Th;JZHM~^~Z&kxv)$mp|{F@^{UEFeG?1$99R-Ms@%7@w#O+P*y zNjrebZ@iHZ=GSK?y75yaiH-x6?{Sv(-nkmVpi9h4^)&DB_LNmrv5jXWITE~caXs@K zIC>%NMx*DtG$+lx*J8z)Dl)|HKHOJgShcJi`}l)QF)9H>o zwaRmn=`moIYenxpWDs-jL~PGz*_GdZdiPjOKO;T8?pgb68gahhFZd_Zi0^;?-RlDJ zu&IkmeClq33@`V*l9D~QY_f>G0Mkf4e$O=O;JLk6TjK0XGN;1FLYFg>f-IS1%UIIZ zCu0SVJ;$ZEiok9v1rYi!`waK-%7^oGd;F1q{KX5ekMLn|)u3mzw_mK~b5`iRzGxb{ zXNrYsXH{8W158?ojE5*l7ey7=xK>3T|7*6qxc7~?>UhmWQ z;icUwK4Q>WY9>mpRhG3(C>OGH=?-@7U6jkOl642wSyqrc=X{u`!^Gue1M$9U^%-$P z=v*7yW%J5ChOUf)poy0M{JQdQt}B8^ski&J2|Igp#xX-evm6Bd3c%@O%Z~QiBF$$U z*}3oDr-*B;c@{ETo#;kj;o{gU&x7Y)+|$zbk_jW&L1eH}RZd@bJ%jCE`*5DF>p!~h zyI)cxG);BG3{OK~{?ER9?BqehGo6@#0M;pY(O^1uC>pcFJI|C# zTKCFWcP*yaqt~J0I@);C=%hKP&Y=1Hl+qXcef_rfTzc1%vG+Um1Wb%li+A*q zljnqIrS0j3huh-bTFD2QzNQY}LduSFDtV`vkK{(`pef!;S36#KLVviXJ|ooWI>X*z zsbj0g9pN#hSjhScEsT^suHWlJd$joF=#etib2?TjZIu&!E)t4usHN_)iniv-n_~NP zA?tf(@w{<5G`{>VK451`8!Z(4legGG#kz7Tt8DFbc0jVcQ4&QstKtQme2N@EiEGz1 zjbzuJGGaOvA=B7q=OvP*lGY@hcXW2^IrG>(bn)nRKPN}O^5Hz)S^v)8eD%^h-|rlH zz{*-7gZgI7HF9lQ=8ahU0IF+9-O!16XAQlGj{bfz#t(T}AWlCeOedz_Wt3Gb>(Cy8sk=5Zj()67KC8cY_WSqM!MI& zdma{hzM!vtIL}ML-+n1=i6xo{Ze80=QD&<5DoQt?)<WE;RF25|M0f(y>zj|2{%zea{^HZ0|C8^1m!_Z# ziJ(O4vO2a-oOyK>5AEecXPqW3ojY`;<+X>dYW3i=7Kby22LKbu}^oWrN0EXW{ShtM%+*$b3A2`ze@#|lG=B|9@ zGxu3{LC{|ONq6D7T3yNefD)bt2ow4KBo(6(ThzK>9$>U51wykM*h_E`|Y(4=jj&tvyb)Z>koff z-`^vjzu{7Ss0>Z3nk+L`1T9^b0vqur-FMco%kxoAFprl$%WyEaV zeq?do9keh%j0=aebl+&c+I7ZZ7o!6Uvdz=2tEZG3M~o`%mwF@!{)ueuupFS^MlA z^4Q@1ND6^%BVwjHr7`%oei@3CRu0<{|8`)*9i zS9eW>$!{BV=Q!&|-H6tklW!(d?e5bZg_grPYCE0*gRgx!&o$EfPw(olzkS>xpT9xO zeBFsr)$XEE+uU#Iozq$I=9&iy3u9HRts~@S4QYfI`L((byPXBBu!Pfqoc_vUw66xQ z7(gpekPdR?K0^#a1;)o$Pzuw}-yq|M-Oca)4T7CAo(9t+fC_L(T% z7_*sGFd+`KBgi>M)Mn{13T>*B!*m1IY!~Q*F!OmW%O_5MpN&3VcUF5ocT|jx zOL8E?@!(>PR4z-LZ?~sx;rm1PupV>hvd92H^}DRCgp=l z+6yI1toA{?dgIVBaXeY)`3>^jSMUG&egDm8>W5c8YoEPA_^Arv-%}ORr*^4ffTw&J zUHCpYu{uq!BX&bfM=onObrM2WhYpit`tYm9xLuABq*O@;4N}h9zJ2GgRA(D#?~LwJ z;yg%#mUR;0Utj*0FXuY`PWSx1gT`L2&b2LI;SHKbr_YYN#%b@nF=N}sov^=P(|yKe zq*Bo-6#%`Oyk}S~^wc;0_IUQ0C1{?a^Dd{ROuvdAcaOPME1uoU3VH7a=;0DgAHjZj zp1rQBNhVEloV(y$^QdaKVatz(7hN6Xl!9qF9dQMcH5fgEp%!*-)fhx|y)gDIv}t26 zAwe}Ck@|Gc|8af#@cygM1V68R(moUX>@Rfvbk+RhA3pfqZ+bJ;jK`>PUFF*hD1PRm zn;Eg|%APl|a1Cj_ipTjp+P2oozU6MIdsim9{1@GFAN$gFHLtmt*BCKrWS*=QiD@1B z9asuhfB9dbBU$t4ID3thN77%L|BXW69X?y2>6DdbuSObn6eL>?eplDt)O~r{q8QhU9h!xCw6hP(3_?`%*S3i z0<+6R_i{u9@(9nR!{rB&ij<*#w8e$L{C|FUbij(w*^XB03YxCA>@@R6CXw4=8Yl&~ zA=Hldx)`IxMHIb6mtT@bCmo$ye941&U_2DU=L+{}Qz*G0dD~h}SLv>?SF<+tm;bL1 z-^V&cEnVYoLn?A|XS-P5BZrKS=q@an$2CA2T$URpD0)1GO+7Cjn&VuqQTOD%gU4YN zBrBo!GeT+z4N#q@xaHyYtrD5@e)<1?+!uT!vvM#}q}oS-Rf8oUlZ3NksA34Thj;Eh zW{sKi>|@Dd>avV#L=`o`8@54I99Xc?;kDiOdZ;?<6_#xEojH^ZinTev{Qux6cKPBI zkR56a#bdh{Mg`Ya1>-~xCld|plyeagJrnTh1DhMvNR`WW#+K-FP7-!^%85v29?Q;F z>A`)1tU_avG%`EqypiL}|L@~m9EX(-9WU5AkTL=8jV=%bqGaNGycaKbUNlLY(EUNG3 zVlLs6z{gK*n_7`o=yjjdu)C9=N>;WJ`J)vUoDi1-G#fu*=b{I8V9Kk5uVfsYhjRCUj4A{R(%%& zq^X1&U+J98YMuc+vjS@jhl}dhhA*BAxrv1)LlW&9G%too_z2!bvyl< zv@hA=18grk6T!gf(tGjJses&*&$UPIJfx5Fxi>v#%30Z#?&T+3sjGG~fxSYm% z^iZ@j_c$8@1IiQ`M>(j;<22|%!?i~b5*ceZ%$G}hP@cAO;=&j2wd2z0cuQ)UJRkn~ zYxL?RtKdc7NFd;1s2dhvw7m3jTK4iaID=SK8VL%2n>CFcN8fBE6NcQ1ZgfBKxV8b`k& zxu^>v20J@TZM$ zWK3c`1K;eL5;(1f=9Qf;jmB*+j=qw|_0tI3r=y-5IE!E+Qc``iF3lnbbTwzG6V3Es zR5jMab709leIif|8#|7fv*5X~o#<&A@=Vn?;i7sn&I$_!HA4mlCG5!CG2Xo|=jMU_ zmE-R*{;anz>QBD+SI<0HZLOr!#hSqP)cpijS0cdD8~h779T#XJvG<1h5vG@+bMUn5 z0jF2;U_EW^5%@@_5}#n&lw*XCEsFG)oGoTA92n@d%3DnmBqSeKt-^>!Kmkbv^YpPyUp5VEaRb~*k4LR81j&|(Mfc5Th^A3D4=^%64+fkdUHS|A>knw|_#i%xj zVaqtf6jD}IoqMa|$gR&#|8QLie(Nbn+|at&h8DzxEPl|U0KAyD)L`w>I`Wmewm_v& zgM7J~6oQ9N4R%Z+DXpA`WzK$_XEQrqt;t$^R5OIos<<#f(* zB`w4_mPl|Kt6E#h(cuGXJEltJ+P*?mL$KeclT6@_Y|nI}v%=tC8KWlhmZ0YrZdJ4q zG%agwxI?tsw)OC@JT{heAaijwVx4_}id5O=J~hRsL5)y2D&Xq@*H(^f!pRZZ^o8Q+ zh?jRWDAvU#4~c4lkxOV>=fKz3Q;9uj&Ov>)HP4}vW?tZMy@}^Sq@>{hSqUrL_GN))1)Xxu26(6CHPG{*8yO=msxm=N>~_Z(}$budA4jHbq6Y zmSF}jXH_Ux*DP{@&*z}m1uJmd&2`%{akh55T*=4hSqldwMPs`g4`}%Ez*h?AM;i@I z8(hXImTBDU7|G^nJey`hn+D;*q^PDe^WlJAi3V z`datBoTnZZrpgOA7XU?=-Tpju$V#xymuD(t!7>J>6ojd_7VQ^L#3}6Jn!ECjmE>j ziq(I#Vy4ie=o_xt&l;mC8fd)6VV(GDF`8(P#uXf(kOd&oVK*vmBS6*B>Kil3w6hup zUClOUb<<7StP1?TtHm+s)S5=A?aYUN4Og*~)cwe$A+2;KAUj1_5kTRszFmX&C=1)Z zr_WX%!kb5fZl1^xR&Z8~wqfLlAHJARnt=P`CepSb{i$C?(&z;)=CoonJ<^y(Nvz0+-R|}4$$;D-TvWYZ7dVLlXM=t!N8?{pRntQLg7E@9V>w9|dMME&}$v%3tY;I%Y^s(pE zLhrD_IM+!egw$qUg#fZ&A2HhwbMaDUD7;p^*+mb%K)F(I3-PGesF&;e98b zv)j2{Fxy9eO7AgAc15D0X0tERWHp@|DdIU}aU?Ib<1+`?3`Bhhma9{_D|W<$_;vJ{ z9WK|gP*abs)W-q@i|5>%2l~+Gq{6kQEoAMc`{B?z9S||6cxv6Vj65hD#MI=VgT&L1NyfCout4tin8Xq!%Vl0 z_Lp50cZ?G}BvDG=me{%Cj<8*wBiuVcV7GaR!l9kDyo zU6=K9sqs;q8zwZl6~pM-Xp0HwX}dM#(~pffdRV@)$H`c`T%R@>9=k`U={}=sh%OTy zV78QTV#!;bYTz|6>|I4?&O}}ZS$3(#3th?Pbf*gGbkPiUhFzRvV@W+`!{&wgy%sMe3~2zNP`l1$n>kb5BdcxOg_ zt`0hJ5;i#Pd*}>-DB>cNfaMTWV~;gAgD~Klx7|D1c+$BAHXm#dbF}0D;E@cakz5L zn2pqMppM)feJw`s3A6aA+U-Pvt{`-n(svOBEx8eY+7JHMjB`8&kIe>m-NHN^*hZK% zw&H(>GxF|T4HGNFG~Z6(R2-db@JbB#8(f~rA+wL_cze!3Nt;t}w(js#m~IWj5$ued zvW}EL{F~RCrBawRSt=KYvEdHm*tYgIc$<4*kb-u^oDRK5;_3HmB_4aB*ox{~#65FT zgj)=%L}V5;V~R;l+knK-m@0duCulT2ZSce2`V)Np015ZKcy_)7JM% z&?X$Db)a`~l@@K#YUqm9nr%oA<<<<+t#K%OKX5m-u{5(axEGG>Jka5cY%*sWv^?zl z;cx!Q*Z=qzlP3NkyZin9^37j={Ac)ue&q*V z8}ouc^j193x^6ww>bhIgsd`}S!1J7J2tXAy&T9-oqM4(;C>4{3MXODF8J&xGN)*=< zMR@Fju&YJ1kY*&U1w103{6c^2_u^Z8ChzORCkx}>>+j#!>-`F-f>-75>&4qw{^nN8 zc<h-IHXc(j?z8LVq|(e& zO^7TRI!&m~SbN7{tCRL)t4M5{jky8vTE*5FF2kZ?p{+LMLND|uL*`Gj$Q?Kr$ryN* z)R@I*B_xcU*2EF0Oj97yt+P#*_c_*}wNrd$UK8-3)tcwU$+G8t!hsMh&+)t`}zY4K>7`xvh;u z7qzqGRBP?hmGEF1!gEny)%_0s(<_($p-KY;yoD08}O zJ2?`HdD1+KLRc{x+6TqA7I1lxhIh%xg9dot>)+E&7j*VQUNF~#HNilVpIL>Xp*cCeZH4;Xp@88TyJN_T_|0+lf+0UA{U0Tpl!lF|U&4p2B^T7jn1otWD2;{E>p&ohn zQGPa$RLG1w%~o(r%#j65)#+C|(5`NF5D$nJ5XY+=3I^kdtf%~%k6Mwn>nv&2Vgtk2 zmifdObsRf0iUbftb8m;M*r`ProERR>1Z25ni+^C3{H+_)dpyK z$pC5g3u=}SVc*IZ?|nJ9Q_uJH`e)Biu_?G#v)uQ%9~%rPN% zjWq1Ky(q4Z@8ub?T(eK^lW8m&_!0R)+rHo)q`Uw@P2emi8D(qP&NlOAza3w7JkMwG zF~64CEK>Y*^pOleJIvYI@MR}S$8I(V<7nu)7hU{}*mlO&p@Q_v(_4eA2&HLn&0^z+ zO&u+1tPy8ycuhU!SOj~=w3jSq33p<@E!_x_Jn*9qG|Ey&Xbq58#f~Rn2`L8wm#3U3 z2p=fbvG`wTuZH7#uSKeG6BL~|eayWFfi2gUEMGBe;gGY_u4c9bY)HqEKl%A({SWZ{ z|Ej9(-goj@+xEP%ZO<=IwcWeC{_|e#KXc~Gri{rbSg8zq1Y}IJXaOC%bFbClHHY;} zsld=2YwPjpZVQ&Uc}1Q<1_@Rh8Jjz=fp*{?Y}%m>ng`=CAkVzDeuQXN(Bvm41NzDy z_l`EQ%t&hWCCG$B@Z26}MH{%Ky!OI)R&a#IR9lz(TKH2z$gP!&8r&eVlbmT`vP7x3 zwT^ngi#%5jAlU)gPByT=+gccp-cEJyeL26PK9BF-oR`l5MOXLTP8+;}VnZPU)r4pk z)_&RROcAS^98!B#iotm?rmTjk-O7P*nn7a-kZYGuXM^@o`|86h&Nr)aKH9G&AN>-fSn2LdUo5qd}hTsWS6sB8;w&EeXW{d? z)fU`k4R2Q4-L8R~NK-(kdFvhq1OD_8eNIH!!BhjI!SaC8@*-7^b2jRN-PVdnj$G~C zDKX8OP7tKToT!w=K1MU(V;B>+ilR&u1R&xH1Me z!+@TE$YFyZD;|zlB`=8FNmC)a0Fxbal1lXXmhVO`4kKb@)7AFk10+sAYKy$jyo*5ALazkgeQ|9`B%zkI#cdr&|*<`YQTMPmUV zGy-t(12?-js%Cp|GAL$am&h<}spP3c&VZeNfeH-rCW3A*H3CmelNyZ0ZH~U+CB9B8 zQNbYMXFiRH_;c~H+!Si}zJ<@warj4h#E-xJ^$RuV6EOU5gf4P{%t4%r{y!j@vyYL% zjn-7a4%8DP1$34-92X0bS`3u<=zEaCJ-Pv4!2R@?pB9JW3D!|6Chd^SUM0&W9(M5EsMTK!+X-k!36_6QxAXp z)t6tM@l&r^M+Fg3yY`&365_n%1$7{}lJg7=@Hz?~iXhQQ*V%dI4n=%7ZbJ;fT$3hM#hGHAa zpw-D6jVTnhb3t%FVdojSwYWhc2{*~Ys|r7>WI@PgYn2?T2FqaB$*D+Jz4avg!O#5F z_x0ktcgTHx{qp^jaF%=DzGuN@b^|W^wUrNe!@e*wjA)Qnz?6{LVD>u)^pxciuyqkK zfMelK6`aZ7*Mw^yP*U?Ip9dNxww6%6PM!mBhEYBM;IT=M5PpT^vWFAamgs0xKx=%Xmi|XiuD~2MCxJSZ$5m`_uAn9pwK#?{mCt2!VZ8*|;M+pQ?1916ElZI{7 z;O@i1U27_ghYk9yNIebNBJB|SEhg^|>-~$DAL<=mv=@&_a8C{e_r8PAym|5?=;q_E zzW{Wz+er`ze7jRJFAKV|lCcDz2L6(a1^tk5UF0DJR8jyoT1{Ie1jyJh7tYg=)2d*% zS*$`s=9;`ak~PrYDB9i{Y?E;l1 z`crG9Hk{&-j0s&en3D~R7SUCUcJLUDtpo<+o*{y*_jI}i2HyK}Zl$!3kMz6mpM9oR zghvQGj_~)-i7eA53l1ABG~i$InRFJT?|&>ZCN`&e&ROg99BVqAGLCbk<21;9u9-6t zA!A1{h!n)9)MDFWilJ8bqoTJ>0X$Rv=*6yfWUbr?o;%A@o9vvEq1P?6_q9!$m@*+r z4ajRMu`bgxH`J=WJNG%yjD=JyHfcwiWSHZ91lK7Fic=WFffI^UVC4i``E8wd=gYZy zrhiY?dHLpt`1qI4b_BqMKfGIKVx)KCfC_3SgB8@k-wx#am@W@Ux@{oeO99Q<%US0t ztoB>@Txxq56ETR>=`A)*4hCoJih4Zoy3rbo!4-rBq3HI}%E#9GIK2&!!L*`qz#X8? zk93F&l^Gy!uHbS}Aml-n9cwCHKbY@!7$2PA)Oh=pW(hDs-;@MdUt_>e7bk##BF!;% z1T%bxHrCtC`remw>szh&FMPlM@Xq78Y=}++Vo8YbTOLFK?CRTSuvkx;tFGj*d6}Pw zjfZXQc#i>wxq>4WqfsC#t+HHbXlz6ia-kkLpx4QfD>jUOKB-}ULC z>Ze&*g4HdR7($2*%-=TBF=}8v(HxiFd~3oj0m(YU9APKfY6h1H9t$IUa5{R8$q)bj1=Q?g0QbKyo0@}jIzX#PgHvrU zL3%K{BN!Jg#Hq0WkT$22FdV=aW@qGR~fc&9n)QaVrzr{#p)gw7&rga+ENLmPfIX7Fu4YYKOtdD1&E!@0o7Ne#F3;j$=01%Oc(LYxv}vw5=k6z(@ub70lEu< zhL)BM;h9n+5@E|h!1;psr^pR~GhH73gKNz=Xw-p9-}2hM8`^wUZOcHERVJa^*A&4Z zb;QPId=)yu`B$W|pBbJxsAcEfA6LE=3byu&b44M@A%{ZTjtVkwOFEdN zZL2R5w7g=15G@HVxh>V$xNbxY!blEfBpTL-%d+4N07(pQ9sx!;gc4l9-P&nx6J}U& zHXi=Ni;1ya&xpx%Fc00t+FPb0ISug^XSA7o=0aND+TO>|0(6;8daSePx=lToB8g}3 z72$BW#|%bdoE3HinBXS1C>b6@BB#nt-O zphdO>hz<2+Gjz@10C@RAkAi;E#u!Ku>tifm2YqS`9Xid?9Y%?RTcQa324odrI=|&I z-TQKG56|EF`xo#3^!5JkSx_N#tUOkpMB2xqjd>lIFMYu3?2`hrCuzPwUh&1C&H!Ku z9_A$7wT=uL(Bz`Zs~P)<FMRptL%nngRt01PW4|qcJQXFl z`=5KPzNIFa_icL};4r$PqXTp$^0VNfJ_{K|tAzSmSI9R4crYRy!7j7)?y8+**%b!cyj zlolCM1A+50qXv>7G!B9!AuJwPWiMDy->`^}K(x5YTq8@S1JvqbRzqeZ1TugQNe}A*wo4a5L z!c+OG0TXm*o(<3LNb&JQrw~OOJs`WZSWo18`vBj@5Hg{mzsG>e(tRUhDzQ_rHrk?yGj{T?{DF6iE}!(&Vva`|fDMG!!s=`y4xMuK$$X*$X>c&%Mh zo|A!mYYUx(C%UowUd|86vfFpP`Xt|d>+jw_>jEK~oe`Hb(BW!|#NZ~ui|J}jtRV>9 zvc3nB;1Mp7J`WL)>hPvGqwM890V{4>vF;cWWKL^s>=xymsfZWpnOq7uE5`AY&fNOr zcGLJu`p5q8#gx$2d%y@9Jds2;+1KePWAXPxTfpmNqB(B+nu>OaPNmcVNSR|ZLX2^M z1nvT`CEg%hbb-Y281U{m{~Bj)X8ezKUR0?kfzbE8oM#q*-~V9&i08S6n*sxFD8QN` zDFkV^n_&}@JTOY@XlI=Tc2s96=n%Tk1W1n=#NJ!UQ8||sKQR76^cI2M4M~;i_ z?iEmWjFX4!K%>k*COSQS?~h8)1v*3r8yQ*2z(9opcCm zGcxomt%4+?WnyMe>9?2ui;eHN&GN!-t<^1Yh`~7q4 zad9L@i3GPCfG{Ah*xC>p4iW-F72-8ed1fUGP8y@JWhN7 zHyr564xJ``alRMK^3mcTG7NRj=bo%0d$TnJi^0#)JWA01b+jmW;v6356oEdEGfv>f zY_BAs2qIP|U4WOw-}`c&d9puw z|E<5PXWK5QwkBrZd!QaMFb-2%SKAJ!9uxpWW*j!0*U>bKvJo5TF0y@m#i*WOPea3q zxC>2f2(4c`dAMUdoNWrm7dpooT^(;?_)UlQm!4_GGI&hTx*uCbG**?h-p*7+FO;o0 ziiajV1O50}P@u(OL_;=E9h=W}f&4%bUz-6K*lJejE_Dqdn0UZxa23FX_J;V5+4>U% z^qnu~wkoanAKq2H_$U0;PoF(HDHI!R9Yie{^zup@vy;YAHGN;2z0M6=CsM!$oo-+; z^lqGiV7C=5i)qh3k0DH^%LtH@0ur6vixSnLo(weGCQUh2pyuXopL56{;u0c3Mm%n= z9^-(GP^~YpoH}nr-|?KHiIMI^JXiDz$Wh3V*CV>bSJ`0YzORVoC4n+`^3+godDPC? z7ldb~YmL?Bri#-Z{?iLm<=h99xH%@Z z-gmUz3-O|Q3-7r1<=npF@4x&0UDS)${`SQmKbvYJZ6am{i%sv#4reQa1r6QT4Q0Fu zA}O2p9w!L=;z?JiH|<4&wFvShTe%iZ1Z6To63xbF2_bl*(Q0^8qy#x4P{@q3i70?) z8^&M%)i2#_0MVH`RHLw|Hr@j}XTjSta$X>^k^ zez?U8C}l+}xUK3anEHT73huc|wT`33Mw@2eE`+cRtW%|^1+YX_!LEe@9dTs9S)uKG z1bY>`L~R5Pp~`}V9I*?5PmMv*v}%$Jk;1_@H4YN!AY<|FXLL!&K!6W2(sWSOs++gu zkG}oz`qc{%KF`Z~_u@lcrQ}V+;oi6K8Kf8gD3SN^*IzCXD*$s+|R* z1B1);8W=cIHryT6(n8XTI>0rxHbPz~&zuZrgnt!3cbT^>9 z;0Et51qrCH8CRzjwS^AdS+$^m8Ay6`ri}COUtDT`r~?A35jg!zG!pSoW49J|Fqyja zL~Hi~k!UvEYx+Qwc_(%0wR)`GCIHUUK!0KfkGg|JlmzqlMke!_*)tO-UPSO}ADqW- zrIz=;oF`Jt?_R(5H~H-0fzM%sNJ!_7qQk1TsE_QlysbkxGKfJTrV|OU2V$+Oj2o7{ zjYROl>XLZJ1c&}(4Ay(~K*9)QXW&BZ1HuO;YNdTjXYloIp}6x0Nyr#rPsqNYTD{Gv zEBY|pX%@(PFpwdx=(=wTCH=-#^VmhveZaH|=%gR$mo^&81e?j((J(NB>!C7N_l^KD zgv+~PHt(>^JWF<2|T%W}Ug@Zy~gLf+hsiR{7Pmig=ViaJPRzN#(5QU^- zO*t-Qz9jTXNc5(KKs4epqxP%~+pwG#VEa47xu7OwgN3OaS-Aza#xpv+kMV*F5$l%O z6$48cb1mT$GVZj}_f~{`jw34(Era<_n~A9;v{eUS@^-MhgZjaqeGi0I93e$bLYBeRE0^4qG<=KA>ji{ zSTq(QS`C3b0O6nWrMIvkF>JHT+M42%2xsPL2E7mfxvA8+dj~M`Y_sT756A9Q) zVsRJnw~pBAe$tS4I*aF+xtMo#Rixuyb?(we(8gXv^D=?R?0918e0k{rg-~8d0mxN| zxSwz(UoIGo+z=7&NE2FM80fTK7x(Sv>|5`CRxiHwH~H%6apvCl?%Csv-5h7W1fkRc z?B2n3ko`??6dd(6_dK|vo`j|)cpfd4mp4HOW7MFI?*W2EiGg;ZAYwYF+vGh*k8SXo z8eeo595NMffeoTx&qH)Iv-07;xr#-Iu1vTxgP$9OOg{l z5;B63g1IXu*)2i3LbQy5VTnuJ?owgN41W2hoTlgq?ba2Mu44*DTD#$^)l1txry8QS zqKeuaO{d|Yy$?2J>#(Xy*N6Y{x{6KnPQ4tctqefk+NT*Op}FRf08D!~G0VS@Bz&un4peJJ}B zhOh@oxU}dp3i=phmS7w~o5M`Z^Jwi9pmB zAHI9>t-t?pyG7jl20j_FGl5h8OC$D=zwzsD5}Ug9wg~Nr1pJ4pNqej)mKQQpVv)B! z1^x7f$)^QwkUzBvh~E&@YZcmk@gJbpq8z zDIvbF2P}<;B!@h0RzKD#$$cv$U5qplUFAKGa3U(k+!}94@ye&7vDA?my4Hr2Nn!CH zZF}q;V|F$OFf(L;?o7x`Po1DIQLLmu`2&SvGJ37$3*lD#;eWZ{2|VDnv1Z7B!P)9RbUUkmz~+ z5ZY%GB(LoXg+F?5>IZCw&L7M%ja zBKO#eUEdf@l13EBHsrwgln^w!FTX1970a8_LYZbbeoSnuK9M4^)}&lb-P)B?z1M=X zDXsCyeIEYz>nzq-$P63hCQN>ECAbGOm1M;*jqZ3WX5$>lbZWBq4g{>vX^%E{hu81m_H_L~hHbzH=I$n|p zl-PLR^PCjihq*-+=17BYmot6DhA}_zFKQ3)sk3}R@jcFRH0$OyDM6B7ArDd8;SP%| zJ^Y`qzW#$Rz4Id$NUCf%bgydI?%H5NLBKb@_$5FJG6VaADD}X14nq$?0LF?uL=Yws zkfYPLpV(0X;AHw3DS8A=5NI2bz3SJS6f&_ZH+>?lGh{qj_8c{mpleV?0kxeJ%5W}^ zGiJJXb{Y8?;fmUhJ9m$>V2~x!q+?+Ki`1MvbBFI)aUsz?)bpT{FWK5%WSrCcylwIP z-n)A3?|%B?b^iQz$G`WDd%EL)WnYQ>@{a%b8^8XJk0y-M0O^&7C=0kGgIn{1&vFA& z!G6V27fk1RkQLrAu+kJ!B=sQXFXu$ip`j3t>c*#wpxI?dhdR&}jDF6w8FJnb+uf|--;a=lk=L|xii zJyBJl$+i2zS#NAPZEbI1b6_rkgEZqPcmSP24hhCE>KFScad--fDR4{_WPqkKmYDkR zBe##3K8DLCM0^aX3;tR-kuNwG=#$W? z#7nwW2Zd(Yl%f^@dGCYdDQ$CZno5fA=8RiV!o4r&(-;$e+#kPNJk{sE+v?U< zFOMh$+O7r^7+D7#)1k_iBaR~|oRPd*0R04(6o=@Zi=&2RtI@a#1d=^)Y*Jg|5UCtU zt$_X<5eSQ=wUGZjmmmJsSsFc)cqp1{KH=2|uZNOYsf*5)v zc-Xuqcq`odMDixOrwFKDI+2Nl9$72gREWWFERK{8iZBy)CLFc1+7KEK|JQXC8oKbt z5=gVN45@$9Z5=+VVSdotp>q_T2AH;{uRSoU3f~}tA-oSnvg2K**Qs)d(6RQ7$yx?9 z#$@j2k~1k9s7}YArbHX-_SL%c<=mVa{_@9D!=XyBu9g(qXz201UmX63xI|JI5wngIneW1RHMaFo0q<4?IjapvY26zr~)Uf zDnC#-u3qx|0m88l*gnUM=IlIp?J>a;KMQIC6t@`nYJ+}mmbXF!IJ(tBhd4aXB$&rb z6SCkO*Y!3S0ajB5!#$$w>adVum>LF9pQ>)vCb!!8dtc6N0Q2|Pc;z`spA>?X09rtY zzfbRiXfX@#Xl26hS0K2dapEgs(6`{;?Q9AdUkkyQb!|w5!>Sl?en{+X2T(vg)@w%Q z7DOs&3LPwe(IopXLTs+*xqg`ViEYJf8V#^k3rH!;VX!kV9b-ZxG!^DI=+xUjGdePK zw_DEvNm@K|4~8Ed$EI0L#3v#55A3nFnz)`>1Nw((%h9izBU>;ZdiW zsbdLTGw=r#XdvOa&gzX5qXD6__7Uf^XyuNsBx4ZBqv+0A>{z1K47V*YR?{k>IZX$U z(Q-`}QNs?|HWhl4hkxqBm#>;uKl1?iiOB-l70U>u^M>kF8nA)K;5r<683U;?*AUDF zO$?dx9T2(c8=Bq;;*UD4tmR^d`bi0DJ`CEuxzR-sV9%9#A;A5%`vd_fXUC-DoWj#P z)G#Wr>Sru(4oSb*rek1Sc-y0=%)V7};v(WghLfnz*#T;5sD!7nUaF9`D=%DiS6E95 z&gON6 z>i@uZZ&45VtG|DL|MJy`mv8>zEBp4tU;p@@{3Bm~{jt*e8^8RY{X^gS`)~h7Xz zIUfG$Kl=+f5=nR!cK(*oqLwb`LmjgsRukB9`@t5%p<4)1-n(yv{YC3+?es1|K?i;6 zJfjv?yX_OkRZnI7|6zH!U_cEkp<>P%N0N^|{4;;{7ry?a;=*EM(0AsPCCJ9?XL&a14YFE?JmdI5f?8}I@W5)s z0YfN22CoSRePrMGAVI2feo~4z=m{0ke|iPHxKL_>O36kH35}#%zYM8c7|BM=6B=et z$|7T#;taTIH$4kMLO`Atj47+bX-ONq0TM#HC65JV)|!oB;C)7U|9kJs`2I(*WInYM( zDTVF=gv!}Z_tO$e118(S2h2&-p<~$!T@~lTaX`#tU@t(EI9M^7Rq7XP>-M-$l&XX= zdRu#0M7Ar*vm;ANY;ZKRRlS8yDwM1a4|cj8j8^P)nQd5YBK6M4+XNd8d1m97AzLIQ zN&M0R9xuZQ9C8QCMJ;a5Fn`6r`Q}}H;~(mg2sV34K~Z(&W7maGYwIr4vf@>%)9mOZ0v}6QE(oRDA#~-$ql2&kx28_!CD~L zATW|wS~?;0BI=B2(C82UHyRF0?O2Bkj;n7kapXYnX<*}b;EM8^ogaW8Mp6LeJ$DTQ zsRj&hJZzNu+#78|(0lkL_?SbGhgN|zK+>7;&B@w0&4dXp(>xFV&#SM0_e+0)j@`_7 zNh5F|IScZ4sO6n759E%xCyY-Iu+R#9PemtXY=DCf#4u^-NCBco96B@+T7OQK=JhI_ zxl!}BUIJ2GK>o>O(2L*BULX%e1&ajx#buD+K=(<=iGm|3)BIx0F^UB^mXEH>(hkhg zVHN_WU?h<70HN%H?n}-=!pH($UBKIjqTK+kgIyZAAz&QbRuO;c)yr2OgQjl2y?fuc zC*Pjje0%aGzP&Hc&BpK)vN2wq+06AakYcOV6h)MXM=6ha+C>uXX0zdxBnwk~Z7>Qz zrOC0Y&Em5L#Ce9X%ORSZJK$C_spIj8F76p1;0+vwZo76lQRZ{?>m}pRD~;OvSs*y> zJ)1_3DI=_!Hd?L@RFm$u)$sRatQ8wEaON9=%YKm*_7%dAYg$LJ9CSl^78Jf6;L8Fi zb3fr^{qf5WFQ1gGcfMuMO!WC6zPKH37V zH{-Bh>F*m=Ij;_BtkEJQiooIS1V57tFAqeP4M?oR+jOOwkeBU2W@|D4=Mo9p?zt6r z-TQKW#f$P;%IxeUz3&eC9fE}*rkk9D0H0kkH6c9%y3atgTmXPbgSa+k?;CmY1d((! z!@#u`0!6#4fHUlvQ0`QNvUP5llCpS9iUbHiq>H?v@7^N8jfpuncXVXAbEB# zc%dDc%?itVyIfS9LuMZf#69%PPABchRzVVGHs(e^)GD@y5aCu-EVKchL^6T(ajWI~ zl*Bz^D#%czEhNr5dz2frQX_UhxkxI(GEH9x!^yoCg`K04AZra?1A#(0-C^b~+Wklj z4;g+Y@u@21=H3j+#u5;Y1r#!E#S?+Sy)Wlie8aE4`{tWxZGla=xr{y`H5+U>&Iu&A zEa_0OE#cHnuE(JY9t~8*c{mqJP5jlV7$BypdpVIK|1;VGDW=2%+0X_@e{0CfHN=g= zrrP%0t;_8<{3%WK-WgZF4QKpqIOA_l-rk>+aK_(&Jhoeh_MI>1rvCdo&-)kk^AGR* zx$jkqm9hu&cFtBrz5t`tT9O_SVe>-M%V{+qF;L!l3MN;&_|UYLyC;SX1slo+jW~SE zHoUvE19f1qJK#BZy;3iLZ?u?b<)E703Es}hTyWZ+u?wpr{C{&|mJAd2Jj2?PHvgS3 z=T^P@`enTP?llIz&%q9Lv<*jE>Ip&8A)@1G?g8lZQ5`v{S6`dD>xy~~JY5*bxEl6%8nIu@tB+@8d&^^M#J)*VIO20tsgn77oR3$ox zVrCY)Ti`+FY@|!01C^8o^gd@; zY|wd|!h^Lf8l>@=2aY-*6JT9)(543vk3J56^g}?`9P9ygFqAn*nPvuRYoH1kuxg&^ zd}Sq!4R}nv_+Ne-0*~*9!OwLVeD3=Eeq8v}#|5Z}6(Q|B7Z^lMsNAJ-A%o|*BmXFX zGNFEm1&hZ}YhnVo5i$(4bdVK~x*)cyb~h-@n@cH>XpP`J!__ZI7|qY-c3G+o z67klWj{Ri##iu{CK(D#iK1UC*k+DoVL-h@f>s+SJwHVMJ zG#voc;C2?Z8ni*C$*@7;xh66NLB%A*LX1ve&o$V5PY%KlQHbO^*I8GQK?WzhXJ1gg z-cG9j@GE~G{^}w8ai;il-?=AegzaWV_$f@O{a70VMBKhc37wU5ce)^Jb}<7$jB+PO z{z4D**m$hoA?<8h+iN3bsv#;8pL8aWlJFClq(vJmbvp?Jt7t32td-RPs%@S4#s79y zKSQoKNWSjX1h2|E)B(efwvGcXWY%=Fx+=N{ISc;tjuw#ElwLc5w#1daXWa| z(?%ZF#{ddQEI+xx%VMpzry}~xfVrxi6X~j#B;*|KQXRd5BM?PRv4uYH>2*ba@KT%z z)B@OwGegfDI=#hIl}_MjZ9<-r%d(}0{kU1#27PM9t>9+oI)@yi!hQgR-m?dSC}3P# zNi7v20yew$M8eN7Aq0yo3c#Q+z${13N5Zaox~U%QGfE|3UY>y2VhOu!Xd%|n-XQbG z@nhen9{yy%{bjv*B+`E7d-eou?boB}^%F(YXEbmdCnH$+QlvKbj@-|dAAx9~lzLAv zbqoeE?Mr%MNbBh*s3Ddz&p2^ZmR@lj#|{EyfJWSahJh+Rz;DEl-b6M~rhAd`i~s!s zjKz{gTgK?Kvm9&?=y2r~d>Y)x=5l7xV#gZM!5{r7XnG$Oj?7MD+|e_WD}H)+hXjwFXs`p)nC`EYoC3*h^ZH)vfczs#hFCC2GPXq_794PMoEvoJ>Bk%aiWMthcGdy)G9pMJ zm>ag~_T2WZ#G;mOB}5Ct(E!)DIs5Eq0IJB15Gyqoki^|(&=DN|NrQ?3OPEN96=$S! z!o#q#I@m?cq`AVr9-UTBZ30v>vYkTDT6C)IJcC8q*aQg#+5}{#jwZxBh@?~`=Xn4@ zC<`!q_-3W>`FoC$R z1SCTO-@Hx$Bmt=o$n4`PIFTmpr>IFTTC6#xH-xhpeBxlj9FUH{3~L>K)>b@D^ayX4 zit$}T;M7ilW%%+g&Gy6U4mZw5i8~@G3#5>ud~%*3pZBv{K=- z?z!m1v{30+lW9%FP#>BoDg}$>HN1}(|0mup1ll8dliemL2{r@*${$gqSJp9nt2wT0N-#7A9&ZSqK(9P6{;%sQ zKm`Op_R2pD+~VVq{WbKV+nUO_2@~*^4Dq#e4^jcw`EpNRFi67j9uojG*xVMM))#Cl zLlOegp_yU1RX5(KgK$8^H%@x-e}4wN(*grRY2%o=nr`#UF*;itTfm);O-U>QSKLM+$ z<*8i=Lg`p;k)uus5?OnlLZ~bhlRbm+xCCB75Vx#*?Bc*zz&-)J=rjxj&}j{U#@hk% zF^dFkt1v!vaL^n(^}0=U`Q5Bnj}+g}e8--I{qha$_fyoLXlxD`#XF*(B0AXLb`VV+ z$R-8Lg!)86%Y<_yR$jz}KyZ`=JT)<6!@3!L1Q0c2ZCP$Om>oU`g^bTO_pJMe3-Tt}NOd1s#PBoeV6iW1qOI6*O*nYt%Fj8AenxsFY?Ell#g}7gnaIR2mlWEktK6ZnuM9GmO}}? zv^ucc5aMj$7RK(yNj_(^y-CVOp>806nj0b|uS6=W?8%&K1K=V^XsJn*7D?PZCPRdCxJt{^}awv z#Q~+370=xPey-L#dQ~wGW{T-dew7-&S4JguPwC5n{LUtJHqgK)bD$Amofs09+Y|FM zU(W6E>MI0DJr$4!RZG*#-reF#%)|f{$S$X`<_^z6DBy6a4o_(Ex$hwYjt`i31bX~F zNLDQvXvtx(q}%)({139c;Y+2ir6{f*>x<0KG>5NG^*tGw4$`OdA< z+d$+waD&JcJEQtEP;Eu2VCbl0wt?U)67Vt5@>+JqJhvqi*&&ET)i~h0nSkn;0rX@7 zYW8Rv_1u?p^EiL+-OJbS{5&<|gpBJfrH1DLT(hfr=;X7v3kqB9GR{G=2YzqOU;>il ziqW~?xf|F8UNv#{0-ywB-B=x?%vik-hg!iY$!weGIRTskgctdPf|o?=3o!kPj^-Np z^PGlMhyoX60N0Al0#N66$88ylb1J}JT>H}SY}7=kY;xMR-PV|Z`>j*JI=KXQ5P#3$ z)6w^dgqEmTJQ6ZJ^X1%rp6_4bx}FfZ92&$8^s5to+V$k-6+i_#D>d=xbEShZ0!@255+yA6kW*KL)Z7v27MNm{LE= zOvFYz$HuOX^eNtRqvyQ2w?}EiWI!4TK$QXY%?MqAyEYbyFf6M&%{$aP@aRpmGiZ3W zQ-b=;Is#ETb0}dpV-PF)45ZCN>~Y058WI4{P#ioHG(%$=GbnDq_TP^${aw~$y8ScX zwI@`N_G^agkAMH$|roY@o&Bj-gNi_ie<7f9U3KI8{J{Bb7R?OHUEe1o`ZTA<$$mJ?ua z=Q;?sIdSYb(z+$*hGSvOgN4Y>np$23xbmsKr#EWWOyH9TnKS$VUyWsIZ|e?Uwssza zrnBnl%+qh91pm3O-@L>V^j9y>BUaCI-?}GWxnG}S)2EnYfBIKWW1&o%dPUmwi4?Mf zF?KHA9r5lM+8?TFZ6gy0HG(K>XYwok8q&FdOc^wHa{_={+o{Ds!5dOb_5z445;;C~ zG6*lprj`BHUx{(DhoCwjh)w`$P=s@U!No)4qR5dTGaN6Q+fR#viPCfjlDt8}4$+vhDmL;Y2k!Ogp`5c6_Q((mviK#XE z2(knF?a6_6)r)(xQz&r(M!33}lG{*p_N^s>G(f-R00R*ci;*VuNY44LK79Dq1B#MI z@7y!rxkqI%-=MDew-a@Rs6@0wI+AmaE?4fY86jEFtp}3jq0PrIIhmVjsw279aDI(B zdKVcoH%_s!C-^VG6V4iN9h?bELG6S2F&zl4M{9Lx$`OF^ZZ|<>m}&1#a*5Y}bryJX|g9 zFfxrR9#0_Nf5?Y=^XIp3+jHNwC&a_^Onp<7CS9;)*|v=?+qTu!W!tuGciFaWyUVt1 z^D9jKcg?IjFOhGVaWYTF3GCPb!N~eE5NBrQw#A0j5(l+UV(gbaKwaq!RHl~x&#eiu zKsWx!Sh}j#o%`&swLcEe>YX!8?;6R9uUWR4dA|ack?Ms?v%v!a4Wz>M?J+?{DqGL- z7Nm^MFc3aAiZxE;zv-{cF-a#LSVJ-pPA;r=BSa9-(xr)H5)=N?lDlLIimdzv9cy6| zoF)1~Dr0~WuHl2e!i9?gASXX$d)%)K{Q3IgprZa6;0{>Yc=B)cLz$2CFIFo{Xp(M@4eqP+BMk_==C?!Wz3j?!>6>^=BqR7R_6h5 zK(GBG;lS5T(cJu;W)tXOSc=sc7Wr?iWsQDttS|+#mfWy9Hr!2h@EgVKn=? z6g`>|LAi+YKIwBKKw!o()8PrX2R>EVJjA3n{)RBE&8d_~ox4W58kuZU2T)g6_M=C_ z=i^zjhxqKOwhiMQi|sc00xw6r>0WPPD+iwo0-phpUeLFqn3oHdfK`kpN=#zEH2eTg zewlX+nb(p2%$VOTE`|oQYX-^6GE3|mix^b_C!ykT%hE1Ere0OIwn0+vtot@~k2dZT z0{pAJcP|1tSH2H6C#8NDJMF&Hez)C(w^s_^yBkG;em4wXBQw4yE9@ox4cPM`{V@;= zq3Ehrq#^VP2FB^0$LEqb0`L&dWe0d~X*O{CvWC}4_qB(K5(brw*Bgu@wQ-a>Lh>tX zV`xMnT@$ontiD4JQo(j~<^ics*xM9Ph7JbItzfbs@D9<#YJXsuZR*(L+Ce^q3He;7 zBBavslFNNC@yP`Rt~`YcOITsU`QV8*7!ReMW6fQ^*tc#<{ha$3zli6(cY5BZa{(RO zK6hn6e%Cy&r?YNrh&_lvpU0SA=kP*Tk$=h-z|xYrOS`*ES1gvKD7g!4Nt*p5R1fcyDi~M@<9}Ict#Z-W7pa0>sAir`iV~Y%D!%$jIlc{o4RWRw~C=$`GWgYFmI1NY=)-WxF5~( z33i|`zs6gh{Jt`6J~MNl8MfxD@rMkjU=AVPne_nimoR#z1r}C`b+mR$r|NrQed{TZ zQlTy=y1R|X^S(#H1#|)W_x<2z@TeTcw_AfE2w3DTXjC4VZ9gp*R1XAaB1elQa$XKs zK|+3$O^uLne5yXq;_DhNleR&Y*GsODe+WK(hBUb!K+!`|74_gv{H! z*sf`~>mY#`x2QY5O}qTQZ+mq493s81abL>XiT&pNs*|7ZZoba}obJ`i%<3EKa7mg{ z4S{*AB}(YGEk44E%(AFTPm=fYij$=MTN$wPm1$0K)JwGf(~?fJ+DM5tCaR<3N#^LD zmmp|`&N&0EkB2`=G%edvU%>N{@A{mY(Z4oJz&2%;rKtKoXybrPl#K&--~9MwtkU?t`O?@Y1p{&$~W`G8)B3HiCHLc^dcKd+N?Sde71?d9pW@ zNjiRZcEh@$(stzsOV0C3oC%0V#j##80~sPuX=aT`bXLMD1Sa$*Op#o79a z?jvd2F`yuR{jur3P3Eg%zxVflr_Ic1dz(SzG8_A2q4G!Jb=l|Kvk#!2Bf{o|Ccewt z8huYOYaXP2sY;(2JQYRTWbqyH*V3JA6{x0?UP%!14FwP^@h>M)-*9SsuZ`1>#4WPO z)%#s?7U1H+pbf$jBzxBjs9m(n?M1bhLSD5Q(B9&9B&)*`E+RM_;t#*1TIhuqqE2`v z@eAu&l7!!h8tYqnUS}N8519jr#nU?>$X5AHmI-E`gy!mSWgbL$Y)Ef9TLa+=A`Z2i zZ3wc30C2dDBxx~5(%x|4n67Ys_}b8z*6rb)0nlFHLk*t^v6tx#C(G=B?T(+SKlNU^_)htYn}Q_g8@xauRA?NtK-u zB6+qxO?83;duZwb{@RfC(W(clSM@Ks-}{sTfXrN9kbKUAr={Cpu>-ag1LR0*o0$nr4 zav?@;1&e4a!YEvGd(H2CX>+^1V|XI`F7|nj6?W!Ho6>gzUURltIyb>5jSecs!fZEU z!mGKxB;qUq?iqu%t}0BFurbCQ8UB41@t5|{y{Uo)#a}m&2B^pu2R~o$Yz?&!N;eOKFR;`o+*yh{AD8+5%^!bZpQl-sK zpV>IDNp2L7A`2$+FWBTS(2h-v@h*@2>($km#_c6=Da2j2fAd@`nS79cxglRJ2CTT+ zHOQ|)qRc!}vfOxB4P2X{sPB93z#3X5G1frh>KXS7ASeqVDHs_+;WfQ(F_rA4_mWL7 zT5!+OSUOEJq}m1KYV7X3R&f0_$|4=QmX~hS@r0ItR;2a!vR|jKwhUjDD=Q)rP253f z24eUnzY=)8*tcC95~vDNy*Xy84X#*UO*|{v+mO0)zToR=iCIBe{Yo{Wn!(TMjFmYg z8~v9rr;vJsTtY$M4j%SrF5XPw^E?KXSQ9w4_? zD1X6}>KJ&oiTfngj(Q#M6RuxMP|>yk{m2=*#RwiI_pm{`@n1EB{L;?v^Z2OMYE{i{ zM{nm<*?P_v@1&p|pO93A6GItHJ|q$1@OmEYj7AdzRISgI0E*U`=|#x=uL_8Fo#x!K?1=R)|NtVzabQ-khXeY=>Oz($W@5xR(e*V(PCJ8kzY4g8@R7b$V~Mj# zvhhLuwV{MJg*J42nnfPXk2lHv(>k@bYYH5eYwGqzJjgcheJtKO6RSz{SP)tJjIKUb z-blSt7Z4oW2Ia3@x=6h$AqQ@STIctd&8EHR1{{Sq{W?KJ736#}$~%Ww($X5{oS9ut z_in!z&}IlX7g213Z+>Waa-Q8HKPL_ z&?rerNs2lJC2WTwen~Xufcg;XBqd2=yT$Nds*_=fL0~bn6b=OmJM|{?kT}o7)2_@4 z^OnI=mWTwRH|x$Zt6rzc21(jgK)gI)nG5Em+y_~KiwCg*vw$sr5odkQWhB1)geZP4 z0ocVQi3$HbKlL9x_pypC3^njy#$jB4UL@vR)OF=w%Ve(>^+FpBK5G*$VWTl$nrVzFVN8QH*%; zvmq}*hnaa!`Z7XtUA%pqvLls=;5o}N*6hnZ1?00*#Qu{eII3bZvH{-LBgZ22y-7m!t z-hZY{@$7q}dOYz$_$Ac!u4~D_%Flh@*YrH+Y3o(Z0%C?6NU`}WN_Gy8i97*|5!`p_ zgLUDKcWa`+@i%*fmpd>!Z=)C@2UfE&q~zisDm)j}#_R1dzDb-r-9gomX8hChKdN7so_2;C_1hB z*rO!p$|7W8NDJzZNZJg=OKF@*VT49Bn4YJT|C~`zo#y>=o%VqEDo3!uMxG9?r!SlN zP>KTV`?-HM?z}Bt(Eowln(%-sx`mIRT%Q)(tTO}~(<6rBSrJV6T&+8BZW{pG*j`_? z4p622%P1Pt$fc{dd!C(f{^%glZ$)xc#{{tiR=<1LxM3mf>g;^e zVmrfAFnnVrIN3ZZKf5%+q+Q4P`X+Qm+ z_Td%+BiAPe-}}s3;@;`WYs*Y{v2l*MVB4ggy5xt?P;1fL`*$1xUTU@mmlewa;=0uQi}yg=r^Ma! zlNy8GQYYma{EW}{7tR{|D;8Kg1}YI+8pS-eN2VF+)0ne026F&o4hH;oOF+ns%C&RA zeUxkN6Y@UG*`dbSRE9BRDJUcbk~YrmH|~8`Ru=+^iR!|J@5)aZBe5rE2k>vF+mCrR z#vEbWhkgUvW_Il~SC~RftG(K!T6{psv|2+@qId7J~I=-@`8tN(;tYc zIP;n&7lby1g&^9@JI^xbKsbu_fnb(HSpab5X=Me8H)5fnd4M<53DcvAvdrzV7p%!A zpNjrjGWy(+uqSK7(@z{_`KQSJT;JmdcRDKQjrGAcErl)vO%a8pF3~`S z^mQH~x`8aYTGM(KYFBs#y7IZ&^<7%z4X#0clIBwTjt=-1w(3SsYLFyjAfH2C;%c%y--&GwGm<1{e? zMStY&rhpO$95kMk=4Vk-E-RVN~1Esfs$puk7Rwn0FziW~n!jCX++ z5r>ZE8!MN>79MGB`leKrTaYt`goQ<7l>by$7jT`9D{_+r5SY>~^np3o!Wy+Cfpdl7 z?u69X!y_AbFI9|69o>Wmi$BQlI9PLJV$UmKu5CiTk#fAb9A^z><2ACk1^h`7(=nso zk|5sFg77d$-hg5hLrx7}Bx-^_EXZPT1q3sIve8%M>;&L`iMwQ<>Tm@uwRuT>L zyEF^C?hO&SOc|iqH!0l+&SsNF%EG&6B@we320+YNYwsDaUacf$EM}lY8ifz{7vJ0J zWKI-9z5JIu;MzqLkcb*j!|u0YH7C_9GExNh{AkKHvPK;XW2y$JF&)8PCW;WGu_1-e ze?Oyw1jWUy1RD$A&ICww%2*cc%avKbu zzi28NLNcU#0UbJW_HfjuK>&?i2<{HpH3V0X&?CcKkp_kKN zo{h0a_wPE9g{xMziWi|6kU~G_<+P`W>#@)xzM3`Huav;D3wsu9s*d>c=cDt=`XnYk z_z?@fA-`U5@G0VQ<14%5mC{{^-xdmTZ3YYJ-w|U#)Eer|{s{cy-m5lT!I3TN1JY2v z8dBvW7)ALLU+1Nb3q3v85Mf4xA$MIQlw>RHq89X`h~2s|{xq9LLpA32!iB<2jjTN5 zgN7#AX`cn#JHe(})KI(I8;-p<(N6`2H+9r?Pe2Ljb2RPLkW>qW#y8g1sVejVMtBEo z4{K;T+%`S@I<&!gT1k>?wblP1t4Ta^ZF3dO^(n5CjbIzYaacJcIt^RFGL^{vu^)kM zOV`SJZQK(nJ$U!6lIm!)4}PS3JJiTJHTc%W(q33BcLMiyecKj5Rr`7J6wk1;Rb%j< z&o~)UlBs>Fz?AjSO#G4jcU2!|JW#rU_VP46904>zV(Z9WD9kY;UJ$h=LOTJ2CvOF! z*(o~Cp*2Ky$Q8slboUTxcy+tzuTTh%`+jm7>uuEc8;fjFOcl@zBG}W=Z8cD=~P19UQhQQ#_oxShHXCYvP!_WI__f? z$Nji7M~9RffbP%&1?XLe_{7K-PgsIZSW{$D3l==vd7S_?U7pWVPzF7^KF@ioWw$=G zxmOQN(qA#*yiAMz!vR;*KQ#Oa0^<)ZQ9nh+k*A5RSr`hfhY`wioNKNgL0r|dt7-FwB) z10M{1oTUWl`Qpq2`+z=GsM-;+nM3EBfm{&(G?($ngN=Ds$Avt9DKCRQ)3#Z3ls6=v6W_ zFv3>9P)Gj@la5gi4>UuUM8Ws-`#LdXXu?}^Qnfc0QBTj{;O=>;GIcdsNS7kcv{ z?47)CV8zr&OPlwhx)&4kWq)5+dowD^%fW$xo?pQszn;Ab9*tW9fg3Ii+xkW+_|=xR z0n%%l4*E}6>;6KQ6#(+tlr)McrmC!a^HCjRMEme$qjYpcX_^U z{Z3lW995ShBKLk`Wp-zlK$GI^bijD+x8A2|x8HXq2jNF5B7>eEczI~ApWaQ))?XHue_5CwXG$2Ku$ zLeFP8byL`rI3?hS^dnH$6Vc8V0nr6zFQDZp20r`9*$Bcs$30h( zSp-@R#Wm3{uQqM0bHht@VDX4n=A|k4e*1k)MSkyP_j>qk_jrBo-fVY&4!gyKje^XW z^_0K34tCqOVIsT??CElD!iLSLaO(fok0;XFVNT#3vnMj$==KlU;tj?7B^(kYsA3mD zh636?<0M48)K#buUw{7ywpgF~V$|*kdKLf#Ek{%{Z1{w*wiVyRw{kVGQ@Jc22(26f z1Ey!8o-&Fq!!-Yof|XV0qNxsV z+eaWybY0zo3>t|iu|wCytDWHw8lz``+u*7n(8z)i&*`ip^gv8Pq!~L31M+M*1*`6% zy7`zTtZ0g16@~v)-ms54D_UIODHtaZN*HH|7Q#nrg64J`11(LVTJaz#w`bvGhle+` z7-qoJw_yvyj%V8dp*EsxwHos{@ol-ks(t-^-#f}=u$>4!=_!6`8H}s9ZfnKAHW}=; zZcBw1h;0!1+kn7s^7uB&KlGZ3Q`MJjarf6`V9^~8oosdp*qwtW!t3}M<91pXFN6j; zGL)@y&)=CTrXOEBf}j1WP%^;viZy^D`@mHk*UZ-NX7S39VGJU#LlP)>I#z>z$ z?9n~-4l577Jr)Vs_ivBGmw%zPy`E3ZA0m7oUA|A|(s!FLkGdS27olET_O-azE`!~+ zui7p_xIv^a0lN;sP~GBIk|lV^eaKhk*^w1byvr1VV(YkhOc8mTUeQ^R9Zj$ zi>co29%UCBA}#)1%Wg(=O2jr@LJ=eJD#(~i8skV1Yo7Qb3}I9ib%lZ5-E7ipv2|O? z@%3)veNfj{{qxduw*P;nf2>um9Dc;AC>)sTL_Nyk(X3**MW&|2qC!s768t2sRse9n zB^_iK^?re>2hOm?a%Z(>Aa5TN0>dukv2YJAGOKr?*L34RX8i+ahBIu@RgYV9xrh0K zc|(@l1Pk)8rGB{;E~>1aBI4%!s0Bqgq9~D_i^=>_kyg|~zc5}X(sYizx_3Ep0TI_^ zaGcDF@U?kU@saMMbMM{_Uj^=Ys$REGkUCheJAz$rgmz)gY`+{{9T7f%qi#gQ$&1h5|~J`_7E2^1P2 zV|9i%;&ivCDs&g7^!{o~ZFqeVPN`Tj16oxdJzjZbUw`HyzuvT0=M|Of={FR7#XfkK zfE$9?$FuxE7BJ_7R1ow`Hnda&b?M_DEBvSug$k2-95FX=q)1aj^lq|BsyW+r6Owat z#UG+&xGpEIYJs=UZ(Icoq#J(T-Q1q_OnuQz)J zLVmTkI#W0>nxm0(9Nf{BC2?GgLd=-CSot%cwNlPpO&U_SEPRm#^DLGOM@%O7PDj%l z8v})`&Zo2HQ@q(LCxQ?5UJ%~XMKq)g+x(@o?(7<;vdld^c{QSZ)@PGu06MMZRGLS2 zPm~$jpj>|Wl{Ht1P3>wj-2$0=HMSQnv3wvWBP-HTxf(5}@NNnL{8qb`o6mao8-oBf zA=1s~?H8!%-?&AD86SxomBDVyHZ}PFclyn!usx3aU4~>FQ*)gcPx21%>0mu}$h7*` zg3Q8e?0l`+SSp^aw5(ue^P3xop`m_S+;AEvybISUD&uM_E4hJvdjpJjiQJ86>GIh| z=zhM)@|yniWrj1GRh%f+4d(roXS0^k28@Acs-%$t)N0PWR4$p*ssS;u!0{%A$PPG$ z%2lC-7n?VJWIL2%Ba5Iuu}YPig7){3y)xq?SPC2b|1tgFe`8*ro>e61k_# zv`G^>qr$Yi$tQ{-oUvY_X?568xKvJ@xCqtw6oW{Q4Bw$u65pb2veCe3TRVp~UZhD# znhnF$YverkA%(bRJ-rp(2+*_wFOygWyegFpH&l#dc)>YdfJXJ4WnfqLh2xFY{YKFS zz1uW$LeJ$ATaZZ9khAw!h}c?517eM8jBpH`>H6TT9}-8SC;j!aG}yqw;gN;+v9M9} z!3_r8&|VPF_ajU@-IYwl9SeK{733M8up5=3?#MPZIy*i#t>Zd^R545P9R%(a-}>c90NI9$>p+UN z6tk<)Ho3%vRL`R-T?9t|`779@djnw%I>t6&yJgWNsk#LboU4^d$i0s1ZC00(vGUd- zTKx2mZ3L}C%&VIJofBoC!KTIhjLeH9wqgm55DdBS%JUxZ%|WPwTzm0U zQ$RzeBzKq4vT0z@xK$x1!E^D<1oxNkH%)vlavFj1C zy!W+VjvY4KC#PLIkPRd#m=D|7Os^bIC;uxpXc0#|?j5hWCgv8cEN=A_12Q1Ggt$*o zHH?>8Z+)-rWHs)td3VdeS3$hJ$UwmV+R1R9AoI|EbJA_vwgUH(v8T(jX%*@LBuF^ z8WG%GOvA->3Led(4>J>3d}qY|Y%xvK9I{2j-WWBdt6at&Z=`9PUi&+kYC_qCy=dJ& zcfadPAz{0+lpa*+`mVk$?-==8ZA39Bl*oM^GLWpPmSD{l2lS=y-I?U2_o>bF6=!cl zkAFzZPvr*GV^iR8@dsk^(WIhw^&ca?j7ms>Wi_l1)=ik2pb+Ahk2rbH{=&TI!qGXxo)*AQDQ zocKT!V3j3cvB|36#avLjVx}=3k7nmq+5xV zvINuEc;JK9VOP4)o(IJ`!+m5f;VfdxZ2%50Ev7U{vmQ+@6Xe2=i5Tu$gjCC##v4?Z zsko;3?_i{|#?$P1vjd(uMIJT)Z%ALnJ>Ea0|A(mM7&AV0H~;HQ>I!ULgw2SjYx9SB z%xILfFROQ+$Y-y#4tcfAMUrg2WEdISTd68L9b(aK0%|n2?HP5$7|G08e$kqoQW1~} z(VGW_J@ci+l~0s=GT4N@A)7FtU^PLXnB`;;M^&yTS$Wy5YnUk3RyD$QKoBZf73x)P zalYgvNTnfNvZeXt{5!pd8u}NxJ-ypKeXe^Unp>)r3%O`XfYFO_H#)Sn+BO7i@!!LjkxnYwk9c z+o19*{3yC!chJz@V6E?};oW5G)BoKW_6+#f#e?0>uhzvPY~xZM#$ZpJUQI9?Iv$vD zmgzpOIU#t~w&NKWvx+H=n)o`Y8$#t==q9(8jd5(6WhLoPfe!vW`Y`P?RcrQwwoXAY ztMZ$n<~0KjnPW5RUFvt}M^L!TQ*K6e@pTulhV4uri1{hY#~H?fi&MVQMTqFSUJAM? zF2AqvGMUS$$K&U?Gw*| zI`;n8spMDN(oa{q8e&ya#4wY@^_sFA)PzW{S*I_ZI+)iiA0r4F6!QMl>T+e1SX2f~ ziF8qCQPfY%1nM?Z4@P-H;H3F@X;PTcwK z{VKC{|32DqBkXzPc(ZxfGvTWs$N@}mSB7~#+1C&DPKc+}L8Yf}sD$f-k7+L$AQ23F}`vFcSZ8Rw2k2&!IktHp3OWMDzm>vSei z2Xek-TB?egzuG{NJvO>@FjRo8V67$(OzeynB3Wf$kyb!NHWuSb=8B`LkW*q{O`T0_ zP%{dQj&D^&d`8a~749dJ52*ELq%Ad;gfqUb?lnjn1|TvVocyHG)bth^2*osbAMm^X z*MIR^vaiMA*P02i)MZ$FESHknWa++IQby%9x#=FZeH99_5RK+4khB3)3qt-4xJ{}z z7i+?o301%%Qc$-uGI$!`R<+4RwTYc8Zdypu)UlmIC>}~`l6)aZY0`4i<+=TaR4PiH zo_cWJm})IAH$}AM7vUU@UG7fYMKl|QNkBQQtmRVO2)c-`bQkz$@cM4C)@U#a3$VtC zBB_+Be%SP&O~M&G>nIgfc^yH%T; zKf!RyVXU5BdY<*e8mppOzOJ$Fsm(*;I(f9P#RLQwtu$v@QNCr9*|rX7mE`f3cY6J^ zHNwi6jquyh|0~I|06z*{1L1sT!%nAj=!RrlB5eB zwVT;1`60d=9I}s`GHP-gVVI|-o$Crz>Lgf|ybfb+qX>Wrf+pZAe6U<<5B}s-w?n7o z>oAlq&XiCSJ@>308}{UrVRu0vp?KA3GlNFMsI{XWlng7O^;7H8Pq_U~8pKDn!XF`G zhCra))diB@4f2uzm~QG;G}yf30BLnjW6pf<0Pwg!=G>locDz3d?e;%ca?b?2@BjK@ zv!BYW<|(Y+2E+fa@H;k`j0uAV-nXsunk{f8KL7ItTx=Vl%b*#BI82NKPVpeB4%=wQ zW)Nloruw!=tF5t^iVuacaKBX(E?#3;m_}g{Li&HZOJ#}m_M=L|GLZFkv>>ad>p?ya>7Z@?fb=a10C*cFtKY8B%N zZkC}<d@`w&*vWTEh7JIL*(ZM?gf)+hlsbMm61jXZ#8@27Qe2%ae zJm-z`UI+)xyyANcltG_rnL6p>N88Nm0ph4!skB4rHu1ic{9VuAeRk73rGOY#`TmTV z>-)wf?Y@Qn;gWRAaWWlNdrR|y8h^_p;QjSr1h#fUWL2g*xqA6ej-IF~brH%;@=Ax3fNdB&NwM5Yc4ot^uJzEDOxF8f)HLt@G3>q98A{5WmAWA)<4pIV`6&gAU9t5!mT(i?nBEnY&q!y9CW+p zdp}2CX2Pd@_L}9bsjcCFsSt#^>^GGqjR1jz;ZmqFsQz`ojFt8NvIM@=ka)LHf+Go5 zlhYD)5!bv9yj4_$)oMp+cE7_(T?T8jTgiC6Y3|W@cP+1aomx&zdVjoKmK4$2G^b=% z^wb;R#vtaG+_s_Nq%5K1vJpUcr@Tx8@s)#F2!*@6cZiMTv)))*sFlrtJpX2s;dT8W zNAmc2qi>piO1axzfairUw;f;aR6Y0VuuVHNC{C>`nub2?)JI+7XiBi9L6cK5A-JoZFIu`%1MM6yalHnE`Wsp_V`3!|Wn?NB9YTN&n1(9cO zw(i%JH$=rW)vtqHD{N`$;jOOy;AGIf&;twuZhD+0#azvPt0|+5K2J;#dVE{XDpSXp zpET&i9{VgTaWiOi2jO@ORkUQ)AeR>0y(G;Aj?G+e zKcVw(Q%v%n$Be=I4v>4iJy!-fp8?JB^Xd`?|7}4)+a9rT3};5FU1W~!1a*`-4hPK4%VM5;NY>m=LVD}6C{+};C)eDgMexj_xa7o*Ur1}`ZvJuXy)(lk1xHqDTv||bgpiCNNt=3Te%&heZ;8h z%P8agBDxctB+L4lw0b+0G!*bE6j~PT92$uCO$yuzwaP*ja{B`Fos!}Nbl;ABY18bU9szFvRFRh+os3#pz0Udi2R@F2;)*n+)T{ z=_Uk|&EXpqi}^bUE*d&XEL%R|uScP8xI3G6JKEoexopIG9&7xSPo#;yct zk^pDw(BSQd#L&>)oQ*(>jkSj7Ypt_ZfY57PkUAx-O=L;&X+6*9)9rr~_` z{vsXk3kHG(JzDJA5N&FVv+ZJ!1BolJoPWBP@lI8;V`wD>`Z9ZXHr%|Pb=$X*-z_Bf z$2lT@rC#szKcAHJ>)O*5z;^G$;7RUQY?L(pA_2l<3q$3RSM0a&p;Bd0%w_VMg3Tv|8Da9Q{AV@? zhpPeFG8-ZZ5x@_n7}!)PoMQAw<`UtJU}|yQrLfPg7Lxg6?U`j_fx`n&hWud zS!vQ*t`%D%^t(N&?cvHTzC7?c!19)Dj8qv3N5Hn^Idw)=U@(rIa%8W``1(6gji zMM^$=w^)Cq%^RYO;ZNTf_$PnP0(xwTMgr}H{@Og`>DljRo(REwuGNf|wPekOkc7Co zLU}=6VHud^@dyVkww-XD)@p(7c}B2TBwZV}Wa+n&^9RK zj*7rP)L<|4p6DyD4Afy(=w)ml{Z2?nX_62xhD6E9GlK)5sk2jiq4{RMHx4-`kTgKv zYO_tpmi5gQk?LRIA&cc`80xuEYKncBwQ-tfEm5D{QC}nP?u7+AY6QK|-+$naf}a{O?5ofd%4ICGO~eNk^-)939b$?7A~)>_PdCu;QzgLg0XcoFdZS z#>7VSr}rbRPy@zwW@oE}$K|^hn`yG3aa{3$;aZzB+=6Bt6cujAi<#}?} zOY-$L1Vudf_j zm^2cX#Z5!Bvrl;#gKjOTP-S@w&70TEYHy#NydD!!S%jzTpONd7U{Oz)AWNUlR1&0 z4rXY`pc`p(5q@-!MsYnUpIQLw3R@jSH;MrozQSWK&Z5{uA4FUbS)&AAcBsjqBSnl` z^ywNSZ%u+5;N=r9OEMYk1?Xk_zP(E9_}&YA9L%N0J)Iq-hIHt9DfRk8_V@hV=?jV@ z{CK+~BFOK8;?oYhV^uwFWOp}!exaDVR$u=9Rk@ei>3p0dl?d&1Vu{ZII@bg8cET;c5{ z*}A1xZxdX{ru>H09<$Nf2 z<_CrGNvLN)J(_fAS31Udp)V5ynRfAfWRMzK%&FUgx*Io3C0l7w=^)T-$j}BE;LPFe zUjvvjY!T-i}zf1G5D7=5p{v2NT_ItB#dkj0DuuGlsy;Avvt!hn6 zwkFK7k0Nw}?T{Nadg|kH!enSCRgm@tGZG5Inc78IGa@OlCj6Uq_+p(p+C_K5<;bzk zFX0L%jkn1Z9u6ZO|3bx)KehZ-<@2a{ZnAOYx%Wx*4wZ(VGBVfvE&@Xj!$^_M-Ai;! zdwdw5M87*>WzPrHsghM{psBab;B`buG>Iik*_#j~$7|J+oJFRC*P}19noDKF6m5h) zbP397iQ>`6bUx(%$iFYcff8ypUDH0){)o4KcZ5o5= zCz?JphdXG@?@4=ymq-%9EQbVwxwxcgBq7^${qT6JkTu!$E$GTZOU0U16d7rqRj=Xw zTLWrybi%dpm&w4fkpzLZ5XeJ%!u&QYrJybjm1#3-V8_y!!aqIv@H9ZpwW$P9Mdbrg z?7BR#!8h$790@Ip`3Q0;f&BW1r;4MiGZy!TP&l7JZf<|EYc!@Ou7{oSQMQ~-<$AQW zKTi0=qIyX_zn|attr#v7XP$--1c-Al99tR8#$DV)jKOmxSWGwAFl@`o-KsM*leo%6~JnTUVf zzE`iIHLTuXYav^;;Tu*>vn)%+Px!Cd@(S%WhQEr2DExUX6$z;eueAd9f8^r7cW)i8 zD2(kJyohT?cak=ci{_I)|1%K=suUpaAajo*7Pma|%yTW#twK=ie8U~~iUflt96O}_ zh7#QO`TGc-k(AqK=P+$Pj~Ea%3aVn$V*(}0dxXs?!%u(&w8(oLB!J0 zI~{L`dO;TR7)Q~z|BBjg;HZ__>QpR19iiuH^R?-A*Ykb&!&hv=y<$~+sz-$9?ZUm% z`{b18#3yvtnD;b9uW)%kMDI7p5~XwvG$Br*c3o4@a49XfUPz@BP5KGxT4LZ9BKZW- zj8gH2X7$S0)}V*HXN4g19(_C2L2JlcBD3H9D}5^#AEiY0=7;LNOiVZaO5(#aTeX#m z{(KskxW4;#C7;d+O2zCX2CQ*RP@qmUL4T{O~6bwt$MUG{Mm%O$#pCdoy`RDgO5 zjz@$V|K~0|VvmGl6ARQ3UA854&<%Zb7|4T>No7I0Q75fl8v)`b1%=ZW8~Zm3)0HaS z1tRk*s8G}IS>0ATq21FQ6M9tFYGJ}uf)o#PtI(icIqm-dyg)<0Wmovfm%%-}kJMv$ zJLi_Jowjl3RyuRpx18}A08<5CPq#^we#63eU=-aSn-J!|CCr!{3eyJl({f_a7kgvy@!dfjT!?5;+i0v zc+LtisB1>7uE*6LGp`%(#4)|pV`R35$uVARf|4|V$b2SjkD4!>%Ex#v>`gBv(n@*Y z;k}%?PxXyqo0Ue!lD=cEbMsWMn>OZCYaQ>+C#NC_&<}>Hj_j@@bpeTFqX?%X!9oRW zFfkr;HMgSMJxSekCFSfd3myHRKf{XOyuaUnT_4~0H}@rAeC-AO3#=*L8$a}N5xK{o zB6)~{ep^Pv%^i?XUDWty8{Y$ThTi9NAh%gzxrX&gntpcPYh#ktcZMAfCK#ds^#xnP zE3f)+p;l;W!urP*?pymrG;xzBbTa zHAa!<596}FF2{lw>~TdsHRRbpBXs%xbLjHg3;ItGba`1KedWjb;@2WG;UL6fsDRN9 zroGezaCAyrsBuh!iyC7EuX`j5YEaa(1^PsXPjvW1hfj3)M2A04hF0Aox#3~MMjt%{ zH9{s9qdruzd$Y@Srq!`KiuXcdW%un?c8f04Imx34w^fa0$8IcvxV7Mxj#?T5!^0c7 zTxI%?O7s~z9E#J0QMezQM{wQy*1c+_D;l82*3p~B=?qFY^O0`aLx!t6a@x}>nnsW5 zj^$0U4H#{TasWDq&*1s!(WHt*yW!jesPj5a$hkq9K+-tA!lRfuj&pp|5Pw4oB zjz1&l_+-yLf#Y9p;3${fz3GkzrDmBN57g2r=rycWP&s87z2jj5B<@OU!CrMKefQ1~ zh0D(Dp$j5}u4tc2n%lOWZXN=V*LXRlIE?4=(&oM|uYE6^I$3Yek|-bDjo9kjCQ8GY zpxm>VCiHpY9fRFg^_93vhAvXQC-Ks8iC35QIV+ltdokfu;&|L(BG-xo^S*yS_qa_)$;)(FnZB))d#BAr}%Sv@ZbINFefK~El_jG`f+lH43^ zzMXM&V}GjB46Z9B~M-azbf=B=c3F77%ncFWPu&{#gTRn{oS|kzWv2Z0Q1_*`UEgf0P_<9nAc|AKZgLGLjX_M_=Js5 z*!VMnjheY?Zy!zBGN|42lwJl0uT6(&_V0*G9+dEPZy&mq%^FYxc!bcc7vf!ppldCZ zYnhDghG0}U(RlPVCipEoVHgr4`Y11VOB>EVy*l;;xz)W{Vriap>YnVgH&qei%?)+J z_w8|3PiGum{Z_fCyGw<~ei-h&ux%U7o!0GeQU_e7#}4oxjQdW#m(=@7;lv|LVQp0H_mjjiZlHO3N-ncxJk@ur&mSg=#C&u@cf zWs;FP5To2l`Lf2?yf|1K`)<1S5R|)gmL1+TwgjWzF|lAnKEy&$!D)%A1wvSsG^Gop zEXYR+o#|U(3JF0>IDHtU`_Qbld-=v#o){SVg+Jxk#n7R?tq+3_UjoI~UeITC@d+A! z!s=p7&8w6V>{=P^J8r^fj83?g#2u#L?UcfU9D6zgrV3t2?SyOY&keA_H?9W-_O5~> z;2@r79F3Fjm20uLcv+pu%ZnH^w!Zy$pY72nba_ITCv^Fo+Le282T+HXTd++=50_~v z@dfN9!Gul=IvDFFUDtDNO6If_L#TBvYvP1BO47X|O4h>_WqGh@2FYp#eKY`jtrEh$ z;bnW&UB^*=Nc|VEre6`uZfp|SW$t(j%q&VMe>{ zlalJCYl$liV;YX;x^Rw|riZQLSZi|oKa~~zk4)}w-rslqZrU9$>0Ph9s(*pjqOVQ7 zf6f6s=Kx;&asKxQTAy(7IS23ri%+oln_#hMn`!mAOP8%e)xM1yWOstn3Y_m4($r9j zYGx#NZ`*ze9BGw~k>@T|yp>jYi<86_bJ93vTC^Y&Y3!vi{Yw=%C@%8y^n04I*6K}3 zq4N)cU>EGN-E1lwGRkzNBNJR>H>%N4_+f%{?M~TuL*DXZs5=aN%$tnn8Yz$~y?OVM zMBWos1)N$P&Tnaoey*bX@w*S@pDByH_F6tmTu-#{B+xwxbWZ}^&krd+3yV*z_?I0k zwv9wP6rtmt?|Jtc)6O=ODAb88fU(Z130bg?%Sg}S3Xa%!3Kpbm-c>p7Y~gcN18f=Z z8V=G4H8>S&<2BU{V%Z$AC+CF7Qp5?`7dGVPrJj;tu(D($6Ptf?&*>sIu#cp!}ceyts&zkt? zOZ;xx3q1GcyLrw^cKP*%yw8cqW6(Fd{Zi#A1!|g|4Wt={Hx^Az&5v+}?PYd-{7Fem zC{amXD%73e%UqyzyqrRLz>wK;dhpzBTnhB40|oBFizDWNBiXi`B$~1)-P2Fb&C8*o z%5J_wM)N}thXK((s<*eZXI~g1eFB{?p8vo1TS4QO4P9S(NuOBpi4~t%@rf0mSn-J! zpIGsU6@N0UNITFXLvqLvsMwV3_h=*qoQn+e+FT1GNUusx4KOhU$7J%1$}aS}YYC^= ztW>S3bYT?Nl)<3JFKeslx=R}2BE%r0>-=)Ul6zH)fQF(^n{|`qqhqXGbIwNbiW)q? z#{;9srQ*L#4sRyCc`afk8{ z+9f(gx3PpWi^q%1?lH>wQd?mv?_mST&$cRS1L;k&hjh3<>US;5>&@GLgi49@{D1I z?E#;W235*uk;%1_Jt`?B+ZfY`_oa;faks2r?UPUb?(2X2?%SImKO1Iw?Unls5Ykus zE6`s9gg^e^CtxbxG(K93A!F4oz3LCMw-OtL+aTVSr^-D% zv(i#q2HWS|bz}6WnNFRe6B2`qFCTfR+?M+dyV-C5y|Hg45814%$TwTB9VBV<-Y9z; z*^-DEi3UzSe$STG0o%NQo8s7Av^Qt+UKcWR#gYUFBUEbXGa8hDw(+jGTwJh@oa zC|V$$x!^b5p`y~-DaVgqdSnJGPJKr9eeK72abW&N{__1le0TlB7j9K`lhX7v^5SQr zv4h&?Y%?!TIA^pu&%IEXz~;KjLeFGIJ~HIK8HfYyp;6;U(orwMO(Qkm;<6WUsm)2r zRUxAuiem&bIR1xQ^>J9<(pU0hz?2^PpWbGOHTmV3NH1M`F;3D6XOzTc?YlQOTszz3 zXk#Bd>ic-^)MnkPs@^K7R3|D-*TeDfuBvh^-$ zF-eaEAhF}A8@STaRK*KN>r~S)@3wD0IXw}(Y?aECha?j3%Y4^@ZjsH!Z`bJy7O#JV>jcVpy$rqO_(hRqpn zP8a?tYgewKTM13x>BR`J}!doV=pP~wKq;qez}=zJpaLs)jr88* zv6SYQ4f06k-o4i(E!3-F-9lQXef-|#j+_lU#(GluKxlh5A;t2XO9fi(H;}r}WBon@tZV-EzU_yvAJLSab9fh-~HxYet7?lf68BeDcd65F$N-+ zI?;zIkO0fZaaOX4bZDl^_=aTi*8YO-&?~#i0h{)ur8k2gqIvI zF^nwEku58;S01<TV5Iue4CxA2`Pw@DaNrCrz;t&&kE7dpaI zny$b*Dta?FRYe(Vd~37J%`H)q9Rz8qVE4E-=h-<%C6k=+eHn#b`Eg#n(|`Kg_aDCT zuiyPE_2xVO^riO-KDGUu``~0QDyOh{w_lg73(uo?_s9h1%;MN#C;H%;7!2inVe%;0 zE6My4XO>OkG?`SScJMlPoPib5JO)`>pNdt-QC{M`UlmA>=i}PiETRniAud0lKNR-_ zy>;g*$W*L_9miq$3Z3yWAJgrweehzFn@Pi^>SBihn|3-}V~E2W;Rvmnyc^Sx79cEI zyx;ym=EiWdT_bkSYyMZ)*n6#rUEaYe5x&;wRE78^IgGhvrBY}6*~@yD?y6ca*#UO znNk=y*#^9NY)x%g#vSM+(VZctuDEs7cI?SNU@ETyM$~zSo`b~m9S^$f!D_zzWZZQK z(C=FWnz;466SEETXf&~ET*Xmw`tGzBOU_P+yCe6to0D~tZTQy zE@Z^@So)agESH0&*kE-^jkuMoVr%TgP_ULX@@B zL@7-_zUk?l~bO|o6#5plMS;pF@ou#;S;zcqbN~|7%)Z=@2WM~|O*W#LH zO~9TM%8d7(I_Q@Qh*llsWp^>d<@rBF@Nzf-Yqqge*6EKr;xJR=eFoptJ=tqD$isO*JR0MRw@omNr@h-);*`rNv;wC-=@^CvPUI& z(-bLa;Z0Fo(ji8ISyMGJlDQ^z`ONMnBe}f&??22D*ENzZFlnEZ~Gi$)5s zD-!2A+UgQNZUmoB7 z5AzgJ=&+ZM4_Qs5T62aEN`ZM!A!%;Oc{Az3V?4&Q%Aktnfq8wY2(a3e0%tP0J29Z- zZe8m{v}|Epc6qFpR+Pnw>9kc7*xUbco`QpOfL_fzoJI>SDxHkWK-bk#?akg>&p6CW z$3|5yGj)!yI#D?ik7fA4Sns!sWPzx(yO_`l}Y@4otjkH1;H{Ix&${lE4DQ^2cC z1m-5acbA-XAWf67Mj$vB=Y=UX+)aSy{b-%WJvpK}Az>ox-c2k-seQD)bc*%vV%Kq2 z?SkCQwR*voU8fCX7?b%D-%Mt-E(9L3%V$rr($n2H!sE-B!jugKX1G(P3e04D1G)B| zN_^?+&JA*8_CB?@=A#TWjw~|@1eBUWdtD}*V$xKO$j?-YUPPdO=KF8oef;$3@xA#_ z-@N}v^%*1JmDlgr3&4MKA`yNCzb^Ot`EVez_bN9FcrqO%HdU!(BJ7GnVA z*^i~vV{Oz)9k&o5c~x+)(3(l&$-w-E78X0h-7_6V>fkA92X#1DbWV$kQ^vjLrH~aOTDJd49A0)!+I3zxtEiK7UM7Pn6TB zrsfs_bdJK&!w6$1`M^XWYuz(FYh@fHIa~-H%SN&`Hx;Xa&@{1f&W9YH&P}9FJ!N7O zaW}h|Y3o@7SX6{>yx1ib&B$kU;Oq&t1}s&>wy=0Wm0D;cgi5Eqds|(i9k(>7bQ-po zU9Y(bI#TYDzi7;T4&OayOp=m*9s_|JEAE0KJ9qNsKPIXF_4@eryKg`JxLN+{AAHtF zdhK=ltdC@0v3>==)<^pB2Y=3sWH#4NyW>V9q%IDAZa5ARHi$Pjsc*2rPS6ERL>{!A zS2n_^{{lxpWPM|?Y2mIpc+J895(-q|=UQ?ohiO$|&k(Em9bJGf1C*CV7qEhJ%&i8j ztvyU1ISun9m@Wqv>LX?h7X)k&estWF5{elxSR;%#qY-dsE1kQ#W1S+H0o*<Cuu3^Qj2fg(5wb8^Y|+t_=q<$jO7)rqBzMU^C1N zpdE=8OWI0P;!mVK%Ckl^SjE`{mDiD_+@}(0%ss*I3`4491JIyAe$rD9H=OWUJBgZnDaIOdeRN%rIhH}p)D zQRxi0GL$_WZzrfV0`k^|)7~_nLMm=ejF-`uIc;H7-hH=-@j<%d&SfF#f3LlCpKZDQm3)Q2w&i~K{IlC~_n;5jUAj=VG?mNLplD4KZkde981`tQ^`NV?SliGU_sTQ8B1|UPIAofDS^Lvey18G* z+{YAh>gcS=@{V(N5W_UXR|iRFO@Iw%k^@rGZS$Tcq$V#>I8$8S8{@3q*sz3bn=5hOdmgm0m!hN>k)>rr&An%9IKf4Xb z(z2@rhYIRWqjlMvE2G2kl&r#0Peq&9SY zjjg3P#5kYZQcfNl_oTaGMsFck_A;feX#fxWIla$Nk=#cJcdcEH*(@VaF^uonTz+Mn z;MD)8H}_y_POs+Rc^TR9!AJ^^O_zpU66p-9xm&kC8h2x}se0`kpvK`rb|wW+tC2CJ zuin+T7Y%DB5yG=;ZNd9;n>38#&Q_Gz(#UBsAk8=$# zouXcO`Mwa{f3r8Se~RA3Pk-4CQ8qW*SyCW8Zd)slb{-pYJ};QsFG72CdW`v29?}#$ zGSs%4zR%eu;D>w5aK?ya#Ff+9r^SAzyL0WKG&+re8uolx@0k{TS{)z16f?>~I~=Ii%%rd#q&*C!NowNzSS}lUgEY;aalBl8fc;q)TgB5ljJ#+c!7gTA8~! zx7@e?{|BduC5Aj-Yvu~*j(Bc%Kpw1UrFoOXy27E_4^^V&j_V7g;Mlepk*qBXrUw?& z&lvN)_0W=>A-l8J?0~BY2S`^egq^naY#7$s+yD5%2)$WL^SEFX00{do@wBBlJ#m-N%Pvg;^_QRyE_VRgS3Vg&Gas$VxKs*#(+=W z{wF^$LVYe+2C2O!qmns}z__=w0{YkrcQ=RF@$v235NDFA!Z8RQdi`M~XXV4$h(PDc zX^~>tdIIOc*5#VazWJ`x)+4v9RV;7+({Fy@;L)^~VCxQ*3$a~&_*eTZSp_sCb{{&; z0jMO=k!up|eRKH2Is6oD++{YR>D|W3!M2aYS)@R@G7)m0}N+c?34j-3D7`^dTPy=gf2v*`UbPyzC*}c`Z7~C)ZtTvv$kr znGs}|fJ|rG@QtH~iGh1oWi#`A`=38%8-#Zpi{mVFBy&yt>Ji9y$7)-3rT~8LS}-g~ zr;q`6UdeG|B68;R*B%x{b_yIVsAm3SWnQT(!8#=vJ-l-nD1zqdLIryJUp!9gVC6l6 zqnN#l4-3f*g3mwNW#D$$X7GEc184Y-tTWy`Gq3YLd{h&nCWJfQVU#h&&Y7J&HPf&6 z_Sz^bPw{kcI95sHVxGl)`(Mse97IfAA}*H-^|YkrywKJKH8hwFUPl=B4ba6T5f3Wv z&4Vb?VQZSF*(<=ps?8CDismba1GNMm7~Zk^Z5r~|xHe6w>9_yYJVkcyC_B|NK+|Hw zZ$q!xJ+!Y79Px;|ZibAl`veLT1&2+@;ltE{mb!HUZZ_f~*z5Q<8@qjb)^T`MNw6fWmm~f*#+Bj72qE(+{A2FE7*RND9mn= zp~{FzM+7O+7W`!H`@Ve@KY%fIM3R~3o)jc7k|$XVh(8pUk;#4cUVH7i<{aZ2m*j^u zjCPLfwtGP@w(-0MUTIU0fb0i!0Gj4&x-W_^cET3zl}~07ev1%Rj}iY*{$7Hq>sLwo8$kF-oN|umC!TN{ zo4^3Jj_iqe6hm~0^ue3HCA#@f1xNi4X2XRM(45Sv8Y7oo1N=D-)R|k^r^K4O+nELO z!I(rS3=Gv2EkD$p>&s^)8<6^oD744tGG) z7ddwfw1)@$G#&dGQgnQ;RSwrtpEMc9%C;P?tE#gX+=7iV4fG193XF;4 zzB038Oq5nH{)<Oud_`CS(IKxTW z8;^bnZ!1s?z!snbQre6%CNIn~SM)ii^cpKB5b{e$nEeq<=mva{d@#Bw2+dB)+ z4KnF@MSZs};63qai1h|>sMj!cH-Rx`V;5#YKigSht>N_@@o&BgS^w z^~~{ogOwB#`#gS%s^&206J@qlAeS z4Uq#a?SN9Gv->%_4TYhiV-{1})~^g^fA0lf>dQa*%fI}S7u-JzG5=jFb~hdRE?0L9G;bzMZA#WS-Q{quH9f~f&)Q=v{1XBMMwTUOxt&N@yorl?+*gecoa z2o=MzxhsxTiw8B^XQ2+?U0@#_8iXO{=DkQaLVC_%VVKt}y&1|(?t-U$tJ{6~`hC59 zZC^gU`|{2EXX=m#-@7~01HPFad>V1L<<`kk39&Q+KQ4>gh*dM1Y|R-XX}P9z5$1lJ zTMNdNEn}}JTcZsq7dA_QJzy~tQBXkmQCOj|ElpR{RXR>cD7x;cPR~S?kG`DSf~4L( z)!VoCZD{FdaW@hC8WSYv`#GOaB>xEHm<b(C9nF9(z&9BIh1mqVWKrn1pQrqioB+!*q?SBW3H#(2 zxR#RT_&pbxm$fs{MS@BwH^4|3!79$TeTt&HX8ZJ|G+VE!*MXLd2^5$K?>1B#Yf+vi zE6841|1DYia zMH&!6ZM3945q*?0ujw)7@a4dhqC*b;-KcSEzaZ?h4b_lin7J8w0Rko#4&E*ciueE? zzcGjdp*eME4kCabJ)L59w0Pmg>`;rYeuOtn8&I$HLb}tqn$R6X0*9Ta&}8#2`&J8j zUcSz!u=r^`-O&m>`sUryg6g-#P#^yM3DB+>Cgq$*mf|p_h-{!548&^c8F3^qK-|m* zIVE~i9Xz5Ttx*B##cOVlHTs5+v#9!MYYqrv4=5dNaN|w2HV)-0^BgEwggj?x6$xZ}I|N?(sce4Q5-yJ&SFc}tVJ!5^=Yte)a=qmgYIKx;5Ri8Mx91lKSvcNBikErrVTV7 zZQuJuFX7(M7CXoSi8U=JgpRk{KvXl;G(En0)lo}{Id$S+oa|eux!`Gvqg~A#kCXen zyu>S|m{ujBzkg!43N`1!Bt2Vm7_TrFT?-Udylph0DLdeWip^WK&>y~wpVlk;NN#-= zANSZ>cgN59Eg#m8KK%LD-vkcJM27-PxF_#$Vb$Il#(wtRL2^p)TO3%ECg=v>iySFOz z{B9hG_GY6Mh&M!=R#c{C0d>K#OC_6}(bv%&&<1s_W0f({$#rz}@%aT<<=bfC@de8l z?E_SW3}>p@56y_-i}Too$_}`Lojat1)WhNeEngp`(^>J+JOkkhbt*F|*H$;M3DzOI z;ACXnNzG>w$u4S(Vc3<`b@sJn<*66{-`h{WnM!!!Wl=;MVQeH>a{~|#LSeDQ<~}hg zgQ<6{H7+E;rK&az$776U4oQQfu{p1X#BK^24C50qbFwJ;1e^40SF(+QWunxAh8@w z;F0u@!v~60G?aq1iR$U6^&GR)0NLe&na@pTM&i*%D73sb0drG;TXC0=%?9**cfO5o z(}tW|fO8X5?b1Pu8!@=Zr#BK7GahE9d^|S@vIA1XAT8Nj>Kx&`KqTj1AbD}N7;s0iaz z&2sEHZTkRreIVG`=z`)h&|h=QCQ#et ziz}M}Eev&)oTDpXiqz0sw}2xg+8G>{*%^*CAm;@AHE20Z142Zk zCKWJo@U4>YaU1xe4Q$Y3-ctQ8pkJfWFs?MRI3*ieUrZ)+$_5JB``mMNsV02Z^X@ zFsM^_$9&mpWdWhzY!JB+^kwLs#B6@LpMv*{`Q#9|x30_=eA|i^%CoMhdYon;YmjdH zZjZj4+jGF5y?gqFy}B#T7$gH)QfPqPZH%2k$EyWL(&FM8eenp+rZhEdaR?;KMfeSVxg~+yP+MmVm|9I$p5ZCWwI; zRoX$X5q$mN+XwpS%X!9UwYTr;!WrCors|csp|t_l@{-W8YtM<8J9rUH1_5@5R|-YJ zfupb=;Lk`3p;p6|MQ?Et3=qe>79&g9gYetL+6V>2P@?*7ZRr&`GN9$=^X+Hae<{8s zu+*wyazLo(IB;Z?GYu%MP7mcdmEeG(NxPrk*VNe2_i7w%4s};lie13nKn&KZ zvy-2_rXRFZzyBS&$D+{@bAs3ma3kRn@O_m93aO`Y;puv-MZTvaHDL^1#!uMIf7b^I$LYAb;La8?I-rpmvdM5_;;>9To3u)t_)KK zjMH*4@0$D24l_MNVllAg%2aA#gTDl`!UH#sf<6mB>uQ*I-agPrU(Pe=!e8|$$pa%x z(`w*#cWrG%Zx9>>-d41GXd~gicu+xk1cG4iZHsj6IWR}<&IapUY0?G(Q7jP57062f zS`g=p%^Qy5JZ(i~A{DiMsZ#p!fA}A?FZLJxZ!CHI#;^Bnx#K_lyC21n-}M*%^lyFZ zaE7&ewGDHl(>M>7GGOPUwG)!ML4yJXkGCkZ0*8EJEbiP}ggJ2VZ4^#XduPn)b@?~o zXA8jo21&F=bIrs~HxJO!v^U|~^-Suvrg?B3&?8BO=0Su8OstGl1=?NBMDtQ5S(COF z1yl*ff~<>@m^vv07`KG*mchskM}9>c?CE=B{G%?Jj`+)-SMC{QyX}qq$ba$vxsm+Q z_v|hui*6`cKR_cnAHX22j-1xO2G~ffU39u3${4mW?fBGTkH`jiI$BRXyGma;&9>dR zHXvozsiQ1Iyy=y62@~kf>Zk|KXpwj|k=AgeM3GXw$nI&>@eL)3YqcT%}kfoWc#y4Od0)SiS~21b6>2{@>Fu+*jO8{mW2 zycKKzalCo`zFxn7%9roHdh_mjD9={jgYV#-4sie02QqwEQc|BdGsAf=3FotmK}=Ym^Q4r*E1p52O{9R?|=e6`sUpQvB?dH?FYE% z25d|@oy=mT9AxqY8wRrj17^)-dm&4#pn~b%W-)sA+69U3T^4nQQuC~<{7tP5KERU1 zM2D0&O!E`7Dg!9OFJmw-kDkw(S~FnH8H{wm)V7f_*YY%-phu3@EU_XTzV8@Ue)bTj zTtkt%0nt7SF|2==hF?FpJ{<#Vg*l0%phK8V*8p3?4@Uwq5ZHZgC*>a&-TOBmW5RD2 z-J@^bUG*W|s1JXD-`K{(X4Tf%6N;wfS#1qyIdehO)a=S_KzL_1m)t!;&N=nMv zp-z}N!~-pn1C}T{4KSPogFG?AL7)KS>RT%%cgxHHgW2t(>$H!gB5G#nY)3dS#PBVL zV1zy5(1)U-T^J5c0bvQOj|HIn9$ILvuIgl0AEu{orq!=pqXV~ijGWwN3QgIooe9f3 z3pzKq3Zg%}%I>GDQS)rp_2^son}K6}`XxslVbh4^Ie7)5&Qk}mm#M8y(JatuiYp0D zGbzD=YFKZ621O4WHkZT8%uQU>VSBQMVV0pp!<>*1ZQh3VsWGc$3jSf2Gj1J~u%?0M z2j~qTl0>=|*tOCpng|OUjd)V-{^~UMA$u^7;h%5p#D|dsOFR$Re=FZ5g>HQdW^lW_8>9+#O zgYbC*Be@S84v;Z{5ggidJzP=54I~CmWUZiwj6_jyfE0;qE3i6tY`cD+9y*4QuDFIr zU}5aND0fpEZ6(yPpcN$$573!Gf z_0f0mPEE%*HQf&qz<0st=GhCUBhSfQ3Nq5R2qvF`)b;ZCTkW2}#~^%cc0_&?H0Q`S zm>S`JIZjmw;a=LM`@{%`;mrD ze&m*uV>Zl>1sdA10aQa@*LIlo1sXn*RH3fjy6}+EK550dz*ZEP*(0S}06T>kOYUoD zwJCI~m-`oAzI(DSzxt_py?+_@>{I*byLb0f+ipI!?T5GOtlAze48#c7ND;WV_b>$I z9@zOHWOo3xz{&2!qal-JrUUb~44wSbgn9Rs3sj2L34&9bs>ns@XP_&vz7itwy;rp*F#q+(cS2Sgqb z3;=kZGlQhqa&Mt^R5qdp!RbRFbD_d2LHxom2S#pQUw&MB^Q$j^_LG;dpZsS(IWPa> z>F4X|-B)kR5+@9MRqyL9nkr9Ux8LE&eEIt2>*qqB2jA;wY{>bA^e^@|*pMH8@as!` zn!?K%Q-Fs6*}A4W5`5O|jX^^|m|(wha0z`TS)u4rrlU=S?&?)_9Dxi92`hs@4ink7 zTG|%1u(6cPlKN=qo&jKm{$<&1EAG*kb9Y(&@lWf^uj=j7$JO=0ne}{%b=pV(@h1ej zgUosZ+iwuu;7#pPJ-{Y-BBsF&);GM4XK-MHI;S7SJkyU~uw+DRR?CnB+g197lSa2eZNnI>j1S z0MtgnxDN~DA2(imLEw=v@w7NAVnI-fEaDnsHoUyme21{?@+ws_t?Yx*(9zg(!;CbuXKpB(_Aqf~7NM_l6+u-S)Hs6>b_rICA@`I6i{IPp>wM z+;<7&z@meIYsD%@N|CfMB`WlNvLLe{zkR`rG(-GvM?#EbP^t9K#WBYAd*#WE@qoY3B-E$~*Miz!+fV6zvjE?X~` zCx8u!JmfXqn&)B!x8<3q_wRV*cO7OQUb+FC;Hcs$I6?xI26^(qxy5a)!{B$KNr6)7 zoLSc#3eG4|P&<)OlMB?Z{=u$LeemfbGhsT{32>U@&e|S|EaXBKbkNW{d%#04=k7ZA zTk+=YJz)_5=W)Qk?GlzHJ5gXGNPVFXK0LN{MVpj#Z9|VhaJE+Tt|tH+Lj|x16@|uc zg2kK+*ZCSX`q;w>@goSz&}BUa*tMf}=!{=##eV!^e!*X>IhU7%qAU%%EYB7PzaH>~ zZG~XJJbPoqTMY23_U-9e6&q+WZH%6$rSB2xrvwKF*eC#>X?3}H|Av<&IcfM37E%f3hNeURR=4l z22Xs&Q>G{#!{~1efeKfUDpPB9)ghyxo|;yAz}AMhguqrN_K7G}Z|9o|qQ9ZwTXw2?&Ddg5^Q(=`sqeAvl%9%l<i}mdT1Ag%N!0-b)Fo3-c?mIwV zAjJ3GU_jq><@%mIca1{00Aww48V}fxRL}+p#nao2k{)hYUlOI6&^4nZZA+EeN-C)G`v${=O>I9vl1F`^@US$^` z$Q}L1-Fk6doYFOpB8#H)J_H+w(w?NOoS5eBAds_={Sw2sHrfapC+Nx7f_rNm{(9B_ z{)-7+-qYuD>T@~uH!Y{iVIl*0BI-FZKa!rf>~{Mg>J67qgGH3!M=_gC;MT1|}p%;N!NO>SJUx&wUCx8HhmE)!G;n zxGCyG94H_Rpc2rywxI6F9{6gM_H-r)q7hbWsn+@?N2+|-F^T6(RY+n@8A5YqPnf49(`YbgN@fIyBePnqSXN^VuWXc!Z>TSd0~%;ue3|p zk84x!4au>eo zea8Rx$7lSuUfEaoJ_L8VZWBi7%5-E00G>c$zhU}pGedE5F6IQ}7D;Pu+gMe5?X|-Y zk+lf9CN}Fx1k|UCTIZw89g}KxUX%QGM>Oem)U=J`sFA z5&ZQ|1lea7pRnc-6!KjJ2|WT@p=%|jA$G#dGoV^cM1&y_kxkIjL6FK420c)D!A-I& zjhWXatJqP=bB?l|YZ4*J*q}%putg=`e&{)^ftbV16z+h+G$B>?WLsGaQb!R-;EVMo z3^(YJd8Q}OdQ)~whizLBEU*-CMbDYg?OSh$TdEPI9uVpw$(ZHd%^aa`e(t{i|JJh; z!PgDdrw^;?Mj83wTlyP348%Z|o<&Da<2rg)-`%)CIXx!?j|tYV)-{oCMYVv&lv%eoea654{;lC1zgw$puy(ty*cT1j738m3ZP=!n=jep!V`L#WHFG(E2}K>e zZdpPT%@@>WvvJeLqZIGyIOf1CH`xItxKD0Ni`8a?LS*3EWPh$oKUbxntJ2R^>0h%d z)kEQv8ZEgpN(j*vP5KZ{x55GY%D1Tvq619w=d896Dbu;7A3c;4Lfi#-4#}*uvcdp^ zJTuO+4!1NyQLw$uR%=j4|2B}Xa2u~BaVBW4ez4J7a9aRRQfxG#k$bFaUZ=F&5uYxF zbZ;Ou$J(`=1XbJc%yDKomG9;zt!aW<=^e3z)ZLG7v3}Y_OSy45LLmQ|ed;&rRk&Z>+eu$dRs6&_;T(pp?~9JQ5bJtef9E7yG}Ik?d?zMZnL_^E-{*w z6k4+Y&pAEB`fNiTaGs_VX^0MKgH|9=%FBilT;i&Iqm+a%4cV|)w835iYLRxAMiafV z?npodYXV=ZzD{c!3yVKDtAB^UQE7w*DcvGtG7-yvw_q8$b#HQbTL(i-is{_4W!x$Ac4I z#)x5&shtB@VHi|TSHcvn53JBNM1{e$jL%1c&qspKM}p5sg1_F8z;@(-#~6YTU)I** zIcg(k&3w_4!Z#*$!mHvJf}!;d`Z?v{OhvZ2>S)yQaE$}lqs6rZ*|7+=L{5>#?0ZXx zp%e6m83u##Eqy;&09qQ>5!XIvFEC#>#n^=?_8}de9tU^HNS3X&Im1nCHRn2D{fz@P z{yx}44JU~Xyt?{O@-`5|-B(}Cbbxx6Ng898dH4GtfPeh_1Mv3c&+UCZef9RuSM~P& zFD@J5bxe5X9enWp{S6)s=y>({?4cwLP47g2*p1ukb`|XIi+Ph0Fw)Sb7aP zYsay3MdYe>-?OceG>T$P#N}~|)%{GP0u{E+*@=ORM?24+)r*h5oV!cuU;9`u+UwVE z-eU#XyQi;yc6Spx;A|m}bb<7(2T+mhE3njM3=YacZb!Tw2Hz&AkEpqk2%@{n2K=)P z-nTt~FV`*!&d4B@J&1Sjy?RekGuW_;k?}QU$vIuWvu0ci0NBCW6R2eHQNjFWw#|Fv z`%5E-jHR{#6X3&hfx;WQu5{yquY3fWw7c0LfS!BoJ+et2c(&YS_?G7Q47$!hs1`!R zxYw=W{n3|mzl-qo5%6u{DaV)g?%mTVd;hby_3q2+?(gPr@=1z6c z+a6cIZ0VH}u~uX2LTxt5PA&!Yl(G1RT4^KryKI>aJ}K>3!u_Ih>9m~nEIOsAbU2}+}N%V4{Mjqkqye*`2zz5l37e&z;z^ez165#ZnafCc6+#?$LJPxTk? z>n(ikA3j;{eswDN*T4JkeD)0fkcx?Ykk5UTSBf4mSj7*sh8r>1v5+`b7mqmNU}jI1 z)WsF7K81jR>jI>97bw_Ga4>BMIu9wNWHf=~op!A&twct%oEM6s=-VL|^Fzo5#9F>P zqS(SEw-2tiDce!&lbGikjv-iED;Lsp#uVK~gflC}+`x@C;!Q)dhg%C8&b*NE0J56s z*|>b#sgQ0Mg&?(_Aq3$~{NjIlb%A>fG3!pNwt$C)*-e7u?0`kiE7o=G=8(U|OkOf5 zon}7+#GZrOq{9pB>fAAC8t5l8jz zyOvca+DzRbz(E`xEid+|ZA)*1iNa|R#;M4-T|*9eTWbRVmPbq|@VL`;ryvPJmm&Fb zUr}A$A;n>Mvo8v(#1iDB=cuiUfz`K{m4G1qxkUXwN>p#yJ5*)`b&MN8B;CN33~IYv zvLBy_Q&XCLQLW~(HG08rKSnQPE%?l415BrhVtk#@pIMs+f=o>lQEq^gn(!(iG+LtfZS_Ojm4iNRN{Ruh^9bMBYktNbWL32h!Y~#fM&rqDe!d@7hR*in+y1 z7Ts!9@0P5XDAfFwT784}5T%PMl6NIsVVR39D z^j*Ng9sRi976)JFA9m!aM7VZZ>td3!uTIn(#zef6m|2=$6BaSdh0s3HwrdQNBUAA$ z9m9E?D~e(Ey+&uDjSwv4k9W!vs1%HZ(SF^9VvDNu7Owy3%ei@|zn?GPepj;nYPEzm zhsR9PMp~0~HA9|`dn?F^##AMiGi}KhE0hfgT+NB+-*oV3+}l3D*&G=eQX16|YcX43 zoYFYD&AHa_gO8^mO)$?*xrclt{?K)HR3E0jorVZjTe40^PR|^~a{~eE%_%d$|G^=L zh9V55`(gmw&#~ImQsG?}xOZvC8FMxy54OI+m@SOVhO!;#sp4!-WWSDh@jqXuh|xAu z!z^?{V&y$s0J)PiEYtAsfq9bK95c>72y`|PniJsysLH*cxtkzqEYVT0DTuXSaSA~N z6b!_jPDc8aMeflx5e}NI?8X0rtB^^gS$+2akvyOo8<){VyPw=vNE5cMG>}t6uFRtH^Tti0wZC{PyUnm!%PFYe6yAehgr1uMc6PUoYu%px_N!0Eni ztUdU0ZgUyleQ9^ol-r?BEUM}!>`3e9bUdR8Vs)c-hU7#()`lnJT%)o&t4XtwHK+OP z7~R@(4WHmXBv%kifDU=shKx8kHD_gSh)T4X2ubSB{(P%Ks^=ema=i13YTB)1%B#v_ z90$9?eN5<2F~wZQXZJvc(~09jGji1!L;CjGQ%r!g;0;Y#n$I)a!>pVe^F&#Hci#oc(!6Lo+u)HFWO@QsD*KmZub>e1Q!p!bI*X{ za+4DyKg^t%>62%>1jFt0L$Wbi3Zzswrr~kUiR9H`Lh7C;$a0{jBrrf0@z^RW7o7C1 z3D>IJqfJ}kQPQe=bU-r6#6T11m&(5+VvKcL5^qIhE6GIn(yh=_I>Q$TBdha43X#Y{ zQ`2ZB1&&S2Yht=xI5G7;5aWuPgkb#)fq15h))b;+c$5^0YPLq<*OfJ{B>3^G1lq4x z+`sS=_wN1EyZ3MJ0Ky-A@1Cu>b`v?-ewdMyqa#6iOr+QKw!~*5J~)GOj}eOv5$&hZ z)n9juImZA3+R#9V-EQ{IEsuIMT6>N-Kvkz zE{u-Q^XQy>IwD>W?AMX(lP&pgHe{JfToRK?n z@5!@70(@Xw-AA582s3vYu?uxj6X32oEuo~HiL^(A1EJdLGhq&5*kA?@L2cP2YtsrO z(r0O__@4(pzcudb-V~xfH%9Z)>(S@KqPugfDQgo-* zCW;8IYzWsRB}5k*4pJCE@Ue!t#$(G!L;L8P_B@{E+2*Mi|J(QQ%~YVU;}DLBJf=+0 zj4hFq5EC=jsNw9jGkE!&!J{{8^Vlpa2eb?sQ9kDeDdNmiV!BJlhyfi9zWzv9=*T%+ zyVGWY@^+T?wQgsCR$K)<#i9y6V^(_S;Rld^)_xGtiy1FL&>utJK0`b}mE~63Q8Ak*ngx|M5Mndn613%$2$@E<_tvho&O` zX+Vc&$jV&sK0pSOqfI%5Vl5LJ=sr?BVwvX^t$@8xM|q`Hd9Lg<94C5fx$qS?KPN-c z?X5}A`s8jPGAyPOs^r9q08TqVXku@fZ6%+D6zsj-5KdU)bMTNJ`)rzCetK@Dn%#Xz zSXlR1!DxC8%sU!yoW9ZyQJrk~CzQ@EzFGHw`=>Avy?yik%`?^MgYVmKCNCRL1lSNg zD>kp)YGn@!PxMrPP|_%EYk8A?d~dO6vy=99HHwXe=TuOlqJt2nk~^WG-x~Y(p-{Y0X^MJP3CP=ptva zRzdVxr=}V}b_fH3V_s$<-Tmy2siVUk)G*r7S+lP#t^{GmF$5Yd&s$rjEo^ZTefnXQ z?KZj3-Lfe=tt0d5o(6?7J%M%;TXgcuV~E+hQKwI?>&+}5Uq?FPaZ zP1`Yh90R&5P>00Ls{gxCTmO}?z(?P|JIyirLcY};!=Hcs)jt|spVQ|opBrdI#8G1> zp;2dTeoMs8=Fm#^z7?Y;fdtb32avd#&`*AMf{)+theBq#Ln7kmQQ&)J9_ z8bm>J7{Px`S%YytMNx9l!`LtvU>YPKGB_Fbynt&vl=jJ=`^Ma@DU3`<>hM@T#p zC9*Ju)d=wJbp^NLYn9H^ zW!#=79(*}B3+wNHtg1eE`+v2x?yj@Uj^VMa=0YbahhG)-znd>^*%Lk^iSWZA zb2MD3Pw|QKQ0*cdPlu^M=>>jdBtd1HYO0{c@N|V_ak9uQzxJbw^3Ja2=2X7J3GmD+nBfSQ_zNBHn7lLI%xo)agxbGh{!3X zCD79h5Vq*#KG}7xvkaZYzTz7J>LP@FE^e z9=VN`OWN45+z*ezMu$2!0J51n&!kghY@S<200xC&0ylOU6#C--{vN9F>RD=(y=^|lztH_Rk=AJjWO6n$ZqikU063(pct zg)Ajx1}{>|RPVQqM<$-*Y_ZYS%tg%@>m(cSvx}2)w$UcV%f$N`HBH72Sizcb)5xy4 z^MQjuf_-K}%NdEfUIQXiPJknl3ra*^xfzxgEy{j7toz&X<;y33^B2#ZkB`1@znN*> zr`JVn#^h9`tvMD2QFhPOX&N#wYfpGrPdOm$$1WLMtKCotlOhXJvhB9CYdbmzwwSTE z=Bd^W&)uOZHW&-ky0wYa9_SpzPhfz4tBZJWU+H$e!3*+q>fJNg&ZF_^JnbWN8h>MR=r_(lEb&in5icEcSldc)vhieo{GC;41CTq_a>s%q`Fc? zj7w4i$5HET(`>WgeBe|kTBpS%cu?lr%U3_cO1(E2>3dOcgKohBYnq*=a_TIB|F|1a zscoGep2=Gx&z_gNdNs(t(81k=F*5#zwmT>tu4vhE49Lhif*5il?#&}xwlR7eZ3wGD zYTZy-+8D8K2iSk-)yr4)^ugSBJJNXYjk~wWeZlM7n;d@dDT+w|a`4XbE?sBZ+$#&` zVL5CN&{2rNRcT=b-Wdk0C|+2mHq`O4shKnc`+*WVn_C}U7NGoN4uVgqa~`rii(sf* zw)$!iCcpT9zK3FRjOy+lf*~q$2Gv-d&xxazjooc`xcZ#6BfxI@jN`q*Nrb(mQy-&q zYuXR5#CdY>(vI81q%)XIPT#|(CKv!h(W*8TGWKo<8jdW2wrLx$OjwGlNh8C|cEiqj zGB#QBC3K=%9Gq>Tc5b3;n1D?!B*h^u13JQp*)|Wk_!iYJZ!2gCEXkNO2fC~}cGvQ8 z*U9>$S82~b?~lH7&sP5BRO;VY`5%AqDfAns31sYz+rb!K!z$RuoM6AIwnL-P)`6Vy zjKyuwg?c&GsXnTu__BVauTflf*3vay@p$0G!7z56wsh{)R@0~M#k0qZxpKYuf4_&7 z4}}#kue}a88dESa0K}SvIEiWU1#i=h|2T4c)>yOPo$9q=2N>>stkbuhlUCHD_0hbB zy4G%$2Nfk)-H~F%I(B-q5pA~Hm7m~vGej4pa8O>57~!lOK5PKS+m4qlq>3`+*Jp2^ z4vA2oft@7WW3JAKy7LT~)r#mqR;$a&2to7|9M(?M2a5_k`wM>0n=Suez1I9i`gpq9 z)-Ug7%Rl-i{${l1cs$f5#PY2iDN|E02sP40*C8Sz_OZdGc}@z)9?L~_11VBDjWbcI zyIKqU7X^WI>;y6a#@MrM&lO9kRo0+ZaJ6VV3@GBfJ#;_%a&FZ=KYRW1>(%n}m+xM_ zzbA!k<0Yr(=n?fyP%VqRJeT{D?HPku;{qL@}9dF4> z9f;>agiZC+0o>mVPF;XS2uu<7sJ8666q3FVDJ1NmyPtMa8lr)=AJ@_0BN_n?YQ*UQ zADenN-XJTSUFi+Jd`DXHK!C(j^o@!88WWpAkm3ltba~SWCGz{Nel{j!)0OdE6c3|PJ(Va}MtbTbBoC1ums*`esJ!Nk58Ku17DH$o^x zkd>Xh5F{Kqt)dJ0beru~OZ(`{xx0Y={`bRc z8|0@jZ#D;Ef~J#g_RQ7QSKp-*npEC^L3b{E#Tsj)xsdt22OsQXm?f7Uae@(k6UC6baHje5u?GCJVsL# zblp`Jq=)FTcN_xHKwq#tP@7YsaM|8@_HMS;c=k1T^yS=7wD|ape{NsCOzinj*CoF^ zFY8|Pvb3={hk&YXRGNt@C(WG5&YYzta}MiLb;gHzPj8_y05NWWk#DHX^2pVm%c)51 zYt?zlbjZ#p`zELXxW@s6dz41cp55Yedg1R_df~m{^$!57_S?*P`-~#~40Zc$hq_S- z7tHegmv-+NDytLaHq7AyE$%oD;e7~h>F6gZb zJ=TRqwW>OegjryYqjLCk#rS=q3DYLy+3gM)UA0DJQdK<|zQ}evqx#YNcVE8rXDaXq z-?KZ@DZMd?>#y(m`SjDN4)cDVg{m9RZ6cMS1tJ`(K&M@J_qG8_T&-@vjntmtC78y_y((c4K4Y}pv1UuH4VK9u zI@_n%J~6B|6bGGM27Y${5vl2D2yxuAW8f`YRCUKTc2T#zphwUV`-uhj-k0-Koclia z*UuN8)W)E8I_IH1H#ZoqF`no+MnbP&v;}ic27qf$Vv*kaV|c*ubHJPOQ;6N}5DB3SeaXhT=575$E39HhU|)x%1`R4yE(MZ#hgfp%Y^= zZ>7maQ&0EdXkfT6?DTgB7C`TllSxc6;)mR8elXf>Z>Y()bzWLg7Dn)0dR z%&u9y`q(+)W$1qBlC*+lnPe~``Amj2JaA*E2cMu8W56%4{Omlf$H5V<3Ce*1LZ#-e zb0mj`_C~<;KKzsKVRDPr6P^ygoCM{VMKka)3!?TwD`SpySA~urV!Fcz8O))F=9x&v z&QfrGSFpF56Gktz0=px9Y%eJ1v0~B11|NwgXI(Iv(%YsQ1v=piRM9hYHJB3{39RZ- zOdLIOw7wlcmpu~G7Ub`Zy|yp)C>-D>*3sSqdIcdtbjSq5@EZC~VMKWE*3?;zP-x^7 zv@pIYy?^#Eefd7#ef3wbE}_nOao+B)UxN~My*9sjAiphlkQ9)y|1oL=e7|jj(I6nGqgO1bB8Ad`{XDfQTPE7O)fVgc z%@aTDx2oqX1a)+7vzrr?105!N1FtVU+&V%>_L3Ao6Fo=heU<0&S}~;B1~9cvE9m^E zCqkLg6@SV?*vt`$-CqUeAn8pZa%)Jf= zCj-gV;9-NwMH_fky=AWHxI&SMb`vE3d^H(m`<^sK*J0n=A@f->_lZ4LSAcg2G@8a? z3Lew1p5s>!?F;+jF?gYU;otm3?bkojuYcrU|JXnMNSEZ}@kjafkMq|*ehP;9XKWDt zy-y9IPxtV*Hiu3!$DZUJiLN0dp=J!R-uj8G4b9)_E4o2;E^P>sHAg1G7Te;enttT! zS(c-maCle4Sh->}8s3>(C)S2TP@-;<2=`Asn&-liWGEVD5l7+OYkPqhbK7jb z_vPGL>OVQ9Ke--X=5s^eRto+;drsjAmCEka;e-zA z=D8M(7F3!;YBvD7TTR5!ecQXoJ}WC|#Hk;8T`W zGR_X1B~d6vfPdiJ2`M1p>lw!xh%63;WekLrE~^(ySPe*(vbcf3<9qH#V?S|7U)2B4 ze_+47xj+F%jiIpN;yVF5Tl2AzfRO+J!%wkoZOg&dciU}hOC6&(fa=cBhJ!L`Y)qoTz9Otn1_EKpB zM@C#_l*EbJjb*u?lG-%~(uqs8wDxqMG|nP8NPG|J3PWiagR(dSQA~R4q5o;T`S9{Z zyn6ZNo7ut@C)O;fm2P6c|Au3;3t$ktr_oX1cY zK0p%rBuGo4KlDUgXB(~Y7^FhX2mY`&m&t7}m%bmBDZC+VnfC^R!`xj%5^huWXJSz7zlmg9s|w;WR?ti z(gIntsaZOOnr!YWLnoX-5MngKW-^clZcUdWAT)-kas!O7&yF+AEMCrTbln^OmM9nO)9U710&1oJ3aAT?g zOE^dPE}I8S5D3+I2+5@23lCoHc7E_!j(mQOV=ab6+I7XH^V)rdM6Rgqs~KqQMU4kY zxB~DwLRETDJA=BiE?(i2F}~}4<=&^eLv6mpIs`pLprUAOIO2zt7KUO~z%GwlZ#P^E z+~xr^!hON1GSA_@CrR@YYjxv^ygEN1HzLkx*n#;0ETBp~GD?Dmti34^vb?5G6nm}h z(e_F(7Eg*I6;4;s@N~>;`&hS=<)6Nb_woA0jt@`K-*>)o&z2+OrX2Yk2i4BVvj_k+ zn>k=IouCU2j1q9IoSe00Mq^+G$7*Jbp&Oq@y8Gp_Pn-cqm$_m=yo9U^LmdwWdf1R{ zL}%{70w**LHY92hkB5Ky`UfCy`MprvJky;`0up+j%WFCvd>=~*usB?DYamcTT>6v+ z@0|zdW$ola8gdRRmT5TP18l>k5agQsfw1L%yVZ?lyB|J??lA$1j0U3iaAsnFxm=`pxJvDb+_D9` z)fnRp?pOmfELI~4k1nQXyGy{x!-LyEm)E^fLet1+L4#SOlR5XawQq4ifA-bK*RNju z;_b`xB3~s&LQmRm_r8J8w%z2W?e;r6S-*#vq84z)`Ur26o34${37SKm28eTM6FlEJ z4g%;xQQNE`6A9vg(^+>}v+vTS*;SLTJQgG5_TYr9L31DxNIO)HsEdHZp1wV9MSvS@ zCwS-eU_x$&ZViCi$%$NmwN@YuIXlHJ3Jh_R5G&S9Qt8?;-8WNVkuD&qcR+k)G8e)i zqcdOuMX@xEfg3Ea!hFw|w_UuSyo>iAQl8`!-T9{d&5*x8|H~E=n3!c~!6ql5dW1w$o7OxPVIq*na>9y@fkC)4DsMeKx?1Q6RC~o=rISk~W+$+=m4dM)brsuUN2X zA@^*e*LPd1jnD*fuq~~roQ`fk$tGzdbf0ON$3?{lw|&44wrL|h5oo7#U?sBwZflx) zj1z!wCz4o}92tIOk0NgY(EM)T*Z0C<`w;o<9{BhEI@bkX{qQdKQ%=RbZ{9O29Ni2S z=y$Kzz6a^46K&)rW}XYCi$OHze8zL1DJI^=q4WjI?Ur+#k(-f{h&Dxj1tvwdfC+ru zJ`lw02<04eqczwG1})UT)bJnZhx*L9LOpI94WZD_c!o~sOT4Wd!7EEUG`_WGKcj88 zHX%2Zl?jM7bT}H6rKT$!EQk&{y&_bzu6gsJDOhgQ@tI};ZWGI3{+XnMJHwWLyTbh| zfBo{~eiDXt@0<4fx}7F?-EEo!qv2JS6%cevB}PY#MB5S6b6W1!jX4A7d?|z=c+nIRU3Vr*jkE`6?4Ml3ak3AY^3$p+zIG^fJ2YqSM^MHiP^ zf$?GNG-<%pv?gm{$N)uHOy6@cV9!#1sYLx?L^cO&D+tDd4qWR<89)To-aDw}937=L zJ-T6THLPzxy!iO~-Ff*$&UWwn_U!w{H}Bi;EOP!H$~U8d<39tPZ-<7p9&1WFd%y!8 z**i~L2=LT#h^BV$G~FlYUphu=Xmkes@iY_ABj>uXKE1axFd3Hj#g>fTLrw&AFj7b@ z`YrY8bPa5(cBr?R*gm+mg~fr5vU!L@`kcdiA?5zKlr~_H$ac*PYPIIr13~AR6yV~I z7N1)9(pCd9`jMkBD3rF4<)vj()&ISP6fQbRj z(y`l^@KdvbA)Xd$yV{sYn1P?(g3)Vyq7i|+l4|oBm!7eF%s9k4*Mj6$!0d7LqU_r2 z6w+n))lC@v0JXq<8R*lRHGM-)cya=$X(8I8S-5uD6LRV^XXnYoi;f$O!?&#TKYgEn z_4Uj5`Qp{fpFe57-TT%(dF9#{^sV*o@%JCxE0-+V;E~9ogU&WM@&`imfdB9gK41$_ z>UZ81^C41{?faj1LuapX`t(o432kn6geu)4OC*}F%$<8R^E zhPET@t7EcnJ_e8g%sowpd-Xv6z%oBd1!zRpp$U@2aK{w!wk*5%<$U*R^OODdO}+f` zxv{jM;2KJfI2fciZk6DEvK`*Myg)%oJbF%m6!{`gtFaG+{rORGTiR4vppEms=UPrP z*U{c~$IAykj}gt~2If9eLj558q}>L^(s;xfw35xCBm-F2(*x&i`S+rK+g+)Nq78Xp_tc61I=*$AE67D$rZQWpqmG{>2O(-vCL0?QWyX`uIn#oK9X zc$eF^>!SW+`~c(MVAVW2`y}G9JS+!keAlv`vmaOn7Dh9)L$jscp|&HTJzP=ewWlpMUu3?bol)iw{44`R>KL z*guaipEI>d_#nXvG@Wyg$=ZgoolCefDi@jsP(L{!7>fho1PF006H6h<@5PtiWY~0JrQcm;qqU%$^L`^tduoiRs(V`6_ZADL4HZw8PwZdWT_ehY)OZr6U%@ zR7uva*k&g%->L#?KV*K<5ni*7q60S?ipjRYq-C#FHb?fn0_^3a@Y$!dN67NRe}I7j zyR9qkd^z9!oIklLo<7;#*7RKnR}(@g?N;M)MuRska$c&YMua|4S!VE7Oykhi@6Fc; zL?DwPA>0Hl3D#OJTod_W=uj#Yprc{zx0l0S+uNKM>U`b|>gJjY5nn*vt7;Bpu|2F`$P2l4fT0ny&rrT9^R2Z^`x3=Tp3;#tVu z83!wpPrE9*CzG{%U(T>s_3H@|%M^DlpOSotzP{_1P{ES?IoQ-usgcP~f&^%U~yP#9AVx*V14A&NdxYJssrwckZ%|;1mr2xV zcMw8!pL`nV)E|jOC2*9&pZ_ zGgrTz?ce)yZau8^;YI%AkMHBTRfCgy1Nm%72M|#U8`v4+G)zjECP0R0pdjyhD^Nhd z&znm}Q`6=EIc2!@+znbOXj-y~cb*PcETU}oM%au&C$kud_AX_u-9F%}Hm)}J6ndN_qsgsfL27_})`>8xjnvbhTcT}!__tqQvjVJv1^by|AnM1_&O8lAF1g^!Uic?9V)s?nt|S}@ z5Qijys9UiOjNBewGi2yC=l^swAF5AR(0gCb6NmQu{P^*C(3?pC5;TN)k3i`0QIHb^{85amaqX7TA*dJ- z7a-z_vWXD@hJYh8Ux$+Dvz3A~1Xyw}=xj{e#IxMMRZn4^doCr|p*pyzdMjShPj5E@ zBX{&XI8MTuq=6ohY+1B~AzU@2sq!{Bjuv8TCaMjXsH7j+Q+L~%0GySU+ldM1^-|wZ zLnLJMhXrR?dmN)?9VMdeZ9h4!-1%~zHts&Wef5icQSaZres0Z@fHg<<%mhVq>00PQ zPq@YG;7fQ$@;o%~dOEc>k#;>D2~Md=XPjgJ2hj>D$rV&9%y@Anw8u72n{!_wS_`fg zX!NAmvp0V#to)RO=PL^v)7T5Ztl={tia>~T+0KR~W6TI_1Oo;-@VI*#u9^}ip$&uQ zR2PwqVyQ${5!Z(4bJIZ_Tn;@t@(_?`0m73; zDKn}BTTBz!NI=^FNiijJBZFFP?MoT}p{!)vppK!UUNz4}dlI9|;*O6xO(+WOqXPskeKOToSW?_}RPlmRFl`lZeNPu^BY#v*Af8Hf$I`1+Cr(7w>bx zCvyyz5m11nH%7$E0`211C49%13XO3@#(;G)ST51zR?xOf%^FXLc}#Cxr*PcKfv-i+ zd<=U>6zG-+XOf&~k56`=(z{<qr;r zi<%T{$a0`08YO$oU(LaP_IJNw4!nK)>YG!}Bc}DXX@BQC_@rrXH$zJMOd+`U7Ki?x zYE?zRQQ<5kqQZQ$5F)3ZTWTKUWg)Tkpot@3IxB*dY!Db5z4d4l`g`4&TTQYpeQjlz zV0;*4Yfa!aXeHK_oU#wCKAebA8uV{1B>x&eQkb4q-2VVD4L?#NexyeH0H_i0S!4BfvRNvr1^T01l*aU>h*& zD(jj^_knIlAz{tK_#1NCpFO2Me6M^519cYr6-)7!qyigEA%0wBMPeOk0|b8jX^KH! zM`CD3M@PmR(&WdS>ztrHsw%CILk*IQKGDecjH!*I0h~2htp^-J7|-`7Ip>byO&eVW z#JWXih3i48>E3OX)5NCVH#J=iLq=Q266W59JlWc3F*UW_Cjwl9O*b!rqsgxMcrKXt z{UGfaO=W{~U&5t&^lt{KfA_1eU&ouj{_5?1d%jr){`7Gu_9EWDk6%7<_1^hLKAECE zf<%5}iu&mfJ_Cv?_##p8raA~+ImL(#CeL))0|6@}0Wo#g<_w;*piev8*Z}CwTy5_|FoU4TEI zclRQ*3fWu{oQZ@V+8R*AY^j>UcwEiSeX* zc53tC-@EKQET_qGg8UzElhxjob2!|Rz_qtFPUx)3(w3Dll;%U5!`7FH96}Z(N{ks; zJE|R#8fWXkAs;O;?_9i2Njs`%z&$=^U(l{U{Of=97eD#z`fO=vCQG1swy@U_cWHaT zpMF+{#(nI_*Z^mzr&Km2*pmTE+m+g_k`qzgzTJ?sj=2tU>et{B%#|kaERvvWI-)1F zZ5|9W+7qcPUUapS(S{zd+c?ZmlSJHO!z$sY^|@xxk*ibNSMYpcUa+UBPth(4u)}Xpkon==`+Oqhx%W+baw_mI=C{lMkH7!! zU;njM){eXoNqahKW<*Vx;7_DrvM4qd=Rz7oZ-7qXMq^5u$W(3@!Q%+n`-e#KN~$;& z!0v;RiuPS#1@{w&xjNc!(--#nhkyU|H9<`FT-S%+4K(K27ePjVmmz@d5ey#a>;_QE zXgqE5w6qCpyf_tn+}SH=pQ&xxnA8aC3^H`LY7(3pK(m~FWVRENcVO7jZo3@!zMPwP z^v^$$gs%vzx9?y4Jb(GzIOmK3^RhA`>+BrO>Zu~8bh+Y|`ye2SP`Dvp(=m!aGip~f z1uADiqN{SCRhg)uS9V+8Ox%%afJkvhs`?e#+N!0t-hCp}V%(0~$EU_*V?hU#7ue~2 zPKcH%G}<^RLgFI{ZNMc62dFi?M7H%B3+a8x=>q$yapwWNX$ zMq7HA6ZXa~7fZ(M2pdQ?RB3{Mng(SHgc82iQCiZuYBaWan*|&QB;1^U=J=XOG}rAi zAh+>q3rq;daVr+YkG@?+ctNgs*4`NgIhUf}HdWEW0S0(`n^z7A04vDXStZAjdxt3C z6ITy!=UBHfegFK|?@oNo7jNEv%1gO5_TBmJJy~AmMw~0333R%kscUe2crP4Rm-TH1 zoJ%i1jSuRCQ0ucFi^Za&DZxm&QJ2)|_Shvoh}uQq_AF(HM01>)t2VM+eNc=Ay%@4R zncHFsuq_|{11zuUAX*P{+^%k{@DYXel2~gKH$*m=qp#UxNUI@j6X^Fzu&)@taH!t^ z`-E-sWXD%?g3emlw%oy_!URSz>kFM=Q7c|D+qbQsdtc6N>t}xzuYUeq>nEqrBTdoF zYmCU6v3rB?ZZSDZKd9MTKZlU6HBrCRc5ZHoezRMyOKIlqIvr}95j}WrEQwu5r{v!D z^c>xW&NRdZHi|i^_Os9yyi^c)6q`00nstecQE&{LjoLW9?>;f{9wS2Ix?!?-3Ge1t zjYQi#(ap@Z&m?8ewM+QoD&nnTDA~tgtwZQa?RnWAv74WK_zz!SDC-3%qZ|1l2ppoe zZX|dDWW!Xwn3VC&v$g?kJ&ON-^tGTX>(U=9rqL5e{(%%P1bnZqh`|}$c%o9zb>`e~ zaNFj7W{LN;`on*Ot3b{UP2V;z^FIm}(h1>ekJX!~&7d_;+nqHj3UIZyrK6rC0c5Sv z#2K7yiF95YLP|@8E0G_KBy|f25-}=Fv~ZXUN+#+$9{%I&DpVQ?>Uar&*2fCOTW-sv zgl%s{W5_L9>r>>~Imt1utjVZey@SAz4$WS(J!B6`wboOhz@^64+m&K479%u}XNpeR z0VcFQ{3qA(1?4h&qiF<#bo5va;YT%w2QBs?GP15ZbRyD%Xzo67BtP@&*87Ir@NCD< zAo9qZHiRW;3uLwLi@hm+kaLNYIcbG_CS-X({HNDqqofc!3HI-AT{z1i_>3lqPVWMKEQg2A>rkct{(4Os<|Xs9gGI5As2 z{AZVTb2`Zg+Vk381SuUMXVO@cF`31fk)=p=Z!1|VfK;zE^2JV5c9PO&lY|rjsoGFY zfH8QTEKJUnVKk5*Givl}UcZ)46`^|g&v6x?C1WyxBOqJF+SWGCrsz^I^a$d%L19^O z)>#PCtvSyD`%PMJBbqVvzBU<94n->S+$Z~@jvVvm-a0iy8VMqg# z=Rxo|cEJujdW=X;!CwR^rWqll3kUcvm-2g$0P#{sG56{Vz|#qB_8bI|y~B3M(J72t z8NPL>1FUf34>##qvE!W+DL!`{;R?L4)AF&>rTid;8AYzZlR)Za=8|T7MyXV}k7WkAq z=BlxoCj{ebVx2m<;J+-Ir&d6zu6EB4F)F1gECbS;!K=|IcKneYpEE zq+2fR9bz5DCzrxeEM0b??9N69m|R+j*CgsoH3GxC&SL{Z(gI$6=9aZpm3#rVLoqQL z)G?z!!5^KsufK{n=hf45#l3IbGZeLcLs9z-NlqxfuuC-uHIC66_+x^ab)ka6u;?+v@JbM-*kZk?p~R+UXG0TAlZXa#E$svi9MNTUG2XvLuYD0r zo(wJSeEXiUAC7Om{ExqX1|`Ffy8geVy8Z?9PZV2I9tmyw97us| z3-GTu(;^*E4zxCB(k|aRR>?x~xDu>@$y!+SnT0V9ZZ;7p+Rt22;%r2AwkQ11J73Q2 z#QQHly!d6jes1F3d(J{hrG_sf6pNXC;$*&a2V|9FA)VezM~md6+p-5<$Gwq#-34X6 z*4f<$vZ~o;Z8=*;9^8UHbeuU0y%%`IkiMeacn!{*^x=--LjV4K~XqjEu#f87!R^* z&g=7mr(;~Ffq&Wx>V{M|t8;vIK zt+p^*<BcNz18)vqbfQ#wGX{IRJof+Yr^fv47t#Aa}l; zTLAHw?_+0u{pv+Mw=3Argw;~L`2@(wNLzIg_S47&ofaYP33<(72ZIRxh#ki*{Im^u zU0W4nX~&@3Pp?+lg*%!wAk1(KoJ+MA>^B4vq(QVjV&3*U`O~f-1EL|>0Qm1%Ya$hG zc%Nxw`rZekfVRk*Oh-lt=06=h!y#EQ(bYj}GgmBP(jgrhZ+wh))Q6kn9fxa?g?rhq z5JOy=ww6z5u=l>4+b{iJet?qY)pO2FjS-%ZLpIw77z#)DGP$(AwF8l22welF#g?yG zeWf`cueJ#p*N6l=@T2NRrX^eziwV#Z1r@btiycvkY;z@WIC!n_)Rp3K`$T`GYDeRk zXi96oLS`diS0|NuwPd{GS}{XtoNFwYVs#9udTui#bC*YDUl!b05wN?fpcDp~pd4A? zZ7oO*HV!l-(ky7s>IiYl`&qutY1F&R8Mxe@%k!YzyaThkZ4UL zkR>u%Wg{Ks@(yENDWH4NUMj0;sy>D+v#LIODs&drJ5a_=oD#;CZBi4A8yYkVd7+(Y zUY(`=)Ncz}+h-rK5*y|%AhGl%z@N*$jFPsR9H{uQ549OP(>D9HnMu3A-J%sxltW)y zYXlPRP*FRuRKKB;#%C8(r%> zH2Vm!XzfVfFiVnn@74F>nJW?<-pzrt`vy+BEztxeava?Z#pH@Mn8@G{9TtV_;S1Y+ zyO#gao43yrpznRx{>BKn(kHX?I0Mi^_@#0yaCSulN;94r%U6|qO~9f=Vs+4 zho%~xY;zyq2ckD*D`TFhRhw}XAM5^6}3Gv#lp}_BBV9* zjW02D^F6FLB51M4s0y>&ax^2?A%E-{+V4kKcXq?)}@3 zZ_%pwqF%+9PaHb;zKPFZ1m%X2DxYOVQ<-%jRg4wUK$D#tdvf+6lWPpj)73H5pOkx9 zUl{Qd3mhc_BMXhLNV;|S_9y(;7+4&~@J$hrMhkRO_>Wt*3%lG#Z*uym+r#a>FXxss zx#QKV7whGlXJfi*Es{dSZ72q+GAE+p!Z6iGcGq53v!FPUBiskLA~6OeMGGN=Xq}_a z;~to!Ur*ntM_<$1j#wbixTnZv9GKbyIX-TiQ})xCE_(!3{FtZrw>3{M4zfKsPY+jy zO@w^a+>a+C#L8@NBUeX=F^;)R$9qCh=R6&*F#vRJIXiJ;p^B}i0r0UAbP3sw93I_v zUYk17@RlGOd$svwl6>dOx&5~0hZp(&{oD7?DpeOETca^o*@TA+=TdM_V6sCn!HV2$ z%PF&6>Te;VwbnQ?)52$CAXdx)&8sn^xG(ObmoH}PJOvPNfFIXtg>(Zj{qYrE^dwZT z|H^C~>Vr%P13|8BMvNI@pChl1FYSw8bZF2wLm2n@9KLCU>Sq&JUg zW99s{dIBb zx%puI)wZF4>uOyK4dlZNq}(DKBYPbkP$jkW)lX`<91sWl(>3?g7t|mbVYu~*Iu5T& z0#yHi!T_`Ggy;xc`2{$4PzF1%1^HM(eYd;2SsG%5fv9Nsiy+7vav{N8+5x{dqT<70 z`6_t17~L9sLHnR%e*p+0#dLK~7uf+1|VK`CNq;w*u;$McLfbEiB# zdGWvchkx;>pZnz1Fz1lfkhsWIt-RZ)2=Q!ivs6*i_PzZ2vTPP~YA5%Iu?KV&3CZaM z+_l+Ra4)wsS``Rm7~rfTw}Tra4!UG&lL3q!N9q$W0{$XRuA>d#YfAT{<#RURqCr~C z6*!@GRGbXXFDT};+jQe>1L<5t0Vl`^T-4Q2?n60Mh`huSR^zQmp(AS3IL`zw%VOUa zUjJZ!`0ys)ynXTRJ?6zP;`}1s>^!$euY2FcCq77le&#oQke~kGcRzgP1>_yc3dvoK zl&kYLv4S2%XXql#z*zBCm*}ty)l8s@2*o;m?~Si(i$oYXH#ydKrr4Nm;xMV=novTJW; zKsV0j+)$_#;aXQ;fYTKi#^Vx6&ylqOvtStS;Gpfh*16rT?tMA84TGE4_GHD^ubxAX zuBMCIP?KxAg09^L;RS-G*1fq96BJzY!f?$w3HUfv7e|*d$D9dv9Vv{aO$`=cxD0n* z*syUrz+MYyA8QjwNvTujqBef*hD@%IDX`=qDSDg@xaV1cS8~>%q`}!}G*#O~k%0AXi;#!^ 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

fncH(Lilxql^G;3Yjpq2!g*6Nu2Znqgc zZ=1XQ+plTohEM|O!0r_G_+!wvO(eTw@Aqs?&YpAQT?*VHl|E%4$z} z5%wWq;4~7oxuCOXJrY>Cy;oz|#(Pf$Xuw2ay5`wUfK!iJgn&?J^#@XfV<+`I2wd8z z<9&vj7w-FUGStiX_B+}U7l3!@B8?9tLvZE? z(P>xevDBq~u0dn0>u6%hF@s0?L01(M)QS%b7h2zh}K5hUT4v4ApcU=ea3D&&hA*VW77=oc$Hn(J}m*~%-FyJWR8)_bjb6} zhJhuL%Ms7u@Lat7NB`jGfBDh1dE7D)Ubp?Y$YO5|HIjE94viQcU~U@^W5GCk*ybZx$QII-hzfvNpC4^ zYyd{?IAf@Fzj&sjj&vJ^(1zLj3Pc^CoqNUfXb|wXp<^>mfXZ=9i|?}$wGE8W3eTyj z9!a5Vwu3x4`Qov*fAu#{lzMl5htGIu#s|aZ$DcpKuo>hX zT6@JL9!QPZRy}o!T;c4!A$9r60UcfD8Jh^(NWl<{f$CJuQLK(L&QU$EI?gfYUdpo- zoG7_T7beF8#2DECg~3Bb++Y637kF?~?|{4W@?5<}`e1JS)LG5d54&~iWsjQYf&h3)D_v74JZyw&g z_}bq80_*l6pXah|m)S5G!{<`C$wJ__XHScaDP0KOuG81C7V8xBtI{*7VobIbFoA7G z@}9!*6|Hk`Tlx;0TTcUgQZT2DsASMIuidx#uJL@<&PVT&N(!MMSXN1Gp~nYRiFnN9 zd5vwj(d4XUqs9bQZ84PeRNF9ynl|AkS0|;>PRj!rP&7%0r+2}0*};LI3p(0qvYKVh z0s8tazpL$9Is-Ftt<$a7Mxqx6;R7I>J=&PIf?U(cb>i)=hTK~6O$!LPF{La?(7?0{ z)9Lv4fynBBx$lWA3yFq!9o$Jro3)rN=B)aB`PRPv#XorU;{BU9ufF%={p#&gO!&QD;FB!{>8SF9 zE#>j&k1&DZm|LWqx2e?GB3733X>FY-_|_UiK83++B6H7~OD^a|B9;xIz3U8SKoG?N z3QFYPB{Vk{IFU~W{AYmF#GtUi&&vRDGsnyS*@6(^h^|cGym>SP3qV!i0X9TRDaheGBpcu)sXbD#t-G)%KVF zDW1Z2tC_V2a2Jn}nhV?5G*jxc)<&}cZP3ZA4UJIioP$esiEaY?bVgMoEEYlW1XeAN z+`wuCC%0`p5$V#dAZ*xuTf{gs#>$uf+3QbWlKlrdSXV@!YzSi4n#7hME#e{tIUnb_ zF#WR$W+hSr4MiU|gU((JTTh?HVNl!%Q8PyS&r;WF$bAgt(=9jJO(6u<4f6{URKW@F z+CJFX|84rd*Ii76_}tEGcGljI2iptpQju?fG&cB~S}k;NfqQH=+7@b2p4v+ZpmN&j zT+pk@z*qn@gE4j)unGV|suqEvaZq4E7sepM-ChRn{W!O0_M`6g&D$4WzkT!7!}DR} zCZtk_$=2RpP{w@TL#4KYfSd1Y{Y#{Wf3AigDsVxv-#y-Leoxn~{ zbPxA_oad#l-=4zH-TVwnH>@Y_V-m--en#fZh@ME4-+AVS00ML3Sfl2l8QRe`%&>4N zS0-F{W8in&=_jp&iNgo{EgG|zK=zr(4`N{UvUwUD0yomvy?3U!#mUqbf|CI4;sqzz za#@gM32!D$0Sl5Z=meHSs<{$%%9y8x_MvUb89Lk2YAmO>!B!*5l5nf#Wad6x1C^&w zKnU`7?s)IVc`{1=(a*7u>5#v=Ud6p)N^+IdUGa6p0`$JQ*|H!c40)hw@08Fj&+I#8 z15~BxLgJ)ua;nheJ>q>NgqfhhOg{$*wQ&W?xn`*e`FEe=U%u=YR{ih)!+-eqU-oaY z{r^8zu;2b^f1?T(!Bs~Q(nS?x8|1qb0yH+L=rT^1<4`I)PF2JQqKyw;h#31=J@V?P zl8z>!v0?8xIVHPpO7zHiDgY-PU7aD0v&Rql;Qj<=7K5NBz|4q-M#q6RGe)drdrs_QOA`5 z%~|b&yD37ha%~7syLb+ya795mVY9L@5txNw1e1nq=v3E@>4WhxQdBWH#1Q~CDHXP% z>WB+IJUnqL>2Nf-zx>Zpb&763HY+5==DOtcDac0{=k0RF9U?RA z)9t|QI~cvS#c;0k46dnhbi(}-yY@;aMFb>{*aH<63gb3+fB9cr6?iKjT~n{&Hpn>-a!AGw?A$S2yYX78pUc&cQ?4Q=(*wYzYUtohh4Kaf*Bpdhwih`f zefls%F2h(8_PLEXAK;R9DsY;LF+(7PJ+EOIIW3>t`+-oqv+EQ`;xrq@sluA!2w* zd*8(8G#|syfPFA9^OiWwq_fUd#z6H9X+vGDlT#fz#R2~{L^xin_YS!oJk`3yuvk#HuhtWpP^doU%zdyM7+t+1t1FWVn9sxAyGxY2HkqK0#=kcAbEoY2XX( zbL|4$`m_QQ4cSnJV;VUbP&#tU8XGJ}i^_R6qOJqP$c5a%2!S!9@$QDZKvxD3t!wbW zPNIXLGs5@LK_{bIown~y&W;eU&22aa61)&D9DIgDDTiS{PnO5AC`A2joMp%{nqwg5 zQ@7`_v1?C2*^p@67ogx&0&%G?(}R?ZeXwQl;FTJS=egBse{T%`s@{J2V-SIRzrtq$ zIQ<5I^HJjGJ9KiChpvO;Fch`EPeL2tG#(>Nc1*E8M{m$#Vm`2$IEAP;hjVhDD9ct` zcNv0a5f`**yAVTd%?L(T7=;~ol5jQHhPl1`Z(e@_?10ZGgWny>;5l{2C%_K)j57F) zGWd)#`2C^`EF5B@!H4_meW)FXR21a88QBXv%vPIwvs*)lG;@c>X&d%}jjSc9S_N;isj9dCus zEfnf##yaZ~(FxZAmG!Q*5_62L2pk!;T5nN?9QsaL?njNNvj%S!)jiMcp>XfVxy22m z26$JmDxMQy9i(}IpCNG|H94&;4>~mq8`T*w10oxMf!7F?YkP=Z=#QPKwqRK5kjn_u zc0FS@wj8{a#z4+gLbaNEjCFQL;5V&ByspvydFplHM~k5gBloEx9(=fTa6w?VKrhjG z}U`nuLU-VT@|R-=~8wtx7F7u z5YA{Kvv0%B)s`wKkZMl&^G^7G_B9SbtL)`}cg0C7)Ka7G|ZNbW3v;?fwW|RxgUSI2w&F;$K8<~5} zyQ8Bi$bm_BFzE>qryKBgIJg&ti?yO*?Lf%lOh`sK^r3-ve9`w8^ymy}zAywE$kXnG z$oI8$4<|@wVfk*fAn;ujwJr&atRB`j{K{+d4#{2+FLCEql>!HjG+RK%8U=2^aiG(y z-oU7^iZ&PqNZ<2G;dAH5x!tiIZ9n$<-NSP=Y&M6=vl(jEHh~tJea$&dsFKE-yLWu6 zhv2F|C1b|GI0s=T2)2WrLM3D%6*RZUDZF2>&1zaU(!Fv>W2EG6(6S*&X zWVaecdBSG#Aawu@vQgirW}6&=3DVE7<`H2BH3Zxo(q+zLVW(>KZJoQpR!4_b=Z4;%P9_z2Dz6&A)cj{QD$>k;aO( zTVi~^@@hOqUA(zq;aUg((EjdAIgE1z;Ee8Q`2eG7Q^h@s1N=so& zNX}!1L=AWq))YgETsn0bZH^8%%i7F7xsX2{CJTY-D53_9rRR1^_A`7yFHXVMd^_m4 z^NV|C(6Mf8HtSPda7qKzCgk;@!8$U4j=TD58ig{(^N_bQW67DFNx4(^2q_>!jANk{ z-wFe4DHZ`JFyO1=936L$-Wzx4vvYE@$yRiX!syWLSoV`w0N)Nd?)>_mNWpNP_8+Xf zpM3iZpWMRh<3LGvpi!Y6mum^4z6n$M9y5;}hZnxYIOm=tkOv8#1%YIPWs-4*qx}T4 zZw8Ye!9CVzFQ4H_f{Vz>dFitjQ9pfmR`c6FMfDW8X$E{+TCCt7|sCjAcANP&DBTjLh>{{iGcg* zH?MzDZy(-2fv?^9tv#D<$v4@SzjdnW1z*_5%?skPno!Rl-)O#{TEPtD4K$Lidxy~_ z$My!n1&=-eZaB@uFYV`5He{J$zlegFWwhNOj+4!Xo`&g?=$m7lHN)VgdHLU8!b4~H{Am+8@PQ*` zW?R|NSQ*jIg+5h3=Y(Fl9=FZ3J3r2?-R0kSU$67ITd5**&Z+gSdtwMiYtN=J1B%H} z!*a%!UZWqR#*Rfup>Eja8W3;ecpy4+@s$w=uSDqX0nSr9l+03R&f)N4V>?Gf3X{N% z9^q{tt^Mc}?YB*_Y%b&}6kXe~;QO@c z!qsWB^C&k&?F|%ZyqiL8z2*j#%ZAd};Ar(`)$KHly#hGmM|weaS45ew1$F8k2rblG zrqECPn{(>zGwGFgeQ8g2uyvCQy*@@R^hLrVA{&>Iwbh8@$Id=OQ?->~g)jyT>iiZ?HBvkhoLeK%a25^ltsocYd7P zNsZgPTI0oEJvY(wwmRJKEus|XsO%Eoux@V%h+(eq?X=beRFc*NFxq1K9=Q}_Je!+a zJ7;d`BZYA*u+omnG!(}}sbBs97uw-EvYj+WX6EW2?jQXN{+40G1ZlEv%{gVrMBHX$ z$a;6%fdoRxx|?h{gASM+CwAy)TM_9SLm>K`G(h`8E3F$Mu#M+2n;Y@K3<$Pkr-mZD zCu+k3mPd<{m;b}-kH3on79bnwfHi#r_GNL!)`Dn+2}3n_02-NeXdR`Iw*Wx_j$lkU zj!Gz|^^C?9CT$aC2=sr1K8lbZBkst;r0W z(8}2znn*f1(je-X`KU|qL5&=jq@+t77R5(;|@-3eItZ{F)lHTk{}=%d4l#5HO$MV z_qO|Ofq(DEx$X15dU##$UfAn=5pQ07^VRET$-G%%*&dOPQX4uh?icGXNNjT0j&17@ zGBowz6IyFbE|j0t2&7l+FcA^8^djTYIqKZ|VJKa7O4Qzv4#3FgQ%<@Hb3KXjK|@H$vsji>RiV&Nf+K)m;FxA zxF%W-9IdyVh$rTL(0Sb0!9d~iwO{_vkGQQVVVD4o7S$VobQFNPh*Ko9^CDrtC}&M6 zyFnSAk04`(gc20j>wulP~lGDb?f8 zpL4nI1v^1f3rwGAjDpcvzC&eDan99>8pHJKJaLBvr&tgi1T*B+by**sOOX4pIrI`= za97Ge!*0%MeCdjlQgJs5*;kJiT*sx+ZZTHlH^sr-+n)K^E&7>>@d=m=B_}3Nz4_Tg zWSXHn1i^@x_CmH#BA&XRIAV^3YM>aA_3pM(#QW-3%XU}Orjv`iThjx??-|gNTZ{`J zUhu`78it-QBEo2YAFuGQJY`}${_Xnp-|pWzDFaqWgcG&24pzZ(p(74@BuwdKn@|W6 zA5@qLz8HeE4l2jg;w>Gis2Z`uMrtIPB*l^(2vzHt(S#oA)el60C=zp=y*e+o+YH%z zW6*wMjqs;guj)&C|D;25@0a)trLKQqJ$(H6w=WaMITE;EuYMr7ZN&l*txYImH(EfK zbF%fd?11Gi-Fg(L@3I*T&knYAi);n@?VbwdL04z+V{yUK;P9dNbyR`|^*l0j&wk=e zz4zmMw_1K`Z`0n}>u=Y|KWATl`Sw~UFY4{vH_w@`+UZGDh`S`re}S2V(VDs|PM?-8^cD8-`UTf+;1k%MOCm=Gr;>gs8$aQc!#$f*#qjv5(Rf zkc(V&zzNhwk@x8q)KqPZClS4AmY||_)y)FX1FoK!ybbaZ*3v2cwCW%c01nd%JF#eN zBBdA#Je8c(!ocldfiQaqk_rpr`8uLA7%YD8v{*yDP`w`gDy({_87mLpq zi%;NU@p(}9!}_naW1^L9LUjra*6tjjTS6nJl6_VAm4PKtu?``P(p;Mg--IB*v89X8 zisP%8uKdW3dD)Q-b@*r?TOckQ8%*)k4wiaIKYRJo%raDeu{FnZcsN24S4hS)8~5J#v_9q1?L%dYp!1`* zn8u&IEz1{S@rx&A-@RYlvs{37!v**l8lG;o_ko+2K%ql-zibF@Y?6-J^%TUWP!%FT z00S8BhQ6n12eqqW9le!294s zOyGtK@zbnrPUY2!z%>;vA4m-!O$^@3YIC!f(jNF!63SN?*{Zk7+hzY3`R1z^@9OP? zy?XdJpBj+v{qmk!`s0He&*RU({nBq;otjqLgAhMXG20kXUH2-DQQ^}uLzhFF%_itJ zdajR#AjGwhjBrE9FXRU({c?3-)x{0an>=6>F9YkdQP_q@Yom;inlJw^OmhbB!nkc4 z)yusXqxs|s9lvL_o;HQMH?xFeb;IULB1|Jp=74IyIU&3} z_TC*a2*5Wk6yJL+dpaGz^W)rZ(fQ`9U)bw>^(>8ax*!4)IU{bzG&{G|q^$)YqlU^R zTq6!k`f|6ez|G2zzJp{Tn^wH~A&{lF<_g&d?wYpcnxx~mRlm4oyiJ6IKyokHNXLAZ zMhYHTI>thzeVI_6U9my7b<`k=Dc{`F_l~h9=%`l^_XhXKuvchbMGdkIv!*@<5ahEb z%LGbmGA2|ZNbCM}*E>3?^OZ@b_viI-n30LvnZ|xbbB7b1#eEj*7>s)TQ*nn|E zQ)ftXT9pKxrnfdLOo9_pDGhLyE2!MIw>>e^h=0d?q)*!WwzMAdYBB z4T7tPI(bkynd;TxTLiD>p1@GyyeR}O4P2maR+|paby}ZD7lClb0a)!o?AGYs60PD{ zdyoR=1TawFOkuu(K}pHk4mlOlnrfYE_GQ{tHIQD>FQjBl-k@|=E|3k&Se(7@aZ8Q; zvw9cyb-noVjXjyn-22Tvv*P*9?0*N7nK_1N+kM7b2K3$TbFG7KS+k+|j_oi$ zPCJ)C`-U-^t;m{Dg4UODjwXM2yWhTE4g4+cb7z}E(jl6#DKdqt^; zg*ty~ft2CBq#bnGbX9s1jO^4KRDGzGJB)+IiR6K%E!v5$U`d^Xy{mC461d?5OE3(s zH2E3RFeHQ{it*>gBvAx{-1%&~?k5+9em)t=-1*f#%TD7PcG@R+q;@7s(rU*>=`2Nw z#I8GJr}j;nh>;Le2e-Y6u@cK-K<9;12^}k6s$OW`(B1=(!Q_p4w{M<{SRquiw7;y57G3f7pAoT}zWBI}Z@q z%|;KTS|kJry3_qhxVsJR-T?V12XLFRf)zt5BC@)wbt8$INJ>;r*yJ=|STCLgVILPA}AOa%F$&*YR?*?O@ z!u$t)^HH5XmD5Le3xo(nM~M<+%b5s_m_Cu|V|wED@ETJsomRA6l)IrNoGoiNU?EsB zVp~@j#ij5-v>Yhhm*Vs6i3pMnN%c(RsYn3aK&9EGyCC_}Hsx%Xf6O*waCk)zD#16~ zZ|8}B$=|)PS8p?(K74$i=Z^jP=(qP`Z+YGHme*(4L_|sUMkwlWsJmR~5anS;c-A`H zv<>vdi)$kOqA>SEs|0CnOWJ7&+8XC<9tvC$Y~VGeU5Oi#uzyR16L0GD1CtK01EV@c~;IY631DMUcZt6$h`Z6G1^Aq)&i>gl@>rfL5CuUuq< zeJUm|Ahbs&9AwgQfG&nsN-*de2wlKWu_C~MK)xoKpEO%KcrMh=U^Ze5dNylLz5H}L z+u-hWyp6S`uePY9g&^zm$Zq-kui`19QX2B8I(o`e!OzD-$0|rP1}+mAx5+qX^_Z4t zpvJd$cx3K2=UIb{CZhIEI~($_&YQ--F`Cq#N8ul@T z`fP3_!Hp?b0y7xyX5L5JwfEX#=gJX%%>o$wPTdKyx*#o!{O&bWJmQs{# zdyfu{;S{7uoT)>E=ERWiuBY_q$GI(P{3qx2PhXG(n8OwRF2^6k97zG*jLq%1_C0wc5^1wv;jnx6(inF| zP5)wi@|~@N@Qeh3V>yylfg@@eRk+lFPGozq=CNd;|2q>AgOf#VjDw0Kt8FkPlO zG$1FhnrQ!LVg|o=&jMKeG}!<&Ng#KLW*_sGbPf{FhGObrO6;&MljYja9Rwoc3MSk zEL3ZyvzBL^gMc-jVP1Y5c&4=xA31E$7$>*jQr- z+M5>H3w17Gh_lBL=?CW$RTZriv(*b<22q5tv!9E0k2##QTFv*F&E^4IXVF3^2t_^Tu}RFJh!ZIZAY$%5n@JIWZ(@PHxf;S%orzWT+h|pK9~XRt3W|COf^4|i(PlG zIn594)p*M6(~&-_>|vXEG_R1oK!wXWg$3Kg^S^PK30Kw$fgB3HVWgk*u*~Um9@vn1 z?KsK^9;HZEUU;vmjhU`VO56G*?2JSQv%mRf10MlZ*I(z~dz2N6N zGQ1IBO&AF4EI~`jMrsq861>h#o~`$F>5T~a9z-DTA-rP_`tGulZZ8B=Ot^WLPURxJkdqiVZR7IO}_|T!24XK=SE3T8)&{(Ib!+;~y3G${<+D4Q~ zC>rbuR-w7=)+}d&v(9ZGIBZasc7{|Plb_bfB9@f*L(l)#Vv9_(QTjN(T{VBnEmokUVZiS;nknKAeYy+WgnIr+ zJW?KA6`c#FOm4EJL_-vg)TGEZ2E7>C6%S)c%#L)beQ8dtUk!f3>5u<*|_nznhd9-sf6>pn9C_79tD zIT!WBC3P6$dPkoke&GpBrKqUzVCvU=Y)(ZwZjX~C9_n_cnp@o5C>SR!ahrX}YFAkAF_28gne#X{1|*bj zn+?&C3&+xyb?S1fAVNEV7RKc*5~O^D1x`e@vXNsdS&J8Gi|2n2Pf-@=Fd*vm3W1e4 zs=*8CIwP++j}oE>nFj9-%xG6O_bp2gik3FTHVV$M)I`VB*dqH1ES=)q$4K(jfz7)4 z!d6_F(`Iz9=YJnhft#uV+P53!K%Pn`Yl-G<>&9sS(4vMid^QQ8qMQMgbN{q~t_B8T zPcpaQ=A~z#dPRt;8puYY&5k8Xy{S zb*M#iuRYct(+nYy20Z0=zvuKt|5ifP*9xShF4+aS%TBSgN16iR$~J&CfuNrHbVqjJ zvO)^@%mi$ubFFCzV-yB>JC}Q}xzP02T3vjpFIY@a@bv9V_dum1m3-@5d-UVnrTxBt z_vWjQFItc~LnOT_Fx)`%ZvZ+XDm5ux+3|m)4(nd-dZ1=rjm-~~bHt7k1E#2<^Pp9< zRO8g)4yFt+vX}ix0gR!3FaV}?niuDGS@))uPq%fzPp|a$f?2>ZUXe3lekpC7$SUXE zvzBJFn2mzB9mJeZ;wX^C*O9is(pk8p*qVmgTQk=@DRhJyTENg|u8Oi*)J0v-q9f1$ z!L?;t&=%UrC=paQumr@G8ohuECCA$Dxn%80Oe2D8?OB_-r>u!f zz(#tm?vS=M`#>I9M;~VRbi`|1Iq1*-;q?@V4?*8vkUC~ttb3vGym-%v;W+Fl3=2)0 z7K>Y#Arh1rurq3AiiVLq*sT!9&lx(9Irs>l=FXmAnTx2XkDx z9HMky>p(?!NXD7u-a_VfW<9(V!@2`=FUE)m)TYzs0kX~cI95XSNkET`m18FL%ItId zHqDNeDLZFroB`bTkehpD`=loRqxL;^zicWEsPb_&>zA=MwB8O2Y9+)1AhD-6X$Cud zmLCgcVkB)T@d&j-@|;+oqKS?!+%!uY8vPWjk4zmL);JZ1eQulqTPSY7ypMjI7xhEG zd;M^I$S)x%*3J?T)fOTu*bEKs+CWdFD25fWeRbVjM*>=QIp912V>aOLz8L(FUwe@H zXx&w44r`Z&yCLu(!R>}o==3f#k%-q^G2Ci5jz2KAAcps5Nbo=qJZT)GIb?_JzM|nu zv$|(%$L4Ivkp|>oFal%b9H5C0kocjAquZHweR6{YGB?D^_j@cr@8$=HhZ)eOE#UhV144t zqsFaeHN@KjdhUaKcrzN9(~eFsBy>i$w}N;vu2#!z3v*pK$d}S;rfP`LR^Zqpkoa{@ zu2>9J)a}>v(T{Vt5C0v%m^w+_ae>gvbyN%s=+w*x{uV^BB{}vi8E625{9;=%W7$Z! z@wv|A9z8pCw4M*cVYlT|&&zdV*o42|(KT9p6iS7GtoSp(O}F{2zxG$h7xPoc7%ee{ z{;1c8lTfbK7!YgmJQIbhU6VF$7=u^`#$hy{i9LQ!r!)*p`=A-abm)NlRK_yon}~Vk zCCCm$wD!4^dWv;a3Sdv&&I2C&IJdWv@Bdn!;a$!hKaLr{{4D?6 zU;C^4kNwsk{m$Q&)Am=E>33bW|HvPH|L1!Zt-L?d3RKzLUu(cf_6S zg?1ENPJ2p+0^ydXYcj%XtO?~mX8wEx{8%0)9h)aXUAGT0W0rKyp#?SEaLjQE)87TQ z+i+z3XrE)GIWkg^omh&H3VixJW<|G?>WYBy=5aV~vy^|&-@UC@Uw-)b?){xh_t9_e z*OQ`r1#9_oNN{k@E~J!SGN{I*=Nib}T!UksF(8;ZgWzD&JuHSpci*Oo@#;B7TdSQt zboXeODh$Orov}5KEQk}$`avDThelb-sq_3FUp=-?1!J6Z!s4iFf{KiIncewnA@m-@ z#rxUR3d*!qiPYD+!cAaYMGtu-FGcno!jfxKmzEgYZimqXatI6jrkzvKE;rQIacs%mHD7|0LaUO3%UFj|c; zgT8z047ib2z(Ki0i4FwX7;u(Ij^^Gl9xEuI2%NL$|MXLLXbqKyOgbp6xa}>wHE9Ay zuW1>1ZrQwpmj?y|EPUygXg7|ODOPbV-voRAay=H2&E7BOXc;jMe zTTkfoe|C|Kr{+QJJ>W@&w0)vIZ?U97kVg|slRaoRybGwxwy~Jh)o*Ywe44}0#jnn5 z6~*Yp8JQwRI`_$D6N%m!|C2%^5YQ{HxXU{7FfcN#w|or4`eJkI6ToQ4s~$m66mS6OKfIe!$>UFIMojt zxsaEEC@(n+AX%_qURGfL{%2RA&U3=1LLydU?rTC1F*`GDObPqq%?(luTIhn>scde_ zQqaSUZMYQi3B$apgP?TAg``ePO95V2C36;YA9pd4$+J&Sp3#{CptkFa0{-&)|z zsXckNfo{ocqZ(6RD=~gY$ktpCQ=k|nn5#jO$g64BG$C3Un07~)KjfW#?a}Y?1^XI*$4m6- z=g$B;I2hYxERe_Hj<-0tu`x#QM>pn5;K6S+&t-0%d|MtM{j5Bc}f_N zur=s3olCzJ%KhH8p)9a3_|Kqje~&@k01DWnbsZHGHl*sgcgzAtqH9Mx8$+j2GYI0L z;nX3*hQA5Le>P^^VJ7?FJg31B4A}?qM7Uq?yJR8iHGER!>Afi?6{_579dFP7;)hGb ziuP&;j|CXRxxwmadXQkaz~?l`sS^fr!p25{(7(kp=i*N00~;Y0J_|CjWwm{bdS2Z! z5E$XCLX&74ULBAz3n9fB-dfr7zw`l@^v`=(vM;y=W=#k+2qW$=faEk`o*s?$U>uLn zs{>1hF%uJlKU?<&m=QRPdM0&DYX(4`!oAL1)f7l0>d~Ym0S7z9IXAneHpVV-mqXqe zH^?3RAo#%$Q|Mc!d*d`0Ux1l-6eW6dY-fVULJ8F^(!|A$=d6kTr3_?vV5b`y$O#4A z0#p4N`vd}X6?Y39V7P5)-LeG!{7>^2Kf65_AN|Vi&PD!0zTjUu7eD>{r#}~6g#%w^ zTpcEagmETxOqbATC!IhGWm|?qvWdlH_o)zta1}W4th2Gh5XNF+pXA_U>qRbOMYC z>CrVRWgZ;G)(i+LVJ_HILewSex>qvphD@A8PFuLwZQB#p528DG22dp-eZai2;0IgH zN(?tg%&rN-&0vC~C0C<3f{5N-CTW)^qVYBt{1=qRK2&FH#4rTImmLE;HXSq>J=lua z;%wc0pIUY&hB0*H#vS+S!7uGaTi&>_<&7Vot^DY+hOf&Jh3Kyd>UwQ!92(Y!SwqKz zeebp6EIUV-xyw|K*3n*or%`9nYAD_mEJ$h&BLe12ef1fzZ*{C6Ed`?j$?=q$?Y=iY z4ZT2L4p8(}QN|i(omn#l^&0v)-o&9!Jw1#J45@MOr9GGGF#wooki#^>5`&6YAd_4z=u(ZEt|XWy1q`)Zzl)LEC_~ z9~<_J6@;AwU=-pIcI5>Pcas`Cswj_SowlQ+UpqWw0Y)4kuMF>Se&@X7>2J_==7<^> zgcsfF#mM6Vn6?3R2TkU5S#WT5D7Y0NW0MBKhSQs!Y-^V1xwLr`&(T_g_-{;uj(8A6 zjF{i^F2fGzcFFKJ-L~fb;FrCY7p=dKes?eKb?s)a`(f4`wul5Wd9{^m^$u@ZzpjaE zfrTXVY-AFZXbp$q8lhA>ZSJccaRh1vAR@?J^BRq52TE_pw2tE#PhHTHLB4X1u}c>{ z3qTC;vu}5-2S3is@{aHC!VoU{J7laf6wnCoq#y-7GFMFxP)ViM89Xl;y7z8o4DHSl z?HB%GT@fLNNCEl*3gW8ra!oi8gsOj=le=iopj2H%+JPi@~$CM79kAR;}@fX*6vhsV^-AJT{2ei(^j^ixG}O_zJ;+ zx$s^DTR@)WE4S0E=l=pj$H_42CfrKQvsj{UXmhsGga&BAb0(y6kVV3)w?^==%cZqd z1>|avVH+KCnlx<}oQLMYQEgcd5^8hCZkyQq<_@=QNXBSwKmV7XI1!Bk;9XtYtGu1) z6A+l@jn?EDf-m{71#{$)UdD~Z+ekO0I$l`<2Sn5hsS6YY?>-4i{Fv|>ACWep;0-Vl z2y;Co6e#`;^ZCEJm>E@?hSBX*jpY{_uO+O)?MozVq^k z$i?wVz-c@Cwu(^SXn~L*Gys&)gkr7}gQhJVDnvc!`MMR5(0|5=gq=E2J5xi*w89%B|i199Ht9iiya9pI3VSri_Tm~IuVwSy{W5yC4 zjFrAge2xZsCUz47ttaUDzj^xu%%UL%CaI+~L8j@{pimleHqcgZzgS~TJ}qDk@2ZuP zDfQ|u&(r-Nl04=rJKdlLp4MT9n2K3)&Jsp`Cod;GJJbZaABcVFE~`Wx(^c5PWf0G6 zs+K*rEL^+iW#>QKyNPgLQas0KAa4vxe9SBxb;HRr!juDNrNO!{7kZ~9l)^E`)|IlE zxO`#vlv7~z+{=Pqzq9lDDPFz5ry)J~&Ao6X`mTPBK9hbehLEtEE(P|H$F=%XlP04* zRbfQh$y-kFL*)ocyyndqpBDhj1WNzRWp)z&^BJ>u+*^@Vu&t@}fwY)iZMngDzV|?+ zF9|*Ww?9CaeK+JU0IUQXG(@jfU_yR8Na~let@mh6t_iglus%2m!pV z* z4yLE`Z042GA%k`&ZF_SzRB97klnGuCVt+B<+&Yu^YUhl8Kop5a!;$Zpu(I`5bKgRP z{{Sfy{_gG1^8LsAkcmgXyB7i-$4#K)XJ|lSkhU*~St0I9cZb@qdZGT9JXK~nFlt-J zlt$eMhWX=ub#JtE64DbA5FiXtHU{9`E<^x3GRE7k!6CsAEFHKr)|3OFckOv-J^yz< zz{)oe%X{S|dSWSH>3Km@C2gNJv8R;|fc;PjPUQwqIj!Dt{yHOJT0+kX89X;i@I}<& z|L(0Rg!<71(qRsukYHLBMphq8o_9O`JheOA`DaV|HfK1e2cz!m*{^s%Zi#do6NMPh z!mR0HGxR@kI|g`D%{&{>k5DKhRtTDn+B#<Yvy-8=9{lxpN}uO6S0)Xk*N#!*fUQuq;xA5tlgU6*EVd7){#%@ zbI%BXA61Z|)(i6BEZC>|K zBwP`~Knm?N^b0YjDomlua>Db)o)qI^)*iK1y7SZf4d&U|PQM^NeSf;T`fNLA45aGx zd0;&=K;=$tz+{9LIQy28#X&58IR6%zY>{k zpRx0MKiIG>%L1Ox*sx0QZox%IKu4NOtzGPNa1nMm&`1|Jy`gZMTP2-a-^dITx5JJS ztuNRvxx=(m8}0tKA^1JxLjTR99iIducW%G24}P2%KiF^j*DuHhqc%)t(RUNyW}BU} zIw49h(0A*CPBezil?hl9>ahg}^PVELHIXz_%|JqI*YX?Kzgh{r7aM~A! zp0xw2+YZ_9@+&w3Hni-A$Ba|f@cv+2p_QFm)e7lOw_S?KvaZ-ISQ&9Q57psRaB>b0 zA_IAf;6s|d?GgRtPD4V_Iae*<>muq#+ormm3Dg0SK?{5cP|sFBEHOY_LK0R(4+A&= zRk<}U{e`byy+0rCo12e*YcI&F+86UX@+$oNqnp1rpJ-w8zJgF#pepKdd9SsVU$+1z zWI=h%e$l}9upVo3o*DpS`8mFbVVx47TQ*AvwGWNS)x?o)h7i%}-c7ADY0;*T=0PCF- zAsLD2F(^rq0@!oUGr)QO6e<*SCv5sFA3r?3diyco*YSMvpQQiv{^s@QS9n))HUzZ% zisb#bzxjn9-QpwVOaiPA)R346y^I4YrOkH0$D3U@h&5U1V`i!hLq|!c(D0Tt!RPkg z+B}FMIK5d1!Om?N-0LN)AxaQ<7^(kc@S$bROSZvsB4D2izv~mB3Pto{L?SKd7 z^nKOD0It&v;;;GBcLh%JIRs7@>15>DfneKfY9VO+Zyg|2v#J8Zs(b!>K&;W22nt=I$RmV_$sDXa>{NGOc}IF(UU^DO2}-@Y>N2VpMAl|7|o+8xp7 zmsygJriA~7Ld#(W*N`@0uxSI=L10lUy4vU{&4J@NjRKJ{f(Nu#Fkyh!t9tfI14VW3 zCIA;r@K)&z^&tunJ@tgrQsEI_JT(_-Ef|osm*3lMKYg6N^{KT70<0&vYo}KNB!qk4 z>d_Z6`gmkV*A^H1d4_Hed`*B1_mC@u$hRZqqQ?vx5*~Iy+FM}k2Qo9Frvllz5HAV; za6)JN{6Abq*Gel8X85(T8RIEEWB7jpb}^uZ}_LH)INQ716LgKwAMDVgiVnkhnb86pk^1DEuaK%3%(-8mpiDf zypyRv_;GG`D_kv~DnGo$NT~$9JEyMITL}*6ekAra5$ek@=h+F@k~Tx<8BBVuGlL8_ z34BT$zE{lh6{P*LwV{ma7(Y$2LxQhdNYuvLfK{rB^ep2h-@RV8FGl;uPHx)fS|Bsc zbp^2rPxW1d-bCx?&|I#;tax7>0m~#&{4TFMVA^2?dO&Ihg-h^HiGLM zLk8B9mJEjPFW`7+rvf&ca8ArhKpR5@BTDv#DD7Jl;#aTg7kBcA2fwlxmKxnGHTp3w zHEM}18M#Pf@EBbL*-6o3w!RlTR7M_*dDU)YB4T^sf^xHi1wLfKAf5gF`e21B6-HMvzcUbu}tp=-^LXC$GF5Z7`r*jQlv_ z(dcwLhnW_sBIIrD-q7=}E>r^o*24$n+cphSsnafQXYcSB<4!1WNZc&7-v^NEe3?&w z{loo0_R+8IZprBv@|`93>E}OvzoHw==qa%Fj%Gg3nri@{x*HIADNu#O)UC*$=9*`K z5l;dLW+1XJpr4(jXo0V6vD&zp$!v&`2^b@@p&r;1*>sMgW{fE`56ScY{PwzZCqVvd z(H<-k(vf?Q;4$O`A{zq!0klIFG+Kla-8FVgd;ncWwq}MbMo`o}#6%HH&|-GTMpx9q zME2}OtpQs@6aUHKCHOR+{}((33*hO2OOS}rFw=#30Ws&HE76)KMJ=Jjj@c>{=e8gy z1jHd}W8Nl7rUDq-c2|%c3zDHbjJtuTFm~6oM$}B) z?|L)K4dL$C0-eWnRspV?FBLJs(Pv#y*Gt!)z)Ars%Do0uMzn;X5d_c*B}{?>p&-M~ z90J`{D1TzUerGHCo$nLBKl-)3aPp0tlkZ3A&lAnPoIq@ez5rcM0d9J+_YMo9wbqp= z12@UU&?O

0_n$NLyV2*Ql-6@#J-;wFO+J=>Tuia%m-vK$NPkGA}-TCs=#tFu;Zpbu#wu zdzm24Q_&4LDa-l*l8c+L`@Hq#{Qjq;uCJf`1(xEYU)>8Q-?%yXK93^L#8%E>HNcxd znsnQs`XC@Y4PWkH)CH96R7=yS8c@j74W!`+Sq)1qU>J0I? zfMy_Zk7(9bDM=Piv5L-C!;0|#m^L^NFKIF3$N&wd2< zz+qX2Q5D8Xe%z2N6O)xp_6$B;%p1G=3WEh(b{~DV=l|GwGyr4L zA*O_#l!oWXbrurkbAot74)&Xl*cgo3?1iWd#Nmu}jwYeOqfn(VLtPk4&(@$O(-d%U z_73g{KmXsKk_XQwggQm(M%eUqBSvG<^ZMNjA)F)5$f&j8yF#Jl3P~Sa1;jvLEEwd5 zP@Yi+uS|n?2i(bFnU0q_IVZAsA(&_bxys%xpa1c9pWh+i05q{<#w8sD{SH(H36w1i z`Vcn__uYUeRqnlnb8rH$*mHMjEf=ENDh3}Rv2nGY3Q~4448|K@2{TUSjYCegjrnCY zD9vwkxE`EKeQSh^e0_fLy>a1>et9o)N!ksUT3w zyLDVYI&|{3^sHB}^U8j^B|km*wcRbZbt6q$KT>HDqJvyk9wY~eQO7N?0(dNkq0}N9 z3vRqT=>)Ibwu*g@Krr5zTRjj!heROfSc{5uAk{MA;_P^vFkZ~A)(+~vQ&Ds-MbE7p zMCrva57th?Y ziwA?OZ-xsYXA&aI3D#OVWAX)kgYXBL6i7*`!et4mA_ltWBG7gT3#S3_E3*ef z@o-zeJvjIB_FDaEQ1&wQ=FzY21&b%$SUl-ZZ}I#ANK3MdyCJe!qmW-9slH)t9K;az zBWLHT&Ud^^v>~>Deo|FTs zU2n5vS3tZOCijBNFJsQ8fPgHf-d6}f*XPpskQ~fO{M<$8{p5W3_)T=v?dflE<`Sa#)Ht<93Q6n5s;5uVi;=>Qexv1f51IL)S`<=6r9OPHx6 zj;y4#45~GK!!&@{D#yfhF35SJmvi*E)Q7jawMReBi!84{k9G2byy&`=)F_;T0K=F)OO2EloHi4`4~Vtu;@h|bwZ%jyfdO#)w2VI%Q1Dwa%N*vgu%}6O3 zr?JW?tW259If1q@9WD2vvu9Go?jURfmto8Mpc@6Ue7n*SstOw4IP80Zdd#l0_R)69 z)@z+`Q!?J|#6>xYj#MmAvk-hdXIfEM;EKb607Nt>i`tsQkXDozAn1A&MhHy!#TuK) z$Uhe76LYEVF|KjZClu^2i#u5aLHu#cvrjkh(nC*H!mDm`A_4 zUk`)k2WT&6txwSgL1IfnKv!LDU_)Llh7J_pHRnVmS?r@7%O75ZeMMJq?*@W?gVMLF zpC)G(S*>a{boPi8>bBb+hr5ewP?CeNcW!wGX_?J*BA19AspGgBH)DsXWs@kJs}qt< zL5%roa8IAH5Wke*8$g)fMNI8zSI#MehUkIxX^1x6h>$>>1LEbnAQ5z4m~{=iwc7mN zPd>hReF6U7-+|U2{pNl>7n6(j1v<@K%J&gmv*Q+(B!bb#wC5ScN7 z$2IVhf4du`Q*gK)#E^vcg}6IZ!_fkpg~*&gO`PuOS!Dt#JmV+;D|*2=b--fXylx z3XUZP!Z*{1;vtA(leWC!xaw;S&`$XjT$>Im$O+^<-XhZv)DXR&;({p4Ef))ZK3R(R@Ui-$xiJOpz7A^op{4?e3)CX8S;J2T63H?^ z15Ix!X@B3FKe_7|Klp{cFr=6_LyGx%&}gxf*YRaX0I9E9ASpG2nO#9s#Ae@x#^H@( zaep#Ij^;3fSf6ul9R`#^75;bAwU(}0h+R2nT#}R9 zU>6g@)<#DlWjT*IYD~mb>ah*-P8nvBhV})ebjl5V@TP${qveRE?gN3sO`>dTjIxvAStfypA(0fcmG zd0Jf5D};UVLfmHXIj{-Y+Itt|{+i(QfWTaU3L{0ny6}G;l;){=WG}3u06t>YSAj0ZU>yN!!{t^o@+57&*iXm z3@MQfI;lGBt%ZQwV&JkkdPlC`FeHs49(wn|BT--Q8PEUhyU!2Xso8_BI4$-+~X ziT1rZT<0ydA#KQ9X#1HW_A)L|z<30YifAc$`?Uo@Ej z?rv8sZflkkSct~>5AQvI`s@rc7E_JZ2?#7f%Jm&k{2S8hn|JZ`>w8W0qhH>y4=4_P z*@--Jk2t8^HX=z8;Eu#LZs5!mQdK+jAY&9N;zbA6Ol&kOMu;SB-_v<)3nYektCSWw zp+z%Ublvll41EI!c9WQ427UhL-hF=LBvnV>2^~3P9Kp#Db!;#q2n-pHwA$f?@91t6 z1(4Pf@Zeh=RwVnL4WkhS-1pRx8*RA342087M%xQ=K1DM$a!;}9A`QLjdE4L-3)(_^ z;TXlz1?xJt6g1x19Kx1X9Vqt86Em>c37B2xkPaf}8u(}fEgoP9P8+ zw7k0}fFgy_DoILTI?;D+ZPmmu4^0FWh z9Ua-bPGsWclmkjBq^6ip0KE)5*41O$VP3@`Vk$SVqjvU=7?{BPyKndyCb3O7t?g2Y zT(j?<<>>n%pX0M{CDTeXdm5t2`);eZ?1ex-O9o77HE`m<^gr2f7Ff30_-1mkodsz* zA;vr~7rIdR)YmrZ?Xr+INAP-R`5bQCOI{=s_6-?9c3fd{;b1uJDQghv)OKQw zv$iINh7LtIj0;OdI|0eXZCE-;A`<|MMl(Ft;*z3<3FoAoL2V*Rd_{)?s5yk>@%%S` zi1V`xVcf$Llp3E7f1w{?q<28bfg^?yYhew2eiuvWVV#^N+z5M1M_7^wxeLX%zO*Ie zqpAzDt88sXij=n!gs!MBgx~Fb;&xlaVM2o!&Ou{Fzl<5#wMRB9;rz=&R()y~Q> zJhN>toI5H|HAi5)0vUA%1O|AG=PXg8;|rRu6D5KRqc_y3m5YVE?o%4Se*5Yl{W_t* zfA#juyR-Ab@9x)DIU;-lf}04x7Ansdp?$}7M`A=jJ$ zvhJOv`*_TaUUeV}s5jS%ai^4wU7d{kf)XB4!9tR1HL0ZDaUpiQk5`2(qGY_x|0ScMd z1s>(rYiA#HpaO(hYnFgnJ_FDeOJQ&iT5reB?V#o_L#Ofd@!iu;e(_ble_7b`=r?$` z{`bv@aDS$liduzWdQhym&=V#<=^Z0)A}=DY23VQT=D3%x&KvYMVPBP^$uVplDG02P z>RM~jLP8U(x5gbY@T(YY!ywLSllJOUeEM9mp8xi{AAuC*t|Rr>$GKUs|DeBn^X5E# z$gd92y7Bb!-B0uFi3WKmQ9@WrmAn3v@v=iUp>e9JtTm;<|a*qJ(Ufpkvyr7L`+3v!^(>YS& zbP@?_c~gmjml=(0LJ-#=JjU-(0g9tG|IR*IKR?Tgl2JbL2Ou%!328O;Jx}ew! zH!T9*rE|9En46SHlf3V)f3t-lq0=y^o`uKTG%~w*m&Rv$=*kR?S~uK?QI`dEF+AK} z6EP;-;egm22`vypH8%Rjz~e{=?+|C)G7q%y-kJ`j8i=gu{qAFZ^yAz%qW?JU3IE@< ziM+UJjIdhgpa+Y_d1FKu_64=qnoX3>Tx*iSK7t+`84|eBlp{FrmYhLNNKRi}FwvJ_ z$$pYyq%1Hc)}F1xVxB&5AN59iI2`}_@}}`efAO==ei6L966At79gMoh%8C53DyWkg zbik4>ErrXp0i(W=vo=l{+2B=0*Xes)XoDUpd0MlD9p5L$;jXzh=>22r9OK%C^7y@! z{?SRBH_PN7@}Hdd$3N!#Z$nU@Ugwv`@2nh;evdC$!21{c9Sb;q{?Tdl4m4`m+x#3v zjv|@5hrv%+N9*J^Aa4*8hA@Yo?qYM`4hE1%D}*K^E%YFi;gZV)Iqxp34*^-RD|OjG zP_$*EHJGvuP`axddlyde*o@Vi_4g0lufMyS--BP^3kz@DEWGh!TzH@dq7tChIzDv+ zo`>wT-o5*oV|Cw44zg4`w6>L}a2f$Sy!z?0;M8&((kP9iPL}~-_9EasH1=2*PNp+h zJX>3iHsRWLYrJpmxet!jy;*qw@c+B;zWsQgUcLR ztFJ(4tmx5d1HoYtOOdg_F0&7p9SoVQ@|51UK&UidD+MV|FvB9^u722y0Pd~|@pI;^j-&!Xh{PJEzuJ8?V(*^zvljv*sX3awD8mV+NI_`cd< zLHv~_MBv9jnMGg(FaU8ES^enL*_%c8=U%;ibw^Wv@EiM0r74Soe#hIr>&YEH8LC;p zr!TAD(ZLfJy|tAk&MDs)w+zYcbFnrZ%M+m_O+$+NUWZQtADXtn6>Z0HpJc>kZsJTTAv`3EXO2dmmK2%hrKuJ_4G*Y^e}=%%}iUCCHTSyY+&3s1_mf9 zA~PZ~v*8PW2wxu{G9#i{tzs2bRaC3(fj@%xec$1I-}ikRkM|GYk7E4ZLsDJ;b0~P+ zMg7@;&^LXGRpeXmni=tn=Lv4D4{v~+KN6(`_~Jfwh!NF>Mg&$-M2iO&Q60Ip1MpuG z@_)TbCumb6kgkBA$7;oFdeQpp$?NU6f0`SV+ZU0)|KeS~{r#t7KleU?PtYs!DeKRh zc|Q5-7k=@oervjAjos56%_~4r%f%IRHb_)$PfRvpjvDPaf-&}Z0&b)W&W+O5b?}BE zYjPMoa4_v5gnQ-0cn##nY84fVVsJCe8LEhyJ^UTlXr~VV$C~RAtl4K~ZVTt3uzIz< zz$9S&Enp&-wvUk`yFnrZ~#IDwH=9#yRlG$pu zc=$W7qu9k9-5dUZQwkV`Yf@+6mVqjawNL_M92%}T}P;+g8)}+smThy3^0)zHHVJX1BS2b zbC8e_FFh&%Y8!e2Htnb_6uFm-v2v2DI=l;Oor*CS#u`L-M90EgsA#x!diZ`j3r|3~+G<#5H$*5K;9#)@#GG^V6hw?i zd`^`;=pev7cTYl1qCrqRqUjUd#+?u6*^%~N`RQ||JOxF@ymvaXX6-~gyQHlg9SB#N zwyQ8q!ZNF+BWBFHfocmy7tl$?mvBS)XNPtf(1DeqN6d+Sfx32peLan2n&KvQ3ER9s zEalBl6`?8ISFK0B;|q0@~=c zjr27g%}{5LtSx)D9^i>YwG!~Wz|iFe3aJd5*JSGGYdwm#jMXTS%N~M8B-?hp_8ocERDlplU zV=TSsta5Q1qFq$IKrGTQfkBcOQHwEq>)wzmD$I0fn>v}`QEJ#7 zjEzfxVZf#O@DE-ic!l~J!t+;*6qR1Cm=20QSoo{@O1?(_n#Vb@5LM6x6I(Van<)2U zZW}zmdB)O8ye3d1nHQ)&%|&eXy|yY%jBrR!T?3Gjhkpo1an@K@c?J9z)R8B2+S!2d zJ4SKk;A}#9ys~?%)?l-h*1A~5V3P5VJkzRw@m8A+awT{aI@+$T8?&c%sVYd z6hGh?7H zIw!O_g+X_o+V)mLR<%`z>@(J)GUYv~ko;e(Kl~%t%7Q!GzWqQAu*@ddCb-bFK-&-u z{71tmzpqYpw6$4@U~N@{Q+!-^-D)Y*QqQo7ySAggZv$OmsxDCQ?Z9t>2#n5z(EH5r zTi46I59f9^{Ks$oWPSPSMLqXH^*lDxFf%-dP*P4PkM`UU+BdXt=w$2au-?TSpuJH? zyDlO}8*9Ury^x`+d3cCyOyq%?AB=68yZX`wsDAN4{&=3IjPc6DPbP}mr*^$^7FLtI zu!Qt>pnx|%sO}7%4Nek3rtMIfZ&kRx`cOt~bX?HxzA$7Yz8Cr}7*GY$d+uwl=$sRc ze9wajw8d-zAMhg~o^qo*P1t;1n|orPBjxL$hZ3Q9N7#ro`+)@TSQ z;(I@G#E29Lta5_zUN_sTaYxipmJ3MKMQSL{_9n>)apCg2Zn1P#pb?i|J zl38M~y;A{AC~Di0UD8?efJp>;dV!86Kpg;N-ujtA4DsCQnd9M~z){o=2aa&&8pdNP zzPur`uT3qHrRdgoEyt|&TDkPF$v$W4G#`lCgHzr?K$x~M+-9*<*T%PC=n+st`bk4| zpwpRi?_P=YSn#QbfATsPja!>zB5k5QuJZU8B@&ZxG5ST)^g+dFN_I!@rOW2PeQ}nZ zT+f6ri)^2g? zB%A_B&)k+}?tC~mFTPLSzWn^H*K^Xnh&1#b8f#o5WGFr!!^Gxxtk=uBAc(f8@OyI} zriCOJ7U>I72ht7$x)ym+)Zo)qsr zz>b=l;F*J=FyQLb9lTc~&{+|>!W}}qFd&JvojI~b4Q;&)!hCX_C3)~EH70DdWnZ(? zf*E`~_DF5fxIi(OtZY7RAt(1foLlhcyYpFo?q7jFpI%kT+K>vJ!0hYE!Ii*NV4RUW zkvtkxga)*atpzz&jsnq9BTOvg9o9NBhg0YDs-D@`Shzb-(A^G*L#sKcr^7tzA^j2~ z1Jn3z>78X0_!W4o2JpFHzd%xt8n$;oj2zkm&r-^fj)B^-c?eLWF%awBb%w&}=aV{d z)uc&i4;mgZ2x&OnotaBagy+QrUk5ljefX!Zt>IxB#FS7e69!!98Wn-21{CUsEf3bZ zvEe#&O{9+jt|Mznv#UwzfdV^0gti%B9vwImSf7xi_Tb9w{y0Q3Fp>nLrlNTI@XuUd zvNoViq?5gkx!PQ_W2*YB>E1AwK?+mIDWU=P99TI3Xv)C`#8+}O)TtVeK$M%Qda_Au z4q`EJZQMKNmQ&B#>ax&;AeejyJ^ZuR+k10_VCrs+j%r-a!Tqv?n_?k<@W{jUi_Q5Z zMD#4~CZYxJSshGY0!d76#AnM)!ZZQK-3`uRe5MgI3XZhXMzsO?G@@mvKm2o75eOsP zHRqudwy()?su&2gT6Ke&ro%&A*BGE;7Hl%STq@ww;@xM?Ot~F!p$aGL7*S5e?-MKJ z49}@KnAwBOq#>LRBS-Og_~)-BylUGah4BhQjbjgxNMU_nI+kt3x~9rHJQ;e?ITKaQ zhR6Vz048(ykt?$n!1G-Y%bf051RQE(LmOMv@b>2NmQc?P<%kN;hkxPCkN&1-`W5(| zlrNH2iStT&F7!Qc1Q==p;SK6!FkxgIzWAx9F`$)fYui=%ac;eL#`L7FfWRp+Ep&vp z0u#|m5X?MkY)yeVq&gl3j?t6P+no>R*(%u&zV1DoSI_BX6=de-{c@X}0lyUn@zX8_ zQAQyeUt4Xi1Yzvp@57QCCEO}Q-Hz9x7LjpwV$-&ulRvU2UP!Vgmu@=ksDgigz_utL z$$8p0;^IH`=dV{Go>$;?(5av?Nld#1@C!H}dof17FbCgW>*p3VpVH;jPR&;i0+E3U>A&686QIB44%PO z4e3FBpi!~zuJfv1-dxKGG=z-_Aw&xY(+azP6slx6Hqg1@E!@}A9QEN1o#DZYA9M5v z=CPH;t&eEi8a{2l;SFEtp6r96S?46?>p z+!BK{64t=QIH#~>rmwH#Z#~GTeSAuP?l1g>Kle3$6nLrs?>+x-{+4fk_^01|f%dMy z`dj|CKlQQAX8j0L=7INT*py%Q<7v6%%KE`%xXZbNZ z-eqd>GzkT~Z>(xDT?2jEtJpgx$dCKU;1)pbb?QZGUuubwO z0hl|VvnK%<`cys$z&!r^y$iqqgp9(Eh8Ctn*#PIM`*(viZB zxU1(ZJxU5$#qNmw(H=H-Whp*ugaD_WLLK>JxZBnv0|1HRS0WwqA+4U9`q2i)Ep&%< zk}x&ZcAFKq*s9-*d=G5Z7jNFaf8np5Otjwn>^++*wVPC_eT3{wUw-Z2N}SNh1!;s8 z13{t~h9@d-&=KROm=OTtp)cM+aoBqz280;_vMeRg=#W#xR^BJRXHEEYKWOsw;%m!|@miPoiN z`aW$S5;U!;D#^w?NbzF6@*&LL>FgoLvn8S#g;p6LkfjR6^y(-?OgT>{bRM~8aQnjA zhyU;r1v~)yPJ?Y4Ejd9qEPPm5Q-b-oF={4*5c=TEHDxqCokd`qvr!bPC07D$^$7F_ zdaJer=MHvtWWEhGZ1(-||GfRtuYRrOxTK+W0r8ljkD>`R5NLz8kg7lh zU4!O1459YU(BT(4X^&U}iuai@J#UwZj8aPhkR)@&B<#8~VC03Vn}ercB(5vmbI}Y3 zK5GYM6)-1J6zUCI<8>g5M9Bwk^Ap<#_cKkI1M11(H0|(vFQ(zvlj2F_^v|4EFJJ68 zfADm&m_jtFH?Ozp(+DdXayS=gap`M3eVElTYrz@hSg& z0QJ`%fBp!<=>gPB4v`Uv@77*MbdG{Oz*s;4=hfD-YaZEKE$1GBD7now8YWitWQJ7} zgBF;;>z5d60ai$-;h@)UP`jXb(MZJHN`ZO1O#|HdaQ?_!=GVThmx45F3}Li0L4G%6 zFpF%Sug@KcD z1*Jb29f)yOA3`092-*|G^4+HbSxrTKu7U9IMRgdLmk`^RCkw25AI_~UD*U}a>hYdi zW3d&wax@#f1ScO`&shb3RNDxnt7TR(g2o1)cs~PGUhE1k0M72GH4ejEH|ymoN3R2O zlMrV+oIh7eS0ZI!os*6LT9fh3HT}cEhsPzBO78*O`pg}3AS#97?5Xk#0uQ--fdX*R$L0>t&Jra0%0F^(=i*T2$8qUL@Z#y^?X|szVqSS zZsXs-d-ZZZb2TA^Bg9U+VPw!l7n#`E=$`keF)$WGbK~oQeI43kuBX*7LgNWFrQ_hA z%+|;|nI%vkMre(n9o=jL>bz)HTLbJZpA!Uj<3%4lp?^D;4_|>WdTZ7Wb2r8CHnm>N z;MvS&+gQs^D@L9N`K9uuqSA%1%jewd(z-AnLz!C=2Ca;ior)_IxD@rNE zPz`D-j_glF9d|yQo6GrE{l35YGGDxT3+CVFFW)`qVVFJ}W`=shu=vIcac1CE5xfAJ zoZ&WW07svI0iv)t_U@~86yV}Vb856bdb4bkfM&xwwx{pz(oo@qU}BMsl*UUW&a~;= zg6MDrE>3XYSHuRxw0GazF$j2~nA zt>`S4g&?jhC0j{AjgwqM&CR1J2SES5v+Q-yrQV8}zPJr;-}`WG%NO5%9a(f^RkIhK zud{4Y;@`x)@VMay+&ntD`DuFtOAG+*Zjo~>4IVMa423nrhI|=BI~eS>28CFQLdBKBE)FzAOva{;oY`oKywOb5Jl!*dt07bYth^o z1X7`PumH7I2-<{Va_`|^ye9Cl#L5fE(trk(wML(qQEMB+>bR80iBR5zDH#5^zzmRu z@wisCO=Y(>x%hG+fc1j6>6yA$wc!Vx-5AIMVq9IVIy%pL_QmbtU%G;ttEmn|&^!dZ zdqVGrH*(O0;i8ohmoQ8af^2!FmZJWxNATfs3)wc2&L+=UBcown5=q@-r~4RHm~-9Q z9f2~k<)BQAj+olRzx*BO5g;x?>XCLXzZOzAa?*N`2A5$N z%odhT?11nf&@i!T#tOAXtFt;%yZrgwi)olY;pt5KP^a$gEU_vZ! zJK@)>hkxZeAl#m1aV%`eM1b3yBQK)^V=&m{W4h5%;KN%!xKwKuIEAs2;AqQ+jmItx z$6P>1e#Fo8Hr9b4#SD!X8U%lA0iX$hAl`v~NcL@$2UV2q7{)M*d20K>zZk5a(M1A_ zA%vTYFi5i^zzhe^KGPxT8oH{MwllDZS)7a+w2H8^d~NVE;50W+D5{IQ%sojNaUy$S ztp2T+?_T(;FFy0vUw)o%U!JG9k9(iLKOWo%s>NDG0S;U_T5+8w9^;LGD_U%^TH!Qw zbl)+}VGA|CrmY~ohqw+{i9kAN%IY)83E3b?#+XG3Ru6G7LVINrr*CJSD^dVBy)9nf z`EYKV#$VqkJKtZo$urxdod>}e6sC72Lu=C$+KeM>@mPqSLRHR~rxO-M7jo};kWNo1 ztU>gvjqVP0yk2udZ8WtKypFh7vzs?6v>Mu~>B_)V0483)4ffe=US#G83=&;veH3-b z`ra6!U;V@;>SlOe;1*U0OLW4fD0qTwx+y#&9I_I~AROLB-0 zGj^CI%I~mk5^!U54bp_7S9zX0y$~B<^BHIxB26IonZYw zfkEB*#69zM_;7#3A7g*?@jIm~7JyZ2E5*Et9WFq<5qb>l2eLOG%{S(_p?8oDAtR`V z3sW6!N9vwqDEBsd-)&<_3CIG>*LwU6zy5E}iq#i%^KeHXb^J#k~5I1iEar65bh+|Au*}Q~<5%~L1bqqLb z8@=P(+`-#lN2Lys9m5o)rB*J-2QFScayaKkL4BRMWOa;&V3H=W>z|;8Xb#r~*vB&R z?oc4ymicF1ZYJ12?3#7B+EG|GoNNvjv(5uSam%PVXMjS$d8}`~AbDL*0KJc5>V?fO z;0lGn2dzo1?aZ@t%K$oqEOj2I)~ed!ecOop8^3)0^1O+Bak-x^zfZn>|Faj5)&D%7 z`}69Dd!N;3V*g^#k`80g0K(hxfQ~6^+m^mcfM*fw z<_#mM?P$P&*HP3R4-;cE&bA|9306B=Y$E~SRH{dpygZ>!x;E(H#zi*z<}6!UX5@3UxT0!QNvoKpzToPL#uoV4J89}WAO%iuWJg7Le- z79;4GVX(Q`lKu4U%lG-BUcSl~{{GG9FVF3LcklD}OhJM^(A7Qu{EKhN0M2sjPR?pP z+AK@~UXYh$8RA<-&*%l{yRl;6sck;OQ+mXN#(a-GPN)FG3f782GXz0%{rt*-yhHstd-wu#!H_?BQQUjdz`%(fj6>S?cHwYUkOJj~{js zD>vS_+cj#e);)a-uu#Iq4bZf+LK+Mlb9QubcOSUM0XR$B5zTk$!ZsM=#AhzD-nLza z-~I5fJ&v|22i$Jk8nU^V1J2#awyJJ-!IfH(YR3yzdE0wRBsA7*Naz`R@521HffdUO zJZwK{3=MMUvHF~=gWw{-(RuA*jjjZ1PI~y)-+X+jc~xNYZpy+wu*T_(nJ(njCpqPG zF>WHB?esx_(#>5eTTlYPFoh1hqjUrAB?j>-83R}&2NCF{+ga#}3wzV!nb{S@(KY(H z-EXf0Go;MfR}csFi5_V2k)HF}%2F7s& z#b98fXJDYZU)@b2on9ToUDi&i8^-WHbV|L=AHRI}{_W3R_?PcLdsL@9vGLyd3_f|m z1N8FqyQ;^ZKSISBBnbtpA1o?9HpgK&5H)I3$Mkvj(We>4@{w@Eut1Gd*{8!FhY5p2 zFo2!2dYrS%>0o*+VXa7w#XvNfHWf5!28v=Nl6AU2{2Sjv#kuew03Za$otC?wAwWulvui2Ut| z>=_VZ+HUWE_?m`9TpCHm3mdYrjT=3^2QnmrF4|Ny!>b+4nAV=C^5CeD72Dj7F1hG@2i& z)pG9}|KI!$ZhW9SH#&F|q^XfwLw3%AffKuWrFwCGx1lK5EGN_s4B1z9r?~K&G*83b zxBzV39tSTZaCB^rM5$rG<3dZ2vL}PL3gdXI=54Fxm&DC>yQ#eMNqn~7GH?1V^ZU1{ zJTXSs>yy5gKmxsx>vLKQ8bQRrdQ$`J0CcWuqvL(0n4&sCt{^{v1<~5VIy|WkLwA^Y z;^L4OmV1TDNOR)#Uat<8o+ddyGjVM&eN&(BJ_C@ej=k726= zSIupmxD19Nv+`jrT^q$dI4O60bcscwMavmD#x_NKF__ zwN$`bBTpM91qsV0x}bEojd1~#@Z&G(R}cYe1x7TAC-5>-T$4!v$tnx<2feqbLas#T zInfaYZAizVIhesDlYp(-Mh7htfQuL*COdHywZC)VvPR`P1P-mirvrX`bBp-ORZ74( zc7zSi*>uRgf<4ji*`y!_nKW!pK}IXMXJwta4X++od@kC~+8Zk+nu%OKg2XYzIykkk zm6pgFK(EC<4eCN}JZ?z}Ke+mo*MjQFLh9aU?#X+EKIISJBVYZ(Fa92ht-2v!l^MLU z48sp=OzDf~&@IWja>Ly)dF%G<J-LBE4d?Ly(pQp(dqxM8aLu?fBgSnfo!Tvre9##sbg-dgNZG4mc!AO)N=+Q zcCNDmU702)g#>veu@#9!KkejuUdEPsf7WcuA|mKi@Xzv{{oD zkZJ9b;qd_(a$KWwX+@RPilwYWiXI2^r)*D$`cAP6w;f9&(m;1537U~qK*{M3Rfgn zJiTih-n+#L7yx`ggTES}4g?V&13iMguUOr_-VBm?S;J*((Bd$c^ zKZT(XT21Ce2hfL}KsA~+QKA^!iBP`wZvDb#_2O!(4oe)HZ+OEYktZblYmdQtyO;Q@ z&)c7U@&3(=xBfcbeE#Cy`?oJ&|M>RSyZ0&lWxe$@J&_;hy^u5rNr(JmpipZy7!w4k zHnih3pwXt@ARRE{Z9x7i43Ur_h%FspMrW?vhkAEVh`AP@jyT(z?T{9&+DIMBSo8Kh zcW+71ZR5~izkB)Ov-h9BdVxyvm#<&Gf8xTv_ZfU9ANOJLn7(Jl;~)N+Z_erue*;Us zZ+`qkY$1WJJh&rfF9@ea+HP}B0C$Jkunq%|7MAp+4pSDu$-HK4iFvtBbu4FT=)3ka zmhb5cPPJ_Sx}9ka^$pB8Z;flR>>B95?P=UwXLEB;{&nZg>(_uzefIL*`#0!mfAR7~ z`KwnO_|2y@!@Hi!U)I+m2xL(J{0?-a_DCdcQI=w#Rx`2(#FUA^mV1t2JeL9vX<${2 z(Ka9iWf+}punY0_?dy^SHGq(+ds_}$VxA>2F>~z!`msL&Yu{V-a&rs*#`Q-0Hb?ut z&)qZkoPH3Md;Ix(ch6;;_}T@|%m5k%0s;%L^-Mvj-r0NuB?D8d4-D(D)R9XP)y;cA zL)|BPR{|2jJ6qAgCq=cs#4LhYtTj?V9cK42PUGVXvaE)K1|%?`dnH{%N2Y-JbGWZGg^Pc zw*=I`J(_;+^ZCc~t$j4>X~MN^=(P91*g)IER{Hh{$Oq<7aeRpuJfa`k*93@72Nuil zkuNob0gtzZzWM?xG<(;Pebw zEL;NJPuk<*-+A-#hvJq&Q?Sq6<%N@svfEOKRVaeERwF-n0iDw)w2rxxZP1>Jqw}P3 zu10I^-dkHP%bYN*vDP%OtGMv1HmF(4Hu%h5j!B*LJ#N1N)f;Bdk6Yub#x%?tSK-DRkORq0>If(^o5MT`vWA^8%_J0Ye_A z!+E(sdS$0jzqqL0!v-`M(}?x0z>iDy*w)5V= zFaZV#Mu{!}I(-V&>fgXEe+{?DpZ`u8=U82U1Ov7A8W@7*L8b&Fv4&}P`(JU!RWbvZ&_ynG$`2TwkscRqj5d_va^c4U1N>EgH}_J zXuS+VrIl*938dbE%k>M-$AhsYuF^Y5!sQ>hU z*c%xtP*JEP;n&dr=79fI0z%w_(zZH`=LZ=|ghvW6@p&171dK`Wb@;n~lO%zv2IfHr zaL%mt%gM!qV}VeUvnsA35wcXj6@?B7AKJ3*6ucZ z9GlSQEu=`73{X#ob)IIw&_X#q!P;*SXNUK?+*-*yc zU`QV%HXDRRMsd}<;~1g(0D)b>TX|u@mXCfA%Px1Q3)Wg}a+~x#Ypg9%z6xV4?w~YF z0>%x)T3neBo8Eh^>?pdo?XH4c8~T|%Nlzzk1#KHpAAt?UPU^+mBtY7Bv%0GE1LHbl zcUs;dfRWn-$!~(V{N=0nFMjOr^QZo#t9tLV_hc<%H}m%Pk>>5KjgFWEc88b{LVO1O zWK4cI)80df>Z+^(N#U5a%S9`(c)B2Ot4&Q%J*v%49VYaN@N|nqu?9$iaWDomPH>*X zZ3#B7T?Vh)+vMJda|?HetHYmpe^>!EEi@dMJ$QsSVGW4{b9U60;8X_Dq$~9WPvr*O zLmH*7Js%5Jx(*z1JSEd+&^8nRH%7lnHF_$CObN`>@Sc0t!qi#gn@RhxIl>?PC9=2E z!BpW89h#7F1F(K_A2wNLb|JEx2`Nb1d)}2q^FKhd|7f(!v zQ~__Wp<+?9AedVAnX*9=ED5)ikyz!S$I-K6!nSD`CEgfVj3yGpvQLEscy-1G*m&qU zvzl?Uu?&QkCZ3~v458bX(!CMIPg;@hUc{U8yH5k?_dajGbP}tdKbN1JS1|1fKq|sU4%fxmyt8WVeGdcGBwXQ4I6Ptc5}cxKOD5B4SNR0xua4h<|vDS*ucl zCd5#J#aH$*%^KJDs1(FA)HbBg7b3=DNoZH;c*LUr=NwpRv1koV19C%f)MXNU^#z*^P z37!uGOYlu@SIaL3?GYGc;LdWUctMIv6>Iy(+79E-dAf9%>GG6u~E{2y$f;VGCf$p8Y@UXXl@L! zxvWa~t%qPea%gMl!e>f(H*8(9p;UZgVF0HK@>vi6{?+j=>%DqQ*bOZc9lTuHcI(QL zjGWHV*_4K^CYW~v;#OwM0B*x2!XT^9E?cWk!(fNE3wPUAv5pRBM%Dpl933HEm3yu= zPfdOJ58hm5ZA^A~=kBS~fo3x8#N6j@rvvrg1#~TojJewY{m&BD=Wb-dSV zPQ7_oNR?&kW}UnG+1Ya@b`^j`sFCzD6BqKFhyU=RIH8n2bCUJ6tsNJ0Q4>GtRD&$h zD2uWtJmDeE0=sT2R7@8e(Gre6yLRC%DT!%7Wl!M)JzVXQEqFQCIc*^7E%?_@t8^I; z|Iy`6Kt9u;wYEO}lFZTZeSn7OaJ-S>q7Ik|sa;f7aX5VG;C)Gif_otJ(E^(g+V}xm z@v!2Y7=^V#&`;IkmKNw|k0k`E#5@oG@pVPC3(Zc4H@-UiESPCyThC@|Vyvx*qA_3w z8dVVeV4yshsIaFt0$iWk+JzDdv@Zjn3&iMGjzK2_k7Ji9a{#4h$Bjl9Hy;oG$#q4R zG$(W~-5brJMlEDD%@ZtiYz++&M{m7Cfu|RREA7fGVrH4~SOZrOYfS`T1;r+SHAt?| zOd%B8d()wMa{Gbi#^spRq=*0XI*MZ512T9P#<=}Nl6s6yHnw6nAq!dX!s300+uD9e_J!$Qjw?h{l{X%oBycBy_h0w-gQrVsxaj$$YeJ!vK- zU^ut7PE*kNmjXbz7UJAA8wzo2tah*nWtn)l4$Nm^)k?L1kO{|{uknD-H`W9)ZSp$a zOCYS zC}Hyp%*nezraz z)9YY@5gtf92s`ZIzkG9*(1$x0&t5!;A$^iGXk)p;)v0E?H8$?)gDE2163N4^vpoau%Jv-IIe}$vKUBtaRqW)8~Ez`=` zrKVsy6G1jsw!Wli98_LL)^U*NFz6s>@hoL#0~naIT~6h8cJHWrqEEkTwgu0(bQx{M z^`7xQ*ox=Fe|;Urzz7&dM4NW-H_@?4J!4=_9*^|00lvFW%^l(!=pMKZwvvD-9SDJL zEUGXfdsS(5Lml9KcYMya_QKl0XV%1!y{uNVqu9&);lH_-N`*ASnLTy)4z#rQ>kWf( zuU)Ru3x|&eD$KyWTOMZ+3uSNP89HX3nF~({tFL_mX=0c)(Q7;!!J^XjqTZ@}42tDAKuL^t~tRsWpy6MP; zGDOGdr&KgSH5(wueJPGuh-`o!hNP9%@9#u4P2D0B6)CcbbI!0M6} z_3+<3qlYNm}AO2wJ8y!1%x@ zLo17zj+LWI23e8{79NJL%)&qzswXJKoQMD6`lfDzccE8n-rKU3yGQVx*XqRC)&z6} zM8T=6ks@?i5WlGpedMj9Z!ph>v;1H~HCwz9&5Y-ko186f?7t%v{d z&12>0jH`S|b9LYl5ch$Ka(gi>V}>^BICYV=3*{j=s&K!oP6^a!c=#Tx&|wQ*%N}vG zJcWfZo{5D|Hz20K8eIU@O06EN=fnSWt@z{!fc;`HzIsSnL5FT#3MIs-3#K9+B399o|B`lxeXs{7o&m&9Ujc^^6)=DzB_jz z+sQkx(a!A6N*YFlVG~Id>G!@0fK%sA42{@nFl+X0D(RE>>J$?KtBp72%54^(DUt|w za=$e4)`%0T*igKPv1pE64}bA8L}e_@Y1IXl%a+pT60`%6QW}FX-`b8^HozML<>2Zm z&93F=#EFMOW!CC_?5Y7#&i2uVY#mkOF~55$&{B`Z@`g^ z^CqbHA;@(IUKlL$UDm;4xE8b-8`Y|YC`moedRhbl&R|Bf4lArtewsT$_i7$J_}m6JrR)x4nhyMZRKpe!%jEb+&Nl@<6tV9Fm(B6b`6@V~$L(T|>Ye{#adIB9})#0Ig7 zkoB6A6vGI(L}Qd%wF4wS#I!3nYRqo^Bm>DZ7ch!(aDw}a5>TdE90`oP+6-*Y7*W10 zz)u-o%DW)vyscr~`EZ`knSAl)-TU)w&IC^(uh2GYCt^tx>+Eg-Il}OEqR&E0+OGv6 z57?6S-Xi6g^W}|Y>s-qO4;HXRDm5E6-IWutjMQFyb|Z_cL81E~7&Di|_8a#nx#Av= z8O1aB>>a*on1pb;Ep$B#X2rCHHw`{B9n2IIM$n!Xc7lb471J(w>5OYRauhKrT6kAe zYX+H&!FXQBw)fEuP0m}|-MtUz*8TbI*Ad>&dF)a|0$RGa`gGJSS~CgmMF$RvoTR3J zrIoG?sc$h#I&HKm84mS;Ghsk%Fo3BGOJ2n=PXjOyy=rG&6H&UvlGi)TJYQeOUw@dW zHtPRx;pbO>#XnN`d9A#<;QbjID2Zh@uPwa6s6-nvTP9|FHF00o47I@tv^MAn?vr4Y zDhADb4&qio6G48&+QOse|@Fa;W zA8w7CV}F?0PIf=p0yF7^38QwFdxwr-)uD+n-m=yW2(5YGT^Dzb_V9na`5vT*{v_1& z5kpNMeLm^bxo{r?6@CmZ5KPTsCn)Dp%zPP&C)TsDh)lAz#B3c~8kh)9%!{8>7{wz0A0oH?jhJ1KpKb$@<&&`%I8{wK4{e{&UHh8e zp`>AtL`!uywC`m{HB8JH##}I+By-B3*%wWRKxU7VUdC#a7+6A*<;1Ke+96?5x}6#P z&95djULa)s@;ret-TUnQ@xYky7d0UBjx%gi0Aty9%?7WNHn9@}Pf4u~J!1Ibxqv%A z9>9=G>CB~*jK{*HQcj4$ceD(#ArA8ujfqhl=Go?gyOZ%9>*hJ)Ha~ms!@0dp3Si*K z{NhFa-j~lh00D|eAE%%12Ux6XO9t6&eX*G5Mf8RpJ{~kYYkkx0|qp@1O@>+2CYdCwdx^0 zH|jw>#_mj!+6|r@oeXm4Y`CSV;&dVP-WUb4fnw%C+t#-3n1ttXvCo7j=Sc1WUlYVX z&8I*7pWngICCCSpI4Wt)IkIb7z|*-J1_v8=KFNgWArHhH1AtY5>T{dvDD%ix*sa4$ ztOo(Q3<$D}nyeX2V=FcA`RuT9turyc>e4&kF4@`vthJKR`@C8{z=Je(aB6&^Z-T2f z6QOxR^KQ((I#T}CHcw)VOs5V#Rn)eFvaYi*YdjBVoHdRvQ9T`wxYi-CWH_4-rfF}R zwy*rl*XOer884q#>WoA1P zD5S?W%;CWoOh#}MopQ`vmgJDkB&M~S1$ut)&R{vV&?B1-dH%8)FeC)KLJ(ooNHm^s zIq!Tpx9HX{UYOUHx3~*o2<3+mlxWlQAl8W?c{nj)H*GNQ?uGs@^?KfE3V2fojkYyR3`6v$ zoAH$Rz`zA%Uwb%sdfkAA*f9lmnkyPwv0Vnb0|9CdHlb;w*BBvf?t2_{0e|J8d+j;AEpXIApFMjXKH_!5TF?tf7uwy{QSDK7%S%yO z8;yh3T6KU7WFWZE2iON_%P6DqHUQhGVFv_%cyCLIe5rN}`7`+GzLD;0vuQ!km4}wz zUex(1e-~@sRdevUG7$q}dB}?n`$}KS5Bso866iTcwnn`p9=&6qXeC`%HU@&4;C)+M z7sh|O<5^f#03siBl@Cb6h~s0)9|@E$SnN-XXsw}$IVSTG?Lpv14EViJ*=x8OA;>LY zuu4aEm)*I`=C~-J%TBK8@QM=$3Gs&fWpJPX3-E;Qjk&RIc+MMEy$aOY<+568_}mj9%RL3{H7vn8$3Z$jB z`94Q)bLeE>JtpBOfoQvvQ-}2CtDzP@tF3lrAZl3w{_|`Br>;ZnWx9D@X^dne(W-#5s!ci*b(i-V)9NCVTkORM z)QxN;;Oqd3Cf35KF**daz-8E3FaM42;pH1EPoo-$Je}x4iZojNoTJqQnPD5MiP_1D zeCrtvMdgGC826{}OcWH3P|yj8gXz$>YXhLm4jZJL-Fk?I=Q((IL&Z@WwE>yEwkdIrKZBJ2<+~?X zuY2FL9|rFDBk;Jr{I|actXIS~L@5UldI8F3OC4F$_dXDa^bHR#p=n44!B-InVlyw> z@t&B9`P|FU6karuUM&cwI*t+TVWu^Th67=tsg!FNLjpLhJz1FV9fN&aL%e$T0%OJP zZ{I$3z~B4cJsV2dZbB)4gx=N45Np zcS8x*B)2|^Px>xu%bjo9v(y&uH`EsX6f%oGt1AEy5oHbf-&oCH+bLwBZ~%tqN_1hqm&zXFBvLF#`l;J#Dz!Kp|Y3%&Q-FC zyT%;7cplzfrw=k2wg}_9y*nnvnH@07X+r3xR%|TnleG=x@WFczs=+zNwKX_K2vlGw zHfLwr0G+l`B5>2AL(ve-wnn}DcX1WEV{C}2k?^P*%?W@%h(3kSIi>>N-<_5D57R$6kv?-Cd6$tfgvg(_EJ;1`>|Uxoa7MsGNG2HRZhg_r8ZZ3*vtm z=-OU3PHxg2mgDMd4Fh$8k1_W9A@Ke5!wnDUn&^qw3JvOwra&n)X)w$@7&@&QiDVJz z+>@ZD?4!}b;juynxTu?-FjViI)OAbL_&e|FT|P0c-}#oBqqfk908XL~MK8+YI(JsN{9Lfe2<622aV{TQO#F`UgZKvPz4aIM5q zOAa1`-N3QlJCC5z5A02#oiqr|*impyCLAlb(}GaiY9ayot2o+;6&Uj=EIZykTA<9p zwSed`B36ge>ab0WUuHxcAHIgj0@gq$T-Af%b`{vg)-u@*@cw4uC+1*GlVaDp-G2Vc zpVT`q-oJSfU!C)mqHyn9_{_uj?MPbr6p^$)f_n7NReAihd!f!q0Ie|_yvD5uRZ?pR zm89uIy@?c^5;H@u8qZ}#q5Cpv%{dT$>b0Df?}Mnb=rpXeopN&P5Z(y69%80|v%rv6 zSw2Rq@$69f(;uQ%L-fEr5~I&1O$diqoCO$WMf6u}&$%tEA$qG*v|$U@Mhg^vWt^b&`)I6*>5$%_f7)1 zc_RO%o4{+}>RIB+^Zri++rU{RQ;Glv)Z=cO}bKwj2VvBV^yGk^#V% zReENev2rlZtFZhd15PN2k3eh-$SkC|NR&43lZK`prRL^|4`E>-*I{&kQHtl2IBoB+ zm4RxIkh`GIBI^t-P-R$i*>2@yK?t`5MKH@jF6M$ZV?*EDxB1+=Av0u*Fa|WFb?mad zq0{ecbT}tlz&mLJ{_hiep#Hjf5`XXK@85rk$MBE-_{A5m_Wrzn>2IH?lJ9*FpIrs# z%_=xQLAe#w1>lJm0&BFwGY?^50sBYW0;ly@BnKp%d1?*qn22A3m94#_m9uRHjJ#{$ zAXD2h&qeHfwE=me=B2Kc#M%P7oMi|H`F#2BU!LBaVAF6F5F`iL0ZC39!GwEuB=oik zJ=VfVBceCRbaf7-Yy(;|$5_A-?aiR#A~@A07DCywqhGxB#MK=4iOykj7J^vP2NB&K zPw#y>x1xqWd1Rlf_%_#os3iy`dlQaE0)oT=GdmRUgBrcr8OJPTVbxZ3@*YzRi9eDs zSKw5Q0kH<4eLNc@DXJI{N+d=d?bZ>n*4t=D2Nbm)Usrs;{juVsOLB%6U$Y^H!-*?f zrLV1J(E{{z0_E5T2&qST7_8BH1P!qbTGp6_n1sN>2!>Fk_kleh2?wUtP*as&fiDE@dz$S9h2-9D=TL%l4P7@{mhj~#V{Go~ z+)su{lH-#gZL4otoBGP0%i8t~z|oLafA+R%0v~+sV~w`&wa}d#=m0a^#IO2v7EO#Md4DFtb{rW&=UZ_4#5e&Fd*%{C8}3a zOrjA~*>*!q)fy!#fQ?A-FqSX)I1ibH&jj8HdEQYfWMhKu1MNcE2|&zwub2PuB5DjW-$B+4Y8tCl zXf!tq=q0hc3?ftOo5{6Jc0IXI`C`EfxDjIE2Y%uOtgA^K!{@HKPli3(tadcd z9FFnU3EwgJY!3oxgpG&yvm7|D9P{iT+UVLsol%utUjD})?O^le4rnqPT>Qa2gM_4{s6iR_ciaIRiZf zy6#0U|C2W#GPrg_i04u$-IuSENi{meo#+>VE5Ch?b3w4yfgBeOgNEn|s@V>d4C2IBUt(s6L949Y%?@$G~3V@$z5$yU*@@zt(wmc3&fBWo7T)3#w}n zM)$ZfZ$Xpch`}`)2Q)dB@M|C|)nTQA{qI=AL(hBk3;-Zj&jvjR?k{xPP>P(r#5rBY zZgJKqfa>_xOQ13aU}xEYUunhXfPm9i^?@;-6tG7`r&dByMKl(1OICo1fc-c?5VZ=o zwmV|t1YjA`gYWC(w7A}6(02&1rO{bC^f`SUdP24RWyP1CfB0h8FMh>=_1-t}$eNw#oxE~y602wT44IDqV$?7q;x*qe-VA43v1;+Y07#i`0LTd}4m;c!ZOlGsgTXxx%LVuw1#Yoc7a6o~^KuT)J07W!xauUaea$nDy z2Eu8=^RCU$+`xu~QCn&aQb7n-a_mWc!cEAwurrK_;QE?}U;gJGFqs{uWtS66tI#@S z6o%7PV^bL14%}nYWsYhDlR*&jgE1D}TzHap3#dWTdgbLbfCz8*9#%jxVrxO}HMZL} zO?MsypRzv*d%E}K+`MJK^Dcj0U-)+-oAE4e%9&v4^{hz;{qspZs5#`NfHU+qv&Ckx zC=KktmMq+CYJ;Phr5cFp3z2YAB{mJx`B9YNYq!m3%_ijy($U>zo#3{Xt)~Zg4B@`x z&z?WS*WA(CHlN&-y$#2ggcfOqG53L_J;b%VUXtH6iX#04BM1*Q=h8&C# zzKi#l4Q7?y5F%y^nCOIt4dY+rSbLz-fE%addlt*&T9E-bI||Zbq`aNe=D;E(egLd) zF-cW#fLzNqw&aE64M?b@oqd>@b@b^IMy!B^8P#-GFg}8m8=5#Z4^HtFf>|ZY+#G{Z z3wbE7FodVUDCat<_L>tm#uBP)=kpX>x2MW`U(RjQ?Ylq6quFCJ2{_Mv$nJ&W36^Tn zJ-ClEaSE&xb436TXaDHkk#tZy`Z(}FFQ8X9 z*rx)rc>`n&>RbQSfFg;E^$ZZBJhPwLjbIQjAtchXj zi?$5&hEd#d^ya`@OdANb?0gRXKE_&Wth1V7rRLd!jdFJ!f7{sWxT0YMDAW^~#l0`* z76st1uZX2DUcGy++&+cwNnssw7(Xt=%w=i=(7Qm@ImNpzIv4=;a~7zm*s5}n_ z)HBxU9>ZN08Wd9oxa{EmIRXu$_c4tX!_YOl#8EHQh(C}NXII z9rz6-pfRAoAWP1McUe|e>1qt2$N@dE&w&cfI95N1w1l~xH&Zk;;##ep)i6QxAx*|q zP=|S}C!sWV&OCW0l;*{*{M_F<-m(|(-n@PPRNi;*oA^w$-?z=l<5QTEpVd122q3Hv zChUU=`y*h&GF9&GyR}XP8Vn>%3&9D;5U>H&0M%Jwo*ih;4F?61DGM<*gSLtUAL2X>wSZbKU*R=fh!3ct(4<6Y8Aktc3 zoA+?Y8#?q}PXID^j?TGxNPhq0Eqt+Gy-R<)U*wxFzNpvlpLmq+eH))?`_i{2VjsSK z>>H1LQyjv zzpp1-$Gvalvs*{I**d--dG(KAt$u7BkFDdeb^Nef$Ak`Q4m~c3IGlr?kc8mfP~@ST z+B&O)s3nuEZO-lB7V6|h!IVAP_LhB#Qfj+$jn`aDXq?zv529a@d3TUJX)ZgpCQ%gE ztvvJI5tX;bh}*5BzWDO}QwiRk@8Pq%2Hor$k4DvF*Ldt2k6q)F>>7x&!!?>$Hf|_( z>$H6giY+*|h9Za!BrXS(w9ir2*RcgrF>^MX5Pf6)tw`S|4|2yH@~R2Z(r?Qub)g!?|dU42adZTgMN#b&#Zp zm|}pd&a-#O_VLR%KOiZcdSeJf z5R1T0dcl;;x@+&?l)>YEOI^Bi#`Vop@>jp!I$pnd`-Ol0>R+uF`E!5!uAYzp?tLF0 zJI7<^cmoT>~rHy{`Xx4C7^;|(!qy?eQ~0_4u-au#-- z)d3d*oI-O!Q@ccBvmiHq7dR?&E`?X<2-2*Bt*?(xm`J zCIgX0w)LCZkMT}^Y4gvRUtCK)P)5ZE3&O>2(nFC8c*Ah4!9d;~i zFqYFnqYXVi!6UQu#Stl3sM^Bkyfy@!kx%BhcaAH$MZVwzdU4*o{n-Mk(VQ&!OfH1dSx8Tw+L8FO40(1CqJ_4Cpy2S3MjF1m9|X_!){fh_6%PE3 z^XBazzIgxcMgF|<59{rVuWiR)e*V?ZUOnmM-TP)fqgU3?syu(xN3s~I+XPN650NFGLL#{&rN;oYn94uDRQP%~&7J`Ql4Z@j~ zi(||~>8k3r2JJPP<3KoCSs^Q?0}gx>%s4-5pXqfTEb|zx6SzYvi>D%$d&yCcNaAM4 zY}pQX@viN3ZHdCVAwu??H4pk5bXw=^xoww>3Lf1Q45pRo*T|MD0Bq)^()Qc+eCaCE`ae>iJ8aG2o@Niod zt@UBnz)Ic|DP#XtHM%uljJCXjYn7o3;Mr;8401XzjM#ly%yl-=nUk`|LV<^4d^YG?+m=r)+ww_hEL2I1v5?(Z8E6oNiR0`0qDS3I;+mmPN z&X;q$Sbg#8^{X%Zeg6D8-;y66h)_u!P&)eUn5qOYmTauCmN%p(&j~)*a6%jljb6e{ zM{{JUSAkyC!63cDO2t9NK`l8F3Ev0YI7p)Ruozne+Hf0~xL4>aj@GcMvp#P)JqL=^OMc73a0f@zO+Vmq)2qj$BQ7R<3rNg2xwu?sw zt%#x1x%Zl?XTg;$=>~0hzq;px6-X>3EWu8OD1<)Lq5{D?DlkV;g-KBGk(dAdo1gx* z=jU4q`M6o5SyCa28Cviu1$~B~zQD`W`4x4_(!|m#HfDPzu zx|%ykqO%)tRvuZgW`py7tk`qsaG@vJH21!oXAd_&sdt~hdj0-6{>b#L)$&LU(MY4= z7k2=q&5^S!SuYsoItvuIlg$WmeqAI?g@i`)Gnz|=Pw;9w?c7tzWtUEhE!pTy5Vb>d z_9X^l32AP*8E=93tf*)M(QFbc`aqb<@UD_IF6Z2oq^2!qZ(b)o_UO`ctTUwZ9&rY8 zQG=$A!jjZAe2pvTPxc}_a@=+4o&nsk zXGL2$gv^qt({dn1w%vT7wcA-pO{>IyvkC+BiAR6ti0lg~wBTB0gDXY7dC^wZCDX(M zJrh&iOJ|VNL0Yjpf+{J!+FBE=6_BV}V1De;&bYM7dklLreZKeQJo|zE-Y>qY7w_wf zFF*J91+V6puRgE0&k@+dCK!#1>`e!Zdk^b6bS9XLn!WAZcuBVgUc5XT!V8eUW*q~I zV1e8>fx|`ETGJupAiz}$?HBYUj&eWXgJK<+Ub4`MX(qR@pnJ2H9_Xh}iGEU2=7k(Z zILIA%eWPw`Zq*@~tv3fp3`}lxWAvPXC2a}og;w>3@F<00z;$4JL0A*f4*}P&fH1nK ze{D+j^oC^3CR>L^w03LS3@<=D=Q!bj3qf6M((GWNurRSiRR2$%F1U@4`iM& z?>Zybkkw)gh&yqV?ZP))(#qX-{BAci`-;Y3u;+e(KYG|$%BLl`P4bd=8qg_4nr zesxKuhaVK8UOvLg{j{274mjDeKHD6Ia74v_D6@0QZT{W8FXz^H^pCrHdaXe43eR>h zf1Ln6WyY%M!Z{(#f}$MurzLBY=$?r)4F*f-NN5{8f&joNa)cs5`sBGTO~GN_3k@mj z3t0zSw;v=^or4%^d!Y6{4Qem5qu`l3aMbLM?J`DX1Z>WMQwh)NQHIJVg07q?><{P& zjDRADAq0WqNT-HM>c%ue7kA=uC0s<4w(yJ~iE+6L>oqC${L>3=|9ijr)4%-xOUCta zBl)&`>pLFen{WEvuj2up`#=1%AOG@CR=1mP`0F3P;UDKG{b~l_?|f@8u5GPBLwoO2 z#L=!jfX629l>*ER*e9@_2XZ#fKprbpEO}~oB3BbMr~)kENj45qTQ0iVMnBa0sy$^c z#&~qO5 z6l2}Qk*{B0X@-?|Lw=i7CpylV+#ngZ1vDKYB&C@GM<*L`GzPTILXaS0MF``#D$Xgh zA(NwcLs&zxre+LmpMzqDnXdsU-QF>Ku9HZIKKqgKUveAbQr&fS9_=gPX zvHa3wZZ}5ekW>vp6oP&e&Gb!R>xUtZjRX8Ra`pC+ayOsGRodOxVw_1r_s~s*;6PFg z^^+%#-a6;$sk50M3<{*sZfYpHQ}EV}wQ2xz$!D?4I1t$d;)trEah!^m|HIW6Mb!`G z3tp35-B`phLg|ML5erDvP7FTR+*=$-JAn?+W&+2G$p8{1$!PIvDRXuLUjsP`r?@w! zyDPr7ICFaO6kmnjXLZs@uQlbY)s=)kaNItI!{O;>WitOPA^ejI`p z+r&3rEfdN00GlHb z!|(=fbT5(9){utOgZd;o+JLO@5lvNR>Rd?t63a809D|FFC8u;|RNJO~A)>bpCHvM} zrqG68Z`lR+wzhXF(&EWw%!ynQ8)t7!_@Dy_=+J9mYAC3t3BzVYzffPRTBl_>_pnBI zy9bg?n6W1KLGCJqQT z#DED?4Xtm@lKugGvu55sdF3Cz{pnx&! z+1ZKMY-%Nf0PN-50`UX}je`wk2xU;HZG6}Ta-GSg_M;#jDr5{^&_I?Va!3GnJp+h;Z$b5TGTj z+Q}GE%CavZz@gdEA*+VCz@uX?_Nh7Llt|>v!yaQG5Oe5C6}2<=StZ00&I=De{1q{? zt=VeJuNP~$M8*)viIm?&#k$Fq%Woh?>{1V(13Lfq(m3mQwAljP<3l) zf7~wY?K8O+c0qjfsEU+iKZtX(g`tLe9RAt#%#hC#TbaXg}IuiE0CqTDTSg^SJtL8kPt$n9YEpU7*Hm zWJpY?q@9;|#Y$*uV`kq5$qDb>5i^!~a(BLzfm7Nht(qpQ-?o6WBAPW}=THL}zX_cl zM7FLMh*X>L0?zL^TqZaOPLoJ&TMFaU8E!ad$*JT%Rx96UjJ`JO#wSyIwRZJ9LXla- z*p~$ovfC5%Hxv=bjLsjwIB#CRfAI_d{Hv$f!h7GyAI1xQ`QNyiWa{o=XO)`46)owG zDa@iuOav*4D38O>vmwV}A+*4UP+R9rgrX1awBw-Uk4x*oJdnvtXXp+$Wn>TzD4{W8 zgy`tp?l$+noSP@+uYCQ)Tu;f1FTo9X?r_LPSgGW6PE~{{KoARsKm2%SOo%`xjhu7r z<`OpgO6B1)mZZ5Kv+V2Ws z_z_s^A5Q;=)BoZ0|6!f}g05+^%Ur`}`s#Z%+L>+RNV2S(RqMwa(iKZC_#&l;DH@y0 zvEYm~#@=w7U~GnTdPK-3^0+&wj4H4rZ(ZPl4FvVtskIQAetW2ZA4LUj!4Y4k@Q%;=;$=pakg@aofLC1|M+GeNXt48At5p~@D$Uun;TXvT|+4jXj z1}t(Mx{Xiy{hPwzU435p{>|GbWx>5~<1=Le-*74UlN`wBm|KwYEE?!Q#@>TQj4Tdr z0HTe=%p=bg6pC2vqAG}X^Bf62C)Yar=xTFkr_RHCTgPm}Xbwu*ee5IN{m2nUHkA|t zU}MhPp3S{4=jM6&=f8elzJ5@?yE2%QXyl&V;K%HNsQ4Pl;K(&s(3u5W=GjKU;@jXz zz}UKxl2Qa>6*$+NUL6UoB#5B*s3O%u^MR`E6T;GuN$=1q?HxQw2i=4;jt_>wM`iG+ z3?7xiqcZqQm)uEhsW;4HONPgSejh_m!!cvVP)9F{nrPC_F4@z&oNbG&_U;o6@7}M& zdclu{R``KIHdCxOw4+)nZw_5h-cZK?Jz3@GtuDh36kfTcGz1Owbh*&dR{aE|=yI@` zr)5{i_l!!%9SvyMX>GKKa+S$;C8P)BhNp}6l8}IgXAUF@n7OqWU7_*9bJTdmEw1_x zp3>v?t9M_1?tlCpje~pN&PU_m(KvWC4j$#fqda(&2cM!mSjsZHlc8c)iy%BYhERAAc8ertm!4`XDPM_X{cRzZf z8ctif7`=FFP)UYG&l$}RPKveQ`?i4P;N~g$7oL^}U%q+wVb6RrQn>S-{9!UJegs?b zqcV6@29L_%Q5ifcgYUI6*x==O;z-S{0X;$DrG3sdESiqlqhNC{z@P{n@P*)cvz5q& z-Seyin?b`0+-SG%jaY%YJCHSx-3OK=fOJWD>}`Op!*{#K6ImY<10Ioa(({~+Q@yz#Uei)?g|69%U{)glEs#bl+@J?MgS#6# z2CYCQ-nUQ5-*{RXysa5~<71leC<`8C!J{mAlm(Bn;8ThV{tEWmUC6SLvH@i#g9& z>AAbM)~zlq6PN|Ons6W6+~c%qQ<}kanP9Y1E8>!NA#-L`%|Y$3HmcjFL@s)V0LcP! z*RTqZyb-?xAt5|E5)}kbmm0&+>0A~?W+#rV+MSa|QST+K@kRv3%ouIK*0d&`tIJY& zzzY~t>$Iit{)9gXfB6@mmId!$eevq`&t9CbUgxtzg?r!7M}hDt5FQ1>qd<5R2#*5c zlN1PWq9RjGkJYSAqlq15hw0k_ym2u$vx^TsvMH|)53+<-qg0=hgqQ7pJkJ<&bOf+a zB}}&fbnP<{+jf~y*^$17L@t-Pk3L!EM;t2$B?*9dF5z)HPwk-7WYHWe0?3uN6xcXG zev;b?1yr(^uSPXZTgxWJ6bJk$aHSSjT?rz&jHrl$D8;&|TdUw#-EsSr{Pm{=!Y_aR z>V3WY((`G8*PU90z@%*NQA%fHv}M6{-;w+uJ#~YAqfW zfX(ul8z6bwZ9@^*s*lSKLAOSQZ({D>*8VE%#rwDZ`rUc+_KT-2gFD~HN6X+*7d+~M zM_ur!3m$dBr>F~RPqx|HVZ|;VT2Q);k@z99 zbypj_Dw`h~r>*G*EXClHi5)p30?ANu6fj?sv$uq8thb0) z^jI3(b1uL%7w7Fee{782Pwv*FYZv5zULmC3T?P3-5gaEF)OAIGGNO)^qI2#Vh%)w* z+C%s8labBK_Hn1ai(R=CDZe_kubh*#7*2*5vJ!Ov=Tic)gT6R#5DS6B8 zo^(Y%WvezjVlMaeHLfUv5HjgQ!I@b7v|Zj-HI-#ZmPsTjp4%Go-k0<2lk(xdKC`5R zvoBC+d-WzGYHZ7#?6#vPNTSJ94Iy94LUVFqIC0)e}a z8GRq)2=QS)>ja$`HFnFkya>`CWO1n1n6^hSu+ciTaw<3Ew|C1f>mV6p5o9}ac|(uw z=IIC+gJX_fJg*F<(+8OhTZGVNAVhjQnO%f=BED$$Rk2wIPu4b+kwK>(iO@ge+8P`q z1iRL#oU=1{B@9usNJAoE(r6p$%cE{~o8S2At5^HUY2wbe?8#|jeI}prpE^x^`1;pe zIq+0{qDSrHZT#K+>fQUl8LwXdO?>&&f9hlByCPO>1eH%6NQON)b`iph;Cf$yyaYDE z^tq^?ratV9wm~tr6SgMIXnD_a?*9yDb?P~x38pX4zJxnL~V8?W0?G zKpb!tFD;yUow`Ln-}`cIAC6b=>W`k=wPv?@0hf32NsV4@R-&7ctlqs(^WO7lEgvx& zITJEl_yk(&b`ll2%QSCf9eXRG(cz&86YD*)gpV1W+Qw(@#Yv!aYI*(NIU3XooWvp zd8(aggL1ZhjvkaWHV}{GA<@Mo=P89)CP>=$ZV0U(WA+*#xQA}FK@(Lp8_!-WvsZ3> zei!09Z@oFc^K}Cx{qwwCRqlQ3p4ry;v;M7Z4PXEHZ<4+IKi>QZMrMx*-uE}b`;AAR z?$M`v^y$9ib6lAcG}j!0!dei;3F)Ssim8EPHS$HPlCSlHp@Zwsx|e zF=F)0z4ma#7zHEAf)5^u)z;i+&pGmdfJFgF#u(oms(*6z>G=C)lPCNoqfWzq+`^l! ziaz0~F=nDhSGM`;Zhert+ul`4K#2E*Y)03_G{VBdhc9H%jXwKcqi@7@E%jaQgSyXo zYC3$oP_>-gd@Jm+Zn<180LSu9hlWZ6hch?@@qf~3bBCG-(s62v_0n-jD#cBy)at@3El+<1ZDR{dqz2TK+>9bgn+g=eX)eh?iP?Y z4fRIdgjb&tqakpNnw>FC(#Js*C=Et=Kcm0=KOdFJqcV9^CXdSGpUleSpQs7qI(v<1 zu^daCox&N|%MW!o=?HYBXzqHBVGb&>Gy zd6XuP(&SN^T;e9@V@DAgR$>&k5=8K5L2E9V+(d(0!}77ov`Hzs83PN()oeCsgIZW3 zEHySuj;*6Ic=pw&q?_eAP03?*-(oSwiHn%N@>Y}(knUt>Y0JcrwY}Y2a}GZ=HO^39 zbLKe?aM_H#cIahsg0D$?tc}^KYrN4UpDzT^Es+{h8AAd02^Sv7` zHkFq1jF#pbt+v@9#fRjn^FT~EBGPBLnC}{e@Of{mY3Mo#5N0NyK5F(6ImYPIW`}a6 zLq{;Pjy0^e6wege4eOp%=W(fc7Wz#(d&A9^ z8RyJsOyN@|o|tpy^w!RvBm?iO>s;H%ei@4emCE}d+o2^y!h(xlSJb?P@?!uRgj^k6Q0h>pg0{N3Hi4zt$6j({a}kBay7k!$jGptTkfKQuirT zEn@k+T-`Cf#Trs>ozAeDv&|(L%C%RcGtb@=A1m1zpbL9WBT)!^mT13hzQ|U{x|M31 zn2tla&n!Z(sB_yAIZiez>Trd5w*&^k09M@5&1PtZBTY#~WLmSiA)GeYPlMIj0b3Y& ztyV!dJ>WX)YseXkkmz7uyS3Y=sRkz`I9!(y>H^PwI1KpdcU?e`bRM0 zdrTa^mx-hH)6YrSF;8FG&K^CgYga#`o!Ok1TeZfk&KN@)Wy>=Jx$1M&4z6TglpPF{ zW^EE$iET2Y>Sl#QP-93Aha0j1K5E!?VItR;|Ib4R^{7c6HOZqUxoVO@LzM=U#C~9` z9!#WuDUtR(J|Rno45Ru#)YX zvv1|CyPNx^_-#QBKY#~@_$eFh0Qd_{;WN>yHu6&G!7;WBrFPTe7MuWEs zX%m!tgm8M6dL3DNj>g!Sq~`1`k=l6H=5ZES3)Y^{F}|_0zx&0{-rQCq_r7%x6!fD# z@hOzqK{KZzhP7Bx83Q)tTx~O@d2dZ=iCr4PSz{U6WOPEs(7xNrHN&I#MIBfzSR_Fd zauxD6(xTXoM(neq16txb3GkW?YSzpD_fe2M3X(@b@+e3?;Np;sAcchGL)~;ObCT8; zZ9vhun7|!h_-bJ0erY_x$IsqD_q$+-9LPFeV6`6WCI4X#1 z=BC#D$v`Y5mim;wr@6r$wVP(+BfI+w1YOIXfxV?v#!(ktG^y5Nq)@c86SNx_CO-N9 zvG-oPnk7k=9)@H$o1>^e65u;T!Q5P!**wev%uQ5fcUEQ~B8xLc0>n^jt+m#g1U30q zyrsbUBfF>aKhYP%&gMxD;vx%mqOu}(Y~gNhw$`^&2DrbW8wgH|s1w$$XumDqIvTeR)+0-?ZV9_tvV_YsG0ErGAC) z4%T@`Bs)H+7yvyq>r#LWg|yL_dj(3XwQtk9w~UYtdzFk}w^UutR|B5N!L1}dfky2t z^r%ECuhXKT_gE|CsD&m;r`|g^)O5KX?J0}FI9D+K9kT(bd~fYh&)Ktow*A-j?$6i# z_-*`NefP>G@y0jr6$_SrHpXv~uYUXcU-+YcnLF=Er2Z-}<@=Hk%+Zm;Gr7BMPiv1P z>|7=Lob?bBY;EkftPWnKALfhR+}sXp>pU=+l&0;_hnW_H*9gf{bMxh6p|YI)@_&E( z$AK_a^>zEA7rrtdGRBY?I2vTf8Fe~CsvzbY%WD<4$yCt%QujQEoOaxazo6c#O~>!L zX?(CC<=W;q)gxt_2TfnP*473d?HO>JMt84eORScQC$9}Rv(L-ch&g&JMI?vDqAVV} z$y(=d4Ilefw6C$x(c-D(^HBf-*0Q7c7_GZ&OWGs0IKm16$ER=D&F2HqAA}_Q@~dyY z>R-S6`3KLh>YMLgZ%=Q08~;Bu3ynFoC${#B-S>=1g1&a4t&w;4jA=vk$mTvpW^ru@ zgbyr;tFU<~(xHGj$8Ex<9Vahe=XrG;G2SlgK$Eiuh4&t3SJCE(2l>(m`O*jZ(g*pAf1-GfsVcsJh@EF2X5g znh3yNLwnc22gLIenJ$9Kp^xyh6(@yJtc?+IV7tM+B#+TkdRnFmnD#BtZ^=30K6>cv zA%tM6wd$0kxT#v~VA-9u5Wh{_s>4ZI_n9QLucY~*WyT%%lw}oYwumD_p!V8pja9NQ zssiMEF58u|#=ROfUx`KjmZzHYy?^l6VV!S%4?kOQuBU?Y$2fJpwK(I8R^*RGEArMQ z^Op+#O9lU>g8x#%f2rWVRPbLa_`lo=-nZ8pBe%B`J~0y6cQK;ev|J>4(}KaQuj?^C zYvdTQA&WTWWLtF3VPZby8ZF|n`dToNnHtMn*0d^QH7`ToQ2E?WIcGe-C91yBDJFbF z?VDM~quYvLpUG!#(}-bQ7!CFj81@5+8evzrZaX>G+N-1vZ`GcIxA)%UaLjcr4b$E? z0xtIl98=9hChOkMjHy5U)yH@5zxJ=bdH3!8-RHvnt#93{!hIrQ<~IuWPe1>30hmWPJ_QcStwYf<&-!O~~!JjVI#CjHaktA1VYzWc>j z-~9afm3!-3_v)2Hs?l!_CqDiBlY8Ybxqc+-;mDqXxCP!V)-7a?C#{zVr}`;}n6U1hpp=c|}Fp2}7f7+>-MyGN3zP|PxG_fTM4?a#UGxRxs;0*J;!^jMv zxr$A$lz2FR@~?Tuux$&2`c1;VJF*MsO~#B?@ftqTgH+C$e(%~^V_eS}Th6_E@43>o z!gpzM?Jy_NcCqKZ@X!3>yYJq=%ZmEy@2C&Y@7!D8yU)a|@ekO(pML(yy>l9MCejQU ziW{C%W0cz|UZ#5aY*MQ1<#ERnNzs@f5h7Y$!nAgV9f=?UoCcv(bgNH}F}z}Jwi!n- zcrLBx>jwf!Zr_*eS&UHZM`H3_l&Hk)oKaLKx-96-oclUbtnP)kW6cFw!f@fq!Df}0 zJmNU?41GQCVLa&pPZb*+ z*;S67R=J$}Y>+Wtan_@ecjE#)hv5`rJIuVEW;WG}<<5vx5I(Su1mHDWB(XyksyY2&}6>H#&tw$=RCa35m$-!!ks+EA?$!N zIF5#=o9`NQa*rvUqGi`qX!>Kl7#4lmW+zvUIiK6G^nDxltyMbDJ-Ii&oTrES+mE$8 zKleOMkiM0cTRb*OiW7~NH;yw6#g?`!@~EqF+=JwLNntt6s)$IZqQxzS^z+7(UPXojL&DHV^au>NyJE7xgnY!5W9I*N1cHL^jLN$QXN%Msm>!zcle@lwC6e_ zc=i;;QIic#N|j7Ut7q~y3GwYuZ;5QkK;E3HAc4c_HEY+pOLkmW%S&hIuc4r`XN z6oYRmwJVbsVbhd{&o`8ZRQXL);74>=`0O=K`z@O;XUfB?6Sw&J@c%deFjeZqufBeb z%X{lP_(c};)y%{KOmv zdmc2JXgk)ZT0SVc=jHBD?d+{28EY&)<_YmAR~r*W6d+`CEPK z%XxaNf7>7MMIJ5tZ$JFu=Q4y#pGaBel(O!Xed_S22o)T*r49ui-hjw>oUt6+T*u{3*xM~nMjkP_jA90qgvl$)ct%Lm<|%`wshcgW=@yaZ zPPHK8IrvTBwcnRGa8BZwXZK>bxVOlCCP}@u5&3yU_6O$hclqIST7b8{eXkB>^fURv zq3qMoKY~Mi`QC0e&RP|xixjSQcXl{4=Gg5^F33ZUyqYz3wd8`g!r&5d;asOj?O`2x zog3OST2-pYlqd15)pu`;b$EPgE%5$bL%{I zfxh3DB@{rUtLSu3;k6u?hc(Uea&xY|pgyy!V@CTuS9dH*n~J2{Fio1d5f~k=OL)Kh zz3(5Jx)WT_!B?q|Ax7F_tvzeqOHOMW**RVdQMR!3duT(Xl%3t>eh1GjwB7lV&L-r~ z*qm+zg}|MU!{$u_9$(qfW1UxW%sl($?|c7Q#qu9%R=#!UX##*1T0^M4NaV)INp~|I z%hf4)*9j^;eecdr&>MsV|5)WX;*(~gz&07sW;HkOvmGmPTxDn(nKBJThbzgJ4O-RH zLJ-$oF;QuZwuQxg_CR%%Is}dG>bdcRk7G)63~(Ak zAH8h9Lqjt=7RBkiF3Zuqht}oiQ}=KEvVPgGS~72a&psn~+&@S#`1JFSVU5qbb8XE# zxJ;#$dPeO96iw-78_Ii^#|8Z&xQES}5A@&aO;d(UX90gW_U%Qn&P1HM0azo4mV*A9 zSEL&HQOOZ9ZcZY*FMt30AD<5a$xMvhiGdHdZ9xu&FYY`;W;_DdF9lm)y>lZBtF(f~ znW`qU2;ry+iU;JWNz=yObk0~yJg&&_B~0hxu){N-dqVuM+;6^`B;I2|wWrWvx*@Kj z{LpaFlsL6f1BtG2{OVmT=uosxtjm?7S0~*lnFstLElMRenF}q8Sf09i7LAjHy(J#f z4G4<&6razBoWJ_#-@YQEy!9P>^}gHB&JT1*pML(Mzwe9DPVs&$@SUED{aa*mXC^?{ zXN|I8LE+kYgm@eqr)O^;HfRMX9yL+d56Q61n-)2Q`<^{j*4mH^-nl@j1{@Muaw{@> zzWf94AGbTt&ThVFVUXR$HDq{)Xb$7C<^(w7N=Xh6VP#ozBKAxcRhqH%(br`m8}sf9 zm83uDr5(guF98x2v>2! z!&lsB71}4UwqM@M{BkBK={ClxZLQrSiY`}Dm~H$fb%Ihx5I&5_35M4sTldkA=Ytup z1Wz>bV&2=Nv+laRFjrm9`SK6rDx$4W`S;wXqy@wIntP$<81A)e9a7shY)i`EB+p*&(vvqp!*v*l17bvY41(|!03{0GSpk=%AqB3diSZ(X5sdbFl7uXrJ2wPw#R@L>W!&o48ACa*z2InHWr?Y zi!Ax&AAi)Pw)32=v}0SXft6X%d_BIdO;E+WrRXsJz&(x|L&JQIT5le9#aT+h0kTP> zo#$RC8(3uImObgprqrcvC;4DK@$Wqx=f3}^LG+|SD8zU>|i z_HjniNiy*Xp;ZjC2*z5rvlROdPFky)XaKe5__QEt%@}O!Y}Q;l=7}M`mS5&u@$yeT z){D%=y!q74-d!|(oL<_vd^+TND%~PLg=)Zou1j3cE|uN8x7P_2%&v|X0X)9B)^sLY zXW2F@4Z?u}=q%prrlOxmIoOW8{8PA!KDjvODKR0NI}o7;v))4ok+`)$F5ljx^%{g2M&VDlyGMECCX`4*)RVzu7UwMGoe&m zNqG)C8X{FgtLRXvEXZ?tPI@d&GI*>@fdVKu?-R+jbi$Z(Y~3V@JHjVN5!+0clbKdP z9QqDV6ac)5upPYoGw=W0-~MCQO+A7Ya_ECUW2s4xs!FS2x6Q)GWFmagP07|r=}`mH zo}Kq>n!ON7+MBorcxPBXz$;|Mdv*@`*T?Rf5hq*5Y062kblmaWGFaz~Q6ra#iTAv9 zHiz2U_f`zFgzPTG3A`aly4$v7!SKI#>y3q}n>FQHk9N)By|f_eDYW06E7sX|>$Y+2 zX~{k6+Pvd(KaX<%+VA|m->+Y3xZnD&ea1EL!?d&UW2Bw^_!{m)-?W@}HBgKe0~;Ag z;xQi-!Q*k5dO(a-dG~HRUGtjE0IAdVRnM}4@3mNsi>{5^6)W}Jk;aC810xp&H(8M~ zr`9r4pEcZ+=MhBWHMWKhoJqZ0EKr_I0<2SmS6NI9Dzxg%ahyf{uIA{JHRnwuMR)R~ zah-y4UyHE%G?*PGnQhBzUhkmCkvDfLKfP^#^4o9T{h~bU!)uJj8{fFkym0h`$dyk& z|KwgcA^6xpw<~muBqQkN)-{$B@a`uv-O6T<;S230VRRh_kB*k`RtC6lV=3>A-4c&I z`A*p-v0$@=OH!g~0PRXZ<0Ut?xo4E^+F-+`LJq33oNhim161?oc1M3G_>gAJ6+4F9 zya$7!8w>e37SN_1^vS0*`?RFRsQfhWPp{Hm?aGf6I^X58_An-@dWCTLt?S>#FP`7E zx4vheX@j00I0Zia{F8gv&d#Np5rwk?EsgRmn`Fx4&@}Z@IyKK5TMNF#@{!3EBG7TB zjVf~DxcjWKGURp^d^}gHcFDnLYvkOUC*O(P?(ij;FYT2os`nD5tFxkd<`idg!6;)5 zbkF)CXKBDS*>&nzg&0Hy3tCXQaYo-%n`c~Cgh1p8#n6_}j$LD&oi-9EVt&Yj%S&op zoKWVo`1McK$9H}|e)qxSRV(7H@7yam>-ZVZpV@D~S-<~$1M5KWVGj^ zN9!#dGWg}6{nU(@rX>(o$XNyznUl(-8$J9n;=T?Q8EvsDv1@hY?nP_MVqGJb-Jxe# zBrJC_eC9|c%zF^qK6>p!H~pYPZyt3+!|pWMp)dd3mU<4tfT2H@wQ{_CDDs()+ZH+>9*v zEB^A&KL!B%bV5+!*KzC^c7iMkNUX!X77t;u7|v zd*ZZ`h9Xc{O~-|dyKg5IU0)cLOxihDKW`CleK}8`?OzxE_1Ew2SKoZjhJYUU*r;;J zCCGrY9doHGYX#gAakWni`kJ|Uu6+|`Zt2~a8B+}tC1C>&tgf!rtz-JU2aR>VbIxg2 zd&?w0N63dbEO7Ar{!kEs5=1{KUg$_4zGVm^j^1&}s+v}6QqQ^0V!I7+ZQYS;OokI8 zC(a7wNdqrx&Lw5D!tD&qyXIW7_uy$|bYsB70pBK4?h-bM?b(~2MTc*FInQP0r$_qj zuRi-s*Tg5p)6v`6uBxYEu|X4fWL7zbt95vu0l6Tg}_xuie-X0h~WC|HAuE z`q6+{7@sHlqf@44VKRx2G1#itrCfcX>_22#l$^ZlaIv0VUb><&aP>@mnX5@EE$6TF=I?09j4iy>-6)OOH(i-3kmn zp>Sy+Mxd}ed{9N`#(WkCK4*>-GiK|)YZJPsgg*mrBpV*n@Ov_AxgU#ZaiGL&-HtG+ zMRO}J2wvw2a?|6`vA%+W-hcS^eSP@u*PoMuruQU=L#T!LfPE`nDcXQvUb|@s(&I6!f zoq33$5QP`>@0uJ3hvT4YjQ1;m zrCdj^u??;g;Qu8l5qZHdzSW7Hye8O^GkFNDi992jm(H`j|E(|Qc~h*9@9M*cZ$Era zag?`pY$xXLSI}5ymm^&78Eg}kX|Uc$&DzIw?x7FuSngApG!PRnR*T7_7e-g}@?5j+ zGDFC;^*Y4M_g?CYB}DhYPIN}Jcn6wpM?gd z%`H)@54qh^iJ9lrhDDI zJr5)QJ~PC5(9ZBXa|w=8G-GlDpA>=EUUaFwhM;*421VT0-|D9ayAJKg=_sOxAd*5E z@xcO?1O^dz>j-o?q1PGU^26DAhiEQE-oJqxRKT48NW2Q9dyMIbMnH z?E%hE&(kZ%%fI}XAkj=Mrn&c&Np`#luqY$gY-UFq0szmWg^ZcJOiE^sMlw!8+#W!_92#LS|H}JMfy!DYV?+HR5oo4R=#Cnv z?cVvQsO75G;-uJ;ux0pq$iCE0(li;_M5j52ovR6u8}UB^7sUEO2Ko zAR+f?hf~(nPpW8iF1xOvj3{VTRD(^;>E&O;RX8?|p#pIeF+|gY_1rnnsvx8+hse5| zV?i?Ac9hryMBcDDLJHHEqgq2pF1;OV4|T|&g6|Sc!8AK-j**d2O$ug`bElpCtowfJ z%XwbIe_r2VXa4Tn&mC+oxGYktJ`b!Ja27D)_3pM%BBa}7<(Y%S^1zWXAZ>`C8C;F* zqAR?7VezNhNjvwt^X|vA@oMnE&}sIdBOCLrwJ*e@OG5szPaTAj8EaCOoea2paLyte zZryDg%{}JEz~R%MAeJj5^1LnVgx77If(DPi7nP>=%e#VK5ViBwZogX zLcMSx1%=26y~F{clb|L=5iVYsI49P}Dx5!_3%@tMoaf`!&%gfm`q$t6;;YZ<$|cT7 zoL1(!Qf9kkV0@WZt|sA3o@nS?M#g%gyNWX+l2K>zfRKe4FQyZIgG!Zw-u_`S7${~~ zaE_xj(t?%^yXA0PIL=3}->grDuGzgLx<#Nq9~H|Y<|zp2kUNPf`9@KccB`6?+%e33 zDy%e9&|-lVDTP+rQ~f(k$c1IPi>Sr}_JVqQl^gxi^r|cKv|BwmgLqv}R*YOx_8s zvlB`-3NEXq$0igsoao@~o9m8PCt`gv8&-odUr?Iph32{hxm=wL+rx6K%~N{wGl$`= zFXuTe=@T`OSkA(g z-bd|;R*V&`$@}IepHtP&!_a`b~#-P6&A7^6T%FKef2fpOw%-9dpv9 zG51QGCWCL~ZCRS5)dneiiqN|iUpeFO4y5uuUcrr6WI+EfW}e~Dl*KrhY}c5)hDmEa zBstZ&@c)?9_9_hStuNjjFyN{5d!;&pps4xPdYg z6A>suxHsgNniA_Vl`Ai%1kvq`f@mgf>-~VVeHr`+; z*CA;42n*K)1{3{zfqHG<8Dw+}Vb|~&9F1ujBSu07WLF5%D7a~mW+_O_>?4z7-n~g> z`xBnFH@_zeS^X2mHA%^nrHk62K$05 z#i4@e(JEZshH6=FL@UF&fGIkJm7=RJdgP^Xn>o>gc~p3T%^wyu=+?~%okYiYRnaKFCVM6ElL{WfFcqddO zgapxp&bf;dMDk-_yR~^hS3G)6DDHDU*Gg}FInRWnU--vw|NJ+f^KHdhIR{+6^bqun zTVhT7o-;P^Mnq@9{l54?qs4Ye=opAaOQHJ-nDWM;&v+y%0P6w7E!nimJrTDz9%o~~ ze?pEQnWA`C<}=~w_t#y(O@|crd%gn_iR}ik1O}|t&>0EOnFYIp!j*c4KTggYu1?W$ zXgPuao!K@k4&5_ojdOv_qlvz=^%-yu!|s0pVuC^iSfb~q=UZRSvq$=?Z@#M!-}u+> zK7Re}=YR$vb!;rL41bTT+9+DDLnLKA^MVFldbAmUO(D>(0Uxw=>|nr&xLA;nCeCC% z`x?e7^J;cm>9DJ3K6*y1b_aphdNzEumk}EJ`Oj2!FNqS{8@W2W%O0__=iH=iQfqE# z9M(N2a+szc%xmv5(mVc-S(Dh4V@b`$3*YxB9`*8XJ`~A>kB3L%jt(1)jLU&e6>^oYV%De&+w{&o z%i7PJHMDJ^Z{l~#rFFVd8efGS+WHY2i9Znq6s}uCBTj%~u+-0`c}T@(jhBDxF_z_F zl!3ZwIRpaM>H9VxHmSy=;uQx0%Rvqm>_OChg}W^Sx!fRUE*Of`A|AZ-5tB*hVcUCq zTXbT)3dF`NA?`Kl*oJ!ZdEtEH%X#|He&?%??>^Me>o0tcLxAB0pdk{6!3nr0vQ^|% zGv@HnfTL6v9h1DqfjxHNAQ(69grm$?2*PQ%7kPg{R6nj{Cg~9r_PLwJ>2cXVooYXl93BXZ^d&2i;hZ27s zx=G;C88zB0VaB-yy*5V!lLJzE$R-pgtaZ%v<==kvDcQ$ak6vEIF_;^~=80|IV`y`@ z+?qIi?10DOlqZ1qzR*uh0#A1@J_n9dSaxzM)<%UU8%@)0Xb_SKLxm&;G;jk4pp~pI z{|>IAXfx=jGWy&bWkUz*US^Ch@76*WFuKtSb#Ex&88s!JwR|RHLO0i(t6Mm{c1$#a zhV4kW&BD*L<7Xi#%yM^m%}s!^LZtEX?>-dGbMX}sm0Pf8+SD0h1hMp8HPGQEBy=kh z#uuwU23|uMP0H2mhAEk12MHF6fShgUs=ax5Vn=O*P(Fe+z)YO6(1dQNWBcXbd-QAx ztlX>U+A#`qTsYl$*onqcNgKU;D$|5b-g@rbX}pdK&zntM-+cGst8YGj6`wt$F4<6mt{4lG zrUAGNb{m5A%qIK?Hx_8v1|<76xXJ>5y5o<%U1KrEkINEu`$H6hJb84Q*!jkT?kncJ zn@TsN8Ze2`KF<3O+f;k2>q9l>z2??jkFSJ~b-&4>Ab7Z7+r~M<>yXJ^#D0tS8ANpr zpqmQ9O#D%g+h#UdG?4}`b^u!jf&our-dk-$1E9w8=Lh@Nm-8H0{{6V=t8YHOulQWC zWM|k~H{cJ9tHUp#V?by~!!`Q|^c&2%DX$*BSSn}^#({^!ASDK5Wpw!3W-?o74qX<< zE}i{2fCr{P7OKR1+}@;G*G$j-A^mCmY|QVq7y~>k*#q?F3x&d(u-MSU@^sMOR<=kQ z58b*FlVf48ukI0p0$<$k4 z&htt2`v?1b_3O`Kf+oq?AeRudy2w4;D1;rnlHj?lE(1{)K*O$!mEvNlSC0)}*X&U~ zpuiym&^_q%8gd_&wIDPdx)%||#ruq{z`$e9BGQ*$%@)S@+cT_T178Q+bCH241Ni02 zA*R?mVL-!c5>SnXg&GR;NJMDJqJ?CaODdHEnw$`H$x`pNiUs>k>Sm0o(k1PoW^$pT zd5(J2%fJ6H9C<=f-QsYxDJv$K9^gvk+ymPsM9EbNK#Rgi7lQ7D zg5!TtDR2(>YUXJT&}|X&U>&xib=;OMK)l_T|KPDbd)@P}@f=k6V*q^sGh0lVwJ|t7 z8zcaDa~@WzS)>RIm|phiS+hGNC&(KSbgTJx3ou8+4Hb!w<+IVCIM++>NGC5GYPg@J zyl;IuPcQi2`lvkL|LoCV1D)h&{k8x6^Aw#2Kw?QPEK%DaO{v~wcqy-W9xICx^T9)c zZDCPEOUjnfYwILT{hju#i<8rW-V+MO+vv7k_dVpY`xxtvnTS5P)NO~y>r!-ozkngh zV{JkwsH(a>x99-OftOs-iy8J_6OvaJE}`UPjS}y5XY>UNV)+p?uD9i~eFvYCC=8&W zJxWxpmsdNVQ^3fO0u++!&wPZpzMQA$`!{~{u6O?7ga7(neEUuK=QgMIOMT9GL`_Xs z14~)u+U~h)igZ1sw!@SkLOJY|Oao$;pj+qmxO*gDMJs%fN;IN)&_U`b#?liAivhLg zBo6FcfG*6jw0VI41l{aC=vJ?Jn=&SFp$h5oTB7IWKYZu}E$S3%zQsqco}^&d zvSnacu^;hXhKR2vw!#NNaFMXy;%LT(k^Z@hA9}lUMl2x1oZ7bISijcZy1EWT&~+}j zhBrlh08afpPJ8Rid9G<6FW6%hdG}p?mV9}8+dA{ubc9FD^3^`rEeJqN9uw!u3tbEah8w?mik;+?m1d|Z2XU6^TMH@57;-x zR%`ohh%TW9@PL_Y1T%~nD#S5Hg?-^_7$QVarb5V*12 z%Hy2D368-5O-0D=$#_`l=PWnAZ43Na_$h6#bQme=oSXu%Az>YnvtRz>hb@-|n!$?i zv5(KLhKZEO#{tN;cf^5=r(iGJl?iALjHgVsD}R=Z6js2$+X z1M=$}bjN&G12M_z9%cQYK`MjiaIUUBVCtTb(b}LKR}>=6sq5uGeKgH%PFSRTiO|x_ zJ21K$B?tYop~j>GeU!-*+aVG;EXLpp12c4O+8PCagjS=2$W6SeD$eXNo3lHqH%JD7 z>jrYFhp}t0y!>Ym1O1tSwkJ67IFIP%OE(4ku+ThadmII}unre?Po4dxJ{x@}EE23Kf83DenW>F#5B>y*U%4 z&AmWYQ-;1iRo=>P%fnPom9YrPIRTSHl%hfbUZrvYu0BVePRGKUEcoHg+A5%mqq z<6e8;m;d5XNunWp%FFt?r4PPy)xDDe_=h8V9rK0wtmAfmw5FE9V)qm6k75g?wM74-fy;%o^1 z-4eYk8iAL2CzSOL6K9DY&YEW+$jS5o5na<(0XBxWq=9FNBXj6Dx4e~by=$cIEb9Vu z<(>;u)yseNXtAWm-5orEB*N3qa~3t4560ltNm0Xb@)-63K++1%*)%`*^qpt#6>vG< z7PKyFp)*Gr;)xy!DT>jrP1>cp`f4U`cA-BE25#u|p#`u+DH& zZV1r*?1Gj7rVr;<_IY~jvw#AI28sA~J)c7VbbR~E_aExx$FDx)Uw`Xc_sVehNLJL} zFx-9r3x9OOouMf4G{A~#qP&D2v#k7bBYzMiX!b%6I=t?Ktn-i%E`$NDp)Q6X~o*;4C@ zKQ~~4^&B$DbS}$2@|bnpy{FA8S~VlWZp=++A!4rE9O|_@u&j)n%mgdnxVnaBEm-s{ zrx+v1Hl^lh5V_rn64Fc7i-$Smz5+e|nQy-R@Js*ttG~0}{p!Ql&+ql&!IU1#YsUMJDK*2jU)OsbzxHouBFo zBI6otVc|T)N8$H1bK42V!3y-nJvc6bXM|L|XLbW*Um_2YJ%*a<#}Oz>t+Bx9Nf|}U z(cB{gJQkThJ|>!MPP&h$G#9X(Jw4Mr0VJMnIXfsR>Wr0J(sAe;j&ffJc<*8IEKm9E z?|$*CZ+`FB&oA3s-?YzyLg)z;@)La7Fjx#0HN|NE)&kn4f>ilzh&fCj!la-)3{MD> zIL_*ziGDBCTnm)QIEi(C%?E<4CdSy;mGmxNC0Igm&u%qD4`Dk2E34-Q%}+EK?3rNs z#y9OV$)ffHD$S>#e{wII?KK^!1mwe>ToCE%I-{e;!`n=9#@OMY2j1{a+~`to8MfkH zsN!67BBmh5Jv1BGw!QYb(c2$=CWw_V+lFnnw#&AqbL*b^Dzba50io=W_PH3sU^r$E zbQ6P6cDXIt5KZ!pu;ISWY>?z@P0mBx1{vnIzgC7!?RK@TL z+1@a^0$Ke-J$ruh@!fj|H~IO6d+QtbnG~DzlqvcnkU|~}TJZm%kyO--TRLY5g!>SnPKU_g);!v7 zC(n_W|Mrigh&)Fjh+`2}iXDCtq5#nq<$;%0_8hJ~axMb6It+GcoZsnU#vL3S0X0L059M@C5tv8cjFj%*Vry6H|Tr@;ib*U*`O2dhsSE_+IMe1K&Ri7m;dh3;wwkb zcCMwxys_G-U~S1Gbs@LkjBw?BPscQvT`;QTodz81KC}uj&Ic_6yPfgQ@-qesh3Ud4M@*Ut;PH#GBV4_=}5_@*T%cU#GctNKX zHYF-J22P_39mG357%41TJPuVGODF8UH(Bx4_Ieq^iOoTGEw z#HZHS>kGamg{EtPCY|?QK3K0%G@>x1380if+zl-(;Wq=2EJ0hSJPA}i#JPp`8dzfE zWRgF)?);j<_SOkG&sx!6eD~e^?}O>y{qCz;7BXWjw1Qsd|W3l%c{TdU44T``T8XM#<%b@uikjd%=!_6jQ<#V zj^okQ*h-8Lp)-93I(NH(;g`YDT$BP3()Qknd+>4^v(I&8PQcN2MvNs+)&ppH8Y%T4 zVL5bt&^Cbn2m~+eAMKCsHHKNwaF(~u1bX&w_s4g?{PvsQt5*Y+x4v(m1!12j5cc^A zzHjj1l+Sf5&Yd`|Hayd!TSxU+cTJ2qLyry-{2OQaM$KCopU0NiFb(Dz%pC5kAXp`X zwlvgsFPz5UF&%cdH}pl~pG0o^nF#ULnLNK=Q~&9YUwxAw>f^T`e(|f{FRlNouU@Tk zZ+-V(=_TlAWBq2s@3+7Ig`eDeH`jzJQ3|jw;D=ZPV}pk^R{I2oT&#N`Dr?m$Q6y(9 zIke>foT)(H_?;{JNylRwhUm}?m6bV0DJ|3gSRglj{6{AXpjOiEfc2!*XMrbTW1M9pCi8h z_RrUc@Q?M$o%Hn5z4gue?B+V2HrJmZ`M*!=&MbW-!B{{%c7_Z~4v|MmoCSW+-3&}eLk|<6vho@#(#D~nb`s-H=`a- z)w?#D+lW&_L@F_lT|8$YuxmAR;ULO+7{(DuS6JM93{r&I4zD=2GD1`1S^oOgNny`@ z`S)h01v#h@TJTS=3P0wIX7h*zgbX2*rsJMHaISjTK>bSG zJV3Kw1NE54wq1vr?ABPfMb6&SAr8IkPAHS52Pa6!ago7oILtj8y5Be!?wR=g-M8;P zz(jVxu6G~5`%wPN=NIp-Z{TOwI(k~`eu6LFBbFxfu7L7_$#vnFKF*Bpvk|MbKshE5 zKXUVGk~%DG2=D@OQ`}&IUvQPN=K&^(8z1RL+%6{d)o1JOLbnMd{|&`56OuAt>7C(Q z3XUbr18pmu)6PP>S2FfP(z8p@n82KI%|sa7HR$TaxfDt)unBefZ40|HHsm21G_M!| zb;w@P2=0hU>X2wT95i=6Z?M19AJL)v;IEFYZ+zQ66Y)EqB7T2_bq+{B>H~M_34!_& zA@2$i92xZ7RR^9jnIjSNKvK7w!p=7I@9h$@+{T`Tq>H)DHmA~3<_C*uLR-tHg-Z{e z?m?hwt@HQ*kw^3LKR#S}7|95LMl})Phfk1(pA9m!(z>W^0JI)%lVAyA?K-j$3v8Q@ zAlKmT?!cN5kc$EXWh5HoM$Y;&p&un|LW^^ z{kdruqALRQ??;P!tkNOW$ZN8sp<5W^Y|KpdtwcNWoCR_qz&dV_Yws9z+t(HNz!^Gj z!nhf+Q8;zMZMQn1*lXhnKp@1AV~pibxg+ZjsEm7sjkN=O*zkK#DE`*-6vVO-x#c<# z;24`gjl$VA&w+}u+D|pQr%Bvs&JTHX^T*?_K?!BB8gRudzz+ko6b%j0x{wdony&^^ zZ+khg)O(lCh(%4|UkJHxj$_Je=u$6B*!*Rv z2p-s^KF;YmhWc|<{99knbK(4}Z@$9%>|cM?pGzzOSKU{)$==16sB8+d$8^bD=!q#% zRm^umC9>5V)D)fK=!k+K!gBz{d0Mc4-m?H8+XxJsadaw$LHRHpsRi!wP?}2#E-g`|tL|qF${dKRuDT!xdczxS+OnooEP|<- z&OIl&ZaSx7Gdsvq2lhoxy9rcYhVDA7_bq^+5Q>NRFnAIk>I8XM24d|7dEY#64hJmv z6^s@0=}dIr5y8Mh`#1(MVDhD&^+nU(O6)JO>)+pM-999RQ#?5diJw0?u{?! z8JV8-S!DW@LM$aEG`5}!m;F(!Cm7?*OT!l+(y43r8u|#}T|4O<&I8E}gR*vn#s+PA zEoABv6fI}ny!{CSi>Tb>aSa`DPT<%<((fOFUH@(zv_FAe$CbVazFK)|Pe7HfKo!-1 zDF9f^I=9idqs@^}eaVyegjwUNHeF0?AWWXZoEXNZ!8#u6ED{)HN@Y6S01r?yT->YA zM);7-m;dRZbcXNWdPgM0BnN?&MYJWs;_bsN2)bd>gnP*6C>?n=?6wR2kvSQb?S&{X z+Dj0%0`IvAuoskL+iXqdB3QJ+idjQ zj`0Bc!TOJQ6|x6>Q1(#_7cQM8q>m)V+$u>THEA2H>J~RoN1B!+-ups=ReEN` z%m4EJk6}gc)iQfd_E8RssTz@u5eLoZiSclcMPHitE-MaSLc8B z#Dy9l}T z+@uxENwgmlvFiZuI`W}TfN8;6umQVfwpThdlZVDkl-xJb!lVH(2J&;GJ9T1EqMR@P z>w{fUIM9IoX*HO%mOSLXPzn+!VBGsl1hNDpv!d~G*ZB%?hSts zI#_TDk8==1)DLj$aKcPd?6yrX;W~Ps8Y2&8rRk1*SvX=IpjCt!@~EK?!1#Un-#?|q zBHYRqQIw7h0g#2xDG=%qGQA&x0JUW<yfU8tkG?7tpnPKz>>PIpOHs6GeQws-V8w6qW|LA2oRp&z zL@xRD(Sqgw(GcrNYHBDYNO z0P}(lPUeNTb0P}4Z}XlHJsrexBeo2Rg8y+L*b6`iNP;=weGuxRVTL1kIRh>j^uT)^ zAne}%d*8z#CPu3#Ze<3}KHfPX%b3{wuJ&%2tIi?N=I0QQTlTQW_qDDvZU{3xlAfUb zPbXztn5jFOal-b(@HQwi+cS%l&=A;A=&kdjeY|bkKG5<(mw^e@d$Sy}<~Tkp_tbMs zP=A60cPQFu+d$0&(`nR0+OF$hCxGlQ6dK#Rx=Og9uNw9s-<3DEgxF`alOIR;w*67zo)-7n-;tUZ22-s4kv<@rr!o%X$3? zdED1m#wY+kHB>ovZ4ewDLs!IZb|HNBIkh)phYTM4^iCHWypj;VvNe#W9@KT>tZo=t zr<)ZA{@vLb1ACx*<1jqX$-az7*oMmV&kM_cfCuE?{Ifs!{O^y8;aqBh2G?Q)R;V+H ze1{Jy&~xV@ARHeQ3gGg0_S*5FyOLfB@ta95YYx40jEQoQ2SXD|5B?(vIhcTTGS*}` z<_;@0&~+wCBl?g?ygScOFR-4DFZVdITAo4dz`{{^3riABG3l# z-(BPzV5XCZo`6q`LQv3InN79|OuYS|6~}!2{qaY?il6-S!=Jp&1HADKe6=mRp4zgX zqh$5gU)(S6kstDVL`qYZ@>!N+iH&{kB3lGt@NkDF7ob%XfBIaEUB`Mv?Qy))hvUR9 z2iS?+Ue&v#ch6)y9O}(IanPfMP5>$F=C!9>Mo93vpeZ%XQWkL4jmekW=T5~i!Ks`e zgWzDM`(gr$Maw+e-WsC z{T%Q3S8x3asrOs6Y;S!BU)hkXr!vX`o_I@?Dtd7WPhfdi2;KOKP*BI zY7%S9V68kD09o+Rt~M{jNnw?`GG;zj!;J|IEjk<68rj2_r$mj8_#BJ?*wnfE3`gIM z3m_*SJY#<%=VIM?UO(UXa-Lg0U;pA~U%#?)&PR@B@7RTQO4rGo0R4`e@R?r#I(#p% z{|g2h#8fW0iH_WXJTx>91=0p+WlM_QAxG(Uh{CEPyDgWmo`|02Z5ky}5V+BkpJsj6 zGXCtZ4+n7q^nQw~=?CEx%zx_u@p^HW^rXzV5f6>hY=~&|Q#fmcm}BhG$i^dkaq_72 z!AE6#KzVxPo=*-YSDTtQ3N&ko?dt`PcG4wrCCpdC(RBx!PO4SIsz|6zH>yAnu>|(o zI_B6(2eWyXCktldwk>}&C3arYljA^US~Pv3(0K2C6mW0wiCdU*XCf5Eo}rw-_~xgd zCYay-H2%?x{=ysIyWd%V!8hz z&uxUVWBWtNAvv88 z#p9My6lMj_I!^fnwf+FMeeIfEDm>FKkd1%+eD(2X9}bdvfBgK!z4e`Y z1%FIW_~Xy>rmfSMYh2TL=u%e{v3IJ?12s?|sG?O2ap7|lvh`@5(NnqLTDUq=@g5Nb zEbClC!4*){?aHPZheFUA*PVQzp2$Qb`*Ovt_WzxV>tqS5?*i6pbacS{YgEmJ=*VuBi z+REYqFaa#|&b>y6@N*=WzKi7MLlY_!P{F-G-U*=zjws))YcM2;YeLO#6Y&&9R6lnt zs3P)0WPFc=AqT|=L^zq`V05KSPaM)Wnq%5&6p2P{T-XwH%CLU_A3ls9cRdpPkt&Mh z-GtsMG&4Xa0}!&Z5X?9zI?>+ZP@GS?z!GjFhKF&3EbU^wYMo%?9BbbgDFuF$c0-m{ z1b=q)Y#W$AI^&sG^VXO1d|LcxK3Vn%y#|b6v<{Dklr;-DPpDNSfY&kGZHw34U@P~) z0%;E<<{Fp)Yg&C4xbS=F#>md~8aQd_(gD>+Ejbl1V-gle9Uy^L+$Xy?|M`&3qKhOS`yvC0`_c25qOIn=aLlme-hef3f|EpMUtp$9flEe|UlIeB(R!J3DB;H7E1^fBc9|Sp#tOyXy!-|e>Ag=I}ryMF;J^Vxd|2$V@V?6 zH63{e5|y@74#}q5815%nngsgbdEocKL2Yk1arFIv`Uv&qlpTt z_XxTn)?m9!>-+!gdq~yVJm)~rLZB2X4nQpWaE$_qiGycAX=Vel(}Q`}rgXiwB?y?? zy^b2@8{p)k@PmlzI8dSS9$+yC2NLb4q2h(73LuSrQ8{^@lXz>}&okZeXCHo6?{2<0 z_P_C6d%+VLKjPoy34Qm2AKbyexEP{s;GKXWGok%R%sV7j$M?vD%nJIU6vd$nXQ9X8 zv1b$yX@#VA?Ao9kY}dUnnTSzhWb~FW7BVP_6;7JLIj_PaI@TjN4_h&J5CX5wa$C-g zmiC8Nbw#AUF!RQr#)n6t>9I|_pCqm?Ms(i#Ccc_?(5Jk^zi`zFuUvt`5&zNaYR)rG zcH6GWdxPWa7?j|^*&GoPOhTM%aHNmCIXrO6#GV?)hsP(qgKqCT@Or>K!|}Khm2nux zalVCzdQ>7u`Tjru9;&U1W4=C)X2_3Fo`6(qpcq3v^1#8HwxK{6a|lGd6U1WT*n5d1 z>%vjT5XL@0nBOxPT>AyJq}F3T)Dzu79266WHJey#c*_fvn=?hNHF3fQL9~eu53j&W zc9Lv)oY!yP4RGa=YwM8?zo!PQ#KQg?U^I39LHd@DK|AMWk=$@^VVB7x$2w`!SJn z<}41Jj-G4tZ+$t>WeODL-{n`o`1xzIYJ1^bJXe7K#uz{l5CR-@_4{zYO$_SN!%YLp z!$FTpAPVbtZ@gqJs7uD_p1j8fy3+01g=kZH!t4Y3ZWJs4QsXGs8@Hp`Gk)KaA@DE3wl*dbQ3@&it=)IWg z;2yA}u1o-z;(&GR*ytR6%*=H}JwGBvJP+@oqcL1kK5Ue7&M9SbP?Ux&nPp08^jP46&+J}$7zL>tq zKD_bGdu1y(el++uwsMaje1_iTTU%uRi|=7IE!k{F+ItOb$*BR4*qI?ROn0Nk4!6_3 z3$tC5k!kN~xxhwYNQi_qI2e)#zAmlc2VP4$aSDc z6Iv~t(T44{B*q?>vYK~oK6>h&5o_${=+9g0>VDO0{Fi@PAI?v{{p0#2{^wW7m=9mS zJ73*8FI=f_d=p=hs?l#CZ$JI>53VF~X4WXwqWIRqm?3DYLa>fsi$q0eBiZQ~(cT?% z0t=PH>qu$vP`C8UvU0Ty+gS}px?auTBkO?_!kufGix0db-8Ky*nHLWq0@nu!5D~8+ z9ni}tg-r-$0J0slVoMxjzhYwMS8%3Ne~58AmLl+37sqbD6Gg8<(d*OjVj|;u1H1wO z87O<79+=Mt`t~`t`uBhR6!jmV? zdiI&uvqwXnfpJksAb4)>@`v12@XlsebfP8-Eh%#DaJwP+Hs*GJNC@|Z)(|m=aqmzh zQl>p%aUry!hBl~J@x#d3B#7q&eD5h|?Ko${aPB=?lbd5o4fHl9m zdML+6^oxn_T#dBsb4K|)-_mFHYL7sF&o?6Uye@J`d!fDyBSGrrGjhzs24VSRH%@iX zCQ#iTL%=H-sYmucpagEg9JVjzLHofmH&A-k@f|oIgik(V*;%eH@aWqeWYxJH(_Den zipw11g3oYRf*9j|&KTy|{b_jX0fqx-6*zU2<$MovoyW>f=$vqq&H>{YWg}b*TpaRk zNF5!U(74xzi2eCF`50aAzW&9>pS+8&zy9fqv;JG(z26PK6@%5+7hGX?g)92mG4KXH zR*JVB<|JWD$#rv}_ib~a-7SzQ;G20WOtx4$Km=8YTOYl2Z}FMXo0l9$(92G(b>~pp zD;ZypBzcZkzV+oi=V0pNuh?g=@$uRQ2hI825^=U8k9NWmvo8yg&@(N;@rC8d7DJAd zxi1THa6*&jp5|vw3<*Zhm2>UYo^zsM$d-ZdL?%)SKs^|bwU+1D&nv|GE(cQ$!b69{ zf{QV;o$(05*x6vcv6Ik1o{xfhFkfw_#LjF~=2&2amGS60NZ3gL1||sI=UP2zFMw(= z?|4qC0&%+mYFTs3e&M=$>&tm=)PDH*sk-;_106MvUL7z4Vv^L5GZ^wnzrXz&6n`Bbs;T_4UPjclf@M14)Uk7*94EA#%X%c?N6DWd)ZF`^zh~M@XvjEcApcMzmxP>GwAyZ7dyr@XN z?d3c}jz4^S_vdf)S3Xt8n`Dam*y*-<71;f^Fz=wHp?B9knFkd84&kwbrD`}BUW<<> z(CKM=?eNtCNyssLpLngJL_9k>O0C*9o%_w)&lb1dLG>$r=-q+vxwKe~@mkrafEqc*+q_pBJru)a z-E7ZNljnv1tL~5W0*U?B_waY)E&Ktjw7<^_|CHh&?iNE9@FA|m^crv_=3Lko@H`oJ zO$OqG@zT=88)K~K95{(Ixy`!jet2&I`>Vry3yH^?;$y8dhRqrYu^gG5+fwmjm7woz z2XDR7ep&ec!Y%yo|I4pG|3bADY#|;g7-`CTx`YQBux<_?SfdBq?qsS5zXSk`z7i7b z>uFX|P-G8YFhLrafCnHzyL=4LI=DCzxMQf=dC`zE?vs5_J&*f5DAF})F)v-@5{2wj zI^dERN55VWAnm>b<_)4$I|(Hn$n4#{QZ_jD`k?!-Cf|m!hSR`okA+^SmaYp{H3Kw^ z>+As4`uKCdvOd21_N#YafAisIAHMzYr!VL-Z+-V(S)$fczw-0o2;Z9c^Lqp!dig@@ zW`UT^w?f{{9DtlIS~FYLDE8@0=K;4Z8PLx_uV#yapy;!a2FCUQ#1s>!a9M1+Xoplq z4as!@1A*0KAJ((p7&_yrkB!^fIU@BgcZ3nyLH z#)e@Vd=(-Rx-t6&K<&5<<3#&|Vf><7 zF83r`7bZ3^@ECz!@ZzyBZ3hrAhGhNjd#(v~(gb|GS4}EEEB1-UY2siYH*bmc&bx0K z$-07{I>iE#up$)bhvyNp2kG)3|17`y>APQjTkyJi9wB?XzrheodD_j3c={0WUdAHj>|mF?X;o+|t?$;leZaftX}OQr??z z8{Tz>E$iBQ^h^<``wp$%_Hr8}-$&`sP^v;ON{~_!r%9ne@u=ImeCdJ;y@B06#0(3X z9mJUyPJ8tL28?x~TTsr606SbS5?hgL#rXx=+NH$~sqiq2YEHqiba*{a3;fWN!q4E2 zH@J1Ff48bjNTx+I2Os zm)+|4F38!uCT#XT7QjyC2Ezdox_t>w%nd2|B8K7Vxi$ROm-DwVLgZQSSI#=Z3-`(@4ly;$=B7ls2=xLa!uh7AxC zbSp;+o!+;-Hs(}v@)#3B64nF`u&inu7dnied z$tZuUy=OTp!Bc0F5G!D#eB6RpB*Slf*l}AI3uv5MCb@}qc}S;NeC}{97A$*@xYyz z1O6K_KEt3bJGwcSrOZyC%_hi{fc~|e)4aLWy^rtHHnNo!BZkihj=%QRFMs~-PwFMg z@2zj!?<|G#)-R7Q@3QaZT{Zw5Rvw2n6M5{t;3orQRYjm8v*{o!j>P#{&m_G$?fOls z9w~lL*;VPh)4UZfdxPsy4*`9OkodS8<=TXzg8MO(bwxE_kgVVOa-KW4U**45=i5); z{MXWoq-f|Lrn27m+G5?sF&ISAwY_rA<9&Dt?{xH!@!~hU3v~DDQ893AB~S8kNE%(N zh~hew46gSkqP)d2*rcp-Em7@!*|{A*8jlb4t;f25&!)^@DIwvTW(&O79L|+VTy*Wq zE?a(R%|(bVZc;i}Wo9BsAi5{@jx#9OiOtML09pO;(d$G6QjZRpSg=$CaAOr{LsE`m zol6JR%MB%cALmlBs~eF_&ZMhCHfatrj62lwr~%&$Sl>uSJ`xi?VUao6z}XYKZz2xV0AtjIx)pu^318nz1jA-sGr+}?SZG1G6GBO3wKT5HDv@O+#(eaU#y zg!)+DzWe%{ufF~2g=X}P@7wQ;Ljc~cL0RI%d>2wjbn>d7PK~=xt!S zreX`#U)UtP^d44F_~-R&22rW5WyoAjw|NJ^Lgyx`u&i~g7$fH~!R}#h9pq@8*FjDRg6~NFdS$o4jS- zzT@zX05B9TfIxBRhE@^pXDUTm9kZgb2zpMAja; zdC-{n1w8aLF))}Ibzj)-*O29LL@?2~WuG;egcqRC z0W;c3_%ecAeH8TbMO`npcJsTf-CHlbU-kjNANzp3_hitStOE#DbIq|`MTwT-tbKhq z87+jOhmRh!AcTWZR?s$uO-2XtnyCSapAQEc-MfQpSKX`?J6MC*#30E6GQzXwUC$k9 zUkjq}*s8Pva2UvKjZ(p@dzeqMvDyS!E^r;IWvb6uKvD#yFW-Q(9*k)Vw{2$ZU(uNe;69bI&op zefQIfkKev~yw;y-{%?Hmem6Dh&rkE;G>~>DBfMS4A}}Rp-f^LL-=K>C0%4W?X!@0a zlW#Qr9$rite5sgrc8Kx>NL27C=0*YkY;Fo;KF}*1_q;nfQ}5keV?FPnM`|bd8T(4{ zLW3|BZpxM$PWu08gZIKRg z$~+GpFIwC)uy-N2_s%F^n_~wy33IsbeOKKpr|RlvSm)11GP26@t~$3@s`#MZyv5N* zmFsu`R2*BVBs>q;8+Oj#e9paFTkc{mBG${dvFC2Z8EmRuxjAEvvT+eJSa%n)25Uk# z1+8NdZ|sKo@HAJ}0jLc7!WMWIK`!NM&WH7J7km=WueiVQvA+HDV%%3R6i9D<^L{rI zpx=YU)oxMwZru$~(yVJ*Ga3U8N98I`SvZj@l=kOrXO_I+`);E-BjpJA(Dsfkwu={dZ{=PNg&;k=lVIKvwaJkB5-@F>uiF(bY3EM zAF?wrq#ro03-nfSn?q6`c5g?)`n?yjz88JJygDsu;J3a$?&-dUIr(Apc?RjP-})9M zg4b5nx4v_)yykxMiJL#nCvJ+%GT1|p!M&o3`HW+9cq*T*V+~Thn9$mxhCKF!#uZGd zTyq6&h&yc*fKvyK`Wf0FcTBl$d)HekI@XuXr*a7pTofH=n4OzDZ8$-5RfHU}| zyQ*vpSaVB(-I>HXHu>0=iz6Ke_HpVkZB9jelDqEEJumq{F<{f(&f4S7%)95BLUy*k z|L?wj^y|2EQp!V(dE*>EVHbb@qh{};kP|-SBtF-cT94iEay#RUD;nmhv>QrM<(kf_ z9^RtZg(oCZu*!flaZ2ZsQ0!=CJ30=}`>Z#K%5j~(4eCpAEf%PFTI ze9OfedvF*Xq3XHA>x6|5v+`!dD{C7qgrKGZ5ZH+hPT9$x^XfA4D`OncXjGA;6ZRl@ z17e46L*wmb&XK-rWNBOXoqG&74u;7Zcl4&0ui&*Fe1608CVgGom24q0+m3@%*qH3& z4z!g_5usJuxy;$_I!V}>8lJ12I8oaiLWS~Ci|hOU{_7wAwa=~yGE*}iTai$wQTMhX z6Xw%(!xow{f}~J)AdD^TIMuZF&CUDzmWN4x$%xu6k&Jq`+CZ^t(=LSNY*9L$YjyC( zs6ZI1R=r?DilgrtYJA|zv2`x((df*Xs;|onY%G~~`H{&=yl?ZK4^|f_S|heVPLG=0 zk}mQt@o_Q-9tJ@_YnU0!Blv{)D?LJgXDL66LjD#c9^Zhvb-w!f&+EKs%)j;Rdv&c` zPiy55@E}^F&t7YyZ>ly}_qNI{6Vv}#_GWJ&rPyZmo>RB?sJYIaH)IUDx*n;sYXe-h zyNkO!@P6Car}w~ih%X{}r}}i4NJVRgFhAEld@pYh#pkkx|J=wz$amB_#v>v5@Ovjo zxT&k3Nja1J&f$sPAZABaqC|jVhtOIe9Egm>oZ>mOb!z$&D}ai8PUQj;Z@+$VD0t&r_iF8fo@yUIz(c{oIf#O6Z(fvVHZS5G(Trbl$|9nBCXG>k zHQBJm)-wa8FH*L1tQP_jbsM^wCA?NPB;81P-otX%g^kqr0|`smLd?_|B+p7D?lJTb zW^9(jd^EPnK1_%T5Yr?T-zHAIhOePjba~xsgAZD4_~HtQ5SE!#vb-rLq+^-JT`M{k z4a}mDOF?zXChF@YZ#R8 zV%$ZhX#AvYV@V?6H62+SGu9PmiWvu|TwBH|x4w{~5BC!+O)^&dJb`W4;I;Rr+s|G1 zzwy(rZhZX7kA7A^`|86#d2tAS>znuD(ceEBzcC5^>7RdaZ&|#xd?^{WV0N+VTJ9%X z&=c@Dv8Npz7)dk%xvrQ4j*P^aHHTCqoiNw3je19~+@)Fja(PUTi_e3)*CgcAfoHwB zcEm;9^y#4^SqO1qFTDasPORFA!HFG8OWb*gDF8n*>%b#|MBDVNt&7@=s3+61i-`*e zx@w2zi5b?@2Zn%h#-ZEe;;^3P-E?pBRC-3Z{=MIbdi-|H$XnmV-(BA0OWyM@8hGfK zjf`Lty#1&f?nUg}e;P}e?i)NkFA zbD3d-Et=ZX9}9?PMI6)ac>g~>K(63&oNm>9GY0;ObC%T3sXi#~C1ISbuV+A|q2XsehV;Ojl`XR=a7>q8(=xgy2i_e0e870?%X!}I{qa{{ zzxGVA6DTVlD!9jm*6%zZo088tuh=mr5(HnG?^dolQ&lkziOkuV7ok(7gT;KQE$tYa z@0??H<*>bL_0_!x8x`h=O4}L7=DA)5O+S@hG-I_M8-$G-C5^@VUP$6+0*b6i5w!Ur zbI)MaRWntFOg`RDj|=4M3!s@yKPOJ`gV!c&PpPry9*)4=jV7wT$i(ww4R~45f7{D> zeodgB_S?q70yfGpfiLi-F?8QUy!Z;w1@17v+-r1NUK6dpy8m3u+ zUePI8GHRfz;$RGvBH9y}A3iZNVu6-W%DZCxwvY6!BSg=J+Bd$O=iTXtkMDkMukczX zJZnp%lv%8~@?gh$ha?=ceo#Am6g(BU`jnb_kO{JrNHWkK7;!mkppkh1br0RV5gkG~ zS7nCCA`3pN8~>kH<*9QHJ>$_W`1HB{^?y1IzW?kGe*A}@{n%bYShZ+i0y^u;8HWb% zlar8)4n*7MI09IGU#HdU`T>sr>=3#VlW{hCXj%YN9wum0$i!f`FEs1}v~ro37o9|` zjyp~rd$FP1f>EC{jjyW#@O-k7nFmXpK`BQVf#Y=A&VHl~&b2jckGwfNWU3Bh%e&(W zhD?KQ?>lUQGwwa?b|vXapax?uXOE^LfHv=bd9-`~mR+z`1s2R(_ zI=TBGx~YAlExWl6T24j@Zy-t!O3!Q0X|EYty;w?HMSa%d?df|wNDf;F7^>T6FZjNnn>{b}b-6buU{sH^rfxfVNYH$*B-y4f4$(WpM_cPw$Z=X0nDYypS zeN+GN7xnQ)iTtha-;3u?o}N4TOzq^l;+QaOd~aeb4CL{_(aJCHt2COZV+#S>nWxvtI!Pe+Q%3m-Yxm-FYx+boIXfpT2$^9f$K{ z&tT1YEyWfFc`)YRgj)xx^ra19rEf7e?=uc3!fg`00FHn{+c5o3fFnfH02n1|u32E- zqRBxeY*#`SWBY1%qaObLf5uh#>>2|hty|N^ph0_Hv|N$T(y={Orcd0cQ0ax5kf|3P zQ*52?t!w|JrT6>)_3Ou`nlCn5_|?G0QxC=H;u3(5pJf6R&%Z$#)I!c`S(&u((_+`K&xJLNA%)SH^sR<>C0W^4; zW#g6%usjgvqUUZu0z>6GSjF(DpD9EK9n~T2nd?#5z)8E1XE?0)Xzl>}OUYc$-IogR z&E%Dr)?VWZXca1tVFaps-G;4!n8pkx%3*pEV{6YjlE2r#`1!#*^VbHQKg9r^Vn=U$ z7hm0<*wg;x%Z&4vn%5WD_Fsx5*;@~af0yj`REm ze(TG5`e^^PUoF@l-~A;1w7#n*y!>>r*pG0Zbc6Lk#{2Tq{q)7vtMF;r zXbftWpO}~Cot_7$1|55G)a8bJSTJdVlrm3m1T2TBbgy3~;A zd@BCWKj&J%wO{dz?(uW$9)J8tpZf?FN2*n4XpAi=e}~Al%Oh+A1~72e=ACn*dZs>4 zDmqdf%Uo$rHgB^=KKdaj)V)=F;+3P3V(E|5 zNQ{|lV=bG6?+oS$#iMaREj&MHn;>T(>CQ;s#T|%9p%hz8B8+CrnuH@Ri3QW%&DOb( z&N}kgxr+0>C;|L42@|g;4&M3(zM44Dr^JDNIemR0OuZyby>;T?xkCTOm-9SC-Cuq4 zuHyXUl~2^X2jO`T^l(Sq@_{Z^rq#MNp<nL*0!X3sh|QR`ZGN-`NFd;f%XmIYaBQ<+ianS3h>_8)FOA z5E!TVkwasjSHvXaORN7gwEE}dk!v2EfHUpNnbVnXB;Kh9)mPuBl+Z?o*$o7<=qQSd zV_=C}5Bz{LbFt64z2(l0deCx5j8X3e%R$a|n}p&Q%?a(%Kc$5ITC4xNVY@eOhX4Nd z=3mL_;OOqB!zFbqL2Z5z72k+z=Ej^aKp&hcXEjlRq2%q|eedN=YWd!Lp$WC*?`-f?Xm&S^&t zgD;0|Y~Dsg>n<4+h1I!YU7e2p7F=G@`&PD!+99mb9zQ;b|RsI9skiL<4|>Q(BA z1XuE=&AO-Uaks-jGyGsOm382xdGWTXM9XjV<`Ul|%OQL@g{+yQ%FE|@K>S~SJgJ{Z zbidZL`S{Zh=Vea*jql{E=Z5`sZrGpU+`x0x;XEYb6{G{iK&7zhSRYU>p%q)=82c48 zvHVKOHT6#M(Xmum93+~&ey44TK?n_QWxP>fl>-!HfY{I3`yd36g>LSA|9^e`12``H z9-m%*sJ)}NF6@8lGkkA-25sJoG}5Y5z3$S0LHdT}9&3!zkJH2`Or4aJ-~i~h(B_(m zZXOv8sUXhMVRH)@LdHozsT~94mG5JqyvCe6Bq|DOsk8Q2&t{yrzMSXEWqo`X`SIIt z;(YsRUogk0ZMOE9Yqy|kr106)977(+^Rs!FbsFDsS~rzN%CzCoaVg<@tv>GE4?wzk z(Gc6ABe+qp)g*QBbA)x|_Pcndb&qqOcfE7{h`;bG|6=ki-`el?MK|}o=;q9z{3^H( z_nu(5xcZ$_BrmaRVbnK35)?UixS{d7&&=&^O;AFhke>)d+zZb0>1pW8tXyqqtBMC18QOec%7z-$UALQ|z6vdd=)Sh1qKaI;qwm{Bmd2?re)yGS-~q26jtp zn)z%N&dPzLHuAPphoXsF!gB|I{MXN=EXfGpO(o1OLPzo5+}V1q)8EtmG*diF6c|D)7tswtf2=5DEJRU0jpg z1(Jf2BRDAh^sN4!SEU*+`H^pX4}bmC@`s;JE%Qg?*FwpE^}8Q@>34iNF?>mz{Uwlh z3$&H2samOy2urK>ri2T-<^BhU~?i6_A+xXQ{@U=>LfpNKpg1Y0fna-Uy z2h%y*Y)-?1j(71^WTFwGA#6usc^a-*d3N?f%|=8e!Jw6iQ=&k5R|>74SodrYU{UY) z;zz6l9LEq3C^7~Pew;1m?13Z)D1mzhcKFwln!&)NJNnMtyI}&h zT8PL!e_h}Da-KfezyBRc;IY2G`==l3tF@ea`C36Tn3MX_l|1ApC2PVjyR3lZKXo(q zn&)JXGgUUOG#?Kdc5yf-VXqYnNm7;o>5vSWlND=?jprn>0=eP9we&H?{z@8X{@EXV z{^RzTEmWI%73g3rbMN5@SOYY=sxB>UTbM$+tM?96C?*^jdb81y#TP9umKrUj=LAjV zI#Gx^lbp=HagB${7;}Jm3Cr**RP&x5m{}(lFPkh>7jW3egE}Zh62isY8O&c(%4F;(E-_=ckuIqp!L@ z){7zFx4w(NyEftd6dWMCD|CAt9{4Wukk*me12iUX-mV)tFA<}JZ{?P7qKlXqvWzna z=e!E9{8&dyPEjuIAZrlmeU#K0Knzzn+PB?d^ix zYbLa7t-}?mDeyUwZvb~V&$(yZo~{cZ-bq3euAA7&@R|cVAR?vF&KPkNh)pwWExbe? zZ&(&gNF<%5qmg8jnE`Uf=~vEapR$H;UBCEJPWcN5tojlk{SqJjA;d?&z`wr0zrMh~ zelHTiHsZSUu*!)5<=s1}v=ichIh|8BxcA1GL!-G4lzZ6x1mfHV$8A6>I2@UQS<@ic zyJTT|YfSM4%|fJ(K5=8+dqWr?60A?JB!c;ekrw@bzK4!$f$K8L{IvJgr4`hsXlpuD z8I-(nSZ`jjOHYmz?|bQ-sRxbm)g6ckPcm48{fZIx~=0!!+)dO z`uM?@XZmIIBlq*%)yLaB}Y( zXb{fU;~dM!n4(?b;K>!b>s7PPN;>`kKvcAQ@@8tghL-){byonJpZ20DN8j~Z-}(&w z{{KZ-KSF&E(@_EuGA?QwE<|=6YKd_a8@4<4fXUd!Xa?jl_xKvXr0u*Y)(;!7RraG7 zhW|(-q=q4&Le30S#d~h1;hL!yUl-=*py(T4&hyIxslwlOaB0WZB^@X}i<7zW>_#6x zE8NRlR_rmE_PCd|&{{g9l}&dQyX|=bggZ|<;N7iL9$~P=+JcHY=^i4$G8C;)=0zTW zRhGvu7?k`hMZ6s7*3(~=hghJFXy?-i^{^cUwsNxej9)M zDuf!5nKcbo&ya(q*|3!8fIP))2{rOE%?ENR^!f~-J|Vj@=}cfCfEy+jbadcW-pzCn z0TtV8quwXB8QYeKyM;?njfETl|BiZqNszml#RaCb<`Ts(vS=1Y_cReV5I9&NaIU(Y zNV#9zLCd<8eBHTe-Yt70D3xOkK_b24a?U2Mxgdf8*K@Bu2)mbaYMjvLaMmur06H%6 z`v2H_w_i=S?7T}m#EugsCd!E@H$dmQI&+RW=3(?z{thmdGmhgxx zh|4%gMnbtF!EqczIw2th=fWU@xB>+U5ePUYfp9Phgfk>T&s)1Y-QQY`Y`M0->QItp zdDSjgef56xopa1Fp6B;;YEUz6*$mEOAb0gTNUN-6J9)Apu&8Csz>Uyi4eSufh&FMW z#OyOm<{))MKklxOO!G3nlG;&77|OD~t#An3c8GuQrTSOC_(P9~)AxRCPsSIooA~1O z7H)mrc9~i(j+JwGTV)%YT%j+7giNGAO6%53vZQzd}dXk@Vr+OYx>f%Z;SrW|XFASCta_TY3$B zX}4PBYeDs2XaG>x%Xhg2+_4%LrD-mJeAhwtsVe-Z%~nqHm1p6Ck^Nk7Dtq{=7wtAe zTPe7jN6`mG{OVd6jy#;2^J;45+=F39=#dKTG?bWQH{@l{**2!c*wA*KrE~Vl$mHI% zCRa(D1;NVdjax)SkETrC($0DKg_rL@y4u5k^*Lm91|VV(S3-g6K_z=2>u&{ePmu}< zY0NeQgKGEIs`t_9>gh7AlGbas26+^9WnQH7Tp2iElY9aoEHL`izTT8%ahsai_uSI9c#m0qkSH_WQbh-Sfsy?Py>{oAzMB>I zTR(dK;`vAV;q%v@Jojh%`gOi~Bz(E|6MRzm(r<(>{oPx6&ddn`>KUG}1Wl9a%eM?R zRj*u^wpg80y*KHCOMZZz?!wZw?PJY&VCxt{bZt}!^b5oH=|pXX6yt@ygs{tOw~q0T z%6OC`*S6L)96#W?@mY34BTx5Z4Q!E_6yoTbA0i=Y9SDyEyB7B-UQ6B1={2;4!BjR@ zt&MTvChh>Pw9!t|rd$Oc-((KC>n6b+)^Apjr0a+`D^M zoiO*l1;4+Pe=e8uU;EaDxo58iOftD{-E~?(&mNQ;@hGkJ33b}oOxbRdtYxsF&)4O-5%PlD2#mBEu5C4<-?9*2t zJ_>@m^Rs&*Qh9z`Dg5T=cW%v9-=H113eF4Ei+NhnfyhWF!83zYrara$6oQU_9JKzy zm!b(5SSy2AX%!g3{b={KeYNSR+I$q!mzarYGmEc`B$9UUw~bp^*)Um1s@?${J^cGi zHv^AXCap)I$!Ke~(>UFTeK%cTxW>RyxDKo?)T3IXX=Ftp)^*pwW(XwgMp2?j148k- zXP)Eki^QpJi=1Eo{PnZfKl+h<{Aj)1`?)2 zaD}>y>j|{YF2}3%&=b?hWnC+Gt4IobBwX z+)?U*61sG2bmXK!UwvBz-}&P_)$4on)<2~lVl4n~F^UF%qZuvmbY{-2+$YioFd-pU zN!O#&&q=AtU<&eqB}vd9--pYffyv`mL|34y#OjD$ZF_Gdt*$BBNO&ph#&lyoVrllz z=8YkqD@&-D*0Hk!#dgTq9Y(zwIco`;+q{Jxx$dPLqh+T}jRc^cWsC^NGuG0MVp$9t`TnO0s%A#n0zQJsTKKNiFtikxN2WK(MK9^uh!Z*we-j{6Olc2e4r z#U%^6ZCJijl_W?}-`m;Xyprl*kp*n+>9lCaR`fyjNT0I?No>`;y#n7`P4gWcDYx^+ zJ3qEZ2ReyM%bx%ypxqov@fYk@%s$1$_+w2o^PHO}lLPR%Rj=7HQ&f`c@<}o}+!} z?M?OG;kdW$5&!Vx7dUKQzx?>c>qk`Mdq2DJ3Eiaj67!_f`o*#TI+4{RN5s%O9L@i40a5ruw!}O z%B)6Yd7GPa?~il4N{?tKqv@EER0^=d>YQR3ueQQKi5dW&P=)C2eE0|I~nbBgdz9c9*z zd9N(k5~zE}8-GefjA}FP}{Ipxu&LIUyFSbPI@{rH6sk z8rT{H-)F0oh}97~(P@gX^}QHUy33BpOt>1^0*cjli_(P#=v-XKh9J15vRPE?xikSm zZ8xKu@p)|@r@K@!PbLFaPFJs*FmyLSO0c%k08kiKq71^Zwb`*(?g54yp0Oh}zKPi; zawMMtQH3`v!6~i|q?c(<^y$WKstghqm>NUSlTr2oog@)d#QmYL#t;6YO0m%>P@T> z2*B{^Jz5*8il8zFE(SK;R3A!YeS{x+_-ilU{(_HYn3qPfONC-Cs=32QFE%tr{an{) z{IA*isvd`1l}u`D1Ik7W?R&Jo3+w+og zoB{vFvU5CX2?3rPQVRxfQ`!`Lne{f&XC-e4M~~k3YM}@KMeR$naaiq~HPG9=OyEd$ zwQRgjg9jrBp@wI&N`s|m00MTi;D6&c3aSsEf8|l>eeXy2Wa&*er8m6|tLU8v#t(n} zb6EJNxl(f&Ik1{87|0d*Dh{$6IUOhGZf&R$KHt`*{eX0K*pSr?@dEIK41wI_!JDRe zE#ZlXn*%qwbqs9uIoUzx+-Ls z>~;pQ<0TMn>%nOY+@YLt(BK-ov5h111loe#I1luxcn>f=@2e#&H?`!p!};6aSf%ab zuVp-Y`Re&c&p&zo!;jv8dq2ZpwYgP{R%h9=LJ9zE-|($Y_F`e& zK}8AN>XNm3546{vuyq*tfXMq(k~tEp#Bvc~HjA#?j}6k;_V71eUYIuRi$P*Us4PDA z*)o>HVBh;Gs6{LX_=D5!G686ugb{zcJ6v_TCPTZw1K!OMJAa&~M$MP->Z!J3JJJOc1s>4(9`-pP%UI#L4>dnm>aU3%H_-!9 zNEj5xr!m3!U_!YdCx@70Pk3jC7RVu|i<~xt&q+8b8WJv6*j~q~vZp*6B=&DO7VkW+ zfB0`-e(5*7^?pQmQ2j<{_?TEu8)tORaitaaSbTPax3TpOZ*sN6izZ$DT}Bx&-4br& z9n3@EDzqu)8Y`9wM*9t+e}#o6XRGlv?YmNj_#%;UjM|Lf!}Uy@&X}hxq>zA^xy!Q_T~Uy;U1C_vtNR?{4SV zSoq$w8T3I#oC$@wPYmOxs?^2#jA7eoiD(#PLvPmX1^Tw6m{j3sZfpVC)H}ZK%PUpu z35dVE59<2|GpO(0K?v`289t|6hI>aIewQaOUV3YA4m>yn%_WDk6v5%uX9G(amMt`Y zT9*RGL&ag)M6GaWc0X(O+I>exZ>KYI??V7zY%)h|L&3h5k~XMlaf!7doK4z!0`&TZ zmv?XG)O!ThTSs86;4Md?5NwTM~8a zQ0g#5*X%G$qsIyiZB}0=tSMz5!E|~~FFOq7Lx1@1UViB}zwPV2tbsnhV6P%HVmF-F zCr!49C16{0DtgNEBW%!+zLfE~f;{W=+oJ0Na!_^?7@Xyf=yIwm5y28W;QbX{p@3pWYLe z)A2hbH`HHjZ z*_8=hnL-*YbS^P!^c9^>9hSYka<1y%zMK8iFv`D4J;`d;SE(Gg6VeZx0*&5}<4r=4 z+-e<{gr=?foUu!q#md#8G#Dvqd1kNl4xP0UPfV*jHe)2c48R8a9ESY1ea2x_!)p*P zHhTCUu&#yfPi_fB_76^;ettfhA z1FsRf{H(rFvvxUS_?+Ddep0;fIFyW=9eMc0i~q(AH*s*C4nx;w3VBd(IL@MoMWX*YdH6S%Jdif#xdgjyx|-t{7+rg)8ux&JBv}J;!l5(MHVCW_LXhTRi-a zFE6V}Gv7mwolF60W5dd_riV8*%e8sdYzjl+a^zZO1kA}a+O|=gut$uNT*THY$DzQ$ z-}1x~-*kK`7^sbG_kMEDSvjjaM{5s%^W|lW!v4XK2<_W3|yBTuhKUpKX00%?B}M`SQYH5WTu7uQjz?{kt9unq z?i_s{IdK9iJV@0L&{5Jgr7xp3Hm1#5gT{Ko-7?-IqTVB-e#wVK>kT&-=ms#J2H6f7 zC7Y&{!C|qzj_9frqb{$iQcznmy;gISY9&zA*V=PxFHT~0&;g*`k)hjcapAhuXA58C zIlIrY4n)$e2lCDuzngXPo1eda_TtlzEMI+xGveNl?>#`}{TcE8jCg-We6DAN>t@@_ zr8Va~klWKvS))~^Bzn}c)!SB^tywG3BIY`{j%yrHV0a+?5iyTg;XQmwhAyZ-9rmgN zH^->K3DaRlN+a$qTHkWp`M-B_=+>&^AHT|HpMLWE!)MPQK?Lvp=zeuv@}C1$+ZY0$ zO}JZUTl^lH#J&4QH%so>Tpy?pht=j+$cUgXz4dG23%rmw#IILPGAkMK!aYQLeS zzJugSr(KC)NCuF!5eAdxv6~Qj-;$MJV%P=b(%H-f#5}s?a=h%ojq;Sxc8HLf*aAltv&bV=XY+! zB`;kVw~X@aBFj2KfKrRC@$7IrZxvwix9{DN%upcX?;KeWzk=4Wg9({xV&J)?uHCh0 zuaGHg<`|6($JY)+;WGmhDaWn;R-=9A0l+QK=1sl-1Cjo5JYID7et5rX_x*cs1P}ky z=U}}yvnc5U8NHWqUTloRTH{#PQR*rcea5B$D#ivSnFF^4E)FRSLI~TcZ5#zYqV72% zE0S$R6RXy8MN_Cu@V||-RnwhquiJ^py=7uIOaHfgX1)IO`G=o8e{sbRKRV^_`~aUE ziS(P1$oqEJdtUHUykJ2SKz5&d9e`{Q28fJ6&%R2`#%1~fj5DF`LL|0tV`agN@5q91 zxFzFQnt1sJj~7u!>xOM@m{l=E`9l-P>4eP7kg@bx5ZkIgZxBobJe;`bzhQ+WxJdWjXIo0|Xuu9f%3SVdoE?Ut zmI%p2b;oqno8nv`*j~6u<)rFim4eXJJrdaooO4pwKmuL~s78K)Y-;6jhEb@fwW^2z z{pCB*ll(4ekv?8lJ-hGNT_`tKLrpRg`osxu88UXOD}l3GaPm&v!dgEyIdDybXJkM} z4Od~Mon5HL1j=4Z@aAUC83{}tH7F~)S8Fn;ISg$#t`YR5=4a;V`;wR*{tqmxC2Ox5 z-oP@sO8D+=%3dq1a92As3XI{^hD=>XZbbX+k~1g-?Y!MAd1~4&hcoO>L?0Xf#S>t9qozZCZwrTH>x@As^X!WvGOQG_eGP^rff((!O1k&Qxz(<{xvAlX z7SF!ZG8gGiW~Y&l5q9it-J zVcbKytb<_WHH&+_F+?q&8m$U+NQyWTp*TL4yZQ7zeL6rD4h z9Z-5$$6he{UJ*Adz3B!)W32@oC8QY_H*W{6v!`TlBX*5~NRh2=^rz>kS_H2)!cSRd z0n=|rb2WtH-Zt;=T>9KBm4D><>u2@+1rnzem)%$S<>#+IdG%;?bnmD5UdZxYaI=3W zg)DEsP1s`5-YM5eVR(?Z;x3JS0!w`k zjCy*=!&TSW=X%Y$oz3OLrCS$25C7NYU637$L=NhEV^@GpdsG`&BLH@wb~Yg-(9{P^ z-2p7dIlh5S$MqOdZi}mXLwo@8B%~>LIjC`$Peh0NVDcVgRGx+M1-*!oIv@V;>&9QY z)^Qz)z;P*AJ4(|~FI^D@&D$9cw{|En;i#xPPY+$XY)|fDTtz#(0IgBmc}FEjIs4je zEF$FH4Cl#vaBNiSmu50pAO4@~PLvcoTVTkrX~ESt9UTxogKKWDu9F&KI$MV9(Gvde zJ}7kTF>S6kC86PmKw{S9Iq_Nz-YXLXzjmhP@QsED9rhKt9B`}7sSkhW<(IziZEr{T z*ET6DD3WrLXPD_~ej2c~QuA0Q)%3)@ae))!2j=Cq(C^~ryiEe!^SSDP<3C#i+>h@4{GN~|^c!iy+bL~K z=h`RR3?M&ymG=%l9g*$1PQhNcfl%Z_;GuKMv>nKq={tQ5J~azDE4bwsv^m|{XZq~{7K7ak}BYpV@ z=5yzV_N2^p+{j$tK|O!BO)h$nVZ6*YLYJ01QGqWpWM+erFT3=}Y{YvnrVK)oiWrRm zyrO5}4Viskfy1){BhhpYC5_1-NH{tK-it8OOx|^R^th#w-}}z|#A17$kIaSlerVsV zi_J5Jt5NuvAedO#OjU_)qc-%srAtSrP8~0_WuA5UEombwW*br4OQzY3b7o28y2osp&$fmAm7lM8Fh`Gl(nBH?v|J~mZ=ZqV1&ae0)c;#f|#6)fO&XF6E8PZ%ml-2< zVD4q6tp$&;r975Qas;~WQC=$CPVv=E!y3Sg6cqi8w#;OaMCW#>AEkmt>~!p5^UMK( zY2z9E@C!fv!I!@GiLD85^jupv1DdQ6Ml|t{`@H%#A*ATB;n=^f z6pbUH%D(!vh6c)}pspNjpjzkdyDe;<(4!Gs^&^OQp|uc6{L>%23+v^t|MUmgy?^N& z^%s8Y?}cph_3!!C&FA57{PYK3`ZaHM@b9=geXoD`{EI*I`b)p&jq1^rYHH?MP|$Tu zQGbB1c9PP{hW8Hk9% zpoo>N7-|J7dS5nI_RltS{vvz-Msh-}>V$C<%rlMCiCm}C;4qP!YO&~)mpJj1JW^fl@oM6Tp0$p?> zHb8LgIJ@J&PX&qv=10ls2TpD?AGw(O!@u&iOWX%~X^yKeF*>@uIy%gg14gVYDvTL; z8O`4I3<|8mC|X>L)pYhtz_2oB(mqGSxmM6~VA4}auq zzswEn`(J2- zsD^MaWPsg{Cc_Mo4?#5Xl*K1nPDpK)>Ik2rL0i{8GXSVXke`I_r9-+SXqHkp9ya!^ z;U0*VTdl&yL&*C7M(&)?ar)4Z7l=9w`(a9zL4=akRwzaiYYG<>Uu>n7Uw9E zhB3_aoU7MF2$s)PV-MZiuqIU2sN$I;czIhxAO4PB9zO8TYB@UW)AsHgUw><|^YCtc zMsI!T7;W^yDQzNscdgTB9o(D8Kvr?&nu`5EorZ}>Xc6pbfua<)#?=FdI`u2R_K=TA z;)fsmeK_+IO$&U7lH*8KnQN)onyZ#c4s^({bv3)9NwIfgiWz5KvB|6+V=W#QPSXaw zZU}K^g?z4!KvsbXU+y4vS$*q1jSUmq1kq^7qy?WL5&~B$?P?Ey z;P*YL`Fs~v%OAR)&_N>;Qcd=Angx5|_dvVC$7#+bB{D~cj!Fx*JqwFW7c%rYE{GVK zUdzKOsbK#-TfMlMDFhNBFkzn4Thq})qyxsX2WPd1fAPnExmEIS`9_tDo$&{L0EoSZ zpZM`_7RjHTCp^H?L-=NE-ADDAlTr&}D8zUU9+TM*@uf<|MI`drX=6>K2VlG26f+P; zzH4H{$~p?IU0LW_mp4=01P^KNlXF09g3dMu{2T~X5Zt`9)1#Ns9{6dnhU%$q6`?F z?xm7gVXHSK4j`QN#o&MVcYpSmyG?yxzVMIZ`HL?<{KcRB;0yooXPeeHfAQbH{=jd` zNFO|?8+2{5qOw+!5|{*S)8w|QaLr?os~Q3>r+{^J+CaGPO2&)?GL6**7%3k)5T<|* zs;xyP){Aa#7Ibrp+FZn(ZwrYq4{mA5Inzh3?0S1+FZ z(Ce=~ibcQkb9;Kj(rc&=F~gu`3%MUOW^)#H4jZbi*fo*Ro-nx2%CopWlCp3GhuZF88$L=hFe&qM-VMk(qi59KQqWwk>R z8bmOCELmbYVm$nnkG|7}wOhoFhQDzi$|?-o98h-&1fwqyEzYn&-fm)dfFqx9qy(%f zZKs^*QwS>0g%MnvFaP3gMWs5uw9f=&-wWHhz{C=OhOr_Uexlw?rFM!Cg-AFa#=zQM*I*Ns z{>EI>Mw`|Ue(Z>%YLXqe`(vFB8a8be(QL|PphSs}+rd#o1PnC=1|qw!i|{c`{D|2) zsxf^+ON~_Mqu$2~TgN9FihCoz5897uM5+;|;bA&*-6u0H?lfja0kx{u&}T;1El@@4 zS>Gh2ec?Cf>kps5_~e;?{Lx3BzIgu0kA8#w{MoOA{`}~Ie(z`b^qv(#jn3AoJrD4O zI<4_)fv*f0S_YpzVdUpf%hZHysI(tZxRZrfNYa zbOy~9lTeflTeCOtHr8>mZkw-TatYEwskIDETy2tFo1Hy?E?j8r&4)j1_!OEXY1bz0 zje7QlMs8mjkofK5n5nWm^ebZ!H(F;QZ|Y#=SW|kTg_EPSd#v5;@anDGH7^CcX=g_Z zTdG^&ZwK6$TrvD;{o%)c@X3)fF3Z(B_R0xY1eAoQ8O@7p-Y{%h4Uv); zYHUlKqGLC6-8NVPEr_P*4aq!BG5R8S;4q*<>*s8!fyTnJ3WsiR>%+hIb0545-_u|G zxnJ(i`J28`++A<{!+-E|w_9g*q=<=k7vtq3lq zf*(Q*nC2lpwhFHQ9V(Hl`EY?-=E!JmB1hcv9NRjkCr!MjVz{4ScG382)FuVngoU3 z>7uo-sdhZs-28|9!{?8tGIxG%PxmpyNBP{xN+&e`hc2i`qLH7?eA;H=X1yv~pd?#I zz_I40jE(*>jFmx#7(Ut}p*+o473R`e>o_TfluL{-RUWH(i>k4z*82N>Oup@7z71*E z-8)lPA5+O#K%$v&KW%fLIB7ETM0C%K*tTm*2ACrI(8$3n+5^V6l*p@*spJQKGl)X7JH+* z>ka*ux#-e&8Lg6zrs8r6+3YVpLRV-;ACPM|J$>%IJ3y6c zn~u?S|L%yASeR`xs@1Dgkd?g|be9kRSzc4I?&T9_&MKrL!o&?YE3>bHHy~wuiOmd> zc6gW^MI3Hgv`I5%x)>kdJ`U8J2>s($bE6Z`6u-hCR$+1pTxJHgc&LDo&;0P8=hZBM z>Po6jI>BwsDHLQw-~{7MVSOeFsaW$|&h3-Y<9O>Un$110cTE~dGc1n&r@{P(n2Z&P zonl_`j;Ayh^Ee4LnvAVFbUgg&YhesS7ZmykM)L}%$JScbXi$Pa*GC1NGgSi&cVHrt6xqxA@u3tV1;CqAN~p+M%NRZkTPzh zobxyg+I3|2qIvwB?N!`qx8u{*n?s)OhTld?HNxs@rKd6c_GRs?*=u+5t*26R$ttwA zkF+=o#1XiSx?lwG@L%9l#A#@m?|mQ=N7}k0mn(RY7{bS=p#6J#ibf-3V&PluI)uqY zrtyU>;{|<6py!_p<%;Q*qHRc7jKOgY%$Ij4yiSPHy5^`4|0O;JV$s7I3#E_Kxj>qR zJPceButR2>!k#d=EVV(x2Sl`kQEK+I2xYcZ;ETEkY_Te*Njv>I=W?_r7?J!SJ(J&rLs#kAIK<;KyHi z9{TDTJ^Z<^fAEFx`^L`?fByO-ei@^Izwq_Hub=s>;Q0P8{vLb&;?3{+;t#$4!tc2L zuV?wSPx93Z{qWhFG3)Cu{G;FU`yTyQ=xu)Oo5mexYlCTSkh;B}-m)*JeZ--G6}K&2 zGQ0EkS-Ti|#>J#?fL*!nKo?e$AniB?L9=w-TG7*{0U^SgOV~;<;2Ya{&GJsdb&C!c z^x%cKC$A$?7eTL#260#*5TwaJ(l7O zw#B(8;9|!>16B0T_86z|&r^P~y8BI^-G*Q4tJjaw`S*T;-&*JWp?9#(>)$eU_;ug- zm48qwz2TnR8EWs1%i8W9G~pY&1_307Sq_;q>|krP;qx4p#RENK1J1q+&0!nkv<1)6 z>2TjtC}|nDCf1wCu6}ZXyD|Y~g&;rXe)yaIE?hg`jrPFb!m|LyvV=IsZr3ZWg zz#oq%OnZnHHvh~|eE^}wuTVws&;8T~ zx4oQy{-l;$2 z(nj5{%tM-3iVVWmWdPM>F$jjvt#B0g!m#|hg*MoIPqewIgMPjFL_3b;IGJ^t1;F_>KgFA$ z|3NwYc}T0{n;q^x_lPn2wAP z-0rqqC#b{&gC>Hc0F!odIKQcZ z^aU9b!Q`%x-0tbkWL3YA|BJ20xYauV+5x)3fTw*lbnOhw-kgY0^T%80V zN9Mx0Woh+=y&Tq?wFi&J)jH9{SGD_?olh3zZ=pMmK*$aa7s_PV5qI{`aA+)M;%bDn z93Xa(Ym4+ReY!OMosV|(SD(K4PgLmOX`Gt5F+EM?} zn}-2^(=HDlw#S}=DVw%=5Na5!W`;_i252avEO)Iyc-ZNBD8T2W%`pb#Y2Lw6(+)|X zD9nKkeEObxcu1i^$+Ka z&Wd4dG0Y3zN1c+6iLkY5W3)m8g7xfa5T0v@Vd`iB?~a^y4ArqgtzG6ld-3Ku5PF)L zR>;Be-VBZeX`7`X%V>0Z_@iI_()Yikhx}jqnRnul|Brv>Z5;Cd$7-CS00AGd<`syu0`0{Wye)xs2ybC+iRa*E0RzrPu#Glsy zv=4&cC7Y`p_bYg_4o|>M#(-c65J?dJn(nnsqUH$ljdVCzEX47N>>5+iBj9mkM zkRwoxj8#M0NKFNltponSWJ7L z*3zvv=&~A?W*Sg(0iPS^%;bhZ!fqojmAA`r+1bWPhOc_VzCBgLQ0YUpZl@CAp)k{Y~ z&_`5?mRx#0Fitz6dpBS}JZ-my)3O*XC2LKqn{nfwu*W5>xk8(`Qc!5kUb6F4XA-d`JUQ-WAcc{P0uPvw&}fb!hM? z9VMYwrl7JExISt47vYLoSuzP+se|dusjaBq%+r_7ZVR+-9@>B^s_l)kYX}BTHArgq z47eWIM%vml39{aYKmOHAb2kb?k>EHsuo_R_EZBqSP|W3Lv>oL@ZmYo7S9y%P)k3)a zs2-y!T%^4d@fueq1n+YuMx>rS2=$lltsn;OHlstp8SvEfhoAoHrJlCaFUM+(!2D8b zZkr}+jDw58uA&v*2XNk_8iulAZPi(gs8FG-#6!{_}^dfpcxorh)b9|S%rUm{a$)F^_Vj42eA-Du$LH5xg zEke{IO=0AguNpZ9tt4sac$5KK4#YzOncA<2E~*pu@H5vvARWLRz|$=_1LxjRaHAQp zMH{=-p3Xqr3)bRNNOKpAYN9mIKams$pfryu-x1Yi)(tDS#PpG6u!#AHtXI@zVVaQu`kfqk{ zF3h;f^9Hn=@mEa46I={seXr5wEV=-M0YK%7#&ku_qbEOjQ{QWBu?38b6eHk_(wm=$ zKZ#EPZLwq&yN^c8PQwJ?*q#XY9-Ss<&mF+ez(L$k@^0gD-3p92HM=8(AQaR&T)`yR z48f0R+3FtK9os`AIgnw8w>39jxpM|Td>x-+t`)2XW}O1edn%C0i|^fZvFHI+Dp@0cha-J34U_LfO$C{?xT! zWFn81xHo9oAOMYx3ScVo0cPyn0EO&vrAA|+p6GUg)^o1D_&WIxpfu zDWmr}0V`4qcH zG9Mk5+77L4W$vO4Il9-wpSj-D;ZWpvb_cN>$1Xri?aDER2c^?sbycJx6s>}WZ^*#> zz(c3&QNul?MFwbwvT+VomW|mL!!|jgMG;9jl~?Ps$WC8`LBBlw*=q-T3-+UCO(C&m^1oDW!LLaTBi+7_?B)oj61yO6h~TLGbC0ArIE1-mVx*W zV_iRh_4h<7v`7uj*=>NFs;WBH>?n+9I}rf;C9Yw+Z+s(v?pmF-MzU?5oy&BuHkdGI z8BptERr+>OoW(*BdBNFz0=ug`J4*1J*Odo*V_V2@TTrr3AW=c~%E{yOm}|o`s}4($ z&YUZ$4|({vu5*OktXy%mHhkNMrn2PGo>@nEt%2}h>bR9GlynX1wFxQ)byVaFSg$A!Z)fE(Oti_lvsa%niGonTN%JuoWJTDj_K{AD571C66Oj@J z;T4?Tfqn;pJ3+{6Bk3IXjT9U&YsAzi0$bK_-7Y}0NRXezqTMJ8D0kVbcV9Hm$mu%HR0MYvZASiQZn!6ai4)?n>55=!G51;%CrF#P zywd;6-n;((o?Z7{nkYCTl&UEKQGrC{2OuHMbgjK^d;1Z82a&$%-g~V*c4K?&v0Gy) z4f-|ne#0gED3vv@@nm}o3DYRUY(n6n5+5*k}(o{w7&pEC=zcZsU zc%t7|X%xxv`5n)h&-q;TUVE+g`}HQ&AXg+9xKiTCDg>9sYtEv){n(RlB(=0AD^NdU zr*szHKKGE7gvSYTXD5U3D$xQxkywrVASktAjp|e*fLq-%9d$N!fpfn!QR5PTNecOO z8EtD2-)%mmr^)TdpIik9mL4Fj9tf|^wbsPpg%eg5uRyHG#sRnVLceSc88{~&A6v)Z z9<3~MW|TG30H<)EsYnA`8~#LW1_Oy&%dy||=)s)*+&+7KsfpE`nRN=XC(4%>cFKSk zrMgxkOkkjmV7)<7h)v+cO4SDKHC*k!r2!h!p-H#|g*a_oW*79c08s}!@wzinYXMkm z4$|lCC$4*O)rj8BX8<+>imCI^#&bkn4*SW`0-dxY3p}u5?4b^Hu>+X3B?>F4&^wO;tZ`qr=^1|IQ-kAK^yMDW)+U_W9{ z(B)0FCiRAsc+hA&2uW0~IHvP7G|Vy4o4cC&Jo8fNN1nt1Jx4Y3$c3dN=2I0>ezk`wo3ivbwuUBNd zlhejL;GXUU3L9ILAV3SynRQWJZ$EjhT4?V`PKLXz^E{6JA`PU9@0)@3> zQ;FXB&>Cmsc}zP&w*5>%=g>JL5W!6_$57T4z3rBhzzg3sTLB48fQ7}X+fQ9p4#uyp zs3b#2om>YCQLK&gSK^<{4TE~Z$j~nK%e7Tud1XGc4_K`jf4rPxP{2tKrZS%p$WL$HJLo?7l*AbU9?ff~Lo^6$V;a$PKHYb(pL7qw`3`SzMuJ!_N`L z#)xBWlvXwkgoNp$d1NV!VQ__Y#0`3r(>8du$RMkI*`OB*!wjgm|K_UrXfRPpn+wIy zl*0oDVb)Ms0Tl@u9c_WA1OTG1%+d7p!sU`pTA1@PALQ(a`o$X$8bc5n6ag;i5l05f z?uI(MnEU9WdS8jp{T`}L1SJ6KHgZq zafH}hwGfpBuQk#ZNSv{Zkg0LaX>CclASRE5zZSP+F zc&h=_jUMj>TOkiRjCLpEq=7oC13IQEsJ=Tl48aB_k%?##7-cPorluZF$Q;sLCM1n2%vOVi z2C6rcyq5o#UC}uWm}98C6JONXNW4r38jv$vGvul?g(n{D83Va+ZPG=w>ad~l;?0?( zZh!ge93X!V&5nUJ%aqX%nRNn3UbNBoATc^B^Neay!$=1DAnRn8j25jCOrD5p&!$A( zXkO#9qycAbXB`8qFf5O-|-~PKNyV=riP#8@xovpxjH8Tc zgE~e>%xW=v%z;4qu}-HGrc;RQb(thBjhPMnOg zwzOlsE@eiIvjGDlIOxX47Q1i%{Z(J|*7wGss$&a`Igk0G*ia)S8vOVON~}R2fX_xj zn2y@h8uNrIGh67XaIhE_XYwrV+WG{>`nWf1gV2YZ$go)$TPODMeM)ct!?lla<3%w4 z&FmC`Q|$ITulK;Z#Wqb#?sOza&+n>4TV~%!y7-4c4oP3AjD-kgb02H z%-YtO5%4*B3zF?o=&0}8U%j3P0kb}nW=1x4sXiR0hd_sy7Tnh}c3m@2SO#_HJ-H3I$)lKjvO7ol8@lPEg5V_$*p$3Y}>hzO0I}QYFXSnrY6qPtrZ$IV^7?15yiGf zz|>=%={h??*mZ2*F)Iig5MRB)5u1|7@E#i>9Ambk(Qg0KbuUmJbRwi8!lKrEEYw}5 zJtqFLYhE`~(NvhZWGk`~TOXZ5alDp;38Fbd>{jOyStmWtiLOQnp$Htt(F3D3YodL> z+DSBRPTl_JtJazg5;n?S;auq75W}H9-FQnFw{e7$Ag7Ddn1zm#Ozl`(3H4S8z=jPW zycmx}&Au^JJv8^h$eaDlm^=GfV`4@D7pfdFUAO<`dLp}bi^Af#Wg+RQv9MyQhuq#C zt`Hz#W0`<60(0A?P{KSZFi6jKP34UiOK+j8Gg6EMeOLTRo(_HC8NM5CaXfMS#pF?X z`{^fND#bKgc2I3?stm88dKP-EM&LBWf(R_R{`$3E z@Y1URI)T_n8n`j?lRU+MK_CRHV5JTO*{$4t4dh3(Dx>K%b<3*BiRNrngf(lcA$K-G zV*`4msjf5Cn$AKCzvBgBzCaka|MjYJI+6?)=Kijw#|bHVIKp7D@NI3yIOts9U!l5f zC|I9dW79w!k=;Xr?2MQ156qgyDI=0dVuxXtPAu?_BhP>(#S}q0-2efIr4FRZ- zfu(e-E0-D%80rF?Hstmf`g5$uyjAY(-d7BBkb%wkftN6X@Tm21-+ZY zKIrSnF1bbzV^2iDtymE@`=sUF$Bc35Gek#39-TJ#!TAN<2pPBk?Rp}I>bP^PXfx0= z5ClC%^st&xqC>fc+z2!bQPf$Cfr4lQx7&T5vnoZ`*=tQ4VtOD-^J+8CQ{o74kGw~|gXuLZ`>1rSHp?0^*Uo{n z()D8I20647tv8f3{B?&~ zByp3?DWe*PVzLj2SgzauacP4Pp`A*5DxN!G>jYZ=q%{cy1PZeMyc<$39OD|~jzdX} z&c@swFowl^x^4sx&Lun&uKF=?b)`U?5zeqasF4ea;@IU)Ec@+mUuPn3iS#R+f*359 zk=jqUz4s}`I%F%at{vxQ-)lp!4Q&77TpP2Rej+*$z5Ns$L=t^lgZOcg29m>RX2t-k zQLH1ZYX^Z8xQ^Za&#S}NZOnsBoahSa5DrHb(cOsWKs{4|(~4!Er~1@}_63*$XTU)- z$s!!F*MT^bKuQ5PcZeFnz^ip0GBUwMXG(|;Bm>ifp1W>;=YE|Ef8#!!3V-u$aVq?+ zXPpWSl)(;TXmVle*l6poPLoOJz_A7FM8wnM6@v16g9MKeAa~S<-CbgaN!Jee)IOW? z3d)k|jAkDqh>pj}5fhY>Mb`#cYsJHDU2#aAM+t{wy~bdKylKZA=-80c7CO3n<6<$m zTVtcs$8ao+-f}PGpm`!T$u`b|XjviMp<3j?7}5Z?)_G;2F;cQgfWY8+-f&z0il^K9 zbw95>+-D36k9-&JeQ*CwoF(<>d;534dKY{9E7xVDW5VtYJ$so=2Ea=gnn*{~1NU); zDKtQ686#z{K`llj*ES*G%%B=EhL9A&7~<-*n?Zq%jMzrKyM)wgSGdlAej*xjPS8QV z{oVVSE$d?Mv+WT~+z-Sg!I=E<5;aDGk+F|tL{^SDeP8zipk}BKa9VM*m5ir_NL-m` z4Kg;sc_-SaOGwtaJXkb3x<3WAswc0$Zh!BC@A_?bx~u-_SMOq1{p71}$FBP7tIx2^ zHyc9%qEI72rBTbesb}$Q6LSSj)J(){cOnwWEF?|y0u~vgB*+OmW_4?hG8czvaO3Ya zKy^hVA;gV2ah{|aTpDvI;xGDxUDebM8kCT*M8hqd9mcv<0pQt0i+DD}U?t?zzi@RU z^woN1LiajN+dh2)9ju`49VmwyyiMD9h#!z@Qw;iYk9p~wkuU*g$LDs{FMan*?|Yq6|go@w)>^O>!dQ-)!1kh5;z^}#nw zs>!*G6#;8H@t}Z-4i=v?71<;u1c0(J_}99*&2BWBM)@H(H~^3-v|3(=K+Mey6Q9vW z+eMBc6hu&MfRp0t?0p;=E?WVszWw1>uHAKI>!q!y;Ml`c8`*$}(*cB5bXgPTlOu2l z`SeqB^$rEjXc-y=Z&8G2_dr+_EU4k@(oQQ{+NP`EMwr?UqIFxhg~QfG8@&CICznBs zrLW_*3iHu}Bxd13=@==RTWnZi+BU?LAk7}Lg*H2e*ozQ2bzORwW1=$zx=-yO+#Z2B zMl|M0C_xB%Mr#luL*d9shq?XH>oR~&-;kx2Bf-ijI)cV5ixnQ3h>lspBxkf4dnYM16rfz_U~hTz-?(`dhr08=l;Y25z3SKcbg@Lztq zY-0iXny(|#M-@()R#8qkgb^8nrgy&b2-uG ze%ShyZCH1=E5ZgvdJ{;S5t2j!OsOeddeecK<@ST&Ze@BzEaL$oK_7^nkn(E)8hvYA z=~@yen~HG4*9vJjEMKi5)8|yL#qy71ci-`~xQ`!tx}N`QxP|%Be*P)D<$W)`|D~7f z123T&n(wP;*7?W2sds#2q8FNcVZ6^fp8nu%@OZ-l32(r;ULbU$I9I{E8Z)lNXXJDp ziZKsn@`dh?x3Rr!#v1#^wrOVF=A!Ghl^-}zQ9mZmNM2tKtj`D6ZuZwujb|82k2(7mzh4R8$*b?_TMceEZy&+8OiD176X9RH!ql zdO&gr7YkvoJL}}`a0u(PR(&=?n;q$%2i9JUY@zQM2hsyY43~+-KsT-JbAtW$9oLjI z&NOFr0-RtqwA@tq2m~V?Z+0eA=R}0e7=syPi*(q6Q=q`}ZgmaPcj)c^{@|O%@7g7<5wt7Ere2;za4lTvl+!zuiSU$4nmC}- z3)x`E*0QpJz_;B)Jo=2C1L>u+4bnDobh@IrtW-wB=zKD&4dghKHaoCfx7#<}$8-AT zPrlVt!f$`Np*&p^Z{PaKhbIImXV!oxz|{6UBR5ra1#*6~m9(8oO`&pe#v*??zqSZ0 zEz7sJvztLyo18FJ!)ClBdKxCOI+kcnFl;-r6ycr-k1F@Zdp-m^4j!uT6EzqWd2Q9) z9LRsbe^Atcv$pkQ*poYhj6ApVRCav(I*=Iw- z1t#*lXT{KblRf1tAM7a~m@huNkv#UDy!VYnA8sUXNB+^HFX4at6L+yR+|3gHCN#$> z2u$6GotO~g4~3dzT|yD`EisHvurVNf_5x7g__?HaZJubdcU#sH`I!iPL{KasrmSiy zgozNO$9)c++vh|KJPcI6y67Ok{hjMMJ^D`acb{BF)hI*->;^UmOrg1)O5it#rMJ&Y zuL;j$SZB$z_jNKH&In(IsB0nTYT)?fvfP*234v4xG^ESV>K&knoFgFR#ib7;9ItPG z?>^qz|LYTP_5Ad?6ViKs-}_&_{ryio_skCWv!8f)YEqlXJSLdFkR!E5EeAoN^D&$* zW9&=3!Q{|R3atr?UJjQD3ROd}rzuz@+JTKxa2TY0&#yWzjYFJ`M<(C6)}xg+VDen7SQ}01B#2Z1i|BAax_YYtt|r75 zHTm`@o;adbikDAPSgc@1fHAB!z9P@8U91Xt0!VpX(*y__#wp!in>=Zk7fzRO!rlu_;+k_SI-#?9nIdh^S@_hThCjDg zKXxU&V+Op@Ouy(O3CsQI1AB`Zj#e>t$CH&PgfY$y`%`vZYtJ0h_#i&5Fko0_d3sR< zVs6C-(nJluAg3ZYEE8uEF=3YhEm+j;|G6w5ZS@wtNyNB7>Wxlqp!h+&8iP-@po$H5 zEXb8)!x)?dw6m83fL7PYaD(4P15$B=5w@UjhrA0~a#dOp*K|q(OsT!L;V^mo`}PK-d^}UDn{Fb_84gAaEr`?^#)trjDHw_D8i0whs$U$OLum$zU?{SE zQ#CQjZYz(0mz3IiPj^|6>fgTp5|U%;JaZpcsOO~h;YQU6p*GfHZ~P-<(8?)%aNE)a ziUd8a%RYxeid&e!lXqHJ>3|+G9~Z}Z#e@)tQ?+)jwFqPBd4-1U*3(LHOmfI25|Nz> z!JdY0A$+&^vch2%ktG3l1+sZ%4B^|SuglN^xF0d34ZHN}Oa0n*r<&|?#e_6uGZ|s$ zz*&2)bQMM3yoZVfwf?281eSp&Sn6jc%!j~n7KzjY->L9+xt&E^u6Pa zvpygDHvUt2+I#d9&X48Ab>&$!we=B+v~p7VzPo#!QFd%ukxd;oufg zVG*3I?J;2ATQyXG#JzN48>9G~JD}|b+DIB%qq5%Uiuu0%c;3S?>nHLaR{iUg_2`TK zlUlk#TTFG99XNUp?gKCHd+xcQaVZz6>Vtvc^>l6II~zE8keUb(gMr!zfEihhVcbRo zXso{YVtkwC3K;h0LVF%nM9jVn+`ij4-boevW>$emuOI)+t9Mbj{lKetQ8E4Ct9MZ` zefrh6+Ux$pis?sQeWn)r(O2KF7Wyw=eePZFcwH?dNe5^md>l5CI#NbyDEKnko5+$i zRRQZGK&G)llm)rfD414lkLF0niK0CdmIo(I#N{550rVqa)Ho+SCPd zob`s!>Gtc_WlR8-i+loYL$xPb4r9@BbI_#_9+Sn~^NZb#tJPk@d*$|Hu4&S9H@ zIVs1)TGj}6fa)R7WNN5)3tTzL$l4ClWm);TeN$aL0J7ZyUp1t!?>5dfA%SMJdjJ_i z)K8ej!U%VE2N&A9$`x0rjhHCav>mVRZrvM61B1^JjKzubSsDk0MccB$KgE7n!sNGa zu6t;?{=@IPi=FOinfUkx+MTo+f9IQcUmm+Y`$zZjx_tfjzg1P+7ZyhU?)Sf874!$b z|Dg<^u`)=wlzel-LcVGJu3kD)&@pJR1&U*| zvsPg-(Qe31CtAP=A|!nPNTdtalH9tn_CO6FfMFF`VY};?MhvuRT2*g(WIwHf=yM@h zmyhWA-&-Gg)>Hb(H|~y$oi<*G*A+WYfAE{dQ_3)8a`Y9WGEi^n9(_pjLj^D=?Ng&N zSD)0SgUO8d&X8FFst-jiKj9_D>g_jsAQTTaPWNZcr5_qt$N0CuuE+;^EL0j$(+$9J+j?J|;H^Qyx z;K@uRanMnt%>;i1<1OiNFe3-7ylve%vczjOoMh}=Q7>bloLCihT(CpKkr!bGz~${1 zu1B)?%F01@En+e*dlT`*hQ^>zE$~U(MpXwM*G3Nj1s|A~a0PpGkzAvdb__qE*4$?Z z8zD%cW3&l07?|z&AB_s9-O*s)JtyCO@w$vipmRt^s|`xm!9#+i5em6w_{43%3QZ8Y zEXatvf&T8Z4h+YT1?WNvjY2qktXOEZumMJnJ#0?hEZa5!H^>8=b0?SS-mSHskL@r~3WG~^ap6m7tAAHyExKoGiuY3xU^Doxg`s<&1Ccm0vAQ>STq2se@ zKMk7IG6d+bu=B=i?L5W`w4i{3(>)v%*e<+lT_G~SEnJ44#IHg7Y{L&Lpt)TFDHbD| zA+M{)_EX$O^oJ8392w0J_8{D_Y8J1hIxy#$JsaZSh6$lEBwHPdZ(#LjYY0PtNIeoO z+G*aL7WG!g(KFP@dEhsic?6n4jAI6MaB3QR<5I2jU_XE7ll}ae{Ob3-?*lKr{Nd-{ zS0A3w7@;2dhTgH^wY?xOv@bBcKKb=;mR&yWoQVZ;(=aHWYqgQvzz;^I%@{_x5;W2d z!3vJ@vbw=9fipDtAa%|e3w&Li^x6T1QBy{l0OSghw)v3qphCdUI&d&ZtJC`JXZFQG zQjr7+xz|b@??(vyTsDt4K@e6CMm}DFoZCS3E&QJ@qmD19g9hr^*J^?85DF0_!*~n@ zGZ?#fAC~?4WQb;~D%xWL6O4;0?BilK!L-VN8Ht~JK9K2RWOW?ihdJzH6qX}=J z*cQ#Pi?28rSfhnwwTC983CHk2YUS|0wv&^GhoL`92faorp706plqpESI18C01`gJd zgYcWi&T|lT9|HUrI@aK1B8{Ug2h?HPR@*(cG?-_h-~&hN;o0n8dMe1?FTMY~=f&qg z@N#|l!|!=^R{z*H@s8K;@c>vb-X>tdqtCWJw%!a_@aRLxKlt&xnEw5tkH6I=>%o}q zkAD0guU2pRC4TvO&-;J(e(!r;_`M%`*Oy!?S|5m_6~V-UD@IrJIQ(FEb)4yR_{lpG z4RZ64?wh?1SPn6p8^n7@@U$2r(IH+e1vbLjLT0u`bWzmGR%NC+5v z@a3g@)bbS(4H2*lS;ALT&mbTMhLI1%ZX>1>@psu~HhU5jEW*0R_CsqK?~0ta@A=ph zA%BcDXK;|O*4L{3j>g^BXDh9%$ zf(}Apc`4F9wE|(ibK8dBIq85Xiqq>xMpyPdJ0pgV>~MpTBB#jpB@V{~l-fj!$T|zx z5C|Jq7un1h5jDL6Bx$Q!^xGeN`CVWBX2rR<7%WgQo>8t2h7=(Ays1+`VsI#Aly~pI zdQ=K_$Hhk3Os~u#oE%UjWB#({(h{UrZp5QOqPQ(Qnw9q*V5@g=g{`}3+&=j|&)vmK z`#t}E=>SjH-`n?o&ofj`V&tGMUxuE1I&Tw@Xkj(xF>L{RB?BFa>NS}cl35nUe7zE! zxFw`b8Um0K;jBg@yMcxjY*SF7jyiiI(j#$Rp=hocA;^A)$_YKi7O%3kK>_o+5O(Q| zDDHzP*E|>C67mrY9ZsL7NL)IW2+#zZMFg9g3kUlcZhbWmvxp0&*KcD_dMnS2PagRe-t+k61$n(zLB2v_bYcEQJQi2m=|2%k{AagThLJlnGG3Y z6}LZj5327chDmP-D2GvL9YX+MtpN{v?ZESF9V=n&McfBcKRb6fu(letm<9{}hy{jd zQBkLj^kYTDJmv>AfO|fSuX5|j-B7e)7MW}f;p(^VeeIeUY(c0Bk_WAdr`LfdYMS*p z$Zgrk-`KMwdyr3?wsoL3J-9v?_$Vg&PYZ~sj>)^u)fst}0Be$*J(@)g__;b;7vJNA z79$qKZr^ZG{gi4=z`QRbR$52^j9c5Yye$E;(vUO9W6yss>=y*n3>r6y|B_an~ z+&*uqywbk z-~nFZ2w9}!2N9OE+jc_-&VVdA&Um^@Zr}IXU7Qgwb+vN|5@!*xWetGxsbhn9n+P}E z3-3RoMB>arGFs$m0)EA5qala;thVv3&ln2`RNKh^0c$V%ISA|1hIE-~NIe5%6{@B& zaIC3w`xEcJ23mo<$PY!|6bdrOm_2=p zjB(OPaMS1T=oAy1$Q%=s)>Vf2fifc|5GHYHx9@-LiFl_SnuH^LgK*8xLVDSz(Ga11 zYUFYo=R!~n7BDUajEfGn&puPp$O^nKsOt-A9|&E%1rhLn)_QZyJ*wl|lChug*sT>r zb+`ZU-S;3a`!8O5?jF=-f9AC((8bx&4##>F(s4Y;{bcI9A?%mUeIn+t0u;y|!g+d3 zJ1am=YA1aTn0XFEx*^nam`iJw{G{F7tq#{5g+OD9?C|X90Xt^3+YdasjNqB3pblYm z!rqR}P=$NO1zFB2ir)-N69I(YLCXTPPd9ln#M7Dnc%vP4~FvR)*D2Cp+I@>~(k zMwoxkgBOsb`)GChrb|APQ*1IS;&FMl*APs<_qqbn6akLh8-CB*gcN2GzSjdkI)dO4 zw|-WOg@J^WcFs*L=c!cSBHj2L+6XVklLGV48`6%OBkcP2&F{Vk#orHJkK_>Jqepfi zLN06XiO))n_fAAFq<~P`crTrJV`I0rs3TK*FXf6gcp(x^`bOG|RN5*`B_{Sy;G-v2 zHVbg6j0Dv{EFU4sU2cE!3IFPfn_K;iY=LCaOs_UZCd59iBi}ASy3qj~c%D{)G7-_N z;HU0+@n*1V9^GqFfEshf;k1~TdgN#e40G$dNp>Fvgyez5O!@XL@4g4w;h%c>8mVn* zhIQo(=Jw<{y6TE^Ng=avvqokG}R+-6_B8 z-+IPB@w=ZIcR%ymGiH@P``Z5($M285_Rzb6`T&|KXa}jc20Ap-1(#v4i8Qul0ZL$J zH*0_akAdDVT~UjWQUG!`VvT}*)v^?M9RpmO02Z3kRl+Ynq~3h&8+gy{hj?MUzWwmz2X6zfX|zh33_0}V z4P{;Hh=fP{YJ<{oG#VaD4Cm1mI%oNmLwHkkLA-02ZG`bUnHq>y1nDdK+SwZv<9pCh zh{}vtr`6{bc!~9F+&*zNupb*WcKZ)Lcn@pab-Y7Q&5>il6PB~qz}-1YXE7*saW=9* z{bZu#LbIRzz*mH*zCE*`v~twnY#m8I5`~O;U8@iW0(lE^ixuDLR)_%P3~k;DOu36`IsjwJEnO>6C62_hQk-S+Xt~ljYJ2yh7=M=VfKTjefZ23 zsmMo07 z!NA8N$flPQEh`U;ie+#~BJmXMrD~+nJ?J!TGN6|oxMAEjm(?sBjFQZdZa>zxG4LAc}SH;w8%1R_hGWz)gZb}eeCp?eS(0ij4?HCQ;ZA-WHJl+))x{EuD9)lG#b zz}Ls%i4hb(DJ6yY_-Lmh!*2gEt|I#o59+-3>RZh+8u{>?-7TkPlo2l;t*r<~!rUqZ zWU=pqGpetU-I?8&bx;~zb{WA@2sf@DFl!frGFKlP+L_ZOCU2N@ zr#+%UPK4;(Y|(ax4(~P5RpVNVU^bp&{q}8mGk_ZguK3amp4P3P5dt4`^@3PtT>nm? z%SGyW$t0>@`KlYAMsquW*iW>x4`;5Lkmqc@dKmkR(Xbo~EYiu`=NPSrV&k;P+kf)n zJ&bdH;WKwJ&iPNTk9F+J7>@PM`|4nawUt1!;G|<&b{y>|G{1EtTjxwop@O7~+Gqir z5?AduIo)^)z@o zaFRh6U;5(aB;Fv}Dm#k(tDrHR48X>MO-ecsT6r=LiutuPaPZl-5FO~D7{Hho5*;AF zn|(#d?b}~`*H_)?vG|wnV>SEb&wPRJ0KN{D>IhXXx^sK)Ppx!c3u?(cg2VdUkS`@_$_`=yt@_L<<=M&6kRt+aLqq?i*~HDhMm z%l$CYHw$F>(Nq!tj?9MRWB^9Bf+xe|c&mgT(WeSTXoiBKspA7v!5}*xnmQb2$JVVskXjyQ{QqLcX?L>IKqilGZM(K_ z@o`wQs|JJzrq(uEt`8Qhf8h-ltcOe0W8c9$Zk@yn60gh1disO6VH)+=O^cuX?3FeI zp_?I16`LSonoiw2D8K_jLV_KL`Wc714N{0&F4+!=0I;O!{dF`tkZ-@dm}x50A={2>_j)ii$xH6!#`2la2nxh=x5G>@+F3s_k`@tTIbegby!%|nLdUXwC$(2+b_I$ z5Bkqvym}`gc-?k4?kXZ-!L>uoblOhH^Ptu0Y#4kE-gBetmz_Li4UI`=6bNSRaH&Y5 zxnzd53q@QmwhKJKy|mNbJLMpQbt|MaQoYLSkFDUw!c&nijus z-Hb<9fBxFFh|h-2jAsL3FJ@IipqUfS5bAp7#dT_(yK4510W?F<+BXSJ_yHkxMFQfu zM!b89c(=kK(?Ppc=_zDN9MBwfmP*7>dPI+T`^D>K;Byd8L*wS0vIG?rb6)ep&6zs4 zacjQl_!@0YaEKDQ?$WY@wXutR1VX`jH&wtVG_yO)mW5+1&cbxUq;!l@Fyk%8isK}= zfAHcxNMV2Jx)~5u(VT?8DkP^E(N~kv+U$^kE;^$nrA_Ufu|)JZO2IPVUGD5_PT~O~ z>*}?g${1)@kKBS&eh9c&=weEn8)b5-V(zrlWZ!=M>Z&bJo3IPBj%Ez=5$4Jmvyai? zg|u|ePKOC=DRiLRkZ*S~YOm32!Z8wwudEwdbHoGKlr?;Ss)pM}V7DFxXJR)}MBN7u z&)YwI@m>G=ogNQ=<+FEjJp9$qev!w+U;pgG%p3`Wy$)PPy=~O+8Ej-}H9h~bdhH*ha?_CW%o$kD-`||lLVN$pw z3t0*d)4udbk5~p~NrBme*$|k-1VQtPjma4@Hwp{URBS{Qu=_W7C8Uks95bYdqA77K z;jvhVJ@sJ=z2CFdN5|JrG9DZczv}hJ!w;3=l zc>06iYHa;Ru3X=8AC0YV{bCzi-}X#nOH|-19^Iz_$S_78;ac!d_94A+R=C^P&pI7tApPY)>skxBqh)j4H@a*4@(B99uoKaCS(OvI3mhiOTzwS65S z99fYupqEEmOW@0_2GS$X8g3}OI0%a7B@#fKkJbQuK!d-4N9fd;Z68|PF?8y)K?f#{ zW3S0_e6@i#)V{cSD44`HZ=UlZOYh5{`s1Jf$TO|?$G&lQyhhmz{JP%zJD&dFi(jK2 zpS19?=iY3QdUP1YPk!A!+@YWPx-Sw%@#nwp!4lPlhtpgFrm&u#r}C`c>#+7_m6%@f zhQ&X;bWS9Jxn1T)t7)wS*Kg0ELs$0$xnZLV8#^EN z-XB|v`e2Fr(l@kzJn}8OdU%y1CAm6FmoecwN#pQd zGKn4X6ee2YGXkxd)6>Wf+R&F3)mz94PAsUSmWeA>+Q>j71Zn9GGQLhLJ>VFfuu+Q! z_!hK}P3GHozYJ^L8|@ZtclDmDc$r(u2%p4xE+elwtgmh|Nn#1?rF$%4U@`KnEzQ*$ z(Gixu)A=M_magpBRf1N5={eCwl|_Wap^Hk6q6I*LuD4Hp1g)EdN77M&EVvRjp?ifr zrS&N#L9oR7;54MhOvd{I>KZ(`*&)5$G&mN8b6BPxp`4|Hcn|cfBg zJgINzgsiw77T^7hiNOFGr!$$z2~ZE&h;lMO5lUd+kuwl~nKH=RY`c!EHE4kT4s4Gj zlzZcJLA3}&FxMXN{P1 zKwNJ4#t^drd^`d{s+MDHr#!vQl>tMvEa2JtZbc5@c|D1 zxUD?)4ZGuQrN6-X0)N4_^7IF9!wlCv#RbYC8(1$$u^dYEkf9xaQMTHW${<=$_JoRO z@20!>jDz9=z95}E6x!Ve1<#Iz^`Ipp)p+*>JW2U@t(fK-&5odL-30@d%9_a? z7XKbmXz2;fdHc?|P&v$s8X?%Q{L^<@QU7P1on(29Mj%d zI_H)-bKHLPW%#n*@IZF3uNG2jreKo3n(flLXAAP)*rKkjJ#vXUpIwA?=uqvHmF>V( zLdk215pRqfE>cux4H)vLG8YaGdUb+Pbpa4i4 z6pDp-5cVdR9vPrx2PcX#63Dm3S{w9oei934e1=OwFV84K2myh{YsQJBtQ~DKLxeHT zfLNFN?Js}y4Y$~L{_`Jr@%jDUmwsQK_s*B=_E$dot}l7BP4}Puz>Ckne}4EqzrSvO z^`r0n9Zxsh&;RhRee_}ClF|r@eF{P&5D$)D#L&rPCt<>L0edp6DDq$YD!{Iu~tIT%r(!s59 z1TFHJx#vN2%OuP`TXG{DggO;`xB*^`ku*wa)$lr^yG~bCB`xs#qxwiV>uC*FQ{A8k zj+)CJ>O21x+`oKjKmWd$-v83e^?{e3$A<9ybyuHZ2tM+iykmtY8sA@_n)+v+{Q7P1 zo6WOV?3~ESPUm^Vp=xTGhwAduZxPIFcT*2-ur%r3tXQNhH)_EUH zI1ljsjn_Cl3IpJ17gLZiVczEi`|UeE_+~vOo7od`8_Tf?6B;6DEsX1&>0L23?JXtI zjDpP#dYMV1(Cb+Ol>+o%ea6nwkz>>bVQAe4ra5O@DdyIMY@x+A6fcc7KxsC&+jn1$ z@JGKxue{|(_;3FLcWu73Z=Zao6TWv(i5+tkMO}{b7z$J<%t))BYYuB0;iJ38+TFo= z>6=Z_MI#u?n~Tgw{WM!)a5OcG9n4c_jb=yz7?RtJyDeHW!3)x=)*oupANd|XShK$D z>5Y5lNbtya?T(KG^g`>eYlA=i!56Yx#!jdhfNIW-kg>f==e_?u4Kz{Bdn89Ayyk53)nEyV|x2@7cm@y;Z-sAX|iRT46fNGdB@PDZJv&7n%Os)8{wWh5o0qn z@(gt2CvP;;rJ)7YxiDgioExgn)~o>*e0a~;G=0ESJb~#oAQSfO$6mb)Qs7VKJtTTQ z34k4%?a0VZ==7i`M`G}5?JG33U2?|8qI+GU7GJ?@JD%=nXwz{t?`{x+NA7}E_*A#m zdPk28fOQ4XQLQDT2#e{HePRncwQfI^Z+a+r?C90c-bW_=PrUk8chEP8TK&maKOd0s z`3(Y%wx_>%+Gvx`CwMD$>pW_#HUQb)W29~{yt9NHkW^p@&jepe6D_0N=7tl|?Lebd zjbTXAjuvna4F0_eqb!WX79U=iTrC8bE=MLf9Hi^vabTpE2mUmiI7{e&(A7Y8L)yXM zT2~Gtf=|sBw*|r3jsgfP&=^=UinvK+TcBZ{K9{w=M#`|YPfbXf6S5n=zR*Gk{#>25 zhwh0l`$(-1%>A{`Oqd_}uHEt0YA=lbx*^WfAG{qCWxu7 z#__LQn+^C+}6lGLT*2dtAKuira!x$tPCvGl8Vg9+Htl893^4?s#eqI4nKUYEC?*cle8ztO`zmSMZJ+mHO7 zYm^jlmPCt;AO>H;65rMAyd}<#EZh>EBj&J}NR2pC)|iMVhOGmg&$hD@_vUD=^zr|) z_wLWSZ`oOwsZxKyDt@!jQUrpEh3>97$DCu1G5G`hGd7Id?B2<_W$%5u)BXeqs1zVb zLV{4ptq4T107FQHkZ?03fR>O5Q4^AMn!cojG7<^bXg%*a9lF=MPSRbj)OxG;{-vwW zI_vEHuDRa#ne#j5^L!pdu6PV?g7(cp+D1g+(k5UZiMYf;a0CDJ+wm%dkZEb1c={c`<^p5^#^EgPeP+p8)Hkk% z5YnMumnf|6O2%xpC+_KJ0~P zwRrkncoi0`RjVh{m@@_j`FQs0xJhM^Jr2fRaO5WxwZzU$+zZK(Gdva)4umqqX%I^S zCWlReR9nlo+@-U&76u2nV36InD!xY~p8k2fihyN%=iK=0ov;CS7L9d5vwK|~LqrQ1=cj++ z@+yo@f#5bdDG&Bf+>zrdQ&WfUV}z&9t;m?bD%+tpS_$@wU=CY(>DWb)Wv#>r76iB{ znR?K}vC+zk!iPG_6Lq}}5h^>;v!4D%yb7dZ){F!28UXU<$jr^gHk(ZND#qf#O&lRc zgXDSys zSMy)K{6<(Vi1_d+j3MRjeWB?GKlyNUgHA#P$LhEnI-wXUP}gPB;M-O5M(7|P2Z2ER z(%7ehOJ8(J?&TbH8a&D2xmw6ZR1k0cR_p2i_-iitfX$tIwFXi-0Ew)X+Bhca%jn1| zjPK1E56GH<3GYx`Lmb>54D@d&5PyQ)tSB7C8Lqa|c33iDR58>#(W#@f7Z+Rd$O-74XI}QHvqi{H*SSd17uh!cyxn*rLIanA4?C^(Sdeev zZ@Q!N3GteoIoGec`kYMQ{+#WswE*M+dZ7*C7<-vp9VgeOtd_&RR9 zcB2FT3L-T$UF7K5uJH2Ujx(PAwac$$3i5rs&|=X?6|Tk_J|GL7Xkaj1rb8$+O;}9k zLgUHkYZvlouS3^ zZ5PmAx3)2=Y`{+)p?0zQR8ye2blW}?_cDf0B|?Q*Bh=R8)HY$zv@Hx&kqhNKqj4v)_TJRf3Tkfq$=^;r6cY=i*<8iNgE;@OkbXMOYQb&t7sCuDC$X6+=nyOs4H*q?ZPh3hRp-6f(eMJt8P< z#uHi4iV16))}Eq1Fr>=Cy&+>c+6DoZw(gC_k&OlAVYTjNZVH$BKx|K?H4_IW{Pr6z zQ5g2WfXwnl2(a7st%@7DPApBjh^(nTFk+~))i%aJz+IVvv>lBEur@x8?7;D5RK8l` zhCNSO-F5F=JJuh2!ESh-pdadb*S(|v|J^&k>R-BFM9_SQ9Aw{hQYoh$l$=YSVL<@{ zNg&%N0CCt@9Rs{DkWEonL1)0$Lu^Gb^A>6;wCT9Gd?PTHyc9o1lQtD>Lrfphim}ne z;ZOen%zvnF7f=q@vVKZYXSFs`Gevm%nmPkj)u{e7z&FQ{tz)_Yv0>X}w*!s?Occ!w zww}vhe6(p}L|)+q+!Mx%=Il$`WgI+`>>Pjk2S0YXMQ8~*r9rdd#pv-u)-o;y)G}wH z)qQ8+?G8(=!!xFP4DEP)8P?hiLFt<|a#N|OG^59kb;7Ex&q>kJW9J3p6MsH_c!m0Si%Pxavn z$;(hlUltO$l&_=h#2#{4)>AOT;2b$@KmEfW`w~kSeu2MxPCbA3<+C@Qe$&Uk@)y4Q z@;uQeAGJ50rM;}DfAnKNGqC-3zcIG^ zihi_%$16gBSf10+K-qK7O9P@x~LB z+<(;zx~sg8y_WYYZ_VY3t$tphDR~(Y;*KNdHY-`j5&rBD6&@(2ISmp45DcCu3-&FW zD-g8owuY{iULG8Td>tXujevE6>s`=$Ad3~Lun!fIRe!?!|RCZ)|G|SJ_X)Wc6x88`pSinGtWK;*dTi~ zY226=HkwYCe&o@oU6B8ZsqoWp`kD{&<3IZE=?5+=gxm&b$#kir^_+3=J%!1r;$yXN z70;uqb~3QhQTmGFuZ`5$K)X9`O?~6ne2UI!S}GQ2He>==XTmdrTj$nnbd>nf^h>kE zX;1&RZ~s!y^`AS&Ulj3I|7u9!(;xiytDNarvNdJfCc_+b&W%@y*x7Ci)z^Ip(&u}4 z%xbtsgMXO-a;9;aFYf~)@i_`}>jcCJZri@K#yH`0-V5+vz-3a@5d2nD@#wjG1qd2O zVR|B=qncR+W3n$S=o?K07p$Y>kHP~1^6!7)0eXcWTOck%4s!}_p+y^7 zHG5Mhbj(K<`j{?UPMgJ5vyJN6ePng26QJk_f}Ay-!z5XeEW&N^*@{r0C1USm1Afk| zV1LVihit4Ju>YY-_j}Hb==i^SqdNW#-*yu^{*B-E5IX*QzU{7#gU!?rsPx1wy0gH% zlfe;d&waSj>3o@h&UUy)3;a`nTtD0rj^kJ7(eic2-@P8h-~H$k@!paA1~l|vzEKVR2j6-V8v2vp`VboWQ{Q@5Lpv}rV#1@5 zO_H94F0TTy?1V5Y?s!g%5}@Fi5tTzRy>#3ik3Nz&la7v$WIq_zPt4C;FOPJwQw}(( zZJ_1@&D(ne=s7Ml@4KUw$9^Ziuc2T0uUuB`eI@-RAE`Iqspn6!&a=1bUr6aY&)@#& zv#cu}ee5;8Uq>H%@be1jXk7f;;2egKo^g~n8>am-&k2gICUh=iXGVS!jnj)j;pxp} zE#G-Ck`6e8MuS;t;AQTk4Gq2yq~L@FEmymg3r!3fN739h>*-ItR}8k>(GcPTMDdK0 zaj{aWfS$a&0PDfwjCiNEMhfpXuXORX#zv|OV|ZY#28YmUCew*FY#z30SQyffhPt$c z#AIS=F+VQjr~mh5&WJ$QK;&}JSjkkgF>fCGz$-XuBs@~1^{Ul`n}ebT|A?-b+&2M0 z%&sj?4DM$vF<1bRXPphZ`I<8fPLtJHD9=#X1J+y;HJ|>2kK6*4@+WVi4gA-B%?EnW zANzyz+rRrJ_SfI>-4C(9e%*K9-Cy%PCW*Ep8sMrVh!$H>&Xq8au4#dI2Gd*$yFj*9 zBS7WZ?pAXV17n-;miW+}z_W_Vg%K#QugP?enaZew?wBuw%W9lc?*fA+7Pc5L1Va!Y zG>y9QmQHNKwiJvAI z`Uws)Iqbm0#Z1Ab9quNANf4+=TsWiX#X+8Lf>baV#GH{8hDH$FFsL+mVK%Yw6B}oRf zkARdt0l8{bK%c=4S$)AJJy#jYX;1&ukA20>&Y`~L$8JL7|MZVNgvNi{kKNVyV}@x& zSDc<_;LtzAPupYcmTnrQ6LAT~`;y2HW6r`TOemx(67GIJ=$D(OyA45~7;AyOO@zE7 zaYx$A;4noxF>1^PL{+D}%dHIRZ6x|H&W5Cw_hX$nu| zPs)PJPJX@Y>sP}7=MaW&9T<6e!YFVy%KcI^4H_XYht zt2gq=v$vkTd}ePv`%mimllT6ByEoU5yv(mf{?!%vU;Cq9akCSuU;m>wp|1bwk3NLD z{-z(j>gU6F99^y$`w}wU`@mA(bngW>JMTgV%n6;S{ZR1h4gF1cMqB1?ZJZTuE;~it zHv4QeTJD9jF2)m`yXtY@QS*>oOx|mr#(I~9K(oo(fFP=40s;d=hts%cA_btEFq76g z<`}9Vy4_DNT#L<1_2X%0byd{Y;0)%IxC%>tA4Iqy~1 z|M*^YeU?wMUc7w%ZoGW=`Lnk^{3PCfxL^kgv59R5>znPqM*BF9|Y=OAh;V`(T+O^ zkH}Y$V*GqrMHw5BASpiqlfO_WJif?*mUW)C(vY<<-0C+Bvb`7P$SvnxH~U7SbQ(xg z-g#b@Pu{WT_GZ1T=a% z;4I#4Eb?(Sf_<>B4ET|?%iOq*1J90ED8jZU5VE$t(Na+AxTi)g`HXWRzLLSaOf=V+ z5br6fj9Qo|AfO@e(!#>uJ@al_VQVL{s`s8ljrsR9W}P1x8Hi> zYEb^zOZ|Ggd3Cp&@3@UY`JcPtLHT#x#-RMqKggi`FI^4F2lFVjZ67!n@y6)p9aP(G zbvmHJ>|;0a0i}`d-W9mw12SZvDJBEWm!pjZbS_xOmd)UnD40wFm4%KY4LhOrVe}48 z!`x^RxFhrj?a$0QcaB6Y);^4Cx(!?*f?aYBt&Bc;QeNm4%~5D`bTvTbF-LE6ueMB( zV655`?#U&Tz$1k3*$hQ>-B6u)aDqa6!kKHHbFa|<%Fh`#pTGUi+b;|*qh}wrmv#9< zJ%9P}%VULqRbAJbKlbu|zPSI1n-ll`q4wmRH!SKSZ@-cC{KgAJq>!Y6! z$Nc4A%y)lTYzrUUAN9yD?HhmOCWP>J|HwlK;qU#CyF$oP1aewCup((SX0*We9oRh4 zuvb9KAfV4@7$D!=)>5PBeKZrRJ{RgQE)h~|on~n^L)$y;PRJX^VUXh%B;bInDx4rY zXkE>;3xJ<&vB;?qN9|ey_KJ954qb~qA!fT0n42Bcv^E|P@wUJYZwOLTNdvWE^6*?| z)CKlUyIp8=zNZx^QYE~+gSk5CX!`xG%giOjpbyxi!drfcq zXuG}uQTYBBzAQBC7LK-Gcf-T#-*p?q>Th_EVfBA~HLUI=+#6+Ewb$x*CZs<>t1;@Kqk7>y7IJVa&q(a)N?l4nP$H1LWkvH_6Zoae5Otu6FMCb6hC0Ih2K zl5OCa`iWhW^-TOVYz{&>-13p23--148H<~PAO~>k0V}^DcUV|#)XOTGn}AFOEn;DY zyH8WObbPV8-7BTP^b4i*-M5|vy8d3&%NLhu<=0+m=_4=dO>1e_53MiI(#scKYv}`N z={LNIhr7K-Bv`%uEI`D2jqZIIw*j0LMRYiK8c3bu5=257IeNR)=#?DC9S0{6SDa{b zJG33#T1>q*`r=2NWE&Uks-h>w^LXo1cs~8H+YQKn&uz?GzxP4rt$+P$-kNPjb6~m2 z+E{JM=Hm-7>XV+iIGSEs0)#o~Bw7Oyi4GJwcJrAB`NUN)eHAEtZN983_=s|YF7by15lPn!$h^z5Fl?S5=|-^fO0SCu_r29#+2oOZn}n+odl9_ zZFI~53xYn}KP-v!>npUMS3&=MH#}$f{kJh^_yZ3zXZXWcbB0Qi=x0|io_@xp zJt$C_aSV2M_UKeyO9-9^U{hRd4ek>UVuSm;S2nndRUpyb3p1tA*ow-@xiwX$92$0**a@W&r_2Q2vSqwvO()pX z(8Ny5VA;g*)v*w)(T1hsl-f|+f*-=cnF^M1q3_p5InA9NhA-`ep8J#ypG!{;ofDI4 zN1e(d7pBQ(n%$yJ<%pM%%n^bY(j7{kqS*yP<(qbH-h9eqA}P!3(I57^L{H!5DZ zm}Jvv_wF#i`~!BFmv2A$K&;hcuj_4ZEnn6Lb|EyspA|F;Eg^zO%bu<63*oDEP9!}I zj+Z`W?Z!OQ*3yp6Xj>cOw1(ypHVCQ(4d1BkI&{c(_HI=<(02sB2X)>asHGoSG@pL< zJ&W~Y?{GhUc^R+wmJfcr{Jq=QTmJro>@7cWwYSiwNy})Rpq1#+jY~bCA%vs5k0Nyb?S0zH1<|>S zAsJQMYtrnkP-4W5Q}A|W^ASK}muQSGW7VO+g{fxu)Uil93Yj*cm#SxNxUoma=ZVo` z+s#0;*WQz(F*t*h7>_PIRt=aq=KapQUvag!_#1D>SHBlV&kufddF-{l?fqqai0?kS z@R!a0^60|;M{jr_^v$<15c+Q)WFYk4Uk!xXPQ(%0pbecljs!|;g+d2D2+&y+z?c5P-(&SU~6 zbxic@wc5i;0UHAy@gSDb+c_6}*bG98&84BF&6-SfaC#Yr_i)c`4Mk58Q9?UVYtst_ zUjTNeC%nHke6`*M{o1q}dycVT6jlwRkV$vC`+E71ZDrZbY_1s0t;I#zH8yTc}*x)#cDSZS^rwV+p2D zfG(Mv-Lz>98H2L77#IQ!B1$K*E(Ee;-aVXFLq{UbLA6Kk%#_nD)rhDB&B`UX$BR0; zs!U2tMzU+^Y)iwrE0*7vnN96NO@*bcm9)wZ1M>*-Y+p4yH{Pd84hc`2asT1;mt868 zd%?f=Qz6f;O?;2Ns;|ZL)fLmf@t&_jYfW2ya2Ct(2KtR~N0Zgw_(AauLkp#2i!h4l zqC*e*eM&s7bndYN6ZJi9wT3>(*n8!qJVEFFw=gIfo zhV$h6AH;d`x38Qh#;m6dZ31(eLWY`HO7Y|eV56o zPGee_c}9osWm6q{Ak!Ra9H!b@3J;?wT^eRc2tfJ z+h61?`#nj2KiGXaDc=?K$6nXl7WLQ8?4M6j|H0Ry{&W1E{?2WP`VT*dsDI*0)OoI` zjD-%{Jz|A;Ymz-^3HL}^IRbH%Q4qpn8VIVuw*h}?14iyh^jN6!0<_#aM!5&XO{dwZ z6?xOP0rccGx~&7}M;33r8X}`Ln-9X)kPdH$jt);5PH8(T;v z_Qbrv@KM4Hnw!Lo(0QnttwG8|J6EHjA-+&@ZTnc1w$r`5-ygO4H|`hp>*M)jFXnA4 z`Iq(ayd7tsoU!JBfbwYFbbEN;xg2yDDW6@&JYwPFXp`WsHMkb0ZE@^WlhiTT5hGj3 zYBjWKN3A|X*^gMOYU@mtQg?SWvGr!gPygX(zv33!Dt_v-H*q=ok3M@7_Md-pc^SA* zrJ3EqJy7-P=>LHw!nE!yrxIafo+%YwI)_Hm$8V zZSXFYle)02yAl3=RkWNHK59)PNo0Gkkw>M84F}JQ=FDm+64VnMW&ZS2U-PSe;f?O{ z|NOHzvCIGTXCGph|8+lpcbAVPBCE5mXicVbwxRf?t+7jJ;>uqp??h?Z-f9MBYv%Oo zeI-Y_hkGk_jkW~^=Z!W7P`f%I5<+dC%K>u6ZdMBm)Jag;R&{5W_mzmA2)ZP}p(^hr zC#__6r{S{~d=06%H|5;9dIpV&WbAPXUWFnV9Y)rHthK!_@&E3_CGj4xvA9DuxG4~G z*$ca}boroZ+`oIh%YUw;;)4frkG-(3cl=lP+3i!8CzIrJtQoIpn;Yo%PCJ9OiO74q zSxe6)zO|hSrnQGF@0sQd!copT=WM42AD=0my+@llcJWX-G&%93j9StP^AA5Wod(q* zefsGeW^aA=HXh!7{6QYx{@yivYuDku1~;*z=&wO7)*LkO0J1?f8SprIbA|`sxZEa+ zq&v&>WMAW~;k`F_H%E&j*|Xc0Jk2GL1em2?(?__ zu(Y%z_o&T*YwD2L1`O|}%(9I_Yo1!uCU<-oiZ4y~2=BJV5w(_{$ve1CAWI7bLGltw zJh<^BHZER8ecV5hyS}de0)F}xZ|jkl^tGVBx`O^4H+)_Fowspa{ap`oUHuoYjX!ft zsZq4L;kj#~0)hCL=iImo#&Z&*eRy;%Kxz8HlQfVjW3JO}*rAA;>2vJfBnN9Y7dJEu z)^2-kbv=rYFV8lH6iw+PJ?<)Lr*J=EGlLyB7D{ZF7gr(JRv8;00a6xwVpuhlb-0M; zaq)l;C|9J>vN|Vp0iaEQ$H?aHp1oSm2+IU2|2UtyTg=&)S5627x4<)4vqA%=hoV2aw zp1PSv)wBSZz%YWFQoGEXj&?|pC7$`S0>nN~&fk6Kjb{Na?N`^wuSOk@y{4}P{nZup z@4n%a@%P-u$@qI8o*njr=%=~lwo__i^ z&dmSsgPfUv{U@)^%*@5Js%UQtAF5|}(3@jt+UW&^Ic_Xf$x^w;cWJdSC1n~#yC(<4|CLRLId32z0Z}lFFST9_yp=^@Ihh&byRieIZ^|m(6 zArxm6oQJX&gZI*KHP)zsao$5@_G5FbqBTy?US(G8{_(?qa3!VnweP(BR=xG|nO!Q3 zVY#>u{qoq0d)u12J~Zyy<;QDHeJD-+-)~q`fABUm^@korQ-9=2Q-?TUe})FHXl;?K zFl+ieS&T3YD&|G}F zwbfU5L9hlH&nvG(&YER?!v47t%DvAPw8G$!#$7E2xJfE? zw`C^}^=(Tg`gUiaj(V0`xne~?3n_^hGw{x-89Hgkl(F#!JZs0?yQ@%frlk~9n_}RF zW2xH)ObUM@Qj}YZhc7@;R8%@xmujOq^=(;PR>$QYFoP_?S zPu@i3`+xSy+w}qe7oWTdCI8KzdJ$W_&e_NzA-XgAXe8Z-!0x(wHkq)5m-p$LbUTT|bpU<}TEOPr(QQv4 zPdc&>qi>(Jd=+wx(oM5;Rtk}Cgwa^3pJpJX9Pyl!HrmC~ZN(tVIy$V5BCuqM#@cy0 zWT>^g^x9rd%2MuZ=DcY7{YrlA1O6QR?{Yf6j&eTklHRtUe_5Z2A3a0)SKhpZZRP*D z4TAbV{M1+6EMWE@-3DOxA3q3S_Mcq=W_3Dhz?UR*<&uSnDDJ-SnKvAPmT5Cu6x%+@{smxr; z%S0%-<4oW8B!nx<2h7D?NFab`cy*2HpdW%=aeN+G*mS&-GGzv^#^Ek)?N06TiTAm> zE=4U-wUK+B70Z!zvUUHqa&3zKsuyp+_2k7%m_4pMbdSBFuXmMK_c7t`-|(d6|GJGy z%TGMWq~#~CCM`>QF5axOcDBgbdS5D-=qit$k!?AXf8Vtr0kL>qqF2L!g*O#EdpJaRCIp} z#J_nZq;EWXS= zHX7z@^+CM-j)>yqMt!9-Hxqzik*wRAL4|fpZbx*rnX|3d)!BPhKdN)3F-=8OO*wOh zkIia(__Qu__2hAA+p*SXc%255a}81JhMwdxh41&LJ-HUqw?F(W?2RY(;>EKMzx8Il z_3~$o71zT0$SeF>SYKUX{q>)?U19wVpSTHO{f(b^2x0xtKXGOJZO935ZI((p?Q$D+ z_KMY)dkPOPgVCWk;H4WMCt^I8l6q$0bG_Em!79$9N)?c49%ss7J5WF>8N(V4IKx_T z>@>@bcBZ?+ii6}HX1vVjMTW}R4pln~W^n(q^M$TvRHI2Mj{ zth3=S*?XV~Y{u--$<(UtL-KEjKKyzwI_;^}l=&S^clBWVP>gI%RmyLRElyPam>uN>UeEVN!E*4qw`% z)oH5@4%ea9J3iu5_nPL8GAUG1wK-Ucb*b;}TWXt8H4^Q+7Xh{#XY6q{)m>b63Byr= zGDn%aPWnMaLOi^!laRuUU8iN>J}TPf$(VN_Ti5#m{f1gwq4xEKgB-A`5} z5uaRZ2k#A@{8{^SG3zu)Y~i^sj&kmfd6X<0yT?>5DihbUV*tkznW}xYlR#&0+$<8I zIyJktg(4&|5Zf-y6Pfn(*WGS9?swjX#p3H8#A5LcR~8FG2)E`GL0I6%_W>c4GozhUw!|Z&MUJ)R@C;%f zq@XWro5sBTOzKm4ZfR3wxOd&o9k3R3_>n*Ty3gE%&Eo4nb1NI%FSyYS?i)UH6C2z& ze&!)IxZm@cD>rz{v_k5yXAZNCpA(V)ITt3otUK38P-1ntS<75z9KtQ;5%NKYq*f>+ z+;NKLxX7Ou-mTPpoEUY?D>nX$U{`Yr_BvRC)f-uh#iFxs zYz9c1pvTzZ38eMpC!^x&E;(idj z+o%^YEbZ8$bB)1MRtZ@$Ph9?;hNw;Q2?x1iNVHsb#vHtlk3g(ZWgJ^;^>x%PHZ+~3 zYi7j|oaFPangb-09R=t%baxZ9Lu87UG(WwU>Y0X0b=)_~WZvtXF@avH+)HX!(i8*h z)SI2*Q#6gN4dh8W`E$^?cynoXtU$dHi z_TSSVyA65&<_D4YKYl%pa)_z!?>B!Lu=p zhP6e6umU&Bi5+{#ii!4;2L2p;&we6v03j`iHhMp22%~-KZl6ory|o%-4idkO)3>w$ z)_z(|y*~Ejr9J;}U2&Qodp%!^`Kv4Dzw3stXut6`u4sSvgIv-6-m5Fx ztxgjN4rl4c8+nnKwAY$Vx1BYRrHBOJXf;d+({L>9&Cl6$$M7+=(3EpF^~GIBjq1F2 zm)UGlC)^yW(e6pMwjlx5MSMuhyF-1~Rjr$}$Z&%Lq@-x{YJKhKb&k(uG>Hu44|gNk zCT&~vakK|QlW4b(Ugc?wXm9qMtBuv+G;BP%ml>0fT4Rq$@{|q+USId0lK-P?8GZMS zH=e!t$dh>6-l!LWgYpNlnjU+BZ(CQ_ht}O#{Ccgc52dTW|Auw-58j5Z{-Foa)jx8r ztIL(Urr4$6OARjN;vn-ne+6d-4~xWqz%tBjc7Pa_Iq{pEAP?OH|zPc zc=Dp&vHR8Zk(c$h)%5i#_2*MfzxjsM^uN0eHT~lcqNac1+Mn%a5{!YO!{hn#mgtp>&43_FWz}xc6CAb z*z5XQPG4Qb$FKeLP1L0Sy35NLmdf0`we;N;Jl)-^NGE1-N((SYZlkjB-tN?mqqa-n z-wDnM8kueE(H*EW(^DD44Bef$vY^A=_t^ub9f1*B8+w3X?=123Z+^|qB0he@r*C3! z`Hi1`knGQ=uLj9kBD){FJ+jTAg+g~|FyQoUxqBaDCq;-7)?6AowD;k&0z=cYBgSr% zjr}-5qeqV(u4jhsqu$&Poousfo$Y;cmCfMncDLQd0R7K6)1nqWR6Uwcv8lL>=%Z~k zweZMGpqx@?mm}aiQ>-iX;H_r*{swvG`oOB|Yw2Q^b=IHNq;^w#ihW(S*(R_}6u z_U9V$@&4ZO;@x-Z>X81}EBbm@d36uzfAVtcwQZeZNR} zBP)2~T^zd&Zf6cVy9k`rHg;2iZ%IcA2~pEtd$M!VY)!dYO(V~?vr@Fry|YfuW8D;s z4{T+>oLuge^Ivf-=kGvQ?2RX3FXJOm{MlQ1Pc!&qukCALe|3fZTW)yz@~yWqefcvF zGJW~>tLaO0@2$-~yWx{Qp+O^9c`V6VOsnf&$CZTmaxo_*dho2@lC4`;?oJKn2ISF& zw5_&|P0*kl@wA0_d+}rhFG1Mf$i#FmIaep-Ehk*O8Qw~TM!>Pvgd4@CU<|8!CT(oZ zOelDgmzYE8O`tSKfIo0 z{|ia|h&_Aj9yNXJWqqxtudbT@+1mhSf5#02v%m8;&dJ~PAm`-2cy&(3WXk8sGqT2! z?M&U)6hc@X#ZTJC+Edq}?NWUW?MK;amCxEsTdP@Tjbw!4Q8LwbO&eht`^^nKPc8Pl_UOkRz zYMW4lWbJ_#t~Jz{VRb-Ut=s07=)Q_|4o|JNLb8cz)yXD2R5|;sy9eXw)E((Kw$vuV zkZRp677(LrEMo8v9KC|pNKJKjn5W5fddDBW=Q{4X_wlV^u&D6P*@v&ue6F)|v9k8w zj?JwkZN!o?XTSeoe9Z#8D#$Jr-mtT~{m zJX$y19^Q8@?=X{;&n{ygx%4_{li;p3xE3AVaqLtR1WehtOkF_Uv{1>Y)hCisN32yL zQzXKzyBFR|&ANSSf|!R z7oO~gjU4H_&@3Qp=!LpNmX|@dOt0k9Ok!F1jy?O7K9*7lmE{fyCo{+RuXov8oJ-ts}1*~ebi*IUc0``qw7H#~#+ ztG6+O`D+g{gZZDYW-x;mCm44!lJMGxFLsktGj{G)rrzCIWUm2hb&XJul0G_{x^mO$ zljJxYW~wvDh&soia@m_siPqkvnPw|?3+}uERlC~h?)~K9#?A}T!#Pr2sr7`ZCo>e?GlhZAyYFDzn zKWlT%Z35Ect@|^JkG-I;b@bKM(Z6w-F1TAs2~)?xLB~v4)bU_TTx}uewLMR)qD|}* zMgSG*Ry2+cSW5lOj=S|q?Sj$CR(-E-eOYY9f6SRH)#qGRTH7PJ4esJop8lRUZ+8Cj zeYY`x`Thr)zx?fM10Ud~Lk*0i$;|tl*?DVYa+LqgvwK-ZG>f*8s&P9FY!7ZVbJ>mh^{`^dEf9YWg{TPk-k&B>jgU zMAAQTCFwfQsHjX7KnaIYb^Kq+xz&JMTqLPUv7mj)YNXQl$wPtqT4~c{+g(RPIJGQvT5bm_kXxT2n=R>`Zc4iwk6=}xi zXABvHoMYiAY1O1m1HbRnEKWbC`Z^{SsmHhN!+lEdID_Z?N%(*7N=jdRYifq$6eXig8J$T>JQ$qp#GiP5Y!)j5JCOKm7q?(TwrN)7vmT$d{8#^Gib%= zEBq9KozwB$a)h{dIeqIi+M$b`k1N+an?vKcX8`trAEOdQhE-z%?e81>gQ18WwJoZ|?me5yMLO*pIiIz{_aH8e2 zw=re-@dueQ{JrZb1LG-t^bSXy#-4ji+5+mLooaPyzlFy1G3Xpwr%GrEpGk8ZtW-cp zc9-sZ^d0@;ZCV>(`0UQ z#uDE||Znucl+Qh+ehtL^kuVQO}XCzN` zUtc819ZsSP&*#|ii|DX4;O9g#_2$E3Io-3WQ z)Wr!EQ`tp2gKEb(YnGf69Mr6=)WWIGScFf@8OpXSEk|2>t}O(NrhudpVtnHNWAAN$ zZO@Xku#6NF$pQ-tA^}kVArvK%?xXY>UT2r9ki=B4uW4&!O)ep}5Be?krOpyX!_GH1x^3S12nxULV%SN|GOTZPJ zlcF5=J}r!8CPPLH;^liIb{ljJ<~YtWdTMLRvs=4}Y^Tk7SfuukCQjqjxKXxBU_lX=EQ3GMb-ea`Q zsjr;guS<}2Qs@M+*1BxAVLI;_qeYFor)n@qc*$wNo0J}Hk%uEN)ML&)jx(zOwx%TF zS)~IiCUV(*6=<2u4)=c%l#7o7_8xVs&CiRz+X!1n+;+nxbIRg16|q*rLZ!C6W8R?X zMFW#~h{om;gaLqJrw3(wQn|s|Yj8-DC|vGn)+*iB&R@BOitfu-N{089C_v8YVkK$cXLyO0qfXSv$AbRm1M zYaox_J_dD7XR&?eSRoZ>r4G$CM|t#O@|;DmWkk{+RY*|RUCy2p;vF4B*yo^gpQWr1e z$tk@r$$5Cwlv2{k-7;w5^JqQSU#3jv=dkn_Hqjn!n_l~DUqR~o7gGP>E3WM?@jd;c z+n9p=eyy^Phc%=fA}F^z*lY=O6p=mx1TM`^O(xUm1)ko4C{1 z5^oh^GwnSxTr{`Ljk4Pzql)JU9GhG&be0|tts3opI&)w4k2OagjJ^!RNlsH(T5n#( zdp4zGj@Zgu&Nwtijr(#$a-fbXT3CBM<6_dhkjPBRTSVc9B+^i4m06QKUhF9p>9zynYpmTI)AIlfuFTA)X^0|u6i+M^V@B^M@H!!(eeGf2`r1eMPW=AX+rn@7AbwDv zy#B_M`kimpv$i03J3c=DJf#1|_x?MtQ2r&M{C{!LFx#cG~l3u=(v@U9Y`a&z|J7Y6{;AHH}mL)<>V!^B357 zKLlO-U>`3bnnTz=0bb_AX{A~CfN_?ZE^a%46_kT#KfTzl%#&5z7QU-vzGMw`3yTf5 z7ZHq2MQ2=w5r>Yp?xrw844TZjBg3HyFOn>~R8nZM`yQ8&$ zd703_1I|=f>yQuL&3cOD@PjNpI^(vOE-NI40T-9%w&#^)-MF0FMo{j4%V?~HYlh%F zTWcTik{Q@qWt%}b)6U(WdA)aYo-;Ug}e-d9-?F77RgPb?1Y{YKW6hP|ZTG#Kc;+b26hXrIwSwxi0}v8@0UdDLb^eZ4nk2KCYJi zTV4d0XZ2x!^NBzIy4Ul`TW>shPx-xTpXuXqrS`CF@(z}89OBV3-NV$5V@;+-;WFEDm0(&~O;u3&o;5q8>UeQ$~t?*2l@l@wwW6F&2Zo_6DHz20%6jC}}awIrDc zhikymRh`1DE`1C+9BGV}_{j}5B@Np5dU!5HbDO}idn#85OiP9qs`kcb7gBcM?lYgg z-MI3@pS_8=^0zrtkW;Ad9=bpcDjb1fs4c1w3xTH0n}MrIdSt8yP$0%P1CV_#dV{qeEKyNi~5 z&7VL2rD~RIpX=kXWh1QS=}!Vxm8C;SckmgS1FS8K#%MRoQI#2^p97h#g}rSR+8KI4 zk!X%f4`St@J@%6D3A4zE#zsh5H5ZLBb_{d0fx2wd=WCXAzh-$ATV7gh`G!w_;BEhp zsc0ffZVP#|E#KR^$9u>EuY*A$Z8|k)OA!m?M2tCo<*t^JcS!Rdzb!bp`_~Fc5^Whh z=28a$IK4jC&DQR}x)8DGv~%}2p7v9SZ#V~v+BC3fbRi}ShPJKVR5l9Q1hjF+bgvAG zF7lVsnk>GR1a^B$wec*SYzKHsGF~`DyXf!E1l7*G_!k}v-j=qP&pLO1^XVw@C=8d=*Cs#8M1Z&=m8^V2knu!teSRq`<(-X zkLW|3)GJc`y7y}4Fk8(v-Det@Q;T@d!MywC%$7xwERVaN_{dlN+8a$ezVXvHk#zjN zPrr<$R zv{+6#kkh-^l5v{Mtm{O}IPU9IUil_Insof@zfjD+`I=`vdH&Hi zACVir_DQ~1347h-=ksZX+)p#)OD4^@dVK$}&wSt(0{s8+nVSf$-~F{WTf+XtXKo^z z{N2yIjA-)rKXX5tWY0lQ2og-d9a=;d24@Kj=COCY7!1zT&J9nxlAEJ4(;E7fm3Oi1$3{qxla*eW#FU*H>%m ztczz7HH{ik+Fb|FuiQrLFeYPn$ z>2FDILdkj95L>p*eggq367qDj}Z9X(Zx7xHcQn@`l;s zJx4-&Kxx}lD*` zU52&@H^8!*Y=Clc&T%3jB(4P_yj^u-!~gPLGyoX8RJ_Nvo`YJYVEY+87u|?nwW$<$ zESv*nMfw~`y9VEV?1D-p5HkXxW-Q{6m^xW8hq83FF3S z@6NO049Bxz?MNXQW`NW}=j57^z5BolIb^TakEj|j+mDkf#^B&~)EsCdbW&U3-Tj{* z`Kn)iqXG86|HMrM*#F@ZFC)Ny@)Hj>jSA`jtX=&=Tg+okme}2atu-lenu^*U%@T+@ zQidM9$6#HWylq7oI#3Lo?FKj}dK1Z&O80b}BCNj8p%o)wwAd${wP4%e`%2h4Ht~wq zzD6_fwRxT?*{hRiQ=0O;bZy0*EiIk6RMJZVcVza8{V|)(tDC1#5YCw?1A}$|TRRSd z?`kmB7uYI(yg6-9U?X~m7yPy2X z%~mYG_b=T9pnl_DdKrNF%?~OT+9#KZhX$ppH^mGUMV)11tX@&Kkpp8Gq61I@6YQis zgq$jS+J#%=&4b!4+#j=v(QZX2gsDvhwFv|@jlxlP@zBxR%K5=HJwL0Zi*c{tMe=eG1GbEn66c=xR=ZFxX-z3@|d`2?ajL- ztTt~2+D4~v?tFZ8^P$Gd+kpD!N1xRbfBp40-tx=){lKF3%4houQQyDi%l~|Cp=|hL zAHQ9vfj|E7n*jDd@$r`d?0@>>_krE%^gf9nM?Qq@Ty1mrTX>1Uo2?f)JdjpjR9MF= zH?U81UaWKX$xPc5gPO(BM#oB)p~S5@9d0WKP{LiITyQXJGol2~1B=>g*KCgh`&YgI z_UB*s`dj`xAL~F}`xGCC@N4(Q-WL#lb@2SQ@44MR{-61tn*h&m|DKlto`3dx9_+po zQY-TNMj4mgq>-nK_7Rhq3&cg|)I#&USF)coCM;e}8xI<^xRsICkz%M(gp(HRt!;-w zk#>-=_x^BSXr5>C@x?`!`|y3677oU6k)DQ%N8YdW0P}jzQ;N`A)0Z*0- zg{CX>-oH->K)@(_ua>uC~V?I6>{Wl)f!+xI6p1%2@ zw{Y$Ad=DX$L7nYFFA-vOx|$+OV}c{FuNGvKY$L>Vy8mJ!lw}5U%K)@yGt_XWy*a}=d6aJy^yNM3^XTI+yyuW_>+`y*5 z-H(5yse?_0Y7$<9n7vJ)(gj4zwt9FcH#v7$i-`J2kE!0$7T$$%%yw~V9#n1BmS>{9 zmkM{O?9#1(*vkO3^)SXx+f-|=?mF&0-SqCWx7)`5;qSYN`1-fM@1<%tFe zH{270+l#lGFiAuJblN?~@2~q``zAgbUw^~9i<9>buGc=y_Xw_64*9QYl>aZH+TZ%r z?baxN`%^c8q5tcrUIvE#=%?;uXdIXpxk^Kb5?j05d)VaAfnaxiWmzrWJ>L;iX@rN2R^)DK-GM6xzh4mDQ(j{V9li`HaX}s_I*oFG}7A zOqln{eHsf|$@qmz*PsvbJMiiLQ;7PT&qswkSwpTP&S8ajF~~ ztzEolpez~WL47YS_8k;umne4D-ogUlEQ`HTkGLOH_L)ti9cqj#qUi3MI}w(pz#29z ziF-;j^B~&T&?6-4Rjg=(x|28WsH;w}m3QBD>7ztU)$}+Es77zgAO+OOp1THDD7F~S_UMLZAr^^`IId`I z%IXu!q_^KAqvyCsdqM*^$_6f%WoHbu-o!a%C^e?Bc5G)9jl17}Zeh3W&tDE>`^m7} z?k(w}ZTzL4wa4DA>v{}!yJj`y0<)UBS#mb!H?yLZuC|n6)Nt|vE$ZES z9_zG`c=t7j5ZUU{;>dFh_3n><yYMVk`qxHDTMFWPMalpJ!*Tc#b^ zW5x+tF{40%mteQJ!zPH&R#(~maS2XxClFTc{%+I;#d7HWydru?kxI#p*R-p;&R*6H zb2*cjt(?Mx$f}pzJl8t0TU#Q1FBd$)siiH7BC^ly)f{I->XdegWGkRRfh-@pVTgoK zY4xgt{lXynD?gw2KdI-hJ$?PH7m@AD`wyNx8qltNlvQFNT!y2?t1Eg+X!dK9F!v=sF`PDAVswTsbnWxZJ2lzISeL@vFm6~r3s-L9UL_e zX{(})bg#K5x5v%7`?KG2kqz#SD)a)(>8bzebHLDeqRvw_an+ZW_ z8pO_hOuHtv(9S^5gZ)+ar9@1~Exg05-?iu%e3aOlV!>y?-5=}*Q;wL!<{-1xijaH2 zscc;!t?pLgsbNr->ue|939W7_pyG8*)sy~Q6Kke6!nIpKn*Z# zvvIo=MNcc1;_2Y%aE zz9S8J@i+gkPc}v6U73i425-igw1{_Sr$SuXZNSCm2bPGpYisV^*FEeUb;gW@Xa;}` zBaWs+&Q$_-l!4pzD|I->7B}eGoVCzcVhE1IA;K1Te<$+VDE3QcB474+5_08Jd|xIZ z2Zvc!jk;{6tc-y~()rswB+)+X9BFH{YI;nvsjYj?vD?^_Y!?Xho=Z=Ysl{S9^`Tm< zE)Z4=Z=U`dg|}wVWC;=1>@d9T?muji6e(eDakX5PaMmEJJy&1q)&gLy4 zAPHT9o!z6k1I)8OgST~**xh%0|0S$+GzI4|SF2;_p^=(fX4LLlpV5=DpFnk~rAc2t z;9Y1sN;XtOy^oP=wVz4UVk!o@OzT_XdTj6UnhLk%;{X}ZB8rgR`MmpYzyBt}$|XI$ zdW+%DT@C}N-&k`-2KeuF^2Cg))IW>urf*7vhb)F zPZeTXm2^m_}NUOV0R`R}}mbmL>+^@XMz?`+Ke?(cfE3;PY1f9bnc zFeXf}2}ee|eaWQRZ*Vhb0(NA$TX42YKlcE#8=>>G`T{gNWDCqbY-`5mnXR2xZ|f%R zxkpPjGRz~@2U$a)eI@c>_KI%%Bgy}d>!fQR-Q#uAwX>gJxjN~q{*@a=j4$m1C8T4` z9JT|Gq|ensMUJMw_{k?Bo}jD31pb@N3XDon;%)fLE@9D2C_ z(khdJOXi(30hv@*w71ML>aEaPuG|?4Hm}bP`R<(;+GMJ%zo1?DIfVGi3w!j*3xm?H zspk)P~=c}z&kY+NXQ!kP(^fF@QiMFzV7P@>|jy8|0Uwo(X_vg&y0#HN0zxpu(o@mB9M zEQA1Dz8ELW9hf|1_lFqsv@Y4*4>#?xv>AEG)ZrG2O+ZH5Wf7r|Z3xjTQ6tW3pRK_W zHZIEG$~aRdtO+}O&F0RXm_ZsDI-`BK>aUP_kuAY-?HcK3rPb zn!6RdW-m~j(#z%?Ej-&7+Nz`;{-~|?aoIJrH%2#(f>!q0aNoe^+BflD1o^G+iXi#X zXV2>Ox1KcSz1T^5u!wZ!<9s~tympv-k$1kUz4c{p|NJVPyv%SS6~Wa4_T3VmEtx;1 zZ72eBd21v=cO6-cji9%@%OKA=?U(>Ar-b;#D!ZuP9pY#@vU|@Uky!MbSKlleDOl=h2Lb=&38V zqoO9JLTCCms@-szAk(@eg8_E24(QE|S{n>JqP-M*!}p)|Q?y3l4C*#ct#fb>1REm# z)y}}J3VZTcu(S+eNwJ;&7I+pB^z?gm`!m)KJsUBF&?NxcPI6@rNR8*Qv8(O4qZOwv z%VKB1%60e8`YEFF@MW>bbZc~#EN!I78Ve!U;!G_cWtWcVC=#>n3Tw9B3$~zY z?+ALrX$kacF=b3Rd!sB;rQW=sBu!{;u$-;_;!=12yq^LqyWP~r7qPkaQiT3GG&uVk zC4*yv3KLt-d3c^9TqHS#VMQg7$Wq`d0eSpa@jC--@*e+|yvY<2ipR&***p>i|gz6X} z8+E(;no76;Tya6b0b!AdJ(9a|EXMBh?qBp%G~c1i?3$xn^{X!J(P-yGCNV#@=IOMH zh5^l)f&*uFgZDx)8X70go?^Xm1E#&kBXeaNl+4|o4Icz$C^1#`A@EJwl_Z`Zxcis= z6wq3LCFr_GhAy2|oDoSAElOyMKiqW(t`EvDZ6+~r=>ASW%% zmRcJ^?PbYP9PVRukC#{MhG4A*i({KCV*B9g*QK|i_T12Rc-?=uz9%z#<8R5Cko}*%``EL7Q{mVcy-{;e zDbKR>Q`s-PQY$&3ws;BiY?Kl1gY0q`i)oAny1L=LXwB1&x~8E)+ul0C6g=L><)=<# zA-5U0b}L((2T(X%#@*LHyC_!pEc3YR%;cH2$E-70V)<;NT_RMmHaqVHkOf7!b;Rly zt}RmBPTK(~K=aCC4Oz?8bTG9!($WFSYg-FMuc>Z~DJnP!d*kHpcRjn%*P1gR$7iqz zHz$cfdBo`<4PWFmC=T=>MD0{gP!Kp56T$98_MZ#QS=`lCaf~^9SNqr6&R(26KD>Dg zU1meCX^+G*Ks}4j-S6(FNT}9mrWsX7;;ir?o4pRzM(JK0pu&I^gkx=*TIns_!Mr(@ zuwtm{=)gS>MhDsc%soF?;o5uf>r8RVWY?Lr8V02zA34{!O=WLf`ySF#HcZ!0_(#XyIzBoppk27S(LpE1ZbgJ(}Uil2s#d zZ)zn(FfY?3Fq>+pEv#kH_qa8R+eZ*b%LG`H*7PC_P)!tQ?pE_WeYSaF9Z$KhN_y=c z<1Z&8&)59<^CxdUd*jV|_SVySkda^eNZ*O(f9TfG9LERo9eDn)eeO4}5d9?~`o~|p z1-QClK>tr}1JM7_O9Ax%`~jfP?2cu(ZLRfF&LN+JjyDRKcZa!X`j&##O#p6=(4n4O zG$I6pw?R7UhB&4g!Z0RmHC~41&CeomsB`4rXHqpk8pi#k{MzH1M*;n}J_hK| z+i@kI#A|Ql*FLayzw)6zPHVaqNauUD?w4P@0`!*z=zsYYp#S1u(;vAFK>wpJ11Urcj_GhazNfZBAd8$H#y~dXXP^aZ z17)n;!UDS~j7Pn~NjCLr&}hl-sSDu#a__Y#-;VnHbJhTLq39s}4mo+w}CBW&q4_isw`>0nnE6t){|_4gD_D(9P5W z5qryQvG0}8tKD8qGa~ei4Vy+Y@g@yyYaZLP%%nBjy}5p8jGUGCq5RrR%txX8H{CZx zeB<>e&)<6X^z{!tNXxH%oUi7f?^h)M_-)|S4I}yY-o^?2m6w9#pLl@ebPg1aeZ0BF z+EmmnC#q2|Eg8XEmZbH~O;2xB$!T+jHcg$qrazh5q^~W}66YMf_X*AzCh9&!{j^AA zgtaflDY3JWl_s{nKi@<0YqQxOMe=|5-AMl08y|X_{@N3N{`~2OUjJ|}a`i~`QI_Jh zkM~uU{{F@Gzj_HsoOZA|M8_@`}aSmw$`wE0_{0qq95oL z|5)qzR$-0IEx32nzqj>r!QwbN;7F&)hSmwOJYk`Ke{Wb6&a9?%q z+B-szV*9`IZft-3qp!X8^!Zmm$v6D9dY(^T|IjaB`+aD?_UXP#+TX9h{?~5asgV0T@Nu!ftqja~xvEut+$w$Nyp)CKKwCqW?Ga=y*o&?y%(IJ+%K zoe4RokAW@sa%4|F#;whDOg*!ZFhJK}nhWS+avB8Vekc9PYnQ*A(dg?R{ct^dnopkB zoBlYQU-?X5W$N!=K>wlJfU6q@^uKi*C-lQF1grX=wL3GGX=t*G zwtL*S$+`9h`!9#Q_(pt9f0c>Y)O7QpI;;r!>m z^(Nr_=fCx3!1?d`w)=2iQ=}Me;*eEmo;~RdL!lP1z>3@ixvM96v=AkM(6YDaS4a+T z4xpyd$%P}v!NqL{zE0EjT8yk6uz9buag4(?C)yFPUgigQpr(0cDUe6u{I}nO^EVq) z{Iw_PZ{=4%iKnmcr>}qLKBQm!U|&J{`xVmvx7$cSZy3}6_uDw3AA2b&`cFJa(T@qHXoIFZO3sDcAr+G9Zv z;FxQ{G@i>f22o}+$A#F|gPzN^g_V9eJ(tg8`d9nY*B^oNYoF;WIDfyw`QN_{u)1M5 z|Eb$Jq0hb)IR6I^Tj*dE0Oan*K<%$oSzIH}$aPY7?!{hndd2oBn`41HEgUrHv|O8F zFfHFWvPgZ!)M&d2=-l$)F4AFRtkZ6)%P5tAIB03z-!8hgLfxZq{%^k<&fk3Y^mq7M z^*IHAuY2zpPPT_x z3JkI8esBo6Fcb2Eb36@1?<>1pTlMo%WdAqcjqGo|@#d4)>UY#@PyFBWrw`!#+9&!7 z&fmXq{&TkhRyPdiAN$dpIH9lq(U&5&_@fW{F6c6(xffo{2c5>+Z9X$#o~;Hls|_T! zjoF`R%p9!3G7Sa}bl5{Lx+nme!mvqIw4|BVK8fh~!0vri#<_TR_Td2=o)*2m2j^>B zh`|x}iNR;+;j&dMo^P9fY&fZdh7L_xdG<_isagh*)22Ec+ldC8T1(r96o$)0j1zB}&BhiyXWM3PCc9&3nEgU-6-5{^nPIJZ{d0uhO2lbHF4 zW#F7uqS_vCtLM6OL2mjWe-Pi%V0ruJFCMogqAs=DsVWEWwXHRB9}F+Dv8ZrDY9+QC z*-Q-|I1+8;kaX7VZD|^-J^5m5TigY+R1d8~Yp>ZJa(x(2t>fO6sb$a{>#g1@F2H^z|tnHP<@?G3pdQE8tXvALmL|MC=ZNXT{w~oyp!+>oHAdS8V6*Ph9Fiv%Le9HVx1=R_#F&>2#eMQ+@fGEqk=HZDQ6| zwF(V08@ksCXE~6ovjLqgSOK~UXdVP6FW$rVXo*kSM1&lxn|{#}7G>M-zT;aya0}kF zf9fK3I+NF8j100@R^{;h=5y$b%6Rv zKh|TzYQ2-?iZ)Y85rhHTI+)1WO>w4fS>4SA4{ck_H5l48Y#bF-1TEWmrrrIXmcs9E z;H*s*Fo7JDO?%^qsdb?aj9!KXK=)Kc zSLNmq6r51=gzvwc)}JL*w{gi9NC51yOnGL|&2bk2GAjr|l;UH6=< zJ8Lx+hE9#W4@yo{o3^T5LD5xQkjMmQFmD;d`%0Wr%+Ycyrd(%Fv<>~G4w`4IXk*n- zM%&F!X`kaYc z(oPW<%IJQMXk$1}r6@QGXAZVfv?VopSR$613|?(5r$Xeu3ghmZ`YCGf*;}eiO%rk` zNXOB_^tKSwvv?>Q9|SwilMh;ls5&nlOVwGe`cGh( zLrWLdrPC6_(F;^-kL@dK7cXX=D|l4buDu*kntj%uQ zn9-P%m$!@q)2O35d@nfCwuAy&AmtImnzEYC(fXBOZFgeCb7C@`g$|jB4&JK*DoF?8 zj6Do<;D&}~Loyh-*BP#NpZb~$v6hMUK=fJBiwv@i+9gH&=pe3E_{0N8i&S}Zs#EeQ>=-G`buFckuG?(nz>@5cHQB{(t{krAdU+bs9IF^(sakz5@ z2F|@TELw!02Kk=d2%{KUhb+fj-Bu%<1LI&6wKq8qIt@|75W7_9cVTl|s3e2R(pEdI zR&$<%1|Xi9W38;a|KQnIefi_@ty*0!3}v@f%o==V6wtzXnC9@gYSD=9XYB2}=RjqC zSgbdq_eK4G#$;c-aOznWgJATWX!5LM3%5_20c$}D?8VtyA4O{zZ@T-#Klp)Lcys>C zAN+sYO?d|>-~G`ad|+LXv(ynG+c^iF5>Tvrr)_rwr^bv*WS`mrb|;Ul1Dz#5kUhV49q_pr_iH}aMtSRvH(q=G zBEJ2)&;9Z|eXZUjs$Kg$Z#b&y2ge8P9Z~J=pTGF1cJ!LEtV^`qxwMFi0$6ULe^NR+PUwhI2`b8qiwGZ>gBZ=ONB>F0nytGL2Lr-r6!{2kn zdSwj%lb^l`4F6M~{$erw+dln3Wj%6+a<-n-sksJb$?US_LXjvm^EFsT7^kq!<;jd* z8j9{go=V5|3FR|et}4flxn1~#n0WzWTx1DR4`_~wBl4^|y_9qx!>`>8|3xwUUv1=m zAgO-k1H5tEp7(Hjz69JJzPDH&pmJEP4QFTA(aU2*H~+>2n!5!)U25dob7x8h9=2?? z{hS%Dib;}^Ex{JNyc-s+B6PZb^f`o=?FK&QI3Ol-^c4B-Tfg=e;Nb1(aa3E}ji@vcVi1OQYAB*Jf{Hg1N-9<)yc7NU;%n z&>1n3gncwu7iH4my8E_143`8cP{+3Ms=OHMu7FU{iM58gZi`D2wsOFf-p_;8zBkqV zX=`TlM3cmRKT3fKDVC{f^)d%C!Wb-Y(RQV6yHZ!LkW1;g`)~Rw*r}F`Ra*{<&C%Wi z)p}Ak0#475nmeq@F&8tp*W_;g*w(R^^+>9D*XyuOXER)G3Os=}`W%Hvm-!%DcDXJI z-seZlVs50k`!ipA3-SDaxtM7yDi-BvGoiJUF_3z0e~y{80!ii3@*1MJ8bmP?!rJy( zvjH+UAhOQEfYCnAPJQ27la|T{6rFCbCxsm!fOh6-s==Y|)vvp6@59jU*z{52CQ9AY zZA?2Yb_gDeFl^+sC4Q`$Ii=PcNvnJMfCUU2GFJ3;(6OU+!zi}(Iul^z(cu>qTjtS{ z?AlzZ$-C=c)^Yb8UwaGF&HwmT%H&^vqbb&3|IAIKSbyUSHh{mMV*S7a^Y;mRH6ZGQ zkeVcd9Q|~M-d6CJ+4p?0x7j)$2zHc}tA^3rJV=^0W4B6$LYu)X#L8`_bxX5%K|+qN zDj(cd1I4@4ftDNkzL#QM`(5}&Q>-uha6S7_J@7iX@(DgpK)#tA3*V{D^x_wIKauXW`N(AodiS5*N&valKIhgqb**@p-*|=3}Bp-K@+(x|dR0a+8g4W5%uraJVmYwrK*VZ(6vyqy} zun9o6=4fBAwfCN^O;sLsFMwQ|r1gsikT3t}v)A6E!+Pywyy+-{@J=@LuX^!|FFuOk z&Vqg^$4OsvN&%*&O7rMft;^u)ARUhd=snLR#?>360L{d0F_#{29XP`@rx#1>2=~8q zZjKuJpdJe=+G}l08)wBT2ustu@A`1duy>)hTRpNEBzS6HLzKbnVmMrf&U220c7LWB z(p`f{P>t!?Mo?#ok&DT?_+}ujt?Q_kDEB;|9}KpX$yrBsuVkG-6l?PN-JkELKu^k{ z3)whKHwL@;#IgGlLLphZl~C}!q$i|SV-K~%J7YEnSV8TK)}_%Qbk3BNCMvJCl_f(; z$Q+nd!p+293^SGv1ZBGW3;h)0;VQEx%+d3K>iqvY~#X~WhMX?J4e^)O%g$mbXq*O&C$XPc>t9_YQF~esj!IbyYKF&=qns+ z#&YTRGP4WI{u)oq+Si#-OPp+P0ED(6q)@YsUMaD|C03?dZ;TD6xe9&EpeCR68Embs zAx*Amk1kG_XansslQ*Qh@9C$w_@{74#K;3BOO$kPUj2XKn%IfKbf1pdCNiU2a=ql# z3qAdP^v?2*68(SJd)H@8v#UNVO&N@_p#sLPvR!e=RHe#ERS#?JwfA0o&8Pe$ylAhr z*A^{iddA&7#(YB*n45(S2ua*AHc4=Nlg&k-kPloOCm!wsDP_P)Qd9s@5iyl=m6JHB z-*bAT>2tc34Bf8xjhIi;Ien)4InVn%Yp?ZNze}mJtl0w$w;E8`SVG#f)}~rIg=HHn zYIDlI3$=!ud-~CrF5%F+>a;+@^Bk7D20qQfA*;;vx|NDJbmhA*TH(Dr0nJ&XE2J$_ znop&r?6ng+XSL+66*0kPQwN1_SyWbm+NJl>v0Gj%rVNVRCHv_E$Kz@JAVd@mfg1?S zKbW;F(hgx&)b3-?+%bHm3R2KU4CjUz2uVcYR4CS}wTUQ&Ubs1I2a{?a9YcdP3M#%q z7U`wUvanPeL~3#R30%e4V?w;f46PdDzN|?>px#&MKAM8f12n9(Ey~u!fT7Hqv)U>O zYwuF138&1F!BeWLRc-kgr+Oqwwgn;-?jxR@lD<`T?NRZX?Z)0P zPjrY^H%BjB!v_e!cvWq-bd(V4s#J~ZXef1+DoZR4HqaOyraUoF6 znJRL68yGUX@-pwVB0D(^xR^==ci_IfD_2s@K4>h$s=(*k8$5v1cOGJr)u}FNP-%}* zW2M*v2A$YCNU3`-c4}Z`Sj{+)oQ8SE6y2NWwl|`xSIi)s*NE>aefUn+nX?m0oetP3rD?b`9{&rK58 z0QA+SwTv~%aHl%X--)G3V_6XN9)5W0B_eCQ!^vztFlCrAyIvh@{ncK#+DV5fm5Xd?VXp4Hw(l(X3SLY3a zMyI8q8t*mp^gZ`p_)8Z$r~c+|UBsOFFMsQ4=hXk{x315rt&t72iinSd^bEUJSVK}u zZ_I5e56d+N`GnQW9#}3}%dAp$FL*>fJm=}U3H>w4=iYk+TqvNwj1Wp0d)tBu zk)~3a1M?FR_da0{A&_%NLK!+#1{oSTEudAVsa9?9wUr5jKJDNz^xj8K9(!1oT_BC<>6XQF`J9|K=M2!&>XE)+i!IFuiZxWc zgWYkDC2-{PURtoq9yoU!$=qWCeaXr0+iM&3^ncyCgt~MgpzlBb#akDPbpG6BAe}$| z)JW$q-9S3=(sP5}WKU5AgK;f%r&!zKmOqU?W4Y3_vbnDU3)wQ z>D+?9l}h-i8p(BGkZ*qai5JmI(tuAG{>qg+5q`bIGBUf4m}ugZ=0?SFpWL9Bl3+XR zJnDjEtwkppIjR(|*z**p+3R82CE5h%f$RXZzjrgM)|b)3r?&U$um9$)7yi@}j?kpu z$TGZ8H1Pq{&~X&jCXu~P1{Xh=8o5>i+IKjbNsT^0!7Ho#?oQO4we^J8Mr}Sv2S9DI z2A9kZ*nw*H+$L!}TNOgZr=lZU4cwzwP$QSMFuZ2f3bq$Nd*R`^s*Wt4Cdq zR$7)R5#UkV6m5!(HV&2gXnm+!G8JG(EBcrVZ^@YKaGvvsRM*~2X^}U>K(h*HpQ{M^ zZ;?TJ@oqky`=GT|jjn6!&n=t!l%wHi-FfMim+##)RXy`9eEe*9ZUN-O^`$<~`IzCaXo)pg?e5#@20P z&2F0PYQY9SE-a}FcwlYxfj1%dQf3bH2dAID2x9ARedN{!;5w(jak(s*|K%eWF&qB& zN1k>z{MbjX&xUK#gc0H#lE_k&91|`kHlyg`27qP`6U6O?rRD6Qgo79&i#iFvmZP~G zS}jNCfFc8ToBAHP3jQ8SN+Uy_dL4*j7g-ax@Onntxu3#61iEgkk1Ox&vOId|a#PGuztgO(?10)TBGU>QZC{tCbaq(;Z{hjF7qwZ#oqXD>J}H z0(3M~i+XjhWf&&hVn|XiQjMxsGToqI2|QI>yN>Fe`6+z8a{q--RPL{QCD-lsa=iLd z-hFU2z&%tP!W8$$AaLf}`S>z^?!)DwlU8}-j_5P5zW($m<1c*1g;uT~{_TsXTtD*L zPg}V@@Y^>k*9M9fny?UpMfqNHj8$40KD|^POaQf4c09c@HddoCyJ~^;Gv_j%Sev%p zc>(FJ8pDHU>)dP4gQu})^8xRtoptVxi7hgi`~Ux?JLkTGk4G)eE!zI1bVsjCciyr{ zdUjps*SvHI(w%R;2-@JcT`p+xw=Sdg{eh=$eSh#q>w7F_1?4*Tjx}R+hFN!UE(@IZ zH4s@?MrL24lW49nAS;nrQjB=avKQ>!4X)m05E}^DwPZKdF3qwnF#KA=Ar?U3GHvQ( z5?yb7&;2fZYTWyNd|AFUub&|2zJ*UfEzW$d9Vf_mzCD6kTz&o4`SGmIk01FxTt-SM zy#zBTcyO&KsDAL!7>0hJ?H*+9 zAN~;7(Yf#7<7?)*=aGjsQ?7OX@>b{n3~T0le*YqvCf|O!`^xwI{zX*o@A&#I8 z_Dm>T^3Yo`oMb15wOlEzHfWVX3n|_)5c4uMniDc&+nUAc(*Wo`_bq%vSnrv=7hf0u zzAYLGS)oPfhRs-*3>n$zglenrfp` z`kqU253xzUNR9iI=(HCniD3$#lb&U1t>8*CCgbY)g9tBl!VP+1(bNy9`di6kdMK%T(; z8<%3VN$}9jGRgW(Iz-(Zk%=N?&gs_ zhe=e`smir9^;xLmH5x1nHF@@w5+oasTyYEQyhrg;;CbvBigQwHSuSfDQcGb3!Csi_ z+&Zo`7w2~G`_w5%UvY1~a$`0<^9{V{#)2M6IlB7#t=aThou%LP@ryW1zx(5t<3ak? zS^D}}`XqyqbDyQ(dl^XY_dPYz`vW(S-tA_*jtDJVlQ$9Xmax}xq-yanM*~^ZM$J?l zPSB6_v0y_-wBUE_0TbmYb&HhZwst$*NcVs-)}*SP*_#uQ6_r_9s5j6GuBQ>4+k^I+ zN7v`Pex!cIjiuPRZ`=i+q4nBQtbQ6T#V%I2_b-3flNG>H_Oj~k z%WH?Lf3(<#ty-O9G#IBv+dYxrL3m(GZ#H$6Hc$WSQKim)hd%zMtJI%(Sf#$={^?)c zC{PHeK@Inst7Ko!yN&5HiGmP=HpI-+nE z!Qp968#HQjH!7hcde_ybdBGjnTJ5?e!kNwMuN5fJL0`U6n9hCAF1Rr9^Zfi9LI6MW z>g%U0OfUR*IBLGwF}z~Y zb@Cik&7&F8wrjBoJAT;KlvRgYfgEU=%s!K2Aw~edmUUxT;kciE3ah_i>U*|~5fBOV zx+DM`V!+a*!hX8pX|mWz7UB#|?F%vG zvm;jU=tKfg5jEx0PhZdi(kZ?2=sY}ktCY1y-#UB>`CKaQvawQ66&?ZW%d%PtraIz=bU2~vJw!cRarE6 zW~-&InZ3o1!EUFYy?Y6*+xJ~AO!!|MFyYyI?EmsI(8?eB_$|mC{%}3^-~0Hj8^FNd zKj6+&Z`cJl-THjJ#we;! z&nS9Q)6ML=!;crfyf~TX#_COBff*%+)D^q()E;mz?+m-~m@10w3MyN+Z7*#mdaadp z89Ff8xjh{#|YJdbPIG?4FjF_G(Y{{#~eN?&Y8y8NAb?FmdbxJjdrW$84hY9GhHyax?xP!8ML%j!n{t0RvUKVKW#-o5?w zRUbPlX3{DsI8lEGz#kBMbWgnHJb60vd$w1hj<)DrY5 zYoqWcqe0tgR|Hume$b+(mq`gB%xW>{U zHE*I~evZGociw|)=k&E7yY<}Xz4~C^9=HF>eDThj5AyWaK6dL9Ci8Fj(Xad1t>^yC z!*5^vFTVb`hBp@31esfhZ7SNaFr7dbrk2{J!4R=~LlksUFLNL#w-MQHHn+gg5T8#Y z&qc~)(Ri#P3BYrVUR$dYI?RPfHz7%8gz0W>Akfuv-Sp<%{HIUJw)kA158}&i=U>fu z^(LS5+;{Q`I;u0XOh3WrEZ6v)&%!m}>_p0M{ez2W#x8{Y@oj%_5$un5|G`D*f&cpD zy5GF#G9KIa{=w636TkBhZn)oIZN*KdF=;C!SaxW4Su|H-7%#O)Se=E}?f^dxksr1@ z^#sh8P+6Ha$X-|1JEJPdel zaPr}?)t=`^V=Rwve7cSe?|Iinj1BL7*F}sC?|aupj1AxMuBRCrzWZG_$A<5D*JHQv0GtNyfs$0a;8Dn(?S4%&jT-^)ev+TTGeE&inpok;%hfrs;ibUR`24Q zr(fTRuJl*mek0Q3%=hf^145a#^tq#YNrVY5=Q0s=SS*SIBd^&5&Yqv}g4b(a@Xx|r8NT?~ zxJ29F!IW-YbO$m^MB4Vc3lnv-DxQwixgG;?kHX$NQ*R^J8n$L3^e{_$XdN{fDTE`v z)=rv>xHKdr!r!g)Tthnd&zx|*|3TGzf0HbSm84K z_0jK@RXumbXN$aU=_8wppwKbIS=WQ0Ewu!}ZG0shMgmd*;`SgL;P~f`x zUXe&WB@*_~n8I!EBgSy%E_?MpYDYFGX#@1vL$YRRrGU%`Ze$HG2D;R+>Vh{6QHagM z*DksnBd(CEjmj1KVTo=9!&^Q5_-k*v3%vj8D_CmYza1~X`0~BefBo7gE7!F@`pMU> zqspeMHk!tZteXWa{@T)24RC4fGOI>)n=>T-C zYBZ_Eti2iaww=s&Aw*GD9kFf7uq>l*;werZHeinP&YwTRh~E=-7T{E2_rIof69>l}=&JPd|Me zE${;jVPp(1I`AWSN(CB>n&AYvP!7Qh)N(pYEbYs(!2kv4>ez6mQYyAfXGsfbjA>x! z#`BD&H<1qH;FitO#_qdzlTJIzJpIgZ8Qez^&PGh+c&TaVWL`DU+>>rng%fLArn+@W zW-E(^MVXj>`VbkrmxYE+Ggh6k31dbR&Q)z`8iT+e#9q33&8RdX2?`qX^s~oh1P~k> zf#139v2~D_=8h1wn$0^&j#WjgH|0{J$zBt4mnXbgp$&|wF4b06-ZWdQm^o-pk3cAM zc+KgNK9mq|-G?uvf=?8W(?2~fV^(BY=V%K+Lq=6opmL?wEY;nja!H-Km+`7KBi)^R zCE85t7G*3jL@K6L^p~~EuFZMXgZH2{k?~d(rnv#*N9j?CqKKLB>AyWLWW;ZyqzW1Vk2VPt z^>T@{t+cFU>EY2P!dTI^Y0oVid)-}H3AFvE|NiQQ^#cS=rI1#|;Sp*Qs~8fIqpu2R zY8RwO7t5IobU)jmv#haG=in>__CZA_DC0SsSMMyvN;ryQHXtx~^!o&tMneP=Aa={s zKR+(x?5E6Yuibj#3*S^r`dL?f)9DvpyY<{(c-TW-MFZcym-kRPr(b#P z)^nfxuq%Febsu`|)^pE2@~y{T$$)5sekSb*ZOO(-Fogn{?tGH`Xzt(wOh}9 z(T!N_hZp{(U;6OMKXTmuN4AtUBxm)ttkB$*CM$-goWLc^?%`#&Y@QQL)O9S^qLfX% zYU2IbVyn>3 z0Nbu-3p0lLixS!DYXY{TX28MQuFdM<9JZ5GYDSr`6$#qAVGo!)+_@XU_OMoR)lAYN z(23je8n=+wx0IiM;~suWr^j>O#m6`9BS!?3tcdL%1-vN8{eJ~n&?Vu)LgaOVp*m2 zC1qDvx50tFYsqd>v(?qZ1-$syW(V-&OHW_@!7Dhm)mi`}SO#q?qPd18vIVOdJ8w{w zX^cqg6A|CEMyxhnyn1X<8Cyh%h3TwwCs=Lm=<#*|Ukz|_brv)((=@=?38GS)jCK0; zjb#J8CS(-}Qh8=fnRQ{@>FxPacR zYiKLRXyy}+4A~aJ)L&;QVWwrOr&U1?CH|3!3XjqQ+XbIN*S^@n8wW&hKNPY zE3d|21=HHq*3iz8s1}hg{}?|f$qLXBuo~m_6YBX@ypO;dV5quL#p}}?H0iYlp^*%wT&-3> zVnrG(Y268Z{gC3ip!>tVwkw~$1~Yb1Urf2Z?FDQBj|AhNnK7MH3fGp2F z!hFpKFQPyE+7G^2$nshv_VpjUzPC=Sky@E16<3Hke2==ynmCaatD^1c5PM-~)J4K1 zvQ%JERMRUSp`O66=PFrh4l`Tc2|kg#{9%-qU>tSEho_Eg4>jOIIQa2^_TS`}8eWmvQbx z{#&m;lyl>@U-g#{+6^>Zl-*=ykONo^?=H5?ZEB_lsj9I~DinnXwEI0fWJd5v(UxVl zT@IIiX)T&eGOYb*635~lbM|brc`?AiNC~Ief+=~O{?5G@KJN+iw4~n1G8}Ea`0(0~ zUVYXkk-biI?!{_Z$L%f_j8|QS-j!f z-|=(T7m~g8t`YEp5FmNdz11~Wcgf7Dxfj>MWrPjKJlIPsS#dxZ=sa^B=fILix_efh zON@C;a2UNrvsSv;?uCZfF3W8+Z{|s+EY}6C=YBA+EhPW=gZq!gGR}S1o^ZOKx#xJD zOu>(w?hn85^r!pT8OHzm9Zz)VId{=|&xbCeXubDCZ?5u%Tl3tg-vH~wI63LUOm^uL#4K}v+tNDeQ7PkT|2fG zz!{mNfxc3*G(#$)?y0m_tqP=Lb}L=$)ReWTLw(lAc%4@J+#h>K-hX`}`D5|&y&FTw zx$oN(AXj1QG#zr9R`*y3MRbhZTt_*4&Vo6F0%2`+PTA#WQ&ih2@!%2Kg|-PA-j zw{5h0ml>_j=Dy0Z5fdgOKKh<}CHP@3Wy%#-!k*Vhxe{03cm}eN6!X?VwodIucrK_B z7Ft$Ln^yWqsBHTPa7C^Ty4s zCDs>$nIld=|2ABOF6ES=v^V_G;q?c7^U!ec;B&9qF#q)Axh7}bNCjLttLxYRooxGR zWi>E%%O+{tbPrFSjQv0Q@+noTl%mU&ds{OnIDEAE^q%8poZS!Qy;q-!w%lbppzh4J zb9#-kz_+V}>Ayo=yUBKG(gB@}$=tVUEC~03y-v6ZE}RDFo**4B2Huy}Lt)!eFl7U~ z9~QX@js+eS)Qfidg|{91py?eclWNlNUbn+xLUx<(!G&y_4MQxWOmMhrqhRWR;7Qqg z=$3%DDb*4+maUYYUOGUx-7(~vVf6CUw!2`cDy@k^usb47?>lY=hRrIV7S!S7L%^qA zW1yzY)^)<=XE6oAxp?)NUPN-WA}mu9WVw-jm8L7T3%r1`3>D)-*f&hIJgR-&;FY1J z7@*CDty)$+eaCSbfmdz9NolL&mCG8tsaQ84FQCD$R42yvj+J0;9MI?En;tDZQ?}3z}9PBFn909oR-{A2=-pIzh<5v1^oyj~oskSuM3wfRi_4 ztjVYEy1ERIK<9KYfYn>+t2<-u10DvWIyR!Et4l~0PZR3}4>@SHW7OrN*GQ{2d3c4I z({qnt&pDUxgZH?ZpnR%a**AfG=cRX-DR%lrJfY11#@C2|Dgo)G8iErF^qobc^+iZ2 zUWj^=KqVX5tr_dZ;gNtvppct&N5X}Vg$;ou zlw4JZ7oQtSjM*(hvHuLpJ{Fk9rPJwquFeyOFoAe!2k(eRoxu8v)@gm#u8>I-5UplZ zA(ZsCe3GY*Em)5glSK}Sw%5&678o5x>p>`YAt>WO`ms)X!aghu?Y30=j;NJNn$ajq2Pg zK;_y(N1C)YeH_*+umKoj=Pn|8`q0}BC)tfMgAc`;;C$F6(b*9dRP50>3J^7xu8}>W zT8o_#DcW%xK_bF}S>3C75xnsx$$N=VWRB4t0ACa+J|;yMgUJgGkljwda$LnOs!GUB z?0ZawY7ervWJi=pn;_uSHoB3mwoIfN+aL*_5XrG@pHe3Z6l=FB+%s&9z0zwy3b5;h z>gf>E4e7l>#A?lsDtL%n-TnrIa}7Ob0O{SNQVb;gTX{ADN~dK*eR8X`&!o;FxBkr3%O_b;9PJfp1${ZReRv&(Aj$9nc|#`-DA)`}dXa#)MLx{(&(2DRb$kvpkx!7SRr1-?bw${~zRt^Ln_{eEv zHtwLKne=X9B5Vd*@t87c7TH^2(g$_y7G{Q0O`0s`KKAJ&Z#%96Jg+e5umIF9u-7xP3R-*lCijss43=lp=dA9A$f}=h{ZR5Cdwn zf)HB9)?WGa{Z~ELhAlcsgd=!vOEpMk4x)r}GBDcX3;s$+8u4$z$9>>U-EY_KcEXN@a36`S1M=Mghjnm&cE<@KcAP5GDtmLIbwWc3B z{bm&%C*r$Ziq(P1bU=%doW9nqz_G}%7Fa`F9XnKR%m!j?%!z2$Xt8$VEt+$}b3^uBb8c}L%Wuv~U?1H~}u{&1Ddk!{Rw2t;?!?+FJ zmP7FACJY@$6gccyi%x1)5_65yR*e&?-AKs0{kxC~#FH?|C2R$HqB27o|? z#N7mdGzV4*QoPi~wMpB&!m3Vm5Iv?6WGW&EW13hHje@=mDg_BReiAg4q#%(df@qfS z-D$4{E8$6jh&~)NUKVQ% zAH+7=Xg*X|-^{$cmBvz2W4R)lxcA0u(8dsPtnb&ZFoxTw4;>%L*$0DPedk3C2H$|s zM8(=#LtCE^@2)OBx*{n_Hs1bD1Rf52TUXz?)my+HhnCbmSP#q4^jTQ@UPAD-TzGf( z1|Ww!H+6*$A7hN39;2<*(6TRQVW!|6kJ9obr|L^&C+<)OSj&`t4e1=ObV68a-#1E|rh1WqL zrREq_G0DIX1&fBMNDF*=+k)aPkH?+R!ot!HCJKFcHo%`ql50m)@E(n^HCtNT9e`GUGKm3+@F3})E@bRZ+`#vdA9X~b-X~mRUdon zunK5OeCrh_YBXzea);}O`2cc)LtbG?Gb;$6@b}=fwcNB$w4GZVV%vy>fnp~tgSrhL z9Zig8i-k;~8z!HL9o=Ber~v~%Ojc#pwMBTA1ye6;lggn+HY7>3{-DAzZcfxDXAT=i1JP~479c1*;M~rmNxp^%tyMy@?;U;t~+~k?? z%3E}#VDwDZB8+((>M$%MsUyv5K#4Y2>$xZ~%W3YqW`Sg`NNa79d0BWQ5a}zsMIr~j zVVsQC!499Qj)ws&Jg9O2Jocb2^YqIHLYkHhA|9&J}|wQE(> zBbv}s@4XAQtg~&*QX4|WempqneuVHcjJm6$nN)SH;M4^o5Zycc zwThq!KALs!CSJyv(#lx7vSJU`OjF>n&^FS$z!@tL06G*rTo3I%M<)>6V18$gf$Z2n z&P|1Mx49_l+G&dvepJ8c~@Q6{1f#LvYs%3?h zig_K06f1x6)b!b_KE8^;H-|uGP%NUcme;%!V@$`AFT}9=&i8( zKw}+44kaq;)L7QQ*+2cgdk5nvK=cN$)mP1RIN?lb-9Z^q7p1KYvCAHYU#d@|3b>lW zW|0M>fo^s0DIlDNfS4|2i*Kj^5ZC~kyiSs6-t)@7sLIS05nF-qSe!ecTIZ=a>(ZKDaSk9-08p60Hg>gVn~i?oEo4j1i3s4@e-EaZ@SK z{%#oWD3V6B*PhnEVS(y%Q6JblQ7Si-Mr3@>B^?Ax-Y#_d2e=9Z!lQu~HKt2V$S3g^H*YMlxpcw3AF zj%*vY)THUBe~7Dqbj+}lVAz_}St|}FgLxueY#YeThK{_l61os_oqG=;Z=%z@f=-|e zW*?j;x)df1z;kOu#K&gP3P!|%<+i$8_ki*xSbg-+p^+Z7oFzI8qnTC<9C&yzroH4B@_) zNv%g_N~^e$jE*n?JQ{U_)WpQVs_772S6aJwfCfMU4COvyE2q_JAQ-+;pBbL;)hnle zd_0|d4tS?(fZMW%t}=3$+T7;gIpzJ&V|DY9z87wSz`cS6@-DYqqao;BU^uxzH zLP_0OhG*{P+kBR`>dY+(L(zt@wo?JOfr~8}J!2-A2zAu}7Y3}MUIr5JHaiYk{LWDB zn9pv*ppb(FT7Y*DVkn2J*DlQS^dt9P_@XBnHJ`cb_^A&cq(z6c4K~y<204t2@H61k z*Ab<)4p_Uvx0cJ?6YmYEEfDv+ZmBqRu|6@#u6C9UUdGTFyQ0ovYFVa(1-Fo<0NZEu zda$V2bo%KJzu8gc3tsmZMQi<~UkYmU>7Rc1I;-5^9lIAvRvBw|Q&m9G=r}yKR~{lZ5Jso!}!+yt&eJ7>O; z7hXQ)TKRkyQ1#hs!-bU3um6q9EuY_b8Rhevo=N%q<{RZx0}0gx!-~;lXH#M)hXdCX z15kxKFJ5dd{kF@frSE962nq zU1Y-mzUnB2Vy+|pWCS5LZy#j(24EjPvMWnxBu+q>kOOW=2o=ynRi26KbQ~h#BG1^<@oX&Ax&q#sgGyYUP?86B--_}9)9DkTKcSN>5pG-E&cAx zsHNZYOls-(->9XuJM7*1lHS9|P{y#!)Qc^I!@w#0f_N5p6q2b130N|>A$dcGaPIx$V{7T3d$g85be?`GAI$4T z^xSvzvWqCa5gYxihu?Ush(4<#`VTI6y8lO)QAOYXOseP)->jkvp(`2tVB67=lgdb? zFz1TTwQK}{K!V9oM!?*6?0{c8?MfhyX=qpB3b_>7%;9y9y*i@IkjMmst1`>MHpl>D z)OOXqn~uWQs_41-5s$5+fBw-b`i}cA-@SeR!M!_o-+p7VKlkl?3nKj^TSPx_!A0~Z zE~AKk@R=0R|K>&!-Mf!u_JvG8bufkk&V2Qd>nC?Ssk`Y1YaN9QMnUL{{ z^mVN+UvhM|^i><1S3s^shTI0Hw%Jo(Kx#?YxEu#PFqeb+^m*0LT z=8L!I{rh*`e)lDiih-6sc5Q#|+xu2;`bW5|{?rAR)t|YHvih^nq^$n48)a37I5>Gl z5+5$yf=tw-i&w_dZD z#HLS&t7NVkYpx|`#&$i8^xS;a$ClOq#k?PP?!NsKW%YVh zJ@?&xt5y9YTT@@V;F|jLmr+xH;hEIbU%pXOXQzy_G<4;g$yc1~504Je& zX%rpa*u+%EE=?z#8w9>hE=BNHU>MDV$J4C@{4mMOMn-0{&@O}|*oB?Sg*I(z7lag?vFktZ-n72dxJl*qycRb+3D^)khwA>VY1asXyMIGd=0)?)2`N zNorEmknkzWs6Zx!4~xlQL6teuDi5>-2d(l8k&F=)2#^p!%qIy+Ac)rWyt`+*-@Qi| z($s##>`K*C-jCk<+0XxZ*1FeqU-$1?+V@_x62UT^cZONEF4|^a_qp%SczWllYw5rA z-nI0NH}O8}YcILJ?H_u{UVS}Yef@*?7u08cW1p9%U$M*SUw**L=?^`O<@AT&m*w=Y zJz1L0k$o#VIeV2)NesAwaxsRn(oWAafzFp11ZKrFsfIYy0|HO&ng?;IQ|)ld0XbJ2 z1Jc61fi@9aqYdIwxf?lRZh)x|MGiR z(l_6F^<(;WzGK?|wwGRg{iQeT!|6{;>@&+VrFSQpiwdBBV6&pwPr_2=G~ zMfLAKv8bZ*OLcsr`;-{^$HF#scY-}hkgV!F#6gOkJn;S+n$5bmSKB)Q_3XpafPXq~Ko)WneYYbv(PbjC)nhf#OMfEqlcTs)&jW=INF4HbNIram$r23O@rFj$WvJMw$@z6vra!X3FOzIgVt#9f6jw>ND0HNC6egM zvd|Qjt@4dVVF60JlgL-qk`EK|%QmPS#Sel6__!zXx z+D5{_>f{SWwx%4ZiNvmhO$%}oW|I4fk#hUnpL-A)qCb0G#$@qq#JR8w=9;_9%FPIm zo5lw~?+&iK$jI(Io8?9|NdtjE+XL|ri9;C@+IFqsgQlF*w9#Hb>eS%_BykdFThg0t zuRz~Z=k2##Fe0jhI8xwumge<5L{WwPL4%PD|LpAIDt|yys%i0+wb_$ zLr8V~xz9a_V49!5E`xS)w|z)=#xdXCc_@=u+Bo5b4E%Fe4ua0o zvZDmT1Q<@en~^ONa1Y}cC^)P(2-+GiHGsRq%ox7q zGu3$xNZfn%*%#7dx*!pNu?o~0Ij2`(#x3x&VA@%YJM|Ry;RC0bII~aW@i2^SW>;Kt zY#xxE`jqN~HF2=>?H4}xAVM1d-d(97F{Niy1`Q&W7Q7{*PE!(zQ*Hy%mH>6(7 z;>PE!?7r0qdChZ6!l81I6=Pl7Ii_>s0Rp>!P@~qEF_m+=u2Li{%(400e&>f?X%93a z=kI^+K}6*Izn}X>M&x|QpZZb}Ip6uG?#D^2emu}TKcr_zKO{Mj?ziMDgeNmDvQ5!I z22D920FX7Onad$U3{yicu&qEc0pd4G7IM0sRHO%wkwV9Jw3QPLF?a_MQ?2K|DePG% zINghr_`17z#5Z2ASD)}IJnK966{&1Id#%&2#PUqfaF8u5{q)mfG}@i6@63XP;y4Jl zf#C8HW1PL=6sJ8Adp!zI2vXvV1IgQ`hHX~@RuZP9_cBm%d8KVx^|c~Dvz-l*Q@+(`z^b#(R9`hsi|(F42wq=_Ug zcYwHLbi9I53lV}Dx9{+WaD@KUXCK57`rp5MQRbF5&-&r}E+`bc^ z34mfU8kEi$2t3QI1n|bXks^N$3r;CiVvaR;^NG{O$thPWP|jK2&vvh-DXQrs@a|Pw zwL)!VTc_jT#9*wQ*2id|?udEaev4n=jF~9HlVct_ttL`eJOz4^tQ-p`*#TeT46!!& zgtvXn@q(bxLQrH=K>!)*O|&l(L79cTHm@U2ZH^>n_c1hbmsHW{%~bOCA6y@a+NwQU zkA((vG|+u@FfG<2%Cg$*gD?uH&Z9w|onhK67b**!&(1)D1PVEWgc%Zyjtl_v+eXtv z{q*1?t@HpoOrXxKCFRby|M0U9BERhS+$|bK>w?$w#m!$_Z6&hT@MLV7S_@;BTTVMM z<4OSOXSd;3`Um$>rh@@X%Dx2WQb|91S0p5r5-LXh9{5vr4-t5f{7ma~=Dhvh&pwD# z^zZxZgNS$iuIn;JTeZ^9iQRlvgaRY$uE}JI?P#YO{%MF5nipfh&hU;H#_Y3gjWite$j?()u_g8*|#pRLvT%FyljBu7!7D>@~bm1KJxH^eey z^%l!S`PV%7_J|fR zH0n&=w0h^2tSu;bW-657c?3k(#9OmzP(xqUAtvSR4}bQBSAOM}rEGlNyJU>pANlMH zFMieAkFGe!+h;!e!i!)3_^0oD?|ZL5|2<&}y@5jLYr>sc7BZ&fL?mh8rDs|QyT(!S z9MqY#lTpiIxhmutP|t3u%gK}qsWN-|Qi3GZO19aYIuT);yR+xmo}EfDhY|Og3^_@d z5r1`&Y>|bXqGOhvHj)zKT%a_R?0%ppxwub)0U~-0inaD>w047s4$Dx(QJ^Mb2dbIL zSj^kZ2A_#EZd;R*4%Qr9^Par%DlnC%sG2W$S!GhO3=oMNu3#|!J508 z`QuE?c`xI4{^F-FUioEDU%euU0Q(KCRVTYlgF_0nG_R6&sG2s+=47BySxt%h9yTPZ z6t|0yrk;bn3vCgds;PY@pXxGsSJWoW7Vvefb^HGBzjnKWrLK44Ezp9z zg(Q?qVL2#)vgX+*2mGB=8>CWQ?zEiwtRb{oM>Sd!dZKm3ctk;MNH`v- z1)XM~BI}^D$L;gq|K$pz|Lo%!*gJdYN7UbXcGGjtK%%a9cj{2`e>~h zcX!%auEBYRuQPGVZwAGg_?NCY`mFEV)5TF(FqfS(jFG(AAmQPpDQI&@hmX#SvF>F8 zF;-QJg6qea-~qp^0f)oaR2(qQM9_pt(*@Srev(pngVM0zsB6D&x60`jsY* zK3655tCG)E$>*x%b5-)WD*0TMe6C79S0%raRLOtkxhnZwm3)dSNr8_lp`^htLZ+#0CZ-y}=K@N`bQ0%iv-B|Ry{d8U=?Y)<<_BMT^NlxNdt(0f8Q-<1%aR_t z5=&Pf;=7Kbg6d8S!3s_AF!$lzC?-+09Ke0yQT1Gacnc|cV%+w?Ld~7eP7!8yd@#dsm+h2Iu;Z+CdF5uqB-YvL1OIdT zkG|!VU;gw(RJaw74PA@Ohgs)Y>T~IyO-^=B2^CCct=7+o$b*i__?VPQA18p(J*g0*s*qY&GW3Hom`>t<)2sh}{-~MGvqhIrQb$auIx9|D( zdy}q6PQn2F;9d>{U2M0&1Gm>GFCBtJ zXy`s|Vn+2~sag1YR-c+PdRxXB5@|oI$Nelr~$2ajegA8w@czL z!+zhC`-0mRn#xJ5g$V_lfuqR9ebVhCmAZ?X^7gGzvJ*metd8-PevagQy;DE@v6t$N zw?3k8KQZR|tnb{@*Cwf^YbFM2(DD!f2V|Y7X=l4w(~}3a0|E&B6w24!7ThFlPuz;a z<~blC4#hFDq0pav!6(Pv4^>KB^foYU}7qZ+|c`A+YAxxd`swKm;-{XVQs7|`(n zKx7ilIosQg=-0;zGycEfT2Z)~GVn%%jIIxRU! zyQN;oa6hK4HY$#E<}jz*pVlwAHZAHauDR5Wq~3uPG+iiYXL@ZK7=Z~g(jZ;QrBTII z2!B{IG4TXRtef~j_QeKxV!EGDOUxq4nGNcHFfR}2-gruE)Tk43`}xnj@DT3M-}%g! z+qn6s^ur&!{k_k;@Z#4#UZ(K%|MQvqjhTVKi)Deh^*U?0?^4X-N?+Ci8u6M)?cAd* z1=21pl}U%&!GW^?u&c8XWDf`f=Gu-m8sxm2>ar123&&5}<9giXw4%)hVe|e-epBMH z*Q~bO#W3v-$>uu3V20IclFr@9$cS)f$HE-KAT-4=;#3*o8T$;=VDGz{&gEO1_SuHo z%GT&)WB9EJQu$aI>e*5E7ph-{h3cF0+dlrrTk*t7^{j8*174}-%l$o7)ZN$rM66WU zq69dgZE&5Tt?f|n8^hPrHCEN&nj6t%O**>pV<%W8V$e4+ zAEyK8h-OfF)vB66{swog}phlY>cWb8Ip*EKl66A<;f3o$b5Xb3IL zSVz@y%mNpG8)1GC)LC|#H^%i-+tF`yrg#FjYv!O-J!r;;Dlrq zW$1jcIh?uH>esM67-Gx&bj)C`>Am$#TQ$e%bq&9@mbJ&pJ@8~+cA$^*GJ;nE~;;w(F{VQ@!0z;lchP`4AJR2a`CEmFpQh-a1#x~DW8NG8%3h3 zxk{YC#SVDxc5@!H`?N^xY{O?BwAUpdH!sYlpWDBSo3T$w%EH?Ny(>qnC?cYHd7l`5 zyQ?eDXicG!gmC)iD^IRk3&_oJvUM6O$b^6{R-3f#;5cVqsdM#=y_WTLa`c?mPhIE! zar?}-yz;A_zL&OIJ5gpX)8?yXjoD6H!HZPagt20Ew8L0zfFH1c&A<@tsuO+7F7TG4 zYIHaSEY|2@-m36#Q)sew_^ci1kPb9)mM10y!#CgltLt-WNwP3eXx)8zlag~v!Q&Vd zarPQkb*%Sh4Xqs+C?B}Z+*!iAnP;00%T3<_ltWWe;Oxe9V6P0l*W&iyf9i!7zviPKeC^fxwwFHq==MK+>Wj^g$3@odfBe)7FaFxc-+T0Ne+=FG zpWgMG@BCqZ`dz>I#Xs|Z{?rSveEoZh+(b5A#!PgW@KWnQ_jc=5b7RjmU%XFewrBtu z+1%t?l0sS+(B#(kIY9;Et0^E367s>WT3FMtvlpzb;Hh-P!ND_8pla%UEdYGA1_5`^ zet2#LdJO1@Gn8{r_SP6StwJ7&0bknBDqihyt)8%zEt&weuxJNiy2YHufo<`O2-{44S47%JpRi{>>wETe5di&;oH?6SqYUfQPp>sJY^*szwHRqF z%oObX1)MEsQ>Lp?Zm-iZMG zGQURzxcmBjFlQQ#=_o1++YiZ+u~3fD8Do|)l4_bjp|-R=TM( z(HMcv75JIU5wO#krLBzCX^!n1>!WmyJ)}!m+{BvRMx6gj-L%2bI^jp773E=A=ee_MhHy^#^ zZ@l)#Tem;cmo*qphK zY@{u>QHjX(vj(>Tp5%p$*jIG%g5NDQ!P|-rIS%%fQiN|Lv7@!jai47ZtepV&`_PXY z_)mJIlD{PH<``RUp0 z(sQs~xx%qeGJ0E;?Tnmz!*0Bq9CM?ro($n|9)(T%pl>^EF-7#%BaR#--OEbpvVGGylg^hw%C_CQgAAxK(!7mk`32v1NwBI6W*j% z$kr`lD|`&jp;fkzkF%Dp!lVq^gQs#&XSgt+mL1hTW?lPL(Y*bi-*g!>(U6Wj11|iP zJTZs>D$~;JJd~Q(<-1toFgptbr`1|s={<0T*-V2wzUDd!L&oZ6lS6gRM#C{j(XH9s z1J9)4olHIE9QoiclSN9n&W6L^Y#~T6*9SPTWDe&LbS$g<8bFS zvUP{(5Q#suQ??MNsh7J`YH?8n$I^v$8rkt{z%L#}x@RAX<7f?W2ZM4QDL4%UzD$%e zlS=yZ+h6>qhv4Y?>5t>-gl7#89zsK1jyBzUElgF|pjl~S1MNG3x`R}OQ~Aai5CpF5 zmC+U>0%YQF7`-FtlN2O!S-w4#DIAK`rV|QW;m{?};B>^e{UzKB-E268z@J-a+UR8O zwqrpy4eOym zOk*$v$H(+>`$1gAP!pao2`XcLj}7)5j^V?L@l=c1UUB;Lc{K2cmv!Eneb%sp(u;Xs zq{!$F5vhrHNFuaGNgcOkoi-ClV<=pE%h~gw!mg0-jD+@w8b87 zJ7r%U;5k>1jqc3E@ocQXOE8Qu9?~FZ!$l3SDrIUGkF|RQ{J&W5YzrniYnb{1C0%## zJ)LfU<+_R-BU)|M5a#At-3^v`EgEMY)Ycd(0Cl)Dp@#KC2UR4Dw-_rU(D7v8AddPQ zla$>yjQ4Y;W-k^1^#&lwb|R+Fmg%e*!@2#?-8-^*!D9}KH=~(1<03bUkX}*}(h+A9 zm@3sEU`2ITHWavRF)TEL_wJ5CjIPZwEY`H2aG5>;*`gpAs(UnQVXKeT$m0~L+g-CQJ}i56*iffHGsXhIw%Tq)0e9?% z;%_3>mTd7Ff?+pu)!f+U`;fZ*EZ)@BFd{2`wHOdbS4@oKxhy_2q0_Be;=O1!NVDEZ zeWAmN(H2^}H#pz29l<{VF#MTg*BRMhPTeO4CuSpp7%r#=#wG@KnzrJ8`>Wq{6*3zc z8quvHyNb;b<0R(X)^=1Ow3?#*MrPXQ#MA2FkEx&#k&tUj5U%n;h7piP)>ODWTEm$Q znM0#IsJv>P!%(MM;K`}F{m3`H@-IA474t_wfsaX-70hEQV9M@U7sW6j8Rej}#vc2O zZM1romB)~_q5m8p!u#qT3GboCIu+Ysdjz^%JZBwvzFgoc9&KVEDHG=y-9DSUpLpeK?@qSwI<>{CkKX=9d-e5~Km6#$uY3I6m;B@L;;(tEk6fCV`p1(*yHAX&aL0*b z83s6XHA(43mAd^(_wlKdYqd_&che2c>k@>m2{*KNs zB?!d=e!4TxH*Jk3Xw#&zY#rELAln+64UT07DIH4&M&+Jsod5VGyg&O*&o#~mqj8Sh zgBVAc!^KmNM6_$17bPl~{CZ&L;J*4^=Ey|0kduZX<1?k9%wtCn1T&QobS#h;fjNyD z)x+T287Gi!&^t691*mPo?7j4G z)Fw&+kICkZg1BM)t&o>B8|@~rrYPZXJDb9SdSYTs5!1|q!AeV^`x@s5-_p`YPauGv z^<8`S;`x~`xNs!>3=d)GV_}jrN40H~&fA_ljZ~W{3+Q0b^GLYg)umM>_RknzaxTePY8rU1_I6R=sT;#x8897Fa#w2YXr#3FeghlK= zR^tD2jOR}1pp1x)+RWK7z>SKt&9}}mfh`%5ND1Ilc$p?fc9CJF2VRXvVxGG& zYYVrvL4Q|dHtDRCi5CCG*4RQNhpV;1OW&8?ei%1H(ftpke3e6oMzo%+E8M`w?r=Wm zp|u8*Cw(BcfLnLo4nNJ6)tkTp1!k!N`-N@ofj$M|-4V+Nv-;>)8XJi;LcEA=xJAZU zx4-&q z*(e(k>LZ-(pmHzC5^AKpse>(nPys=<-`sdlF)6SQ*jojZ*B-(IFLtAa!LeErrz;zL znGMs9|QsCuiQNwXIbe?$F$cJ!EO_q zFgD1NIg>@eN%4mLBvpIZFiGe*I(%xYE)hIVwI*oZ<(NKl9*3s^r5sZ30!fQ1++jn2 zO?*mlo2%b`1TRWx?nD7=gVP)%5!P0owkwelAtx4i{H~I-E!}?6rljjGvjV{g+&bL? zRqyn^*j@IV$hQG%5B^HvpQup;N@2mv_>t-x`+SX*mAlQ^oUjU2AR@q`( z^yt}R4T29iC%}0t5hJn|VNo_^Fm_PgHQB}Inz(E@s5BmWaWn#Q54r+qs@Q=LXg2Y- zh2H+mN71fmY23H;4T2mu*gWAzflnWb*|3WVGFM{xasVeVMC-j_h8H{w#j$L1JL@=W zt6J;>D2={#kE{_B5l_=bP?NTfx5Y620uj@0e+?hWJP1Lsb!9S%4UE5IL?WPkTpnw& zT~Kfkc)kF+i|zX|r=YJpJ0~L~6NR2f0UuI3TOGuqAa{P(L2NPa=wrud$TIa+Qn$Z$ zU52;a=91YHEo&kmbHKV>3)%9g2%iP}N%JwVRMHh_SdgHzGds0 zqwgM0nS>J`%%pG$uy9AsVDtEH9RSNIg4HtD2`7+gfLNSqYc3Q?jRFR!P^ns@0zr|| z52HUc9r>^DfcqU?)N`NP-@sL*p}4t1GCf*Y>(Fdj3yoi-6)VC6`BL0Z!@n3~?a(YN zdS|{!IBm`8*%fN7RS%qi#;n4=w1LW-4SVtw43OoOL2GLj&c3(5akq3~2+5iNz=s}V z-aiII}IY z4MPApwjfnG4bUD77|K2y;aRb0cxQ7I5hG6tm6)e(gBe$XojYnTw$p}Kf(3_e^ID3^ z^_*)0<-ldrOrb86&fEX}fd?Q;-ah#)SjRVzf^Y*X7azijJ&Vy>HtM#@hiD1npt>_H zLK8lcY-EUQWJi^YC#lbU{2T~^CzQ={WD;V=5%kA+Qk`o6|9hAOq*UE}`@`2&QHEq#0O>U)* znW~0qxWvh0ti2Jf2fund`}W_x^#J@_w?FaLE3Z6Vh?@pB;8n~-Cm@#(1Nz4Z3T@b} zfR|jX3nPFS(LcL6LP|RdJgbf~)A2l186XB*@MWb}FgFeTbWEG_!huZlfV@h+56mNz z+wDj1USN<8ZH=q1>DN)g1vQ)YiSwzq($%}HGtqJ5*lVw=?UtbjDbKETaq$k4nCePJ zJ9DOYm8QOz=~0|GaTvO^J5;%7*za;Zw;#JMgXfSjGcYPvXq-bx0^ScNuiY}aKwTRr zWy>XBCms|G3`3wqNaC!9^^C6eE3gX2iOfj|SG)7o)LgO%Q)RvyufjoQm3QKG`|-Q& z7LyCukfE%Xp;0FrQl}jh0}-?ChNMYPb%x>)uyCogiO&nk^Id#x&q;i+!s_HqdA?@>}WD6l#v zhPXiA4GpVIp9*$~??uvw9(cID!#^Ns!kg3F;TWLYn;UIETq1jq&h;i`?Ay7*bk zuq^gx<#M$U3O4pHXbLzEWaI!)x3I zp1cB>D%$X#^UPL2Q~}Nc4$p9&Kn2J;DBv0*t=7tR+T29~oX`L)vNBPN1Jxk+!MysfXk{*u1-+M~Dit^23tXMF>oZrUU` zKv{F24AVqp`i?OWZvu%3)Lw9BX4~t;ME#l#e#X-~x(Wm9!a=eSd1fDpRfw1kTq2nu z%r9e1TsF+i6Zq_?%sWtgHrKgM%MEa)cbPWtzJ4F*bkwEo#dfSAN{0>Lx0Zt5g<+xe z%xpm1PaXp9THnzr8v3tfA$|(6@!2I2Q6&_UO$MM;XjrE0C1W`Ez1BtPIn(E^O+1|I z_6vXVG8gqd{HpaG(&ubE*M#mp8rtuBYZsNp!lxYPpkBfNw9_$!5X8w20Rp7y4JZ*z zjcf0g6FtJ&p@Pzo234*p9T1!XdgL_g;kO_7z8AifZ4*>F!BIm;9->vXy&T5Kab_hP zSeWfSVE`gf1EwBCn`y{Rxq5fhNOquRzlhjt51>fktC@)no!~q&S*b`(N`mt<(Hqqv zar<-M_rgQ?r2hBs`*Qho@9Y6zeDiOA{`>A@>iR)@^ejqA;Rg30Iu-DhMIo!HL%j84 z2=agrLJyENJmDP)Rc~}wf)J8)rb&Ih1S8K=KY^Yt*7k7N)=#cTojoYh4ZlAAMkv9ak=2T$y6p2bL_4i55M) z&X;WA2~-Od4vhhg+{7*+&Enpw`Kx2xZA#Z0e1E}w*7xq|3udb=2zo+OVdjQfamWd6 zZ|Fm|0rA3<*=xrNkx5sq#a&25ki>?~2gy2f(KbhJl_`wV+7bt(l|@i1`Hb8GH6AfH zXPU^`@feEU-m_rdef>U&i)%t#kTD3sm`;rJBYeoHS%IE|joWu*YkMGdgIg;?g3Vg1 z7^g?Ht)Z<3!4OF@ATQ3W!Q&7D9gW3ALrMBVdd8U3wG3jw?R!6e;fpvN@3qq8ME~Wg zuUD7hM~SqtBfNr;f#C?8fstduAhyuH0^{5{VGDu<9RG2-)K19CYq%v2DUcZohlvGc zn7gA3E@zeH?X#c1>m9YFJflZCB%Xc(Bw3D$qY-|U9HCjuGZxX15Tr$DHo1rfQ;Rq4 zIhUiBNQImbePTBNVg~M$8a7X?rOs?u$IA)~M;rfs4 zr`J%pPvKEpZK6+zlIAQljxU$F%-9X02R6!C&}0!&%jv?1|AE&p0`m*I7O4YTKZoD` z5T`5}!zUWEo%C;B{eq*?m*lL_*s|z|^ZFcE&acreu zCGy4;!Y1wr%YlU}VKRix0Eos(?egwFx(mQ>(8TTZLxTGR+c=Ek)N@ajHDW}{B%=b;)G+-MqgVRl;jw;i zcp*4wtg|UR<}|`{@@R!Y%rJpZ;=}&Uf^wFTDJ>@BZ}t zb(0CPY#6XaYl0z*CYzicc$|uD;^cHukIJ?!nVbdOBkc3w@50BgjM30+JXv8oPDp*x z+yD%`)12j%tIidJR#X%NCw{N4VRu)`{~NlI8>;B_ zpAc@I@!fmC3nslx?^!VKzWyg*!Td|l7tDXag87FY#)A2W--iYBk36wpwu0`~Sk~ni zTFofg35Uj|#(imdtm^8%)5^k8UKV`O%UOXn^brl16 zSxTiH69;h9U~H}K%QnA6{9w=eu07okW=HYhF}U#qTxnlcr^670^iSAq*61DMxp6>( z=h0S*bs2D1H*={ljFYr0YSmz*MhtVuFyn5+R^LrvoSM`F!MY-tcdqn^v7h_Fp8LVR zV*Oyx+&J*vAA9afd+thm?n-<3uC(v@*mGCfb9&%&SK4z|+H+Uhb646wq$`cC+{=#1 zM2x!{y7w>OQzAG3;hF3Mv}tHVCF}VakadO*CJM#74%KpZs4(@K*CB&DN3X%Mn9lX6`CF$zYTx^r!8YgWw#u~^7O9K4j1+lnh; z($7RX=0<2FlwVZV0++_LwfpURa216b9i3SO7LV(%(pm#=R7VPSEjZ;TuJ#<)G`iZs|A5%I@r1Iq${ zjM<>E)2__;Q3n8#cKd@Lz(DR(t%0GtL{kLw&)$fI1qNF|6|r(D^YI8-4Ms zuMOpc-}dJ1)A)@qv8R6Vx4!2$z4&V$Z;fC0-XHi)_h5=RWnZz>H4v7$e9A!kX()iC zLuDe^c1;-}z^)*wOtco+o|NkXBCI^9?F{X6UXxEdYs%^!vG=w+5w!yls?*+cm2+v1F)>?<1Cc16(|bF~uYL2aH$L*}qkQSr*Xy-cKlq_1T?Nnh z_C0+|(Up^~e=ZVV3k)!g!mZnbB&@ZT2e7icP`;)ER};wp?7$neq+A=89T&JSV&wFq zffVKpp>Dd|9a&R_-g6$huyI|!>Su!4y+O=c_@ z3k5+}zP$X^xkv3e`A|T(9~-K!z@QX^wyj!S^7g;{z?a(>`f7XaqiL_c6}Qj-zzbhk zFuw53|MmI<-@XEMIrm+sv9&aqQQ(@~;lYFDW0a`|jI7l0VV0x6w**B<1)j`?`U zjr8Kzek9-eh`t&xefZJi#pCPV`HsK#>XUJO&-Nxhy=TNx27I4xu>;gac5C^!MS4`gR`vrfV4n=B!^PxPr3bqQGA!CR#)omrI+s@n-5P*Qjs zck4!fncv$py8Fg2z8HPx;KJW_g+K2O%p3ZIf_5`*O0~1>@`@#|%Co$V0bPFDW{A(a z;^K(6NjUTSF%ar}Y*9JZRk>ZQ8w!LZ9#CVg;Oj;(Zw6#Updq8gZoeH@fpm6UWhA_WmIlxy?CURw#Zu9=jG_YZ^Zxs=Ja4>DuZgX_g-U8^sSopYk)$- z2O2?bQLJ+m<(lX1cl^eOz{vZZ*Hut)of&|aW@0XB@rLR`I)OBW4OI44In?slah{Ai z8H6)KGp^=nS?2i2p~9{$TVPAJ119e5XAw16lh-PO`eW_v;+Pml( ziXy&aiUaucMx-Q`>l{2Gf>+8>Tu|$I1=jCUI%zq#5kYSBeumhBD;rATl6lQ~u_AIC z7n?FxY*`z1I`FUv+&#Dd^h&f{fqZUI4&8D3=-!b&zSkHLe$a$Nan`m|M;m)>?i!~` zv`6(pdJfzc)n_w1yPdEG($?5<@b=AYyLXHWOqo%EQx*44!vVmj+kf_{e^kH2n;(7i z&3rrat=oV8sW12)Ui_y&@{#ZtzxL5v{*C_Hs}NRx`L($%TewC55D&|mt%0IT8Qn09 z21IdmKiLilZ*m66!w~aYj({~?XG3Ea17l|aF{R=PjS_*%_@|8}z#oMZ@IX~0ra&3$ z7LWVF3XXi)U|uEyW0-7H0GoS|_BW;&r_I3r&>{s>edbQ=%2!iAr-7vG!tpw~vuAzV-o2fD@59;7o(>nk zZs61D;{5*5#h*P34QG6YHDnyH^4Lw=?yDE-X`XGC^#)t31*d_C;tNLjx$oZi;$$3E~7NbA3FA;_vHDpb|h ztt?Jc9RoQFD-e0lLnATH>M5(EVTE@Zf4HAqhohY~N?{nO1&4b0Zf7vY8x)BpQ@k!^O4pW58<@d1dbEMTHJCd`COE`xYQVEH6p*Nc z$u9IId!r(-tfD!z9TP#vu@L7y6yL*`(%wq>1z_U+a}TaXp(HC z+^p*kJ-u!}{eg$T(*ApQWO3`p#f>J`m8g*jAg36RBX=K^Ifu2jnJjrs#)fcUQigM- zMe@~{^?d<&=iYQ$6{fuUp4d1Vd`MW+*nFLX84cL#KsCeTbo-f$i(BYt7yNu^&N7S$ zQQ7O3L7TRdL}2JAed|2JEPyDpX2EVux=LWE^8- zBoaaD_nvO4=X6iGhMCm)SE4KR|C~Af_IuuU@3q%@p5L=~Nh)&o?e{52VXBdXHV%kH zeDpZTE{9Rw`!+u>xbChwz{QS38Um^<#Tq4BWZmN7EywR(1X%n_mw`_Fr4L;dpb}=} zV7u2^8CkrP(U`%G;$5eVjo2o5Z5UBK@8M-h*u*>aReY|rQjJ9z!r9 zRH5XFii{P^5hu?x>WEov2m~bMkyy}sff#DGdM>HO%pp&Nn_LvsWj(%dF5*%Pdovz) znPmNF8{)K1eZ^tD)iKR7K30AQxnynAC$sB0l<`0vCByTL#bHKxl&vGh-sZqU$Aeeh zTZ}T%$&uz1@@B!$a~;2bE}x~<##l-jitK5Nn1SU!#8#-5+7j!mcddF1VU6TDC5P|e zGGx|R&JI?s5{+9h5vR?`p;zY$FhN^&tFroLH5{yf2yL@@&&L;^y#%cIA3TT-xnX+r zA6^DM`deSQbuL{)Vxh)I0@NdhyBcw<%o0j#3xi$i=W-W|NA#7UCwl!ms0?kDSUa}Hy)FgN?B9e@vB@#Pbql~s;0OlYUice7Y9qVy#{FrlRLVz-p!f3XSAG#c#cb*_u1HpG*drG{J zDys>z$}%K};bC=Mq%5?u$qw`h_{Q7d2^**l#-e?>Y8I9<^)e7UkFt6x1h;S(XO(@1 z5{?Dmxt7pJUdON9JMA0dE{C{vW<_b%w1wF}TV!^a9;o@m<0!B9^K;gQ`*s zP@Ympn{zSocKYqs%j(Q#sd1Fe*c^{cFDhHDt`e+|Wwm$eZ3_K5QxO_QIhp2K+wr0E zGV;EvS#|pE-g5{Mnv@r*vrqsUEo~nKVL>aQFI%-%=eSeKkgftwB_pihv?UsVJB^TM zi6Oa9P8qA=e?0l-@w{ByqqAZ4t2lPQ)M#WW*-@r7~yB8d)YuuUKnZCQbS{=R+T1nYN<6= zMjcY)=rlAIt#i+3tQIG2OHIaXwu6b3<2%mF0L&7aGdmb@)Y;B+COxC2G1sPPpn4f$ z=0u;f?K$^i@WH{eq0!xG1$4h<>l{U=7I!AW6ivli6Uri&t*ebId38&Q4`n8?fHkmB-Qb-~Y<3+kfK0XYbC(54>{g_Md$CN3P-r zANl(G?;n5jm0Qnz{p-flr|Z=*N2jSY0LB(u#geknHd@C}(ziGt)V&F1WmhuZ2Rc;~ z!E|W3p(@|-++tiiWE9#Fwg@1Qks|&fa`$S8xbm#;k^p2to4;1QE@;_?xi4%px;J&x zJ&`err`W9njBBy9Zl~zDcJF~E?cP0N(x@1AC%QH-Tb5MCC+%s*Tq@Fr1@&yvu`i|M zG&hMpvQ9cZ>*ICP_m_VM>t#Y#uQ&2<`tCj2$p2fH*vNnB#XHYG@+3dFi;s5m!_(%ioFvv5SF!GY7QxuH91GL9rp1nWH6^}v49F|=nc}&0qMb<#E8uhxR6+I z<&av~gG72$v|{=)3sVpv1e6$Kl~D=Z;=p35rZV%2Wo_6%nq#W56XLXx2ln09Ib80? zuW}U=ArCY~5B(HSGRc@OEdb(5lRoquQ!7Kpy`04AJeu^vp|lkbv#h;$XH+^l6sFyK z4h5r&V1P_TCMA4cTIu&IDQ^=T(AudTzxIvio|{XQDrJLO+6~1Z3o_it0=>&uo@tXd zYC6K!zOJrqmQv4<)0~p@*nI}NwTpeXDVC_3XiWtpM&o}4 z3B{y>j@zQw0TU|YgKe#+8jjC><0S;y{=xe%!5{R8??081A=KiNiGS-IPoAeOa2ra}DFP&B4Z861pczIZ$1C zZ*u(RH(o;C->;wT>ye3HDS!+m_Sp+1{P4NMD5c?{?Y-HV+n4KNNl6g{^FRaP#dl5- zRgvexVpkZ0$Ca4NDnz@4wLCN3pPSfXdSzqg#%f+u-^aJUddI5Sf_xW?RMw@tez@f!3R(3L1)wpn1ZNsS30CDGpWHkYnacs+TE z81$|ZuTE*HOAAIGG7Ve@WID(S#P{l18zuw4TFj0Qy?hBRhi^L{S;oVuEtjzk$f=E# z@+qG&YZxrFdaODv_(_4-r&25B&GYEMc|5D^s$9-WG3`?o!HG6j-~nUIsTxZS#G#=? zm&ssqk7c0J(OU15s>NV{Y3Uw%!Dl`2~!dT+dNca z=-GrZ5JzODt*2jREeug>8gs_Hilcz7IpitY$8b5m{pCw&Xn)7cm$0tC`Z74oH*vmx z$GZRgox3j{-~ICKcfR*sPu>43&!^)*dinOBdU%q)`s!bM`LPr9N51mW!~gC-e)*xj z@geDqD9tRB_Y}kyJuOL~2yIjQwN)05=8-+bG7Az5+cG6=*Hl)Vsd~Vwn}(Jcdt&^Z z+)Es47<; zL#MX{LWaREby!CFY)N;`*mksfKzuQz_nI~U-k}ys1pb{spEXNJHxgFcYlq&y^!y!P zcki#K{N2mHW!-z~{cF6}{9B%S@AEIc>&{~U=9|8mPxf@&_!;<$Sf8#D>(ko;U`CBn zaJ;8FB1(w{(qYXNeJ5$&T1CGGJ+wJ6*FgJZ(c|467IB_q$I_&%QRp}B5t>TmB;wWD zMq}7@bChcE22?wb)TSECOOFo$J}VP_C4>92Y1-7O5uAIg8HjM|ntLj_hm(%5GImXw zo1p+ql{#f%Y}Ft$xKGUfV}Q(VsU_xXvz8qi5R!bN-OQ?&+WKr(MCJH4t|I0j-k>x| z1O|}$MuwbaNo-o7zJ~zQmKP-Romv*0`jT6V8cGT=ut8$uTTNA(rU2fW3$vaFVv{ii zfREIKdgw|b3Thq~K7Wqja?ST<)>t=i#vraqZc!KP+;N~ox4*O(ums0V` zl;HTz=T4>ARB#|G#hvD9Vwp^g;3QY8r6VxL0&!KNjfmqd1!pc+nPFz^k}E{OSpf4j z?Pfy~rCshad@qw4*KD)W^YT!2%`LU%ps}pPTz?9o)>u$aC=qrb8nk4Z=t+%V#m9{-__O;%1NI;JTXP%>cdi4)_G&eSUAp-woe7v9 zKm0wnF5zkUk?(o4zJZ6e)`J@1_^-d`Iwf&&kU`a{!z&UgSKmFS=2OBdAvyq%)xua3 zhtm$1vFX`_g`OnY$pFz&t$5@<_8e${nD<6%NG=X_OQ*Q*K0=u_SdH4W<8r6Tz5D;t8tbO-;RXBOgcP9ii2v=u2XDQ~vNTFh zd5ai3KZy$7x+mn1VRzjB6w%Tr1h>@#^wQyMeh||GK^S>dFLBtGP1cczz62IdU~O&M z7*=eJBha529WSHO+@00-@pn%%QEIzH6y=x|`|#%B)aouM7i;eb$w?J$l6LUB44_Y| zP-*PKNmav&Ky%ZDCWooPq|?|eth4G!#3KOv*~7x|ou>_N6=(uPs5Dvl zfoJksb2ac8anL=6Vm!|^X#`-qur%vX;$dc5F)%_Ik>lY>l^{)mWp|b`$ot5kx|(l# z6O2eY6S-K5C9CcDF0O*{a+7+VVI#dAJlI^C8sQzJxTMamgU6k%WO?-{s977JFo1@G zAnF`LokKpeyT$Itezr4g`rxY+m*el9zY-d3))G%TSRt$e83d-ATU zSKZ{K1V4W2yo~5+Px__V(tzD^?l5@;8>sYi8yZtgr*o&3(&&Z&wPAE=9f_k(i<)hs z?G=g8yTQsA851qHd8%m;8D@&hzv5nUCDM{U=^}*YkJwUw!JE?;k(=kz0=ysek_?x1In@`v;GF=ffZNKRxoD zU-_Az`N*wjzV7uhnxP?K?;RsK;|%OVsyp>gtzavrnYx75U^V<_k{Ye{S$flzQY!GlBmgO@WohnP;W>o0uNAqoF70jOLXRGtNurHj&k;_E z`1TU~#R#?|25WYrG(zO?&5F3z%w#ckfI>Ox&Yh7ObnF>$mQ(G{8fnnPI8KX=@4>4* ztC#C2aCmLczhHAc7I%5m_w9n4hy7`Jl! z-7QMoA^7pB(;F1(CdR9Sq_4NcFQIw(+UcMJH8^L73ykWB5KK%w zJ%vic%wd&TGnJiy24RLOXQ5DW+j~@qoP&rf@|-H-i$$vAITWf9kq{b+T?m2dn38RP z4g+51$&R0S_7cY3pZm~7?1w*p4>;(PYU>-Pr~b|dFQJP2XCJ(Tr{$l2@Dd)D-~He- zU-L&wrG10}`-KlaRwjM%gV$JA7Omo;!A*g~!*?7UegjkcIdyT|SSb#up`sO;OAUD; z!pUv!25q1ZxaLq85$2{rtSN?0sgwCk?a^~gB{$(fP7`<88kl&l)9)&k_W~wAYm1mr(zmHg@qGjX8!90j-T+AWd6uD!2G@iazhV}{{GhX~?re8;+2 zS<*bd_c+yspprl(#Pf~yNK?)|hE@8kd7$Gd(ohg4l0@R{B(mBWVA5#;)qYOSJR|b0 zU8`ay1VnQpN<2>+F-xP0-a5&h7z#^>(D&o}j!S@OeLq(bnptXNr7aP9Ee#w{P;+m< zi2N6$Csey*l^{9AlId6A+koNZ;-2P;RYIz1C%hbjjN7%(2|!R7LzA?V8r@8wzgV_W z0(qXt4;*Kfx%D&$?(>$r$na9UX^GO>I1T?KE1%&smhk|VV8(HycXtOm7m%>wD;TDy zFMPWQ31U5}s^Nc=lm~#GxO*I%NSf8-=rmT2ALJ@}(X(S*3*fLl3~Hqkkh!qWW$;jV z0~F$VQ*5Q9&M@2QuS?lR-sF`HHLQx&#ZuZtM-&Mp%k)C#Du<&TwHOMvEJ;<#tz-XQxo8Mx7P#~A03 zMB4nSK1U6CI(g+6GJwYpFJ!2c?I!m zO}j~e4U*1WyFhwTCx8qsQr?OsBoy+o`zUOXQ6?gZRz|D)3gnYuLAev5Ysuy~e)GJH zF{qw2dE;Ad9U(I>K@+%q!xR9a@64N_ArsadGB;NwUW zDIrliE$2`yk8Wq0AWbCi6?Se3o(yL_xgbr!Q7p4kfl)_|SqLHKXsTqF9lv$HzXgC7 zE$(INWgDSXm>iHUWKyu|-VWz)2JP1BXkjLz)`JAYKtH0d;c;N<-*j}9l<*!BFrI8) zVV`2gDZTI0?p%4C`p9LvuH*9$E@L4X8E1hc9Ddysn!kUv=#?C8LJKo1m=F__{XnaM4$b)uP&pt z(~A{@cx`yMK`joXo7I%S_D@8TEQlEWleOcYoR<-Zi0Ls`LYh=I%vnel+7jXByCG)?iv+Np_m-B- zdYw_ll%|Z_d*gRreY5TUzxbCQIbMCkyVl)xkMq_2<9A=Zb^9+q z{MvZw?tFedWq0lQzxsi7@Awz5-n#u~AAWJJ_dNwoaNRq8@72er0$+Ib*6qLa`p@{g zzUiAD`OCiegzvfjcmDpXw{HJy*S_bGzxw}r^~=M9*B=?bcHFu9dc0;xBddlDW1rM6 zw<(EkJe|iaSf)eH!B?sXc?U{-RJ}zYp0li!HmsbEc4)IhL9xAI1#vtK+d51dp=D=Cx zBpPWAp)&fmm24e<=aeK<&hIg?9x=t19x_R=d1JP%d+e^31$TmwEZFumahc>dG8O4# zO4%@uTCKGZKV0D?%PMsMc!(UcTC*G}@&acs#@uQ2NsH$A?@!TZpp8S}Aq4G}ES+%J zmPbba(1|>pOmLCtXHZJZYLlv&+`tq`SHv@fzqT++=KO(!xJ}|pM>F_#n$970<(xTs ztEy*U!VGf!52rA?)#+(hauRBYNfQ*Y3d%5gCKF^XZb`9TtrM_Zr0%mCYguwsiN#_^ z9d;5!I_YY+n`L zqQcY3V@viC(hlUIT8>Q%49lLIil?Gy2Y^j%w&4Q$r)8b1i_OfuM1@Lt#*mY^F3(ze zHA%v@0Qn5j{ouMUYL$`Mkn-?VbG>QW+(yb z8_t{wM|om{5Zu%niWro`Gz$`)iqp3Z{J@R}dInD^h6N6Vp^!RYkc3}$St;`j4)2Os zF8WOQ`0?j1VgC0Mr)=M)t)+2t)GeOZQX}>rIFLd{g_ut0^ltRR@Yi zi)HvijZ9idyIzy?bVZrAra`C% z5U>b*_e#5|RK)o{EqB{u($7|^lu=>}gwEUcIM?xs=g!bE7sbJwp&%2yE$ZyX1}&iq zw?@3zx)Pl0;&q~605+etg=Ml^OcTzW z=;l&^EUlZE@|_FgVKA|)bU^&x1`;pwF^``(2I$~TQ2K(?YT?P;{M)8&pwALULAC)Ox&=W0syBz8_Q!zWT%vdoN=Sj z9W=)0niE9%ZUeO(w1qH9@Cg-}NWncHm_CZ{7a0k9SIrKltdE)33gAI{!M_ z8V~;PmDUEfb9Li{<~^%SS^{|x0Ke><`sMEAxJB@HRk0BEs>H&ywGcAWVe^{T%y3}L zT++$t=)0qM3|VVN>o_C+_QW@8lE|byCc7TVdc&DEZybyDbq_!Jz`Fa=d!E1E?6~Rs z_+(+hP3Lue*?k?Zxv$@jR)?Ub23SbqEYSock9uu!EE?KGCPjL@GegUsi{X8ML540* z&#_01OcU@=3xnI-NX>M8)~UCP3W7`;v;~qhkIz1L8Cg&)Ax}&fq|rCC zW+i-hB%Tw6RMIMbU7K8KBDb=2@jN>Ofe76We?_m``sy>BEcrIcq8rWPY`moLEQ*On zWf3NXC#i-s0K7M*8oAfwzx~*)OSnV--N*i@ZpsJm{PCk7yY8lB&zjM5>NE&ZSM2S8 z5}JxE(hR1MbY-VCKqFJc>cjV-htwIR=bcITrDJ1*P=_5yI8Tg~R8C8&PLTcG+9Zjw zvMB?@UNz{obraw+d9zweZHr`KwJ=1$pfx4ZRca zp+}%wF|{1h$zKb)@owY&=k~X(jH_y}Wsr7KHoevo{<`AczFmi9 zIzLv*K7RN;Jg9|KSa+EP6af3%?6|O?ACsoGobsPFoQNdXX_J#k%8}T0%`r6k*+@dA z#EG%|oI}RIaDm`UI(u_imjqRm!8eXeB-?50@gsN77{P5TiVkXLUyQ*EF&&)80x4x2 zeK8c>M0?uWub8tzC$Rj&ULUXhaT#0>E2I0*kgs&<)sJb75+? zIp5SkjaD?2Dm#zC$(X#~w(Y~$gj5;GyMSfOZmPF=U0;h47z5ujb+d7Q#34r`8 zL6`b09=GQaSj~vo%6+flL|Smr+$Eyh3!6?xvx?m!205|fE0>nG;Z)HvXW96r?d*1x zQKOM(;-2LsmIVBXbEj)t$JajGI==b-;{(N;y>V|K-o1ovqg+d^E^kL_H9Z8{piVdd z5P}_c?Wy%yJtyBNF?mnA)ANZ}ex={YmZ(Uy~x2y&t zsXOmtBTFJBkB!J*D66!t*QD`O+wO1|bHDF58Ug%U^S12+Bj z74xR=;DxW4>Dr3q zG=&s)t&_>Dk#@S&Hqm$7tZuT>8IJ0UB%8Cz6f=Wibn*H4FD_)oJjL}h(dBLd+*|=S zk)<1I34&e{5hDeetB*2HLr#s**IV|^6tTyew86ME2&=2lXnQr%f#GaQkQPfQ8OhL9 z{3#;Es04lQy~goh-hJjB7rJi$oiJp0F1R2b4EEZfH z2`UY=6E#$)+L{glI$hubYU!)coRi9U5k5UI@KHicYwB*O4%S4R?6Vvnzl=Kj6X#{z zI9K?mK7Z>?I{4oCaQphy=WpG9=Zp8BV#zo@{rOvu?QgF=^4Y`h`&$62&obC+z*0w~_$!SRAiAsP*wJX?%Bwlciuey> z;87fj{$tw{|3#f%NFm2iQbM2~S~Yq;5tG@9(R)ng%*5F%3rV2IkN^7@dqDW&2QJ~) z^!p!pi^qd6ec*Z;cHF3Xs!vwwc`wW#F0=)+lCBbCsNyhlsma}8@1%<7%WF;e7UfWJ*x+|>#0&-QZi?T~vMJio${GbT0Q$kBdEaZnkSKW@zz_W60pRhb+zp#Th}v8E6#Gn617&(?VV` z#L5d6n)kh6O+i}QW8@C4*Cp%~!W67ZYwaWm^n^Goe5`EHfSftF)p3064yCzzPG@3Z zG_9N9pi)N}QY|y9J@k6~jXNjn#FZ#8!WIDg)i#Tyn6%=TTNWnHW7_?-nFFXFv3?_~-S?Fc%Cz;`EjZ`%$nmnDT9?T!Y0lP*!ehh}B#5DuDS3rd6w79biWn#MVl8A%sw+!?%ia+2=Tl9>;GCju_Y$-#GYMS% z7S5=sv_tPLv^bYEtTIy9F2cxjsE8S2K}-l=mMMMZPCkU6yl8ixfB&7k)9*hvKe_3f z_~hf!g>3ifb=|%K$a*IF9l-z;TjAN%;(cRlmRp1i2zhKjY- z7&A7t5>rR2Ou?-e_|&W!hPg;|+jtE4j!H00V>Y11-#H}8T^Ch_U|bjpt^gswh#8y2gZt|)$yI=Cr^ z0PYvQK}sUhD1~%ZnnU<+FNpn@xFPUKrS9z2}Ws4!>?mpp-*0|didnYtrI z#R?Z%DOy@0%!cV}^1X+Vi5)wri42V1df66fHU}`IHIiwwa(ftleYG%NtW7vA$; zdrU}q(>Lydm&yFJJRKihCLet8)|bf}kCguYJEt-S3w;TChW`P&^^RSO2)nGY1Uk8O z#hT}uUS!)QGnoPN+2C#w`!cDg%MCjbNffhAm<_nLhGb7+){Ooe&`cR^58Un{Vpu$W zfU5xcX3MPN$bXcY6&P+093O=X7%Z+%YBpD*z4f9&EW`0 z)6~Xfh|bg4R`X~q-6tpxOJ`a++wp^UE@46Z#d~igq`dJhVnGPP~;8A_N3z z%Y;?rlS>JHEJ@dvnArda@Gd%Xf6TXZv-kJfob*X0^-bTg|9|cky$Kn^W-+z}Ab+PZ zW}cXTec+~!QFVzz{kB;beAHYK#b{6hJ+-8S79_Pmdi73oFLm==+8nj-fwznNzigxc zcOgp=>P68Oj!)gW(p8K&GJyk7IwI~_!uO2BRG2YKag;M7uLYDV@5+3jc)(`gj(fquHYS!_(=gBRk8X=U(mfg4y^ zho+NF+0;_&3#|80#nuWC_{?1FY1F8MgvmmuA` zv>`Jq?7mjRusFHNbItR$RWfB0Q4LM3Z}&}HCy3ppZO=N~EUQbFvNj|Vz_ld|ym@8K zeEg#~Z1&$c*Zkw3xpfIh@lSl_P48HbV7x#1nOjeydw=RP*E`!G?S{o&7m=x5q=8%6 zb@sSw*`>sQdZZ6hrn}}mOhvYZTGUq5($9ZP*Vvk*%`ZZL@xka>G3VNu`0u^TY$2nM z=~}W*Nu#pVUf;-CjbWWBqec|ZBGEg|S{bR3W7DmB5-1BUR&$7rEABnDJvv0998@a! zDRRw~O!eK*bkJ1y3>wvI)S$lNLMkw@Q1`N>qJX>37W=CAy|i9_+y`*8x9o!Z*yZ)^ zv9B&~lX+~Hws&C@sbxv8R+WV7g5 z5*NGAftZYz@@fExSY8ciL|eq?ZbCpZP@dxtFQLk!&cD>w(1$;L5q18zfBLP|`QQ2J z$2$7I z?g+)iv!*bK5*vk6aAHNPgu3)TDx8+59lmYY++qS ztR0f17OHuGmx2V*D!TfP6dV*;Mls*qO40!PG*6E)I0Tgit0>1|y^mJQbv@+Qyziy; z)Lid*Ea%{+Z`-3wyoU;-pM(g>Ewes2Ge9EPfwHlhT&~91hKy{(opmv@TLtwf~7M1RU> zo4Fhx|LjF9l%M$Qn^jNz`M>?@4a(;^0T*Y|Lb2_Ldnp3{WpB- zv#%FdeEPGuo_WUuILyELaQ%2{-+B4=pMwzd=qFEq^Zna@`pX~OfB&5q{oS{}{&nAV z^&vc&uR7Q3){?-Mg4<1aLDD^|aKQ6kdkbS@%uotQJWl-tx&_kgY%hzw>6Tz{&`P0x zEFh>c2}<3e)fyy7A+^D(fiR^<$P0Ua0>l!uZ2X8~8CUo*bQ`aU#X0X}OFKVtSx6rKFRIxE* zEO?|FCrR2}VH(+`N+j!;U~bE_J&}(!B4A3Be3H>hUxFl|Tsj7iRWpXQup?c-lu zN+bJH3)~<1xr+y_`MK)_t}g6rVit0Zt@qV^ks*{z&E|dPQo8pE5snjR zI?-30ip*%7DF1e3I3}V_F7W0oUgC&8H3`$2k_k1eq|c0MQa#ID_#=X)d~LzJ>BiI( zW}koh3fTVCJ?`th$Foas`VKyMy}apm`~S<0?Xfh6UE_(Yj@;WAo7cUP^jgVUZgJH< zn{*u|AuA_$9SBO51}CbeDWQ5lg}d42Ir$uL8%6`3Mtnp|CD%G-N5bP{or`rjc+}%N zzvU8|xj+637qKY);=MQWx!(A){gan*hd%xbZ)Ms3>0h|MZ2QV|31cLJoED_{73GH!{dDH;y@Lvh zq}I!r*Ou*+WCkHjMk1n1Yn%93B?!GNW>Db_{L-yS0;u~Gdxh44uqCe5Pj`psSc+Qg zS~vZ=T_)7gp64uOcD$Jb-!=VUc7&;#$BuS={`l2%jh7yy5#01Wdvf2_>xixRjKxD* z*_Vjeh^-QR;~V9wYeY#g8$rtn&^fAbRHK3Bi4?@g|FYjm zf9wrgT#tFqk=j0+OrC-5|97n$5@%Pk3D_i7zf%vyt?Hmo5f$148lECThT%K zGx)7piFhh2NlK~j7DC*G2ZR5_dl{J*tPe;wNMp~8psQq)-byTecOI#pQmC~YfBnba zG&$w|OYa4%cmFAW;rSQt9UuL%TetthgVpNVmp=Am*XK>K%|4QCo$#5*98-J|k|Z_E zwmjt3=Aiv!#n+Cccy#i#Ypt;t#yHhvvYgKngR{=6#nu~Niz|9&;!&Ja+|WVBM2v~C zN}kcK)2F1dm9}UhNL;QNn0?}=@7$A@uTd*- ztz9$VF0b23){!C>ASldct?R-@LV^UHg|gh(1x$%ksIA1dTVJa)W*;%7^BpXi<#n^c zmaKRo*Fyot>+w_hZNg7sW{>1UmbOw75hN3VOx%NP+0d`Vx1d2Vg;%+N_fqJmnHZ)06@dhm4bro7NFiEvOTg0W_JW@8qrj>Z! zwrUC4Yb@?nQ=I{T(OOA!4J-DnsbKQIwopwQ0-z;IAt^J?ZQz5|Y?e?OXNaPSv4-%Y zV=}nasnn$#(eRmFk@84HBGsaGZ&|Y{NkhJZo>@wzuhd%rh^A3n-{?TSfC+kdF#f7{ zzi{`3hpQE@)Pp>;>#NmG-@Z5KBGPe{5TRNTJsSdO;k0HP5;l>NfMNRzeP{BgxZfLn z33(>VmYM|k%}&-~r5kGMR(zakh-V&0Ricfir!ge%opjioqgYd){egobme(^@uReGi z$}KA_!jO#+8wmLEp-nj4N@odf9&@)desg48@B?VkswOHjRxsa=N{dZ_iQjlKv$~tqZ9QxSb^4>Xs zC^y~9@bauuXfl)=LuwqofTIGa4kpG*+f;XeN@v5dC{m7}`|zzx zxI;hx;Wv%kf9P6$;qD8^|NPZz2@tg2lwq8 z9^St%uU3C5JRP5oPmT4WJ)N!>S?_%5?zh~1;r(|XUAO+-f9K!+_x@!l{h^t04#V|$ z!sUALea6}kP-<;m1$JAdy2$&SLphaYOt3vRDOkJv>V&jxjbVVxv5~DeqNnHH8rCkj zkJVO>+Zq`)HFA&($LF7=mf?9MxT6u1kv0a>7<*4SN}@rR$^8qF$lef(&Ts{N+fqir z)2YKoqSX~!SdHjE;2OQr6%9fKHYA8bo!V_dyrrIJ!}Y1|$1i>>OO&xocXqSfR6Wm? z!j@R`Ui8V_$Ojm%+9}88%9%<#X^`$Iuux5Vsw_{OoxyO=||@ksB7FFfzFeVsXk$B@O8$)uXgSlshWPYe;uPgjq{u zS(KfvRf%KIS*ou+!An=@9xb8n^d5QJ~Lh2<9|JGMv^usRH{(p8c|z_ zmisE!Q!2xo5jM36d0Yfv79?;Qgd8`C#63az4M}PE?%C?tW9cYLRL3s)q({PWsA`pM zhqtQi5Qxm%vD)z~&t5{3!LL4h9soz8f7Xg8VyxEMWGRxaU2={)ZbT~3_{hOBA}iek zu_d}_;_sTtFI`Bw^ITG6t^mx>e-65A4?V3wPGFzJkgg!4mC*rDE41T(JAWmu(h!m6 z!)&fWbW>dcW`DA=M-M=noGk0n+$2}>%A&6d+RBT^)4xkL6M4qAXSJqjA?!YzttXCm zw?a0K0YsPF=vhQ09lqD`56{c!jf7EIVWvXxR5uvrEuLtakyc2FrV}dPF;}a)wx+W< zK>JM+7s-gzPK&s6nX&cKH11`+x2%PLvmR1iYbZ1%GCT*Ss!&R4$3HqRBc$9lI_-m& zIW4=*xd*(NT3bw4Uh*jEO6*kUj2wrET#R+(5p&%=0AFl+j--mOa_$r!NKe`xEP_uh z>LsN%Y;?5gc>0pfeEjd{Wh`)Rp|Fi*$t{tW9j)apHikzMXM1mb4jL9k0>C+sK|QP( z^4{RYoTMY{d&Os;E9-*J#G9`*c<=oT^<5RA8NFQcnJ{Cg=6?Lr)w9v-*d~hzIukwl zUbCe!= zBU-853mW5Ei0Dfeo3*@lp2(d$ti=>G)b7M4#gKz74acuPd)j|A6!^c@bJ3AcJa?>V zqJiHvdePA~V*WPfs#!;z&D)6Ly~MmAOO@s|l`iJBZcSv`8E<;grn{gO3yyz}*&2qH zM9pc9%FB;m{nm>JgZZ`dG9-|SQk5OvRzNq{x5NqVF|+k<5$n-MShnYqVq{Xxl6Hh* znRiqhgncn|vK1I`6Ejb#6n4j4lO=oG9SA1cLsX-|WKXYK_wnoJWq4>os!CjvS4>Ir zf~Y{iY_Fw5!aOziYk1DAl_a$g4zbxOR%I|&N3S|ccBzBSdJtM~1jN#!W74vh=4EA` znXtJKu6>_b@K+~R6qE5Ayi8qaX48dDGikeKS zN1HOhnR&qi+nISVTOlkGp{&fRbn(eLB=|Y;&Z*Vi+VLCbCLdOawsOP+l-5dg^GVLK zJX_HcDH?`!Z-n=TEvhV+Oqo4pd>v9$)~G`0#tdmTF3J?4=$=tf{Da^$6Hl!ek&3?S zoIUtz{rKFo=Q)|`1}1Fw8RiJlWVCW>dKS7YL*`iW1YsKZ7ym!(z5Va5*;U@xQwgWB z915gKR8>lmRaO0=Gv0gcz1P}n)F1deV)wDvUVAM#a6DtqnXwsW#`YLPG8k|Qv1Q)v z1hDGn_q0t5g$6>@s!@|j&?XH~5`qEqX7CGOQeF4=%-i>z({?;gpQqLULOS0$bLKwx zb3glDFW2?C$Rin92ax-8>WN&CkuOx z)30BhT>+s5P|~2KAo&;`2kh9x%=cQE-m#Wu^;)B?I%hi7(YKb_M$U~K5}mzQSsgZF zWHgLQZ4bOxx7u91@fH{7;T~+DE4L**TR;8ATaN0lx3;NPn}N6yNdFtm!o!lO^{6qW zW=W35+^M%c1OMCcHIGJfMvTIHt_Aa2!}n*j2IGhJ*j*|jpml5nFL!`CDI$hfmSNpb zpM38{c!7T7>N7z?3>2$tcEl+mqt}$3THU*4ROqM+5?(N^#dkJZ5_Lib>vZ#2b2;`& z8##q2zWUPAc!eS$9x0|`C|y;(IkGZ`7f5Wn&a`p*&9_{@s`vEXZ$5lN8=-XrgQVj2utm+8G#B9=Fuv;@&)5c!>2yN`vkj#Q8d_FY z1QU2QE(W`)DRN%`kji5%i!#@uCXz(;^r_=Aj*uG2(WfV}I2Yzwqk_|qH*o|cw?&!) zOh3s7elMz|Rk3^?z4FL{^Nc``-dHWJ9t|IrL!;gii2!;MAx6ffbODW_OM0a)r{BJM z-GbSG7jnT%Zp~U7*v^;>p%{P=Y;TV}v2?2)BZuu;hjAJByr?_8QZhXdGk_D;MvuUU zuokeF5sYLTThs(hr-2y57Cx9~8K>X5jPm$*-+Kcl)K@Ty{c`|@9uQ=?mvM3{dS!G@Vzg>*1!I?z2h6c`PS((@4fNHuX+L9_4e5D z&YQPRpMCFj1iOtrSPDwz7I@6+T&&L0sYmG(l54zlvu&G>VrZfO?~@1h0tE!{$cX}F z7#`Km%orV@m|GRh-PU+7O`z0agDoR>slbzA34DF=RJtMjAhZn~kuc|!LIYW*77a9K z#dLabp6U+mU4jy~k;c$Kb9V-c`!gn}y#qBh=~V63ldl>|%1QOCkLmk3sx1o91E zw;a9U?(KZ&8yuda8BqA{4_^J!>FnR*UwQwH2W_3se&YVpcU;6# z_sg$%>va9}`qg_DPuSBQw4Dv7pJIAjoC_T(;bk_e%c+g5OLkQTD_5g}L*#20A7$W0 zbHpQ7>QLSytp=HBqBBA7aVJ!>9RuIugO_*(kf#mk0j^WCHq2HC10xqDLMhH8Cepak z545tpgd(Z5V7j-YI|66 zIvmy4l{|m>8{^L7*p1(`TQ|QoZa?(=xpl|CA>MA+Pp)&{%$J^Af9G;et{3-FPdt9} z)}1%~Kit$8PPaFVhs(p|YDslnZvI8?sLs9+`5RAM!bx&9Q>l z1~Z_dVN>(D=XM8ag}DYTkW#tVZb(sV!2TCxPl#-qQA?Ju`#ny^vg+MVF6%+EY6*;BZN*mV+GPj?&{lq=u zxHI3fm%ifkP}z0O+On3>B;z0!&=_i7Z4Y$MCAZGCeCcE^ z6{9PulCltu$(3skUwDj~hgOO#h|g`bs>$gCZ$7dk4SBgscfhEj4cmF@uv#L8>(7sTU{1Pyl;~$yg(WS(n}%&r=&~F6~N%Gm4(R z3s)g?M2VszRU}v=5sMKl#C|;VRYW`Xtg|CA!){Zus%hY6IPKe2DXI9w$pdN`4V=>U$~4R*;T#QT@p`WMA2T;Fzu*TH{4Pi zjZ%6M%0lq&YLMPQK%(HHdjSPCGP~TWesI7@`dnUL~83GRzk%daDRj68w zD;9-+9iIu(VIdez%#cTS!w9n2wiIbSg4UJ+s4Y?-fEyfuEHrAcWZ(wxB@96pVg*+* zUTwLK%+@;ayo9RrW4MY^@X*yJZ7z@- zv&SAgsY7efH#R;7q!4#Y$TmgC;!&~JRKee!5#mjt1zDuboKx0b(<@E%6vJaH0L9|) z5@>_prO@!gAX)a)hmI4Y=@BnH*kFd*+}327)mFoM8gzsbt3oZZ8SxHlU{zyfx1O-j z`K&9JQ5DV&0U+6iA||t0iwPu}AT$<8$H_Pj#x`iP@N%4b`kS~Hl7?s>fuI!%cVDzd z7o!>MG+Y`|NxVsp(OCg5st!-7B4JhGid!3P{lsQ_6wDgj_M)r*(VaC?Ne?X!66O_K zWDyGnUBgblj%AQ2@W?4<9S^l@u=Tpw#Mp_jg^H;%sK$gdjSIkT%DCT)Fwm!xYwpg) z8!XKPqY#(vfOBrIfK12q(qz`~sW9qoa^Za&4iV0_!x!XDfvW#ohuMARD>mn`0}$}T=9IHR*j zEA#XlN2C=@4yA5nf^=!XKMx)=CyN<2o01AEVycV^rX5EyH5wzDqab8u?Y#!0Az~Y_ z=E>lq(t(v+h3Z`0g*MB|QVqK$BqW*?YVGu!xQdOJ*vwdoI56K1@tMlet#vR_nHs6o zY)ZA*G~dyBskPQvnHs41${ZRr1T>bWjjHtqhcYxO1#cv&z@(x`!RyJ9+F8pM?{WIA zBi2AS2MdBzlD5HezOkvI!Cg$c)>wzWs{TAil;M7E3A7lz!#qdHBSFOGmg+}X0 zYq637l%vsd6rUToMy}CjHWJ+(BAC&LX=odydto~`dlRNeMx$4ZYuR(t)OPyq+mHOm z56Gj*t5-2^2d}=BQYUnyeaP;`Wg2vINO_?$CPFeTM8r)i*tA1=XcfFRx+9T%aEXF5 zw83o${1ejdViI#bdPLZ!(hS(jAyrR5_T(jWsXzYYB@{nD@#H1cJ|BPbiwqb$dgYt9 z;vs+R(Y*Qfr%yb2PaFMTJ^8%f>~4$r)epaE-@NnqoBYdcmJIrB!iBZ*l<{fw}vCm0f|$Z2Q_Z+nmRSWw#ZIxRBLGi1F(wM9BjNZ z5Mo^>!N*&TDmW}on;gCQwh0JI?rar?V8_s`Q-UM%yb*1@)b{_nyFd6h1R|8NSCWpI z9tvFxqOrMUo0uqqRGy_;+Tp;_a z5p`DTfZS*w#kL^sl8qQDVPpng2ZNluD86=DydL50w;r>7uVMAvH}3xD#JMMhcf;H3 z%dpO`yZeJLgZTEJ_|LK0LlkRs9~+C(8ABC`=FL&^1xQk^1Oav+OUCeS*nJhER-xqM zhJ;K&V#`8F4^K_QA`pyvA~r+^B&H9hgR)!YV^Q1SXXuoC`f*%^>B6Jjqx)jtt1H_a zA%|cagAM>dI-7O;Yb>=+Aa7$*%#A-`L+?1H!uvct;IJ#`{ z#@h?_m=dSoJ(}qTIs3|F*dBH`FDRyY)=ZQfTc~HwKKt(0b@gH#KwrAUc7Vnb$albs zGW_QHy9yg1G!1;b+C@Pf%IWGEt(?7E4OGl@~OexQK@en|nQmPb2;yTAovbT)U{ zh$F5ZrPvZ=7>~|{ochk#12zeS6WDGbL})iyACFy9BOMK6)flp{ZHg&Wva9*(if-9Y zAH9sz>|^hLrJUtAeBEsDi>*oHwY0ES&# zY2h8zDF!joMkSbs8-N}qCM!bz7PSDDVTFVpLZ)^-687Aq%IoZoiWsx6Ozkc&2h@-wMK%$#)OMeH5*G9oWK__N(HfT4Fj+D$of(y*A}JW? zR}n;0O-mg}e}=*Yr`*tju3c6%(J3uPI}}=_!g)OL5S@Pi%?C5ETWi}|t_j0+vrR72 z#K8Qo3+SXp2(HG#u}W2lTk1dv0UNgGwM-1sDtu?!!y6VNI2(8GOJj8`pXS7T1corI zNVaF~-N_xS%4(iJtv~(rb*>907v3ke?K}YP zauD1Aj$fEf>6*}El(IdgGqhD$Bld;7F@{40w`6ZHDJC2oNRowHv~HTdi6+-IR)JS0 zeU89GxY3#~WVcuPjv<+Y4IznLdKp>1ve9nM5HMJJZOSY-+Q7|21%uZ;MZ0gudk2Xi|V=`7f z5)+L(f?Nq43fF}kSkg*+uUa=@UcCEkMh<{jv(tb1=1Z7E{{EAfpeO$Hla~PV_=6`e zf#vauD|yLW0!HC5irS)-ML^JlgxRRA-iPBay+;>Pi=w*98UfUy^-ei^Au8(JVgn)r z44FXfki@~pNGWRvdD@v-j-)z3e03h}>gjL4`4YBXSBjsrqX9mH2LnFO(tJvCNZ(z` zCMeTJ39^E}-*Vf>=ZX28pkarsM>rY*c7kz+9s6|)s|MsVV=@f!2~zKPjTyDngZPSB zL}|qrCbN4c)9JHMUV`H1a~Glb`TVh#Yp#SpA7EBr zj_(i-Am%c@+uRdlNR)>+PZEM+BbaC^r zRT3d+ZHXNTmnwAn-0chC{+)grR{_I7jSh`#MT!m*ET@x1&WVjsUD7vRULa#50b;eB zvq8$Nqw%cbMv)8dd*xDxBXj^kzjYDYL>vh+@w#k;hKW$aoN&{w(xUa#=Z~k8h+GP@ z@oqt)_=Y)93n`@r)WW@5C|sv7l$FtVt=0r~83q3fRWBiQBFh3SED$XWuSO%lnXR_u zg)w6yqhn{od%q2bD%0}x!IhD zFTsufCl{f$`NETz0KfUuSE~5=voAXNpZ(T*L_Y8P*84dAzwKL}&%e9d>4)!}6*a&1 zGP>x*`m!e?dtg89C@zS4gh+vcumb1e9S;(Tcvi?xcI_lg)wB0$_`e?9#;g;2G)QCj zWQM$EY>+LrprXMMdOd>q%&N)jhW|T{Kl#A9?745<1d(IA0E0DS_8Lf)?{!yR$f|Cl zR}lwYZ2+hzJuL*O!ZJrDoNe65sIETL1|Ny`F*jy^V@6@j*;GcSEtR@M#{>Y4*7Q!8 zW)8q;{Pc6UidF#gbli8$)%P|>8MQ+$tBxKIaU_+KS6S5@bIKx^uEt!v4yYso%(Y=in!O88Wl?zB zk}b;+Cp-Ovw_L&u=WuPE{SEc02fOs6@F*I-aD&^Lt8-cCt@>yl+^zO1hqA7KyaHgX ztx_r5fu1)2FW4vUYHNRw`RV>?)*&IcFkZ0=5*)>$vFJ zqbC%aQ$%_n9gzhSh-O)k&>}w(IlQfQ-BJv8ZCHbs?y1sF|23{+mQ@k8(PAXFdTl7@ zMx0pdLZ+Q|*`@4mQeX_u5!gBlX6~d^p?2*tR>Lem8YV$uunf(u5`9gB|Bd14*)E9M zTsnnW7M`y%PXEo@j%)_mj`UvHBBc`38XMm$n-%T`mmRnz-Smhow%&*2!AzKKw92D) zt4hA-;X70~9n~;#ZtzXl34G2h&D{q)5*QD=D)8&G4r>*Q^gsnOc|ceS_ykp_vFGvuirQ?9v{c&-Ww!8E4!n-cS+UzfR?-~!$;eo3CQTYj$%7MfXPy&|PCOblV;AXr z*&cZJ?h3(xki||IwWed+2ueGM#k!H0kA%BO>H$r^X&+SSrX0!=|b%2zVo~ys(LWO1kN?V(=)I+O@%8vKH)}r6EF`MH}|duHwhc zJX}^k{r6Y*!gvMR&x*(gsd#!lp(0>FL8?KcwyBrc%L_6Rhe7mAy9+j@QwmL}uoqSl zP}U&(HF(U08kM1O!GMk-Z0p+%4GwQX^yH>?`pLIlLOb$PZ#z;{#*E;)0r3LnF4(qV z-phhr3Ql|%;f3h9k$Y66Rg|4w_Y@keb?I`fA3Fy8z3n2ec zEFBBXpLyG{d+@>C6Z{s(F}e^D+{>_Dq|3mq8LlEh!1r{Qje!b`IRprZVX#5o0Yw;V zms%-H2Z?2=?4;mr6N&4@HfjyQ)0=ad!+c43`X7&{v*LY&yzXeKd?Xc?YUl%Mhw{cD z=JDax6iMlWQ021posjVml;>?P#f*ewAWkxoTT@2~mYnJ(TSvEw=#l71`zb!xItX=E zPk-Fs11-v>rPGuG+4^MN5&|OVF?|05qJ4IN8`~F~-&ioTqifK0rwXzFDht ztUhg53dA+@*u6y-iPa!6C@w0-~+f$%=CoLmj_kL}z=vR0Leg~;|bO}D{|o7&xD)rAO;jfM1f2(ltWr=5Q8 zc&Cbi6nRMVNO{DtJs`dXLTK;fJ(Y_1yR5S_A=tPT#h<5TAa-e#0hg?0De&`&P<1ar zDD^t9-G}dmN9WE|o0YEA;cCD!rFQ!J$0wp#eFr+|<@huwA&GX1^=5~MM~aN;gEkIR z9n+!AOXz`iYr4xAOQ@y$g0VlvCKgkepdo{17A~WOm0=rEvrT=^>b_fO_=wZbzwHtf zz@PolLEvGoHR|pHfmCAWjmR<7XDhtIJBzqU}2mU9nOrM$=7MV`;;>INRwT;AV_*aNR2STZ>?u?v8c0~P zl>ySCW=D>?;cQsC0-qFym#CdP#adlm3>2(_5qK^UML_|~8FpoJ!;`*dEsXerMSGoo z?9L<9M&hmJI54-9IoSB-74R}tzkoPauCXiYVp{~88ev;pSH<9^ zpf(?f5a@M*>x;0y!5eR}$~00Im2}%Mch-LT{PE2>`_uAAA9}@+pLd(>hy2#f(-%H; zOf(RnzN~fEuj?Mj~x_0|gPfwL(1_wBbZHAQ1CZX~GI1vrnM?-;3)s=IPy|>QT(sh7~w3FBA`*9Uz zn$cWA3E{nW+^o?`z?TQuVcbDFvudQbj!7^L1@{F zLG-p28qU2q3)FObq%Y%!{HF9VREueaKN@x0AYd_u*VGE=wZk>Bw6Xf>2XPhJIkXg) z-qd<7c#9P-1>|<2(Sd_amh!B#PDT*Nl3h0P^mI@=$aoOdF@|a(j!9eU-lLCF3{lt? z&N<8=kul(v8#=9y;I(L{AG*31if`eHg#a&r9MEgvL2bPujgFT<)M`D0ds&g2YC>Nf z9fprl8C;J!=2)15aMoJ)8Z@9z72iux`7w`r7?lqm>o(aC-Hwr`Uw`g!Joia6$F8vB z3_+aUg1W8RX8hS(vaivp251snXVW#~5Qzi%6l`0|UjCIx)j(IULkX2}6<<*2Dy6q5k#mTT)B05OjCf-n!(jWcM%kc z-@dwxi5i|Nx>%WeBWY!V`%>$!@CqPI#k7|ueUXGxcO1*QCk@6% zDt9~m-g6g$_W1qhZanf;uc)v8OJDbrR`X3?ACJau^qO~0fB4*uH~yvP|Ji!t(S0i( zvPbRKliwP*PoH`2#v8xp`G2_Moe02rXWTx0_PKkZAD?^f#vA|gy~BdHzV#*lvCrS< z_gw#P{?T(c-uUld`#mrDPyg|AHy-)QyR(Ovwa>4|{K0SCd~x<5pn|%9szrnF7Aegv zsBEcfvscIH3j=Ietz*;HwZoKGi?SiloT+3Bq4ls;4j@J0A%($?4YR8akBg(MHV$mY z@e`j!AX8qOJ)9dXbsb1|6GXZr+~^)<#hGv1{YMYy#^k*)dMMXM4__uYx(8|7Yrv5+ z%ZxcI_P1U;OzU%&G3J0B5AV~#NzUC?6d;NhJcb769-NtNs#+q@oC^FFi744Y+xxZ! z*&?WSS#_DMjxu%SRG!#Lg#*|&H<25t54#U+OUkBzz9Q;cy#=*`eK;sa002gV?VMmNt$>W0BJSF% z!2>wh0}e`>yK9kVG3vao{5msr?%EOcAKtxj554`d{lu-f^H6-t^Dq_L+7Lk$EL15dxIX` zrpoR$Jx43pa${@(JA9>CMvrM-7KdpLnzpJT7Pm-W3uff3pi)P7Oz67u?$GI&!veRo za$DCEIM21 z3d?Q;{ODL^XIXo5#V{ghQ2~yFy;Vh*itUKBHlku1Rf}h~1>7jqt(ZW`_Kw7RjMRE5 z=rn|@H^kOwvu@e4QHRYaG8(MM;-5cVK!bGpo!ij+U*x;w(;v8qcgY`o z;MKlMKKp@tYGBN;be99Z20bjYuxgJ z@2Vv3|9~Dw>yp|tsrMaSJ4AO-dmueM`c@Om%+h1|pWajXp7|bL z@C&3pOb^$WRlfN3YcG&5(F^2bCmaYDd1n5=cV5Jq`Gep2YR}9c`OfQS=D;cu>#-6u zA$ydW#hMl2b0w8S`0Ck*TEgxsB$TyXB2c)^Ee2Z8ftRd@L^s=6C$Yipi0;iDlBNw8e@cs;NJl_57G*f6RX(lUfc+{ z^`Z`+zOEOVT8w%-WPsw%3w$|) z2D(JYj#&W2G@`>XL(4}qJ?p|?z4e@Ek>L|^Y9H!SO5HJM= z&Cz5W1BSeQXuiR|@tqHSQ#|>u$8PU?j>>c2y89oMNvp9oNenTDfF!tE7lbI45=`-T2aSwS{z_@*WeZ`yKkJSA0ml{_Y`V-}uhc&)joB?UJ)A{w@>Hx+cV+eOq$Txxfrslfk7J zI&3hPJ?C`9VnX3q`i7p2N?i^m0Z-%}wu}y|%O2r-wMZ9Bl`0U}WJ!Qd-3OP=e(iud zH*odt0rkdz=PK0ln{Pc&V1LK0C%*pXqYuTmyyMnmx9?>io%=T4|FAkY7ygB2cwB3S z$Cu!+x(q7rWni=~gNl20tmYNW`!X=v7l4ArWU)7bCBM%F)pwJ^B z4=*F`(>A=Y%z_sMIO9)W0-X1cp1y=r$ z>a9qnHN%quYS+_pLqde zeEi^{{n*=2-~PVVW=P?O%8I2d}HRcGM0HUth!WXs0O zfct1Vp>1`Fj8Ew{PCxqAOQ=1r`Y3TH!lE#7=I#hla%&n;2Nt8uB& zy}E9IWf?bzwE@eNidxmGqs(lSZaQlq2}HKJ3u=&oEfQyS6EDWdJghw*V%tS%Q~aT;wz<$znq z*5*hqa{9t?6$n>Y?ESE(cl9zV)nnu49v<*B3d9Y9csRIRyY>~5G#O5|wE&(NQk7O! zcqT#N3m{^EI>Iz_BE&>Da2%tfD61uz0qLL^r$0SjB+a<(*+nfF4pTiAz#^m_P)pg} ztq|05yY+-^Uz#k3M-88u!a)j}6Tsm|b}tP9))F8*D39ir171)o(Jsn>-7(dI6`+(j z{p;iDQ~-u)!*7|DU9;|^MgUbSEfF#Z1kM100J%jF4iy|7rkcAOmPB?OwW)1%--72E z?*Itpt@gQ!BY(pxXO^BzutfIC6?~D?dtth*X@IgOPM<9R_j{xu|JFtqUXK@v? zTU=Qqcb1^&O%@0~y#XIr5kt6mVA&q1c!9U`4e-#OJr)g}%fvCK9#*;Us+E^(mlgbeFuMP+V z%4bT@ugV}aXqtcnm{*Ay@O!jS8I+T^1Zc~myDU7u6xY?lXRf~!{M!E1>&kOxe?#yIGNtsq2> zaQ^pE04d(yWG1TP34o^VxtD~pud)czDfi|)uw1Hu%cMKVOU4jyoj&xIOE^TYI@!yJ zs6+wTH+XGj&e;*uq=0@?tP1{Y&ji(JRQ1}lAslJun!6)#lIC)oMhp8YNJTrQCj}D) z%p(*$Emd0GOH#pK#&&0jo}7<3s9jIrapyr^lTF*e$?BmHUdvF+pz4Z>G=R9>Qvt^H zfpeLYOn_`&!?H1Ug?;Rz38q)5Wlb`IYb`tCslW+VNVhGz7n{N(|g~2 z33br3@4keG<$dqIgm2Ebz55jgk-Yxyi}s;+-8p^7yYG4Z{?&KC5LNP$-}u+weeGRq zROaZlx8iLf%M$ub1I`EBmj1{fgtxJs-jLLa}nsV&%+t?}A^obw1o) zszZ9+-5a?%Q_JYQ*_)dzl&$zy7i~1TNrp^_mXwLN`a})`y%v za~tEEi=2LbhK#kQxdz91P1g)5;>0;04b`wrfv+{4_2 z1V~rm#-m56MHV3u0C597$7)9!NCnvo1yZfo8?iG#4cAk!AJ~GO`@UUz3s$eUU|))9 z=h@HAqxzcQ*`mUpF#)V@%)rexEJatYHn|^^r6`N3(6-UL1+`pd*R6GRYg88C^X_;- z9~8T;VRVjS>nRi{niFK4cx+eP+nysmAd|M+0|#A0>1^f zZjKDFdzd(r;5MbG&^8s?@z9QidWg08soIox*&>(><7h)GNb|fkn8BW{~ zcu{p&7KEkh+>_f9NM4 zrP)8ikJm=I0sQ8g6pkF|Nqtlp$I<{-rL1dt3-%QexE7v1b(f~ovex1qmTw8$ zyee{VJI~l*s1bT7Z-DT17eva~L|TJ1AEnm0Pk;5!gEsVMe`J5{BNx%@|ErH&M3epN zAGwGo`;#BJ@d`_imp9bE^^yBE)SvnY_=YbnHQ0CU9eJcdynG67B4Dv2g_~CgI(!iv zmIaH@#2p=Lsz?`I-MBT8-NWW&8E9=RbG6X`6d+(qTPb9rOB)SH_gbk)Mn>GCUSC9? z+wuECLw(!!&2M?=g+k*Eckkg%yY<-DU#~aLeGl)yTey&Vqdv?p*)3fC`b)r4t+|OP z*jsO#oaUarMEA4?LM=2>3wefvtZtuUxF%Z4C=3Brms)|ys5_SSTDx*qLS4ES<2X;* zy1G*ALN&^yF++gkDENr;^mCuMh(q&&ik@214M-2_G&}lvYsJfKAg5!IB}K>tn0JPc znX_RpJz2Y<@y34(B3X$7p?uR0|FJ4u-c?w$7Vd2-J0Y!r$&9!TE2bHR+v$(|5)SSQ zDtZ8`IKTq5vlisXZ{G{STBVdUGtQ#O^&Ec#8B8S(}lc zn;YC1Ndl%oY^)rBA)qUiO<53$TjKQBU=1H-fJYD@kE=*luavYaIQvcZTFzUnlNgUw z>!YaWz+7bp*=BAPBFP*krDz;71|uMa2hX|*iGaD=#x2=FQp3RZ4Q&gN$ouphuA))X zvZR+%ChuJkTI4Y(woBUra6pU$&5d1iX*;{`(U#OTgS+mPD~k@~Hj`}iHEJ;R^v2B$Q!Q7+bU&hSZ#YW zsoep2S$!?4Ey4bdQtdz)M8t@kUU-JLJ%n-wxH&CG#vGCrv4|xBKU${`9QR@;+cwOe zkv&iwEoz&V2S;Q!%4#x6ODmICG%mmum05S~gO?Tq=!m_D0V^>reAOD;(~ymvwX!wt zu0F&XNWgXB)^O#9OFDhmokQ-Q=(xd9YMV+TarQtm060H3p3u4j5wjskWK8lUTWC*@ zu4~P3JDz@@coN1CCB&3ZXEH}7Ll=YY7CHhb5`fhi8XIi;UG4PU2gITH1QLh#92mkc zQEh1dd3MvW2iIALxk@s62Gk?455xvBsrXXx?H5#KjjJA-ETV=3rObv_LS|FU)va?u z(2&($NporXUi0)lxQdSPBqCm>ORG^7LoAH_G5b^mp_^I5dkIg0LMZlQt2U?NMpU zbR`KNW1tFgr0QksMThhN_n+zkq3^S_s+wcf<=a81v)hKXmHk5tJF{&Y`-VJ|91)57LzO=r2S-o|s#bn_EU1w`F0pE}& zqa)O8BF7}^P{%if&^S{I^W)`ErYN_t!E3C@Snc#*Ts;@DqJzWb$}?odC>vNdnNeGx zCGky}RU3dC+E+qd;oer8Iv_#BvmBGN3_E83j)7xT;m8uTp~yWDSyp;)vm?s`D4{iS zc5kQe#Z^GIHCkOZM)dTtSva9EDSgz9`jK0WAfP%BZo2WZU5iNw8SYxEj6H|rBf_yV zDLuK=(z;ix6}+Ok)wQ=aI$|%Z<1w~D3}E-^`|dpQA6;nM`oCUA1@@0VaS?6nKmNo; zw5|W-6R)mq{e@55uWkLsPh4+XX-|X!&zOU&HlIEkVsG}=rM;w%C^3?T)qy!}^)aE} z3T4C2fqV5V!Y(b5X6V$F=7gj;&>6;V-c7BkPT{s|Y7H5#j^A9a8(GhdhBs=)9oj_3Q`dYi;92wvCt3 zq|`nN5TFZ0PocV2rUsTvllCTD`Nre5T6Am7!(#hx-D4-UQd8%O<*U#lkXggq0OJ-B zKLy9TWoeSB+G-Vz$H)oe61utH?QI!mHuSSfX4;O&*Oc zW)zxhL>~hR0zuSm>*+0%#_m-)DYDCynsY3~A`-K8tFx>n)w%7mb`D-UP@k68s*`qG zqb`lHu#^xcsPD&-__620X*5nh^4j|1we`hiuP-iu7XQfCUTClOYnM@V{Hu>&M6dSi zAHRrR?UNsWm8!ds-&b|_@$0=Bo}zBrMk`jBYqkw2en^`WpEj#|@6|T)VfN6Wi>y>s zx!48t$WnI2R32Q(f`hg!T?JhR_d|VJIDNETB(RF_rR;^x*-LPao8){e`Q0 z_|BVmp0HcDo_y#VZtfkAUhmn?eKRk-XQOL9+m|Bk?Ci(ZYt7O{HcJ;!f<4IDfA)vv zGatT)7yf5Id=W4F&wcnJUihE?@T+^_|H+5%_rm|ehp)fz5x^kJ8mD4OPSE{L0KfKR zWy}(hJcN+DRIK_}k?@E%8%SV05%{4QULCYF%-6a` zG@olyYHv9h!(64)|Mt`+kOcnsr!L|9`%j;`gzxV^d+HT3bN++7RmF?1#<#xp`6K=G zOHaMP5qR;RpMLqNdw>JK^3*l70FO+mj-3UTrPiHgfXtvVpdp!_ttaoQxS5sfoSWQ% zo>MSibc$-)|Hao-tYUapJzSmc|Z=KQtEwqY7SD;*t2$l+9b5` zGS>16tyaO7EhI{C+piZQ7xqxRR)~CM-kWcUd$-?m7fJEPp5KMf?!YyOJ}Ivj&-vo} zUwxJmU^Ug@je6@VCLB_R^PpbZBp$<>6M0rzv0%Wkd2!qDqPA^~p;iKe>V;;A z2Ps>jTu~*fci~9c_^7SRvyQT&OI>HN)YDIaDXDV}G)ddLp#hsQCDA!;--81ZH8Tgx z;7M~KZPfzNjO@Nmq<0e`ik@h6Yz9T&>7gX&e8X;YquQPk&Ia2yBC;B=Ys1H#KK_`m zc@1>w!2$sq=_pTPG~_2NOs#H%3C!dboN(8nvZpNgo@?K;DD`L~dt>3<=`8DssZ{Tz zV;PSH$scW7B8lhZHMX?TIj14d_Yt$5Uc?<4tki6i%4!&GPKxBD;obWf#zL*io{iR8 zeM2>%bEB#tmW*h#R1Fv27#;Vlwuu(k+Hyn8(`HnR4@uXo%{$9pWp#~7ve)X;PCt#S z=v$M0p=H(zu%r_7PVh_(nmkQ)6jMU{M0zr((n@qGP>^bYI}Nw>I-4!68)cto26;5A zEqYUeogg+dYlGmy%tVE?yc?&Ue#Vc`${z>@>vd!u*3w3U2|eMmmq|^v=r|PM&YcSe zdDMDgFz`L+SOn8|*DSVk0%&f#v{fiT>Ffjir@ky|@6uR9+)Vf^N5!qpI;jb*)6e3L zRB6n+61e@oM-Q>ilLpI76wyI}xpYYlR&Ch#8G(PBOBtxXMg+>g;aXMQf$ZigmwNmoKK;-S-+Jnc{^fwWAATT<@=xDnQSJ?E)Y__(xT+XT zsAn#z%T}*oBaXQxhHI}g#Ra>raG{18#kNVN(uPgPA8FpF?^p#-o=b@#vrD4^+m^b! z^pIxTp$Pq0$_<+h|B5wzVQf+_I;qNXxr!(p;1Rj!7F;qfsxayo>M@T zW34+@w#8U>vmEShy95IG7>$Q(2$t-$P_@`wTy6KNEy85e%Bqf~KdGFQi4-Jg=tenx z|2LikyNxwiA&A(FdE_?JG77j>TXOrb*gR!Lkr{z}Ix9rw#@wT>vqM~=y$9QBBln(} z-COD?;`MbXL*5_!{a2;ZK z&$r%s*{k7+FMWA>@zwjz)pK9>T)gGk+kWSnC;!CNQ(tsWFD0$a=`@NNfh>W`OXuEJ zwW4cGZsZ{3fzM#Hg7#*jl{BW5&Jj}vlX|C3U8oab7qe6@kSa@~t!*f060{Ga&pkTi zM#s`Y^ICe@0+%s&U!|_9tM+A!60w46pBwO{;koGP2~q__JU1HQ9Hj!M@rFpL(0Ykp zm?U!})UUem$GeRQDxXaEiTW#&AamRi=`F9Nm#?{>nb+O7JbUNqxOe;B^UpkY=Pfsq z%cT$T)yd_*I975Yd$K%PZhJg8Z*z}bXTMz`EnLg17Foac_x!Qf3q9oG_3ZDw9iior zCOPkY-ytgg|M-2MYxI3>RsX&3yLHVchni#DyGy1_nTAeql+`9ru)(N{bk@RKd*9+x z&&&}Ev$;9uK+>4eO4Cx;Fmy~~jRCDHH7{h#=d>}MVx}(WAiGTT(oK!p4QAbi<*u&< z*e`xd+`D^qqgcQ2nLW5zzqD5UO9Z;t7VGr+DAu3)0}qZ0ql0)M1ILAV39F+^|!I`1{m8x&}dnx%0_vdWx=~BHiRZ@P=~Qo z(b{vzijFrUG6x}H&J~DeULkqIRELkTde(H|B9Ol|z!{v7x8W=`V3xO}dW&&=+H_$R z*jIS2&&_A9o}25B+xQ?p*i~A1r5mX_4)h{HE!(w(~E2$mcQ7_H**Cy7+DSxnqFppF9Sr{`1EG)&KG%$`Aa)1A+5j zyaAls^jbk4rIeK{Rd-=u31{=6vX_X?x^iJ;L^%1rMsE{pu_mR-wAuyb<*qGbmEyX) z51tah?y%~uX!$!~ggH6_@+xPJ*|4>*1LqfB+kMzd%NsreaooL%+xH@Gl;f8^$p@F? zmlnBxWuJwv?X$do9F8v@D-H};{K}6WBAWi{k3Je;@z;O!MvJt$h7G{^Ftl#ks-j#s zn?go?_KnLI%qPag0-YKL2ugqT1H# zG+Sxy^uGI7(Q8!iI=z;)K#~hQ5valkV~e*JZk1#0y>}JchS`|trYgOOgvPSM5|%Z3 z${d!(W-Qu_mD*K1h5~GRg7viUL0yS#s&04)Up@7PgTjvQKSnJ3z()@OJAUw^hp75K z^wCFy9e?Pf4}u*({LvdqI;G7*U3Y0CI%cC-4um&cE@=VUO^e=qm5YhA(Kk{fj^e=zpdJjEf7wUtctK6KhY1WFD z)hRa(UNr`W*`x5L;jFOh6EAfIjX~nAbT^F#qmMC%j|udx8i2noqeiXZ7?d%6E0`x0 zyGg5Mj=DDW>pk>^Ey*4hH~;ll$IbgcaxH9L`XCP;HXo~xJ#Jecx2<20ZR=BCbs!4ukDi!! zu333uDQcV-j(Qfwx>BtX0%1_8ZFb&P*K{m(sx_>E?@V!1?Z7UoG@g%V3jub0c+jvONU8XRB`p7|!e+6Eo*o!fdy= zzD96i(}jn{?60^Vv!A_t@41^>1eZR;gU9W5EpE5hP29eCx&63LJ)TPTK{DxA9JE9H zm5&^vL;Tf`9HK+~pN|28|1TeTv<~stKJuUr@z+0cy+iB_JwMj5wfNAb0$Pqh!J2jN zI_50B);)Wd;3j2y^wh>BiUs?aGVlrT#7>1eC70Yu-ur;xQO?|@oYAFdI=hN$KrmL? zUd`!RwQ*^4rH54;U-eS8aWAgUN&Q;Aap_Y$c)jr$7k^xDd|~0@kL!(xKeB)481=^g zevEqK|2Rgy@pm7w-uTT2)*FBSM!f;iE-84_xd*vw&tglURNY(4uFg8nA{;SS-O!ze z{->GuRftJuxDAM0({N5zguzN13?PYHR@&=`_)K2p{B7N!Z1NE>X3BT~+L!|m& z{O}=C{V#p^5UKuCAAYn{|37^AL8<40>Z$ysSI~cW4 zh_Bhm8plA&DXw+Z4bd#l;fd5{y-Cg0F*3%p8b&BCa}AHIKvS5M!)vFUs16FhL1e|^IW7mpF={Ca>^`mp2YzjO=_=a2o^qm7?G{$tn2 z&#}wY0sf3TE9vNaFq{O1op}zT-C+uxt)cf|86mWz4H31p)}x1_%V>CWhXqQA>D!>U z8igQ92q6{;NTKK8(IrRa#-Q4S+!#M!*4zDIQTuD}NA2gY;w;l}@9xu2pO=oWo}16z z?A9)PrU#GXk7-1|zj6Es^w^`u@%J2qM)clCq!E434H^-Q2%ED|atR;U*C^0?h3LFh z^@*mXfZ@{CT%(6dfeTZYHW3FkXv$WzR+h|eyoungFu5en+P5HzuI4pLI_+A-M^eSc zpY^z|8_~lD&k@$`n!I)WHOyPiT+2)?VATW<*`~kOkxoD}|%x zN-b2lEt*8SDvfQ+8nd)PTV?~_Xi8O>{an)q{x|N2?|boD| zyFRH;@@p_QeEm3Te?Fu3#T~8w+)pAjCRfS|>FvQflUG?QTWM63u`Yj})VI2fz2}~* zV`SB%4D_J0uUbV>vurL!b-`g88ZrY;m99-&`X=~_z&>zU650ybq}rLR$EWvWp62MX zu?<`bynov6u{_ROaTN}UI#uhm-h3hDoGsjXN=cR6vWCJ`XJrJt2_e8$Jus8x!p4HiS(Q4_4D$d%z-vp?6RfMz89p58^6@;oaW4 z8xCbif-!&zqZIa0ja#Dt(?F#QTXv`*@7iJVizZG>r(kQNZ?cW0L+Pc1cF}tu3jryW zD-4Uc%|^_`R#rr~$|gO1=%L##7k_{MtDihXI{%5Ee6)1_=YR4>I@duW@J^*%>IDk! z(hUahL7DJ;AKv=JqrQ1ex0%>A0C<}YWxLqWz@Es71x6dKmhKSafzBqwYGYdsC~c>4 zhm3zG5-+m)9C_VK<-#T9!`ia1c~x6BpMKisdNX84Z>07MpXP&8`=zz19yerP(Ch#2 z`H4fs&iDSrBep_6alsfgc)8Bun4K3*K-`U`fh} zNTwyAE>vvWh~0;h;I_=2L~z5c!Uaq2wMdM#N~j-HcCqU=DVLTvdRXlIwlH>|-geV&h_=NE4DJV5PnWH{?LK6Z#0{x?7NXfgcneC&pDbcw!f%3fYz zuNb?Z-M@KFfo&2Fi7Txx7P?z2oa4L)j3ur`;^w1tY0cXnrECuv2348S4aVv|ms9xU zGL2>SJA^Z!v z0RFaP6u|F%!~*zTHwxe>4ufOK3eUH}tcz1>(vae{S->BAz%1al&l}Rw zmp;XZI0s&MO7YS>fS(+%nFrwO$1(GDH4k|4#aqWf;vZ)7eetK|XI?x+0{Ph&A1#4= z^2O^3M0pk8VY@i3Y`UYhk)xytxQ9(l4aVcDv4gkL>ac2*0b9uGv(Q2y&!$Vgt(`fF z)l$8*I9F(tT-S~s0o&{X)5m7qVH>?9_*w$F^fP!Zf&9^z7@W_&9R#2|&%E*Jc<$~E z)a24u8)jD{Ez%J6F##vJdD4Pa`lPW?I4{Ib%$TE^`)^ZRVIEkPQ&) z%^SydQ%N^Z6Es4j%bHT!o_%Sdu{=jtYo#n)wzSFI3Ea!m2j6srsC0}Z_E%oKb=dUr zi^oVGzx0Ud-!!J+^3ZK`f4@ZM2q^_Zn7}&N6RG zrHGfZsB9`2saGL9@@KDHnp;Zul2Ik7xs5Ho?=C==t6ujhzwj9UTKf3v&o-^R^zj`y zbHJjUuUVGAelo|!L%}g(_B%g*>#%_PcYOR1G5cK~f3%qW-5AyrLn5!CXcCO*sdzG!_3=s--mX1%tl}s3CAesx4u)=y@wTt=fY}hPH-h0hc=T_ zv#eTHTUm3@>qFB^lb)`{>@P>mzPhtx-NcD5eR78m*K{ph)9WZ)i|fo4qjermb+d33 zA+sh!$?BQ8Yq@ymIu{PSh43E3J!Lrb@v*TX0|mtJa2*{^X~jt@#xRlC=O^?7W#kvMxmckSg}F7SF~M1tqqwy&cdFC zM}DYyi~8sRb#Oz z&r;y`D^X%*;ht#*IZ%t#)ZWyiR?aQ?Syq1E63;w;J$YRE1RtC{>K@K`l?R9uyv7o) zTj$>9)=C-Q@^))CFzJ49}Q-1r4hfqm4kiG~NWXRsKwmMo3r^#iNfu$g+sC-JV zvvXaEw+%KkqxBeSZSGkazYDKN4`9BPQM8O^*3C9`wWOkrhv}*u8CvH=r##{B6-D{< zzGFn_1Ie7U>a-wjxUk3yT1Yvg(m35UbE!~i8LLgNedU^4Z4NLUYYN7lBgq$tSF$?e ztzJ>)UJaqQhqP9)*J`ngk?DlZTPXN|hzZ3{KX`SFmGlGn#-HAWt4O@a4HTJO`r^JL zSJ_E*NZAq-u|`dY@#2C9!TTs#HdEo!M0Op?H9(b%9;+8Y!J0m{Wq0qsaz@uxQ(9eX z_R?T>w;Bwnyw}qYT^+y>`t+Sw2e2YMeb?0ijJ;0ZeRTkrjnli&Zz}7I5v2~7Xd)`; zHfL+xa&cyr-N-a+Wb0@JhWJjcRdu#Wqd00E-msMnv~b9De!+tYgw7iMJG9HD{=|8)W3630kiiXqcs1(i-!;}``|IE;t##}h<3{_KG1IY#p?oQIfpws zW14*##lj`ltX3?_-m+U)ly3oLE*~?J`=}&KNc-4>OP%6fP1hKG2II+CMB2!k+S*-I z3u$3A_E;Zur#4C`D#&_W!0gf$_`}eQufBhV>+aJ}$3l~R1Jk(hIX)QExHQu81t4Q~ z@$mgvtn`rT=*Q@vk5LaFpb~xRs}EXzecz`JQGI>?rw&nlz5i2(sJ=e%sYk26e&ACN zs=j{kQ`f7nZ4eyVb;P3RUUMuxA5fw^z?^kAS)6+z=F z7viShKl`~ugwp@_=N@eU|Bg@ISd+F`tu7_=wGDNU_mRG}MUyc$uM(L)0l^Jw-aYCV z8WCaLAK~#qHp8HzRyfg^>SBj^3BLWD= z7$RL-5asm!=c_0)oWb^9mKR)(o}?pbti9lNs#33Tkkyc#@l&!J%4qhN4fAx9=b>Q{TZoU zoF@FUpFTwBeB7iQvPro#JK!-t_n7?LW3WLVw@ROBl`d^*b^4yGr~a*jwg+Wz3@qcJdDTz3dNP3@`1 z(YiMmM6WjRH%=|Hq|!Dow#pu@SD^}XB|Hz*W3)DE&snh_qTQFzfj3u6X=Mlq*Z7}; z7PX9xG5tg&F4j-)xO0S<`M57QUSDunWAOKX;t+ZM1D`lVp8wz{4w2_S^od90)qmoF zy!uaE&+`x(-)R}NBvz7nC=@c#OtvvYYihx^6Lh>A~8=V8AcGe}?nky}NI_p5`xoga=OZ zk16$!6YT$=z}o?!jl-t-|NIzf{?8mE&Hv~z()^D-Vw(RiADHIkz||whGXKT3040Rq5JC2 ze-t-_KreiXUx1_Rzi^Dm{TClGa)0bbWSpMN;9nTA*aR1G0WnhfT{?%jOBjh8z4_he4_zidzr? zbTr13SAew;mfpL~0ux-@D@n)pVZ#R%rAg*>UzghdqtC^?tGIXjZQ;*CZ2#G(pMT?> z8!MBSKEqeX?eBdhZue}Pyz)$iEtngp)xETr+B-NVj4|U{(!;=Pj8dvqg@*3JyHK;W zv(4e|*`rP_n>Tk3;~bjOHqeP_Rfg5ER`*#))h4;qW8XJNlqdN~YM%+*U-Hs79zAkT z=(|-;ky*NQUrW}oRcpoFHZHr*3ZJxXY93Y!92}Png%p~Vb~aM(tC7!?oV6&1p3-Ej z!lX8IP&uETmjMw;;})!dH!z?*{e|};B-D|Od{~_$w)q;XAS+^!w?|}BbZV*w$k%!> ztbutekKINO#^xHFjc4TIS#$L&qlr0fQy$%Y>V)~R(wHSOwh#D7L@pF8vz)&3oA3mJ zbj5peI^5)v=dP=F?$CkT(%44DDFgK0}tf@4oQzw4TM-3dLFlTH3C%0wPnBDuuM#$Kdphi)BWCR#s!7 zB@SZ^-@GKu%&P9zJEGP!JAL;zomJhp23Dyd)4peL$(^;ri?DSx{1jekOmAg3sP*B_ z)UtY5fLydVoGl7f?z_5HtvRMk9d4UVd}U1O6npgUP!nbfak89?ZSd(g?>+Su56-3q zTBlyUcAuauN3s+veZymL_HzZ+sm%#(V&2Zwjr-=E-qSXnxl53k$Yk=t=DRa(UnLWN zw<*lktyv%2N(yfX)UQy`{MKlvzjVG&C8~DT)t%s$QZ&^pCvzi)!u{wB{beUA4$goo zdx5~Y#E8^3imxcLLP6-=JdDb$GiDmgYD3a-ozw9f;2=KiY(wjsv$r`LtsDUX{6bvSLR&&*Z@`61+~z7{;R%~Eyf>vWmut|%x$#FLVeqG1q)1|n~dkB#u!7O0I$$4* z+#b?>w6GYxmTWc`#5$8~oj!iP3=e1RJ3)GMPVub0)`f`P(OuA9+{{-Q-P-^wg=QHL z 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

e&9*{+`8GbOZ~VyfUg+QSkuP58XP4C>>(6 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index ef84490d98..dbf84f0b3a 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,24 @@ # This is V4; try V5! -You're looking at the README for **PostGraphile V4** — stable but feature-frozen. +You're looking at the README for **PostGraphile V4** — stable but +feature-frozen. -**PostGraphile V5 beta** is nearing completion and has [frequent releases](https://www.npmjs.com/package/postgraphile?activeTab=versions)! +**PostGraphile V5 beta** is nearing completion and has +[frequent releases](https://www.npmjs.com/package/postgraphile?activeTab=versions)! **Production-ready** and already powering many apps, V5 is a complete ground-up -rewrite powered by [Grafast](https://grafast.org), our cutting-edge planning -and execution engine for GraphQL. It dramatically reduces Postgres load, -supports true polymorphism, and introduces incremental delivery, executable -schema exports, greater control over your schema, and much more. Its efficient -and ergonomic extensibility guides you into the pit of success. It even -introduces an "eject button" for when you feel the need to move beyond an -autogenerated schema! - -V5 remains in "beta" while we finalize the APIs, so minor adjustments may -be needed between updates. Postgres-centric users who leverage [trusted -documents](https://benjie.dev/graphql/trusted-documents) (highly recommended!) -should experience particularly smooth sailing! +rewrite powered by [Grafast](https://grafast.org), our cutting-edge planning and +execution engine for GraphQL. It dramatically reduces Postgres load, supports +true polymorphism, and introduces incremental delivery, executable schema +exports, greater control over your schema, and much more. Its efficient and +ergonomic extensibility guides you into the pit of success. It even introduces +an "eject button" for when you feel the need to move beyond an autogenerated +schema! + +V5 remains in "beta" while we finalize the APIs, so minor adjustments may be +needed between updates. Postgres-centric users who leverage +[trusted documents](https://benjie.dev/graphql/trusted-documents) (highly +recommended!) should experience particularly smooth sailing! - [**→ V5 status page**](https://postgraphile.org/v5beta) - [**Overview of new features**](https://postgraphile.org/postgraphile/5/migrating-from-v4/v5-new-feature-summary) @@ -169,8 +171,8 @@ yarn add postgraphile ``` ```js -import { createServer } from 'http'; -import postgraphile from 'postgraphile'; +import { createServer } from "http"; +import postgraphile from "postgraphile"; createServer(postgraphile()); ``` @@ -228,8 +230,10 @@ PostGraphile features include: - [Just use the generated GraphQL schema](https://www.graphile.org/postgraphile/usage-schema/) [procedure documentation]: https://www.graphile.org/postgraphile/procedures/ -[advanced queries documentation]: https://www.graphile.org/postgraphile/custom-queries/ -[row-level-security]: http://www.postgresql.org/docs/current/static/ddl-rowsecurity.html +[advanced queries documentation]: + https://www.graphile.org/postgraphile/custom-queries/ +[row-level-security]: + http://www.postgresql.org/docs/current/static/ddl-rowsecurity.html ## Requirements diff --git a/SPONSORS.md b/SPONSORS.md index 4907e5d5d7..24f2023e8c 100644 --- a/SPONSORS.md +++ b/SPONSORS.md @@ -12,17 +12,17 @@ Graphile ecosystem. Find out ## Leaders - Robert Claypool -- Principia Mentis - nigelrmtaylor +- Principia Mentis - Trigger.dev - Axinom - Taiste - BairesDev -- Cintra - Two Bit Solutions +- Apollo - Dimply - Ndustrial -- Apollo +- Cintra - Beacon - deliver.media - Ravio @@ -41,12 +41,12 @@ Graphile ecosystem. Find out - nullachtvierzehn - Zymego - garpulon +- Vizcom - Ether -- Nate Smith - The Outbound Collective - Charlie Hadden -- Vizcom - Kiron Open Higher Education +- Nate Smith - Andrew Joseph - SIED 70 - TE 70 - Peter C. Romano @@ -58,3 +58,4 @@ Graphile ecosystem. Find out - Jody Hoon-Starr - Justin Carrus - WorkOS +- Malachi Bergman diff --git a/grafast/bench/dist/cli-run.d.ts b/grafast/bench/dist/cli-run.d.ts new file mode 100644 index 0000000000..8ab5c6995f --- /dev/null +++ b/grafast/bench/dist/cli-run.d.ts @@ -0,0 +1,3 @@ +#!/usr/bin/env node +export {}; +//# sourceMappingURL=cli-run.d.ts.map \ No newline at end of file diff --git a/grafast/bench/dist/cli-run.d.ts.map b/grafast/bench/dist/cli-run.d.ts.map new file mode 100644 index 0000000000..e4878946a2 --- /dev/null +++ b/grafast/bench/dist/cli-run.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"cli-run.d.ts","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/bench/dist/cli-run.js b/grafast/bench/dist/cli-run.js new file mode 100644 index 0000000000..3f19b1caf8 --- /dev/null +++ b/grafast/bench/dist/cli-run.js @@ -0,0 +1,7 @@ +#!/usr/bin/env node +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const cli_1 = require("graphile-config/cli"); +const cli_js_1 = require("./cli.js"); +(0, cli_1.runCli)(cli_js_1.options, cli_js_1.run); +//# sourceMappingURL=cli-run.js.map \ No newline at end of file diff --git a/grafast/bench/dist/cli-run.js.map b/grafast/bench/dist/cli-run.js.map new file mode 100644 index 0000000000..1d291e912e --- /dev/null +++ b/grafast/bench/dist/cli-run.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cli-run.js","sourceRoot":"","sources":["../src/cli-run.ts"],"names":[],"mappings":";;;AACA,6CAA6C;AAE7C,qCAAwC;AAExC,IAAA,YAAM,EAAC,gBAAO,EAAE,YAAG,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/bench/dist/cli.d.ts b/grafast/bench/dist/cli.d.ts new file mode 100644 index 0000000000..d7ad3e48b3 --- /dev/null +++ b/grafast/bench/dist/cli.d.ts @@ -0,0 +1,10 @@ +import type { ArgsFromOptions, Argv } from "graphile-config/cli"; +export declare function options(yargs: Argv): Argv<{ + schema: string | undefined; +} & { + operations: string | undefined; +} & { + config: string | undefined; +}>; +export declare function run(args: ArgsFromOptions): Promise; +//# sourceMappingURL=cli.d.ts.map \ No newline at end of file diff --git a/grafast/bench/dist/cli.d.ts.map b/grafast/bench/dist/cli.d.ts.map new file mode 100644 index 0000000000..fcf98f9749 --- /dev/null +++ b/grafast/bench/dist/cli.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAMjE,wBAAgB,OAAO,CAAC,KAAK,EAAE,IAAI;;;;;;GAmBlC;AAuBD,wBAAsB,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,OAAO,OAAO,CAAC,iBAoC9D"} \ No newline at end of file diff --git a/grafast/bench/dist/cli.js b/grafast/bench/dist/cli.js new file mode 100644 index 0000000000..fee099ac64 --- /dev/null +++ b/grafast/bench/dist/cli.js @@ -0,0 +1,78 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.options = options; +exports.run = run; +const tslib_1 = require("tslib"); +const fsp = tslib_1.__importStar(require("node:fs/promises")); +const path = tslib_1.__importStar(require("node:path")); +const node_url_1 = require("node:url"); +const glob_1 = require("glob"); +const graphql_1 = require("grafast/graphql"); +const graphile_config_1 = require("graphile-config"); +const load_1 = require("graphile-config/load"); +const index_js_1 = require("./index.js"); +function options(yargs) { + return yargs + .usage("$0", "Benchmark a Grafast schema") + .option("schema", { + alias: "s", + type: "string", + description: "path to the GraphQL schema", + }) + .option("operations", { + alias: "o", + type: "string", + description: "glob pattern for the operations to test", + }) + .option("config", { + alias: "C", + type: "string", + description: "The path to the graphile.config.mjs (or similar) file", + normalize: true, + }); +} +async function configFromArgs(args) { + const { schema, operations, config: configFileLocation } = args; + const userPreset = await (0, load_1.loadConfig)(configFileLocation); + const preset = { + extends: [...(userPreset ? [userPreset] : [])], + bench: {}, + }; + if (schema) { + preset.bench.schema = schema; + } + if (operations !== undefined) { + preset.bench.operations = operations; + } + const config = (0, graphile_config_1.resolvePreset)(preset); + return config; +} +async function run(args) { + const config = await configFromArgs(args); + const { schema: schemaFile = "schema.mjs", operations: operationsGlob = "queries/*.graphql", } = config.bench ?? {}; + const mod = await import((0, node_url_1.pathToFileURL)(schemaFile).href); + const schema = (0, graphql_1.isSchema)(mod.default) + ? mod.default + : (0, graphql_1.isSchema)(mod.schema) + ? mod.schema + : (0, graphql_1.isSchema)(mod) + ? mod + : (0, graphql_1.isSchema)(mod.default.default) + ? mod.default.default + : (0, graphql_1.isSchema)(mod.default.schema) + ? mod.default.schema + : null; + if (!schema) { + throw new Error(`Could not find a schema exported from that file - please export the schema as 'schema' or 'default'. Exports: ${Object.keys(mod)}`); + } + const operationFiles = await (0, glob_1.glob)(operationsGlob); + operationFiles.sort(); + const operations = await Promise.all(operationFiles.map(async (f) => { + return { + name: path.basename(path.dirname(f)) + "/" + path.basename(f), + source: await fsp.readFile(f, "utf8"), + }; + })); + await (0, index_js_1.bench)(schema, operations, config.bench ?? {}); +} +//# sourceMappingURL=cli.js.map \ No newline at end of file diff --git a/grafast/bench/dist/cli.js.map b/grafast/bench/dist/cli.js.map new file mode 100644 index 0000000000..3901cae5d6 --- /dev/null +++ b/grafast/bench/dist/cli.js.map @@ -0,0 +1 @@ +{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/bench/dist/index.d.ts b/grafast/bench/dist/index.d.ts new file mode 100644 index 0000000000..e9c19a6ee2 --- /dev/null +++ b/grafast/bench/dist/index.d.ts @@ -0,0 +1,9 @@ +import type { GraphQLSchema } from "grafast/graphql"; +import type { BenchOperation, GrafastBenchSetupResult } from "./interfaces.js"; +export { GrafastBenchConfig } from "./interfaces.js"; +export declare function bench(schema: GraphQLSchema, operations: BenchOperation[], options: { + setup?: () => Promise | GrafastBenchSetupResult; + teardown?: (setupResult: GrafastBenchSetupResult) => void | Promise; + contextFactory?: (operation: BenchOperation, setupResult: GrafastBenchSetupResult) => object; +}): Promise; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/bench/dist/index.d.ts.map b/grafast/bench/dist/index.d.ts.map new file mode 100644 index 0000000000..11770eacc2 --- /dev/null +++ b/grafast/bench/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAgBrD,wBAAsB,KAAK,CACzB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,cAAc,EAAE,EAC5B,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;IACzE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,cAAc,CAAC,EAAE,CACf,SAAS,EAAE,cAAc,EACzB,WAAW,EAAE,uBAAuB,KACjC,MAAM,CAAC;CACb,iBAoIF"} \ No newline at end of file diff --git a/grafast/bench/dist/index.js b/grafast/bench/dist/index.js new file mode 100644 index 0000000000..d7cd2a2d3c --- /dev/null +++ b/grafast/bench/dist/index.js @@ -0,0 +1,132 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.bench = bench; +const tslib_1 = require("tslib"); +const node_stream_1 = require("node:stream"); +const grafast_1 = require("grafast"); +const graphql_1 = require("grafast/graphql"); +const json5_1 = tslib_1.__importDefault(require("json5")); +const grafastMetricsEmitter = new node_stream_1.EventEmitter(); +async function bench(schema, operations, options) { + const { setup = () => ({}), teardown = () => { }, contextFactory = () => ({}), } = options; + const runs = Object.create(null); + for (const operation of operations) { + runs[operation.name] = []; + } + const setupResult = await setup(); + try { + for (let i = 0; i < 200; i++) { + for (const operation of operations) { + const document = (0, graphql_1.parse)(operation.source); + const errors = (0, graphql_1.validate)(schema, document); + if (errors.length !== 0) { + throw errors[0]; + } + const errorsAllowed = !/expect\(errors\)\.toBeFalsy\(\)/.test(operation.source); + const variableValuesMatch = operation.source.match(/^#> variableValues: ([^\n]+)$/m); + const variableValues = variableValuesMatch + ? json5_1.default.parse(variableValuesMatch[1]) + : {}; + const checkForErrors = (result) => { + if (result.errors !== undefined) { + throw new Error(result.errors[0].message); + } + }; + const timing = { + run: i, + elapsed: 0, + }; + const onPlan = (event) => { + timing.planning = event.elapsed; + timing.laps = event.laps; + }; + grafastMetricsEmitter.on("plan", onPlan); + const start = performance.now(); + const result = await (0, grafast_1.execute)({ + schema, + document, + contextValue: { + ...contextFactory(operation, setupResult), + grafastMetricsEmitter, + }, + variableValues, + }); + const payloads = []; + if ((0, grafast_1.isAsyncIterable)(result)) { + for await (const payload of result) { + if (!errorsAllowed) + checkForErrors(payload); + payloads.push(payload); + } + } + else { + if (!errorsAllowed) + checkForErrors(result); + payloads.push(result); + } + const finish = performance.now(); + const elapsed = finish - start; + timing.elapsed = elapsed; + grafastMetricsEmitter.off("plan", onPlan); + runs[operation.name].push(timing); + // console.log(operation.name); + // console.log(JSON.stringify(payloads, null, 2)); + } + } + const extraTotal = Object.create(null); + let planningTotal = 0; + let executionTotal = 0; + const tableData = Object.entries(runs).map(([name, timings]) => { + const focus = timings[timings.length - 1]; + const planning = focus.planning; + let min = Infinity; + let max = 0; + // let sum = 0; + const laps = focus.laps; + for (const timing of timings) { + const { elapsed } = timing; + if (elapsed < min) + min = elapsed; + if (elapsed > max) + max = elapsed; + // sum += elapsed; + } + planningTotal += planning; + executionTotal += focus.elapsed; + const extra = laps.reduce((memo, l) => { + memo[l.category] = (memo[l.category] ?? 0) + l.elapsed; + extraTotal[l.category] = (extraTotal[l.category] ?? 0) + l.elapsed; + return memo; + }, Object.create(null)); + return { + name, + planning, + min, + max, + //avg: sum / times.length, + ...extra, + }; + }); + tableData.push({ + name: "TOTAL", + planning: `${planningTotal.toFixed(2)} (${((100 * planningTotal) / + executionTotal).toFixed(1)}%)`, + min: null, + max: null, + ...Object.fromEntries(Object.entries(extraTotal).map(([k, v]) => { + if (typeof v !== "number") { + return [k, v]; + } + else { + return [k, ((100 * v) / planningTotal).toFixed(1) + "%"]; + } + })), + }); + console.table(tableData); + console.dir(tableData[tableData.length - 1]); + } + finally { + await teardown(setupResult); + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/bench/dist/index.js.map b/grafast/bench/dist/index.js.map new file mode 100644 index 0000000000..0701596a29 --- /dev/null +++ b/grafast/bench/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/bench/dist/interfaces.d.ts b/grafast/bench/dist/interfaces.d.ts new file mode 100644 index 0000000000..c533a5610f --- /dev/null +++ b/grafast/bench/dist/interfaces.d.ts @@ -0,0 +1,26 @@ +export interface BenchOperation { + name: string; + source: string; +} +export interface GrafastBenchSetupResult { +} +export interface GrafastBenchConfig { + /** Path to a JS file that exports the GraphQL schema to use */ + schema?: string; + /** Glob specifying GraphQL documents to test against the schema */ + operations?: string; + /** Create any helpers, e.g. database connection helpers */ + setup?: () => Promise | GrafastBenchSetupResult; + /** Create any helpers, e.g. database connection helpers */ + teardown?: (setupResult: GrafastBenchSetupResult) => void | Promise; + /** Factory function to get the GraphQL context to use for the operation */ + contextFactory?: (operation: BenchOperation, setupResult: GrafastBenchSetupResult) => object; +} +declare global { + namespace GraphileConfig { + interface Preset { + bench?: GrafastBenchConfig; + } + } +} +//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file diff --git a/grafast/bench/dist/interfaces.d.ts.map b/grafast/bench/dist/interfaces.d.ts.map new file mode 100644 index 0000000000..aac649c436 --- /dev/null +++ b/grafast/bench/dist/interfaces.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,uBAAuB;CAAG;AAC3C,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;IACzE,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CACf,SAAS,EAAE,cAAc,EACzB,WAAW,EAAE,uBAAuB,KACjC,MAAM,CAAC;CACb;AAGD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB,UAAU,MAAM;YACd,KAAK,CAAC,EAAE,kBAAkB,CAAC;SAC5B;KACF;CACF"} \ No newline at end of file diff --git a/grafast/bench/dist/interfaces.js b/grafast/bench/dist/interfaces.js new file mode 100644 index 0000000000..db9191150b --- /dev/null +++ b/grafast/bench/dist/interfaces.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/grafast/bench/dist/interfaces.js.map b/grafast/bench/dist/interfaces.js.map new file mode 100644 index 0000000000..8fb5f7d179 --- /dev/null +++ b/grafast/bench/dist/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/bench/tsconfig.build.tsbuildinfo b/grafast/bench/tsconfig.build.tsbuildinfo new file mode 100644 index 0000000000..a26f2ed052 --- /dev/null +++ b/grafast/bench/tsconfig.build.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../utils/graphile-config/dist/cli.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/events/index.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/file.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/filereader.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/assert/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/minipass/dist/commonjs/index.d.ts","../../node_modules/lru-cache/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/path-scurry/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts","../../node_modules/glob/dist/commonjs/pattern.d.ts","../../node_modules/glob/dist/commonjs/processor.d.ts","../../node_modules/glob/dist/commonjs/walker.d.ts","../../node_modules/glob/dist/commonjs/ignore.d.ts","../../node_modules/glob/dist/commonjs/glob.d.ts","../../node_modules/glob/dist/commonjs/has-magic.d.ts","../../node_modules/glob/dist/commonjs/index.d.ts","../../node_modules/graphql/version.d.ts","../../node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/graphql/language/source.d.ts","../../node_modules/graphql/jsutils/path.d.ts","../../node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/graphql/language/kinds.d.ts","../../node_modules/graphql/language/tokenkind.d.ts","../../node_modules/graphql/language/ast.d.ts","../../node_modules/graphql/language/location.d.ts","../../node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/graphql/language/directivelocation.d.ts","../../node_modules/graphql/type/directives.d.ts","../../node_modules/graphql/type/schema.d.ts","../../node_modules/graphql/type/definition.d.ts","../../node_modules/graphql/execution/execute.d.ts","../../node_modules/graphql/graphql.d.ts","../../node_modules/graphql/type/scalars.d.ts","../../node_modules/graphql/type/introspection.d.ts","../../node_modules/graphql/type/validate.d.ts","../../node_modules/graphql/type/assertname.d.ts","../../node_modules/graphql/type/index.d.ts","../../node_modules/graphql/language/printlocation.d.ts","../../node_modules/graphql/language/lexer.d.ts","../../node_modules/graphql/language/parser.d.ts","../../node_modules/graphql/language/printer.d.ts","../../node_modules/graphql/language/visitor.d.ts","../../node_modules/graphql/language/predicates.d.ts","../../node_modules/graphql/language/index.d.ts","../../node_modules/graphql/execution/subscribe.d.ts","../../node_modules/graphql/execution/values.d.ts","../../node_modules/graphql/execution/index.d.ts","../../node_modules/graphql/subscription/index.d.ts","../../node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/graphql/validation/validate.d.ts","../../node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/graphql/validation/rules/deferstreamdirectiveonrootfieldrule.d.ts","../../node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/graphql/validation/rules/streamdirectiveonlistfieldrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/graphql/validation/index.d.ts","../../node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/graphql/error/locatederror.d.ts","../../node_modules/graphql/error/index.d.ts","../../node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/graphql/utilities/printschema.d.ts","../../node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/graphql/utilities/concatast.d.ts","../../node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/graphql/utilities/index.d.ts","../../node_modules/graphql/index.d.ts","../grafast/fwd/graphql/index.d.ts","../../utils/graphile-config/dist/interfaces.d.ts","../../utils/graphile-config/dist/functionality.d.ts","../../utils/graphile-config/dist/hooks.d.ts","../../utils/graphile-config/dist/middleware.d.ts","../../utils/graphile-config/dist/resolvepresets.d.ts","../../utils/graphile-config/dist/index.d.ts","../../utils/graphile-config/dist/loadconfig.d.ts","../grafast/dist/therecanbeonlyone.d.ts","../../utils/lru/dist/index.d.ts","../../node_modules/eventemitter3/index.d.ts","../grafast/dist/constraints.d.ts","../grafast/dist/bucket.d.ts","../grafast/dist/steps/__item.d.ts","../grafast/dist/steps/__flag.d.ts","../grafast/dist/steps/access.d.ts","../grafast/dist/steps/__value.d.ts","../grafast/dist/steps/listtransform.d.ts","../grafast/dist/steps/connection.d.ts","../grafast/dist/steps/constant.d.ts","../grafast/dist/steps/each.d.ts","../grafast/dist/steps/error.d.ts","../grafast/dist/steps/filter.d.ts","../grafast/dist/steps/first.d.ts","../grafast/dist/steps/groupby.d.ts","../grafast/dist/multistep.d.ts","../grafast/dist/steps/lambda.d.ts","../grafast/dist/steps/last.d.ts","../grafast/dist/steps/list.d.ts","../grafast/dist/steps/listen.d.ts","../grafast/dist/steps/node.d.ts","../grafast/dist/steps/partitionbyindex.d.ts","../grafast/dist/steps/remapkeys.d.ts","../grafast/dist/steps/reverse.d.ts","../grafast/dist/steps/applyinput.d.ts","../grafast/dist/steps/setter.d.ts","../grafast/dist/steps/sideeffect.d.ts","../grafast/dist/steps/__inputlist.d.ts","../grafast/dist/steps/__inputobject.d.ts","../grafast/dist/steps/__inputstaticleaf.d.ts","../grafast/dist/steps/__trackedvalue.d.ts","../grafast/dist/steps/applytransforms.d.ts","../grafast/dist/steps/bakedinput.d.ts","../grafast/dist/steps/condition.d.ts","../grafast/dist/steps/graphqlresolver.d.ts","../grafast/dist/steps/load.d.ts","../grafast/dist/steps/polymorphicbranch.d.ts","../grafast/dist/steps/proxy.d.ts","../grafast/dist/steps/index.d.ts","../grafast/dist/graphqlcollectfields.d.ts","../grafast/dist/engine/executeoutputplan.d.ts","../grafast/dist/engine/outputplan.d.ts","../grafast/dist/engine/operationplan.d.ts","../grafast/dist/step.d.ts","../grafast/dist/engine/layerplan.d.ts","../grafast/dist/error.d.ts","../grafast/dist/steps/__inputdefault.d.ts","../grafast/dist/steps/__inputdynamicscalar.d.ts","../grafast/dist/deferred.d.ts","../grafast/dist/utils.d.ts","../grafast/dist/planjsoninterfaces.d.ts","../grafast/dist/interfaces.d.ts","../grafast/dist/steps/object.d.ts","../grafast/dist/exportas.d.ts","../grafast/dist/grafastprint.d.ts","../grafast/dist/makegrafastschema.d.ts","../grafast/dist/dev.d.ts","../grafast/dist/engine/lib/defaultplanresolver.d.ts","../grafast/dist/engine/lib/withgloballayerplan.d.ts","../grafast/dist/execute.d.ts","../grafast/dist/grafastgraphql.d.ts","../grafast/dist/middleware.d.ts","../grafast/dist/operationplan-input.d.ts","../grafast/dist/polymorphic.d.ts","../grafast/dist/stringifypayload.d.ts","../grafast/dist/stripansi.d.ts","../grafast/dist/subscribe.d.ts","../../node_modules/iterall/index.d.ts","../grafast/dist/args.d.ts","../grafast/dist/version.d.ts","../grafast/dist/index.d.ts","../../node_modules/json5/lib/parse.d.ts","../../node_modules/json5/lib/stringify.d.ts","../../node_modules/json5/lib/index.d.ts","./src/interfaces.ts","./src/index.ts","./src/cli.ts","./src/cli-run.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/codemirror/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/cookies/node_modules/@types/express/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-axis/index.d.ts","../../node_modules/@types/d3-brush/index.d.ts","../../node_modules/@types/d3-chord/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@types/d3-contour/index.d.ts","../../node_modules/@types/d3-delaunay/index.d.ts","../../node_modules/@types/d3-dispatch/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-dsv/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-fetch/index.d.ts","../../node_modules/@types/d3-force/index.d.ts","../../node_modules/@types/d3-format/index.d.ts","../../node_modules/@types/d3-geo/index.d.ts","../../node_modules/@types/d3-hierarchy/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-polygon/index.d.ts","../../node_modules/@types/d3-quadtree/index.d.ts","../../node_modules/@types/d3-random/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-scale-chromatic/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-time-format/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/d3/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/interpret/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/chalk/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/jsonwebtoken/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","../../node_modules/@types/koa-bodyparser/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/ajv/node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/@types/license-checker-webpack-plugin/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@iconify/types/types.d.ts","../../node_modules/@iconify/utils/lib/customisations/defaults.d.ts","../../node_modules/@iconify/utils/lib/customisations/merge.d.ts","../../node_modules/@iconify/utils/lib/customisations/bool.d.ts","../../node_modules/@iconify/utils/lib/customisations/flip.d.ts","../../node_modules/@iconify/utils/lib/customisations/rotate.d.ts","../../node_modules/@iconify/utils/lib/icon/name.d.ts","../../node_modules/@iconify/utils/lib/icon/defaults.d.ts","../../node_modules/@iconify/utils/lib/icon/merge.d.ts","../../node_modules/@iconify/utils/lib/icon/transformations.d.ts","../../node_modules/@iconify/utils/lib/svg/viewbox.d.ts","../../node_modules/@iconify/utils/lib/icon/square.d.ts","../../node_modules/@iconify/utils/lib/icon-set/tree.d.ts","../../node_modules/@iconify/utils/lib/icon-set/parse.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","../../node_modules/@iconify/utils/lib/icon-set/expand.d.ts","../../node_modules/@iconify/utils/lib/icon-set/minify.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","../../node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","../../node_modules/@iconify/utils/lib/svg/build.d.ts","../../node_modules/@iconify/utils/lib/svg/defs.d.ts","../../node_modules/@iconify/utils/lib/svg/id.d.ts","../../node_modules/@iconify/utils/lib/svg/size.d.ts","../../node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","../../node_modules/@iconify/utils/lib/svg/trim.d.ts","../../node_modules/@iconify/utils/lib/svg/pretty.d.ts","../../node_modules/@iconify/utils/lib/svg/html.d.ts","../../node_modules/@iconify/utils/lib/svg/url.d.ts","../../node_modules/@iconify/utils/lib/svg/inner-html.d.ts","../../node_modules/@iconify/utils/lib/svg/parse.d.ts","../../node_modules/@iconify/utils/lib/colors/types.d.ts","../../node_modules/@iconify/utils/lib/colors/keywords.d.ts","../../node_modules/@iconify/utils/lib/colors/index.d.ts","../../node_modules/@iconify/utils/lib/css/types.d.ts","../../node_modules/@iconify/utils/lib/css/icon.d.ts","../../node_modules/@iconify/utils/lib/css/icons.d.ts","../../node_modules/@antfu/utils/dist/index.d.mts","../../node_modules/@iconify/utils/lib/loader/types.d.ts","../../node_modules/@iconify/utils/lib/loader/utils.d.ts","../../node_modules/@iconify/utils/lib/loader/custom.d.ts","../../node_modules/@iconify/utils/lib/loader/modern.d.ts","../../node_modules/@iconify/utils/lib/loader/loader.d.ts","../../node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","../../node_modules/@iconify/utils/lib/emoji/convert.d.ts","../../node_modules/@iconify/utils/lib/emoji/format.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","../../node_modules/@iconify/utils/lib/emoji/data.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/components.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/name.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","../../node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","../../node_modules/@iconify/utils/lib/emoji/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","../../node_modules/@iconify/utils/lib/misc/strings.d.ts","../../node_modules/@iconify/utils/lib/misc/objects.d.ts","../../node_modules/@iconify/utils/lib/misc/title.d.ts","../../node_modules/@iconify/utils/lib/index.d.ts","../../node_modules/mermaid/dist/rendering-util/icons.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/dompurify/dist/purify.es.d.mts","../../node_modules/mermaid/dist/config.type.d.ts","../../node_modules/type-fest/source/basic.d.ts","../../node_modules/type-fest/source/except.d.ts","../../node_modules/type-fest/source/mutable.d.ts","../../node_modules/type-fest/source/merge.d.ts","../../node_modules/type-fest/source/merge-exclusive.d.ts","../../node_modules/type-fest/source/require-at-least-one.d.ts","../../node_modules/type-fest/source/require-exactly-one.d.ts","../../node_modules/type-fest/source/partial-deep.d.ts","../../node_modules/type-fest/source/readonly-deep.d.ts","../../node_modules/type-fest/source/literal-union.d.ts","../../node_modules/type-fest/source/promisable.d.ts","../../node_modules/type-fest/source/opaque.d.ts","../../node_modules/type-fest/source/set-optional.d.ts","../../node_modules/type-fest/source/set-required.d.ts","../../node_modules/type-fest/source/value-of.d.ts","../../node_modules/type-fest/source/promise-value.d.ts","../../node_modules/type-fest/source/async-return-type.d.ts","../../node_modules/type-fest/source/conditional-keys.d.ts","../../node_modules/type-fest/source/conditional-except.d.ts","../../node_modules/type-fest/source/conditional-pick.d.ts","../../node_modules/type-fest/source/union-to-intersection.d.ts","../../node_modules/type-fest/source/stringified.d.ts","../../node_modules/type-fest/source/fixed-length-array.d.ts","../../node_modules/type-fest/source/iterable-element.d.ts","../../node_modules/type-fest/source/entry.d.ts","../../node_modules/type-fest/source/entries.d.ts","../../node_modules/type-fest/source/set-return-type.d.ts","../../node_modules/type-fest/source/asyncify.d.ts","../../node_modules/type-fest/source/package-json.d.ts","../../node_modules/type-fest/source/tsconfig-json.d.ts","../../node_modules/type-fest/base.d.ts","../../node_modules/type-fest/source/utilities.d.ts","../../node_modules/type-fest/ts41/camel-case.d.ts","../../node_modules/type-fest/ts41/delimiter-case.d.ts","../../node_modules/type-fest/ts41/kebab-case.d.ts","../../node_modules/type-fest/ts41/pascal-case.d.ts","../../node_modules/type-fest/ts41/snake-case.d.ts","../../node_modules/type-fest/ts41/index.d.ts","../../node_modules/mermaid/dist/types.d.ts","../../node_modules/mermaid/dist/utils.d.ts","../../node_modules/mermaid/dist/diagram.d.ts","../../node_modules/mermaid/dist/diagram-api/types.d.ts","../../node_modules/mermaid/dist/diagram-api/detecttype.d.ts","../../node_modules/mermaid/dist/errors.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","../../node_modules/mermaid/dist/rendering-util/types.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","../../node_modules/dagre-d3-es/src/graphlib/graph.d.ts","../../node_modules/dagre-d3-es/src/graphlib/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/render.d.ts","../../node_modules/dagre-d3-es/src/index.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","../../node_modules/mermaid/dist/logger.d.ts","../../node_modules/mermaid/dist/internals.d.ts","../../node_modules/mermaid/dist/mermaidapi.d.ts","../../node_modules/mermaid/dist/rendering-util/render.d.ts","../../node_modules/mermaid/dist/mermaid.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/mock-fs/lib/item.d.ts","../../node_modules/@types/mock-fs/lib/file.d.ts","../../node_modules/@types/mock-fs/lib/directory.d.ts","../../node_modules/@types/mock-fs/lib/symlink.d.ts","../../node_modules/@types/mock-fs/lib/filesystem.d.ts","../../node_modules/@types/mock-fs/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/nodemon/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/pg/node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pluralize/index.d.ts","../../node_modules/prettier/doc.d.ts","../../node_modules/prettier/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/ps-tree/index.d.ts","../../node_modules/ts-toolbelt/out/index.d.ts","../../node_modules/@types/ramda/tools.d.ts","../../node_modules/@types/ramda/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/rimraf/dist/commonjs/opt-arg.d.ts","../../node_modules/rimraf/dist/commonjs/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/source-list-map/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/tapable/index.d.ts","../../node_modules/@types/tern/lib/tern/index.d.ts","../../node_modules/@types/tern/lib/infer/index.d.ts","../../node_modules/@types/tern/index.d.ts","../../node_modules/source-map/source-map.d.ts","../../node_modules/@types/uglify-js/index.d.ts","../../node_modules/anymatch/index.d.ts","../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../node_modules/@types/webpack-sources/lib/source.d.ts","../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../node_modules/@types/webpack-sources/lib/index.d.ts","../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../node_modules/@types/webpack-sources/index.d.ts","../../node_modules/@types/webpack/index.d.ts","../../node_modules/@types/webpack-bundle-analyzer/index.d.ts","../../node_modules/@types/websocket/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../../../node_modules/@types/color-name/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/global.d.ts"],"fileIdsList":[[88,132],[79,82,88,132,385],[79,82,88,132,146,154,175,196,299,305,306,384],[79,88,132,164,299,379,382,383],[79,88,132],[88,132,298,358,360,379],[88,132,311,350],[88,132,311,346,351,352],[88,132,346,352,360],[88,132,353,379],[88,132,298,310,348,350,353,358,360,379],[88,132,298,308,311,346,349,352,353,358,360,379],[88,132,360],[88,132,201,298,358,360,379],[88,132,311],[88,132,298,347,358,379],[88,132,298,305,307,308,324,346,347,351,352,354,357,358,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379],[88,132,202,298,305,309,310,333,346,347,351,352,353,354,355,356,358,359,379],[88,132,298,346,352,358,360,379],[88,132,305],[88,132,346,352],[88,132,298,346,351,352,358,360,379],[88,132,298,347,351,353,358,360,379],[88,132,312,346,352,360],[88,132,339,346,352,360],[88,132,298,318,346,352,358,360,379],[88,132,298,318,346,352,358,379],[88,132,346,352,360,379],[88,132,298,310,313,314,315,346,352,358,360,379],[88,132,314,346,352,379],[88,132,313,346,352,360],[88,132,298,346,347,352,358,360,379],[88,132,316,346,352,360],[88,132,312,316,317,346,352],[88,132,317,346,352,360],[88,132,298,346,352,358,379],[88,132,316,317,346,352],[88,132,312,313,314,315,316,317,318,319,320,321,322,323,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,361,379],[88,132,324,346,352,360],[88,132,313,318,346,352,360],[88,132,312,317,346,352,360,379],[88,132,313,324,346,352,360,379],[88,132,298,325,346,352,358,360,379],[88,132,318,346,352,360],[88,132,333,379],[88,132,201,298,358,379],[88,132,298,346,351,352,357,358,360,379],[88,132,298,358,379],[88,132,448],[88,132,647],[88,132,615,650],[88,132,615],[88,132,615,616],[88,132,672],[88,132,662,664],[88,132,662,664,665,666,667,668],[88,132,662,664,665],[88,132,662,664,665,666],[88,132,662,664,665,666,667],[88,132,615,622],[88,132,615,625],[88,132,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676],[88,132,615,616,653,654],[88,132,615,616,653],[88,132,615,616,625],[88,132,615,616,625,636],[88,132,538],[88,132,147,182],[88,132,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446],[88,132,390],[88,132,390,394],[88,132,388,390,392],[88,132,388,390],[88,132,390,396],[88,132,389,390],[88,132,401],[88,132,390,407,408,409],[88,132,390,411],[88,132,390,412,413,414,415,416,417,418,419,420,421,422,423,424],[88,132,390,393],[88,132,390,392],[88,132,390,401],[88,132,448,449,450,451,452],[88,132,448,450],[88,132,147,182,454],[88,132,138,182],[88,132,175,182,463],[88,132,147,182,454,468,469],[88,132,455,463,467],[88,132,472,500],[88,132,471,477],[88,132,482],[88,132,477],[88,132,476],[88,132,494],[88,132,490],[88,132,472,489,500],[88,132,471,472,473,474,475,476,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501],[88,132,503],[88,132,506,510],[88,132,506,507,509],[88,132,510],[88,132,505,506,507],[88,132,144,147,182,460,461,462],[88,132,455,461,463,467,512],[88,132,145,182,514,515],[88,132,144,145,182,517],[88,132,145,182],[88,132,520],[88,132,522,528],[88,132,523,524,525,526,527],[88,132,528],[88,132,144,147,149,152,164,175,182],[88,132,182],[88,132,533],[88,132,534],[88,132,540,543],[88,132,145,175,182],[88,132,137,182,503],[88,132,144,182],[88,132,548],[88,131,132,144,147,148,152,159,175,182,387,465,466,469,470,530,547],[88,132,599],[88,132,601,603,604,605,606,607,608,609,610,611,612,613],[88,132,601,602,604,605,606,607,608,609,610,611,612,613],[88,132,602,603,604,605,606,607,608,609,610,611,612,613],[88,132,601,602,603,605,606,607,608,609,610,611,612,613],[88,132,601,602,603,604,606,607,608,609,610,611,612,613],[88,132,601,602,603,604,605,607,608,609,610,611,612,613],[88,132,601,602,603,604,605,606,608,609,610,611,612,613],[88,132,601,602,603,604,605,606,607,609,610,611,612,613],[88,132,601,602,603,604,605,606,607,608,610,611,612,613],[88,132,601,602,603,604,605,606,607,608,609,611,612,613],[88,132,601,602,603,604,605,606,607,608,609,610,612,613],[88,132,601,602,603,604,605,606,607,608,609,610,611,613],[88,132,601,602,603,604,605,606,607,608,609,610,611,612],[88,132,809,810,811,812],[88,132,808],[88,132,182,808],[88,132,808,809,810,811],[88,129,132],[88,131,132],[132],[88,132,137,167],[88,132,133,138,144,145,152,164,175],[88,132,133,134,144,152],[83,84,85,88,132],[88,132,135,176],[88,132,136,137,145,153],[88,132,137,164,172],[88,132,138,140,144,152],[88,131,132,139],[88,132,140,141],[88,132,144],[88,132,142,144],[88,131,132,144],[88,132,144,145,146,164,175],[88,132,144,145,146,160,164,167],[88,127,132,180],[88,132,140,144,147,152,164,175],[88,132,144,145,147,148,152,164,172,175],[88,132,147,149,164,172,175],[86,87,88,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181],[88,132,144,150],[88,132,151,175,180],[88,132,140,144,152,164],[88,99,103,132,175],[88,99,132,164,175],[88,94,132],[88,96,99,132,172,175],[88,132,152,172],[88,94,132,182],[88,96,99,132,152,175],[88,91,92,95,98,132,144,164,175],[88,99,106,132],[88,91,97,132],[88,99,120,121,132],[88,95,99,132,167,175,182],[88,120,132,182],[88,93,94,132,182],[88,99,132],[88,93,94,95,96,97,98,99,100,101,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,121,122,123,124,125,126,132],[88,99,114,132],[88,99,106,107,132],[88,97,99,107,108,132],[88,98,132],[88,91,94,99,132],[88,99,103,107,108,132],[88,103,132],[88,97,99,102,132,175],[88,91,96,99,106,132],[88,132,164],[88,94,99,120,132,180,182],[88,132,153],[88,132,154],[88,131,132,155],[88,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,145,146,147,148,149,150,151,152,153,154,155,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181],[88,132,158],[88,132,159],[88,132,144,160,161],[88,132,160,162,176,178],[88,132,144,164,165,167],[88,132,166,167],[88,132,164,165],[88,132,167],[88,132,168],[88,129,132,164],[88,132,144,170,171],[88,132,170,171],[88,132,137,152,164,172],[88,132,173],[88,132,152,174],[88,132,147,159,175],[88,132,137,176],[88,132,164,177],[88,132,151,178],[88,132,179],[88,132,137,144,146,155,164,175,178,180],[88,132,164,181],[88,132,144,164,172,182,818,819,822,823],[88,132,830,831],[88,132,830],[88,132,835],[88,132,528,838,839],[88,132,834,920],[88,132,834,921],[88,132,528,838],[88,132,834,837],[88,132,828,833,834],[88,132,147,164,182],[88,132,164,182],[88,132,849,888],[88,132,849,873,888],[88,132,888],[88,132,849],[88,132,849,874,888],[88,132,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887],[88,132,874,888],[88,132,145,164,182,459],[88,132,145,468],[88,132,147,182,460,466],[88,132,895,896],[88,132,506,895],[88,132,506,896],[88,132,679],[88,132,898],[88,132,147,152,182,599],[88,132,182,902,903,904,905,906,907,908,909,910,911,912],[88,132,901,902,911],[88,132,902,911],[88,132,892,901,902,911],[88,132,901,902,903,904,905,906,907,908,909,910,912],[88,132,902],[88,132,137,901,911],[88,132,137,182,598,898,899,900,913],[88,132,144,147,149,152,175,182],[88,132,144,147,149,152,164,172,175,181,182],[80,88,132],[88,132,554,555,559,586,587,589,590,591,593,594],[88,132,552,553],[88,132,552],[88,132,554,594],[88,132,554,555,591,592,594],[88,132,594],[88,132,551,594,595],[88,132,554,555,593,594],[88,132,554,555,557,558,593,594],[88,132,554,555,556,593,594],[88,132,554,555,559,586,587,588,589,590,593,594],[88,132,551,554,555,559,591,593],[88,132,559,594],[88,132,561,562,563,564,565,566,567,568,569,570,594],[88,132,584,594],[88,132,560,571,579,580,581,582,583,585],[88,132,564,594],[88,132,572,573,574,575,576,577,578,594],[88,132,792,793,794,795,796],[88,132,790],[88,132,791,797,798],[88,132,680],[88,132,536,542],[88,132,183,185,189,190,193],[88,132,194],[88,132,185,189,192],[88,132,183,185,189,192,193,194,195],[88,132,189],[88,132,185,189,190,192],[88,132,183,185,190,191,193],[88,132,186,187,188],[88,132,145,154,182,183,184],[88,132,198,199,205,206],[88,132,207,273,274],[88,132,198,205,207],[88,132,199,207],[88,132,198,200,201,202,205,207,210,211],[88,132,200,212,226,227],[88,132,198,205,210,211,212],[88,132,198,202,205,207,209,210,211],[88,132,198,199,210,211,212],[88,132,197,213,218,225,228,229,272,275,297],[88,132,198],[88,132,199,203,204],[88,132,199,203,204,205,206,208,219,220,221,222,223,224],[88,132,199,204,205],[88,132,199],[88,132,198,199,204,205,207,220],[88,132,205],[88,132,199,205,206],[88,132,203,205],[88,132,212,226],[88,132,198,200,201,202,205,210],[88,132,198,205,208,211],[88,132,200,209,210,211,214,215,216,217],[88,132,211],[88,132,198,202,205,207,209,211],[88,132,207,210],[88,132,207],[88,132,198,205,211],[88,132,199,205,210,221],[88,132,210,276],[88,132,207,211],[88,132,205,210],[88,132,210],[88,132,198,208],[88,132,198,205],[88,132,205,210,211],[88,132,230,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296],[88,132,210,211],[88,132,202,205],[88,132,198,205,209,210,211,223],[88,132,198,202,205,211],[88,132,198,202,205],[88,132,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271],[88,132,223,231],[88,132,231],[88,132,198,205,207,210,230,231],[88,132,198,205,207,209,210,211,223,230],[88,132,540],[88,132,537,541],[88,132,380,381],[88,132,681],[88,132,682,724],[88,132,502,682,720,723],[88,132,722,724],[88,132,472,500,682,721,722,728,800,801],[88,132,678,682,721,722,723,724,725,726,728,802,803,804],[88,132,682,721,723,724],[88,132,615,677],[88,132,724,728,802],[88,132,728],[88,132,472,500,721,728,789,799,805],[88,132,721,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788],[88,132,472,500,721,728],[88,132,682,727,789],[88,132,682],[88,132,472,500,502,682,721],[88,132,144,168,182],[88,132,182,819,820,821],[88,132,164,182,819],[88,132,825],[88,132,539],[88,132,846],[88,132,145,196],[88,132,596],[88,132,507,550,595],[88,132,507,596],[88,132,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712],[88,132,698],[88,132,698,709],[88,132,684,700],[88,132,700],[88,132,707],[88,132,683],[88,132,684],[88,132,692],[88,132,714],[88,132,713,715,716,717,718,719],[88,132,716],[88,132,715],[88,132,147,152,172,175,178,506,511,550,596,597,598],[81,88,132],[88,132,300],[88,132,300,301],[88,132,300,301,302,303,304]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"b63bdb752220fb627e12ab41559a3508a1a1fdd36e0bc2a59e2e2305eab4f2de","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"400db42c3a46984118bff14260d60cec580057dc1ab4c2d7310beb643e4f5935","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a37b8d00d03f0381d2db2fe31b0571dc9d7cc0f4b87ca103cc3cd2277690ba0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"afbe82d2b4857d674686255c44c8590dfe0b40927713876f875fdf4960473441","impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"041597c12abeaa2ef07766775955fc87cfc65c43e0fe86c836071bea787e967c","impliedFormat":1},{"version":"0838507efff4f479c6f603ec812810ddfe14ab32abf8f4a8def140be970fe439","impliedFormat":1},{"version":"f67c92f5cb2bf5a9929ee73216f08749db4f22b04a18e5205ed6e75ca48e9feb","impliedFormat":1},{"version":"7212c2d58855b8df35275180e97903a4b6093d4fbaefea863d8d028da63938c6","impliedFormat":1},{"version":"de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","impliedFormat":1},{"version":"1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","impliedFormat":1},{"version":"854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","impliedFormat":1},{"version":"dd9faff42b456b5f03b85d8fbd64838eb92f6f7b03b36322cbc59c005b7033d3","impliedFormat":1},{"version":"6ff702721d87c0ba8e7f8950e7b0a3b009dfd912fab3997e0b63fab8d83919c3","impliedFormat":1},{"version":"9dce9fc12e9a79d1135699d525aa6b44b71a45e32e3fa0cf331060b980b16317","impliedFormat":1},{"version":"586b2fd8a7d582329658aaceec22f8a5399e05013deb49bcfde28f95f093c8ee","impliedFormat":1},{"version":"dedc0ab5f7babe4aef870618cd2d4bc43dc67d1584ee43b68fc6e05554ef8f34","impliedFormat":1},{"version":"ef1f3eadd7bed282de45bafd7c2c00105cf1db93e22f6cd763bec8a9c2cf6df1","impliedFormat":1},{"version":"3d8885d13f76ff35b7860039e83c936ff37553849707c2fd1d580d193a52be5b","impliedFormat":1},{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"f473be7c909dbd10c40f013e70da40f24648b2abb01025436fe0a0eecd0e83be","impliedFormat":1},{"version":"c98583f02275727ead0256c97298c15fb77a1c1e473b03c3b61291c63c66d385","impliedFormat":1},{"version":"9a7904e39add402d71343ac8de5303e990d9abb1fc703c64991c655b718267a5","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"f671901909a26ae633328d6d899992193ca9ea718e6315f2c3d46f39c437f02c","impliedFormat":1},{"version":"7920b8aa27a7b6a90bf9f5dc21eedac7f38ca8717ebe70495ab616eb52b3247b","impliedFormat":1},{"version":"485fb40ef0ae61e1f8f5f494a2aa4a69df73dc860b5c94ef8fc8dc42679fdb26","impliedFormat":1},{"version":"1f53ae308869bfb894735576727f3dca47d0405ba7fee4f076a701b449ce6f94","impliedFormat":1},{"version":"84bdeff726a44cad4c07230ccdd2b777e53608d081eb8b27f6d28540ac22a915","impliedFormat":1},{"version":"1950e4d79983ccc330513fb28324280bbd138fc69e2739353008ae5a75f976e6","impliedFormat":1},{"version":"2e9b3ece2914738d48a674dc4d677a6cef576ef045356961120a7915735e13f4","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"3c8c852d93800512dc47f4554efe94789bd81733947e2066a916ba70fe6992fd","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"5a2ae43daf9d478f37780e3ae08089a46347e395812c7c4526684878e34b1401","impliedFormat":1},{"version":"d60984fcae46158649bf553c1a649428ced1dfaa789086a7fb79a819536b0023","impliedFormat":1},{"version":"ff90925b7aef60c568d491966f90f37cfe4eb126a590e68a33c017b9be483f84","impliedFormat":1},{"version":"cbd12dce7f4a3542b0f00690efcf1211e50ad87bd78cedbf7beb60acb27d20a0","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"6b6fdab709d30fbedb090e783a610662e60b4922843f42ef801e3073a23392ee","impliedFormat":1},{"version":"65b2a90560049039460015abe63b8fa7f205bb78796a8de48a3661cfe7e07e28","impliedFormat":1},{"version":"1b6173159974df8ff78f3b01b8b89449053c1912c2ec715a2dc664d8d93a54c1","impliedFormat":1},{"version":"2b4b6a59d7d1020b65f9c878850b1aa2ae8eceb26025224d6bee2c5d7883d815","impliedFormat":1},{"version":"d45acd2463649e59b4dafb4ee051426783c6a13a72c21fac94265676f7fc01d8","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"7ef6d45ce6f0ee16a0441063ca89cebfbe4c00647132f5fe31bbe5420e20843b","impliedFormat":1},{"version":"11c2481df1d73d5d667ce282d1ec9fbcedee39f0a0382fd591cf6434b21f05d0","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"ac7eec65e925055052e4c3d88a303457150e7ddf8f02256a674315335b95af70","impliedFormat":1},{"version":"bb61172ecd43ac71849821f49ef6afa6515230386b253817c380873bdc49da50","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"1b3a76621e54583d0f1a9fcde6b7aa7642283412b103744f7b2a5c3c19108959","impliedFormat":1},{"version":"6f0f5830c13abe710e1e7e97bed1ae039f3a9fc8b5ce2a076141eaf0c854fee6","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"3307e5b71a5eea118476097fde4580e60c20b187e945f42d7eb69a8dbbe7e09a","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"0a08db8f792dd2b329dfb09bb2c7805298d03888608acd9eb554a8ad820e1079","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"490725ebec9ddfc97663887989ff1a49323b7cce7293970732ef962cffed3699","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"cf3f331aad22bfead8f79aae52f022f25bf9ce25185cfc87f3c4a59c060a699e","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"da129261494c4094bf55c761ba5f0ae4d5426d83ed5e312bc7f8600727bb8a05","impliedFormat":1},{"version":"cd2f8f7d90d8d283bb4b91b57406bf793df731d39bc2c119e3fa514a057d21f8","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"1930700210612b5324055fd9d335f4f2a7bb3f1b1433e1adadd7bdc5ee50272f","impliedFormat":1},{"version":"b998db2d97135f8958613fd1d795fc58a17b8fcc452288eaec13e8c8d870d1ac","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"2d8df720a088cfdc1253782b120f400cbe0d4516bb06e98c88ae7c2af1447653","impliedFormat":1},{"version":"99acda6ceb0b1e5a754aa8e7af740702e50ab515561be3d987392f04d0f7078e","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"806f43175b88c9a2ef89448cef56bc95c4df32a27be99748c517e5ca076919e8","impliedFormat":1},{"version":"5832c4ed86047766c1d4cfe2aa5780e3ab5d8d842d12664d0f71faf78c80dd7e","impliedFormat":1},{"version":"a43d21378510cf4ed5aad29f64f3d0fc6e0a30bb2bb81af0ea776b239a77d068","impliedFormat":1},{"version":"60c4cb259d73efe80ca3854715efdf93710a8b11a560a7f9741d6638280b4a80","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"faa402775a4c220279f9c26074a0010f10a7f0293c506ffd0857ea45e8ba7733","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"08b603e3737ff32a685eefca3e7f21324b8b868f3322416cef759f8a54d234ef","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"14d8af44e19148423a5a0817544a229e3ba324e1cd814c1d7b4ca2690baf434c","impliedFormat":1},{"version":"91122fba45414382787d7cffbd90298118a2970f8f12d91cff302f3a482f01e1","impliedFormat":1},{"version":"00c167f32444b220a604a8308f4466cb83b1e3de66ccffdcdefb65a49c26f161","impliedFormat":1},{"version":"27b4308d9e3db258a09b8b7bd92677320d654f5fc089abbbcb1fd2f70b14c909","impliedFormat":1},{"version":"d1d7e7d247badcbc50cf0bd6b1096dc7ab3cd36b31e9803b3c0acbbfacc493d2","impliedFormat":1},{"version":"6c2a2e7e8500f70a127dbb259d99c0f3951394df7c46a69eb2569f0e8c14665e","impliedFormat":1},{"version":"924e12558578f341179bb878e75cfd9aa648254f5ac6cf228832fae40a52c067","impliedFormat":1},{"version":"3f7705b6434455ff25ac2d336388564173179a4aed8cd0d1b1ea235f0fd3de23","impliedFormat":1},{"version":"b5f6aef5039b1b98a67bf3a3ed52f8693a56be698da9e4a41e2d67b0751ee005","affectsGlobalScope":true,"impliedFormat":1},{"version":"cea8b989b3d25e02e174de62e2e334a46e2e1ce1c31e349f145ad7b9cd2cfbfb","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8c2f60c3192f66fe9e5e7a7a941534583cdff4f5a059fad30b1b863a547f388a","impliedFormat":1},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"b6ac3e813f3bc41717619291caf2fbc75ee84b4f5bd3abd3e48885831ebdaf96","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"691e623f6b017a026baf823394aa6d74efabfe877b799c539e085e3f82247cd8","impliedFormat":1},{"version":"a4808116b12ab27b11b3800dbc2b64dd122d4748d48a111957b87b52fd3cda2d","impliedFormat":1},{"version":"2501feb6d0a73d980a9b8e5e03c7e15053788a7fbae6d55cf93df3b0e06dbedb","impliedFormat":1},{"version":"dc9412bbe64fc748d330f3e574c0440753daefc81cc74791198a0223f2114b5a","impliedFormat":1},{"version":"bbd9e6f68bf6e418bd44d7991a4860b1d386a30b798d1be773931ac7bd1e657a","impliedFormat":1},{"version":"f7ff9fd2db48fbabaf6516a4c3515b07325baf4c7a35766a7bc1ce72a1bb9b83","impliedFormat":1},{"version":"e383a277c8c485ffafdeea2bd0d28036bd8d1be4b2d6099a7b27ecc4419fe8d4","impliedFormat":1},{"version":"66a1d3c8e68134692c9784cfcd8ca275d8e24ace1bc01c432c5a2cc27ef27701","impliedFormat":1},{"version":"18b79e1c4ef00056857db2070ed947e32dae63dbbaefadee3cb6e8f21d5193d2","impliedFormat":1},{"version":"cbce9fb00ac5676380dafebfd7e5ce1561f17dfbe6356597d6e5d9b6b9bd5fe2","impliedFormat":1},{"version":"ae042e01074576c186a734888cd420dcf9eccf57053c9d7de5326cc235b7d3ac","impliedFormat":1},{"version":"040c519477a40f166f9d3d1f1e792761de759c5301466833b74d119957c794b3","impliedFormat":1},{"version":"d5a20d626aa5d02f7732d87050b9f3589627f36e4b4d01fe171d2cb9a958b21c","impliedFormat":1},{"version":"d36fb912245b9e1c7a4ac59cffe51d83546d2b03f52e2b3b9fff969d01257800","impliedFormat":1},{"version":"70ecd65df736dcf74d8304cd3767a863b7fab2bfa04a73c039c995cfd88489dc","impliedFormat":1},{"version":"53960fc36042dc4aef356c0273674bb0e7f65059720fb42ac36d29a8d2e3cbf1","impliedFormat":1},{"version":"8c607552166070130883b20fb7da9c7b7006e065239c2075f47e3349f3664c66","impliedFormat":1},{"version":"d3878648b6e0c7f8ca809b4a03d8d13ddccdde282c6c84aa1faf59f0780a888c","impliedFormat":1},{"version":"c1a24626823048792dc4440975646629ae984fa3354cd2f09270834d90fd997d","impliedFormat":1},{"version":"696e8b13ed6b15e0395fa6438f43e1363e09204f080640c6cb5437323f9ed8fb","impliedFormat":1},{"version":"a5d6fe2a52c03c4f5edb8c1ef06ccfc777ae377d0f0dbd7df3b066b0f9cec946","impliedFormat":1},{"version":"34b4698d4b6ccfb2b1e3e034d4463ecf490a6c700d229685f7b5b08ccc150393","impliedFormat":1},{"version":"f19baa96f4a8c3b23453401f7864ef337ebd2533dca12c042155cbd526341f29","impliedFormat":1},{"version":"a1604f4912418542596cf7598f199be7f276b7ad715416c59603d048894733e4","impliedFormat":1},{"version":"11b0c060c13dcf6fd09d60d9870f4921492a4d3c1b39a33f9d93f22f1dfb7c3b","impliedFormat":1},{"version":"a59bdaea7395061b93e12c89996770f196ada0f3e9197e2343763c65d0588dd8","impliedFormat":1},{"version":"9ffe848f345f1ac8c2fa2f4706c38840fe2beb455e19c5dce756e0ad09776235","impliedFormat":1},{"version":"013c10b8066b319a9dc033db24f0467737406810561d0c55d8bab3c8212788bb","impliedFormat":1},{"version":"b424df9fec80812448f7b2977e3220d5a2eb88e6c8e8b675c282f4eb1f4b8834","impliedFormat":1},{"version":"d66670300c6ad07603217e119240d129d327ee2cb4e05cdfc86f7f01e36a42ea","impliedFormat":1},{"version":"3dbba617428a6892f0e7a3c16d960738db464eb8df6724df7d95e7a4f116f110","impliedFormat":1},{"version":"3d7926e64b370e31cd4080bb432adb9e92fe096e31bee0685ee49d75cd317120","impliedFormat":1},{"version":"5862b0752f1eeef4061683d1311ebec322696c9ccd497e14b9d0c97545b317b6","impliedFormat":1},{"version":"c9829971663604cc72b30018b901c7cd97483587953e8a9535616ae04c808867","impliedFormat":1},{"version":"b0b73baeadd229c956da12d8b08f9c464b15e653d6dc5838bea41c733de7fe00","impliedFormat":1},{"version":"88ad86557665308c7957b0aeefbba159d9c99ed57e1d9a696cb4b068ea30f68d","impliedFormat":1},{"version":"8ce9716f8368167c631c4240de8cb2b5997c1c2ad9d885609079ec4c30877139","impliedFormat":1},{"version":"35595df80753dbc2b21a04ddb000835b32f0b9ad56ea259d4e6e9ee674debef4","impliedFormat":1},{"version":"efc5e846a8dcc7aeb97cdf4d6e529079e4ab45ac3cd39ab38ca96599bbcf232f","impliedFormat":1},{"version":"730450f8a576f827f2044ff9e3f0f7130e605b79087552c11ac5d92fda9a7e1d","impliedFormat":1},{"version":"9a62c9484c14c0cb33dbcdcc11e405821ee668e714799f7a125b840eeb8e89ef","impliedFormat":1},{"version":"1fb8ecfdc58a9071337c56072dd9b3c78c7d2f76730a1be8d27224ca083227a5","impliedFormat":1},{"version":"3bb99d9565690ee166e65b90817eb27c7c942b0efa84609bf2fcf0a8cc9405b8","impliedFormat":1},{"version":"c742fe995845140002d0baa8785af21a3bab8527b5584cdb0b407a226107f585","impliedFormat":1},{"version":"ffa065aa3455b257438ce8c9768c5e0f80ea3820094ee8a1120fb4437cc3e7a4","impliedFormat":1},{"version":"c325aac67ed6a692a807c9396d513ce37ed8f56c8d8ca7bf4ea76d4cd09e7c20","impliedFormat":1},{"version":"9d39a014e37dc53a1dafdb2ef5099417bd00174b815ac7e390414372b30a14bd","impliedFormat":1},{"version":"86a07b0fb1f46d39132ef555b215e7db97e906596697469df465c310646d3528","impliedFormat":1},{"version":"0e198c29a6251d421945c8d803c593eeaa2e92de8d8aee6412a2911195055162","impliedFormat":1},{"version":"f7df54c02497181cc6e63d6eada933f477a18b3a72776a0a77e63de603439061","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"a6292eb5c4a48e71b5f49c4ca89b9aa76108a93b7ac98c656a8f1dfc5a614bd7","impliedFormat":1},{"version":"7a9121b2912c6821f2783964444cac3050e17b3b75512965e0a32e66b414d592","impliedFormat":1},{"version":"9e8cb3ec89db85e85513bb89adbe63b8acccad3fffe11d6d8df01c865c77fb5a","impliedFormat":1},{"version":"f3dd8466af3baf161e0d203a1a28c7bbf9f863679c3b0e659371b1835b40f193","impliedFormat":1},{"version":"e8f141e5548179b835f699a1026f79ea581eeac1a4e57f5f22dcd0b4a772cbbc","impliedFormat":1},{"version":"2ef7e3af3848886c22ace971e69966b203eb67b2d1787d5e44c99519c09892aa","impliedFormat":1},{"version":"ddad846edb02abe8e625649c4a5dd64be1bde5d7631302d1fa4d45d14ed8b51f","impliedFormat":1},{"version":"a119ad4d2a84d13a333dbfa30e43bfccf4a0dc040c732d676adab436626f25ee","impliedFormat":1},{"version":"a7e006e3243d9746d204b7addb1f034e5deb4a0d157d8c85ecada87a86f222ff","impliedFormat":1},{"version":"fda09dd5bb69c3fdf9ae579b4b9f5a7db565223896f50aed99760821c1517bbc","impliedFormat":1},{"version":"261a9e319315e52f88b1cb347db2ce4277ea7a6eb6fccd90c289b119353d5b78","impliedFormat":1},{"version":"4871318522f755858f7edb640a4c3ea1614ff99be9d69340f5a51ce82fd809df","impliedFormat":1},{"version":"5208acbce57501f3d5dd58f4956d43734b3a007b8b86578c935785ec72408e04","impliedFormat":1},{"version":"41449e5c8ad2b4ad46497762cb72ec680457e35e03b658842f257a79da3d694c","impliedFormat":1},{"version":"2e567bb91461de2ab714bfd4261ce4f58c389cd3dba268958fdaef6cf20f7e3c","impliedFormat":1},{"version":"7c296bb31e778cea0fd700a14fbe683b665db7115f09700d8416cf24b83cdfcc","impliedFormat":1},{"version":"0b3109399eb9e01963064b099613e2f79810b0771aef56b628c4e6651f35440e","affectsGlobalScope":true,"impliedFormat":1},{"version":"88a3a6f8c2a1640d8d5fd30d8d86462f8babd86a1e52fab0e8b7f7c141fb348e","impliedFormat":1},{"version":"345f76c854da724803c96f727a3f9c75e26cf95c6e7b8c1064dbc4e7727b74e6","impliedFormat":1},{"version":"ab7b7a15a5d73eb0cfc2b973e580f357f07492bff6608669d7e899e2d49ac9a3","impliedFormat":1},{"version":"4b8a1d246ef6d201e4ccb2225440b18ed2229b4e853edd3122f84ddbb0ee9e12","signature":"8f6cccb04620439ec3f3424b8aa2de2e0a561df83241cd6e7bdd5f9a6e0fa358","affectsGlobalScope":true,"impliedFormat":1},{"version":"7cf9ab02c71eb4c673cb641649267e72df49e6d5cfd9d221a65edea93cd4b97e","signature":"0000818f5efa12abf811fc77da7312f4e225cf113a189d09dda8e6f9c061be28","impliedFormat":1},{"version":"d478bc1a3e3bf08b099aa67afa1e11ef56d3f618e2a7407537150a47216b691d","signature":"e1daad9f4e934dc3cc7712c9a980e5c88a97ca56a289b72054be2896b884fcb9","impliedFormat":1},{"version":"732c42cfe4d01625caa167d23baec0746a063b0d8f94f1698b1230ac8dc62db9","signature":"43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012","impliedFormat":1},{"version":"87f287f296f3ff07dbd14ea7853c2400d995dccd7bd83206196d6c0974774e96","impliedFormat":1},{"version":"78ef0198c323d0f7b16f993ada3459f0e7e20567e7f56fe0c5ee78f31cb0840c","impliedFormat":1},{"version":"01dea450d742aa55ce9b8ab8877bbda8eb73bf88609e440cc34f6f59f35080db","impliedFormat":1},{"version":"5ec614ed82e045de15417a47e2568be5310d43d4764ee43d295ea38caafbfd17","impliedFormat":1},{"version":"b788ef070e70003842cbd03c3e04f87d46b67a47b71e9e7d8713fd8c58c5f5ec","impliedFormat":1},{"version":"583d365dc19f813f1e2767771e844c7c4ea9ab1a01e85e0119f2e083488379c2","impliedFormat":1},{"version":"b82fc3869c625b828dd3feac4b5ebf335ed007d586dc16176602db73bc4e7c65","impliedFormat":1},{"version":"05e30605274c26f405c411eebed776fa2102418c05beec885e5c9bd0fa716f32","impliedFormat":1},{"version":"58c7f7820dc027a539b0437be7e1f8bdf663f91fbc9e861d80bb9368a38d4a94","impliedFormat":1},{"version":"d67d6b779d0dece9450d7a4170d3ee58ea7fcae0af2ab5e1d0ad711474b4f7f5","impliedFormat":1},{"version":"1066c11177d085898185548e1b38ed15fcea50061508f7c313ab8bec35d46b95","impliedFormat":1},{"version":"bbc49fd9dc6ee162ba3d270c834398e0c1d44e657ac4edfa55ac837902b7e0da","impliedFormat":1},{"version":"6993f360de4984b6743764fad3b88246d5dc6cfa45567783fc23833ad4e50c13","impliedFormat":1},{"version":"f11eb1fb4e569b293a7cae9e7cdae57e13efc12b0e4510e927868c93ec055e82","impliedFormat":1},{"version":"715682cddbefe50e27e5e7896acf4af0ffc48f9e18f64b0a0c2f8041e3ea869b","impliedFormat":1},{"version":"6d2f5a67bfe2034aa77b38f10977a57e762fd64e53c14372bcc5f1d3175ca322","impliedFormat":1},{"version":"4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","impliedFormat":1},{"version":"33859aa36b264dd91bef77c279a5a0d259c6b63684d0c6ad538e515c69a489ec","impliedFormat":1},{"version":"33fa69f400b34c83e541dd5f4474f1c6fb2788614a1790c6c7b346b5c7eaa7dd","impliedFormat":1},{"version":"be213d7cbc3e5982b22df412cf223c2ac9d841c75014eae4c263761cd9d5e4c0","impliedFormat":1},{"version":"66451f9540fdf68a5fd93898257ccd7428cf7e49029f2e71b8ce70c8d927b87a","impliedFormat":1},{"version":"8a051690018330af516fd9ea42b460d603f0839f44d3946ebb4b551fe3bc7703","impliedFormat":1},{"version":"301fb04ef91ae1340bec1ebc3acdd223861c887a4a1127303d8eef7638b2d893","impliedFormat":1},{"version":"06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","impliedFormat":1},{"version":"fc26991e51514bfc82e0f20c25132268b1d41e8928552dbaed7cc6f3d08fc3ac","impliedFormat":1},{"version":"5d82bb58dec5014c02aaeb3da465d34f4b7d5c724afea07559e3dfca6d8da5bc","impliedFormat":1},{"version":"44448f58f4d731dc28a02b5987ab6f20b9f77ad407dcf57b68c853fe52195cd7","impliedFormat":1},{"version":"b2818e8d05d6e6ad0f1899abf90a70309240a15153ea4b8d5e0c151e117b7338","impliedFormat":1},{"version":"1c708c15bb96473ce8ec2a946bd024ecded341169a0b84846931f979172244ba","impliedFormat":1},{"version":"ed0f5e1f45dc7c3f40356e0a855e8594aa57c125a5d8dfeef118e0a3024f98ff","impliedFormat":1},{"version":"dc187f457333356ddc1ab8ec7833cd836f85e0bbcade61290dc55116244867cb","impliedFormat":1},{"version":"25525e173de74143042e824eaa786fa18c6b19e9dafb64da71a5faacc5bd2a5c","impliedFormat":1},{"version":"7a3d649f2de01db4b316cf4a0ce5d96832ee83641f1dc84d3e9981accf29c3a1","impliedFormat":1},{"version":"26e4260ee185d4af23484d8c11ef422807fb8f51d33aa68d83fab72eb568f228","impliedFormat":1},{"version":"c4d52d78e3fb4f66735d81663e351cf56037270ed7d00a9b787e35c1fc7183ce","impliedFormat":1},{"version":"864a5505d0e9db2e1837dce8d8aae8b7eeaa5450754d8a1967bf2843124cc262","impliedFormat":1},{"version":"2d045f00292ac7a14ead30d1f83269f1f0ad3e75d1f8e5a245ab87159523cf98","impliedFormat":1},{"version":"54bcb32ab0c7c72b61becd622499a0ae1c309af381801a30878667e21cba85bb","impliedFormat":1},{"version":"20666518864143f162a9a43249db66ca1d142e445e2d363d5650a524a399b992","impliedFormat":1},{"version":"28439c9ebd31185ae3353dd8524115eaf595375cd94ca157eefcf1280920436a","impliedFormat":1},{"version":"84344d56f84577d4ac1d0d59749bb2fde14c0fb460d0bfb04e57c023748c48a6","impliedFormat":1},{"version":"89bcaf21b0531640604ca9e0796f54a6e1b4e2d43c07422ffa1e3d2e1bb0e456","impliedFormat":1},{"version":"66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","impliedFormat":1},{"version":"35a0eac48984d20f6da39947cf81cd71e0818feefc03dcb28b4ac7b87a636cfd","impliedFormat":1},{"version":"f6c226d8222108b3485eb0745e8b0ee48b0b901952660db20e983741e8852654","impliedFormat":1},{"version":"93c3b758c4dc64ea499c9416b1ed0e69725133644b299b86c5435e375d823c75","impliedFormat":1},{"version":"4e85f443714cff4858fdaffed31052492fdd03ff7883b22ed938fc0e34b48093","impliedFormat":1},{"version":"0146912d3cad82e53f779a0b7663f181824bba60e32715adb0e9bd02c560b8c6","impliedFormat":1},{"version":"70754650d1eba1fc96a4ed9bbbc8458b341b41063fe79f8fa828db7059696712","impliedFormat":1},{"version":"220783c7ca903c6ce296b210fae5d7e5c5cc1942c5a469b23d537f0fbd37eb18","impliedFormat":1},{"version":"0974c67cf3e2d539d0046c84a5e816e235b81c8516b242ece2ed1bdbb5dbd3d6","impliedFormat":1},{"version":"b4186237e7787a397b6c5ae64e155e70ac2a43fdd13ff24dfb6c1e3d2f930570","impliedFormat":1},{"version":"2647784fffa95a08af418c179b7b75cf1d20c3d32ed71418f0a13259bf505c54","impliedFormat":1},{"version":"0480102d1a385b96c05316b10de45c3958512bb9e834dbecbbde9cc9c0b22db3","impliedFormat":1},{"version":"eea44cfed69c9b38cc6366bd149a5cfa186776ca2a9fb87a3746e33b7e4f5e74","impliedFormat":1},{"version":"7f375e5ef1deb2c2357cba319b51a8872063d093cab750675ac2eb1cef77bee9","impliedFormat":1},{"version":"b7f06aec971823244f909996a30ef2bbeae69a31c40b0b208d0dfd86a8c16d4f","impliedFormat":1},{"version":"0421510c9570dfae34b3911e1691f606811818df00354df7abd028cee454979f","impliedFormat":1},{"version":"1517236728263863a79500653cc15ceb286f048907b3dba3141a482ca6946bd7","impliedFormat":1},{"version":"7c7b418e467a88a714b4c6dac321923b933f82875f063f48abf952021a2c2df1","impliedFormat":1},{"version":"33120063a7e106818ce109be9238569edca74d4e8530f853bd30d298d1375fd8","impliedFormat":1},{"version":"8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4584e95c63371b5d507749924d94e324c7e041f964975a92e7c8a1abc840328","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"0504070e7eaba788f5d0d5926782ed177f1db01cee28363c488fae94950c0bbc","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"6847334317c1bc1e6fc4b679b0095bbd2b6ee3b85fe3f26fc26bac462f68ef5e","impliedFormat":1},{"version":"2224f3072e3cc07906eeed5c71746779511fba2dd224addc5489bcdb489bdee5","impliedFormat":1},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"7f15c8d21ca2c062f4760ff3408e1e0ec235bad2ca4e2842d1da7fc76bb0b12f","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","impliedFormat":1},{"version":"fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"fbf802b3a028f5eb22ad406ee5fc7c368f0acfd3a2a6d0f805120766f5717ec8","impliedFormat":1},{"version":"63786b6f821dee19eb898afb385bd58f1846e6cba593a35edcf9631ace09ba25","impliedFormat":1},{"version":"ff954afaefd9bd5fad03678cae63fd23e0aaaf4d311b27bfb35e1d6d83833997","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"818e7c86776c67f49dbd781d445e13297b59aa7262e54b065b1332d7dcc6f59a","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"7e8d3f08435ad2cefe67f58182618bfc9a0a29db08cf2544b94cbcae754a9bd9","impliedFormat":1},{"version":"8cf9b9045a614f883b623c2f1a631ec6a93321747e933330b2eec0ee47164a34","impliedFormat":1},{"version":"cee62e64fc4bdfb3798ab8e21486fadd2027ce4128349989acc63905366f91c5","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"c68eb17ea7b2ff7f8bcfe1a9e82b8210c3112820d9e74b56b0fbecaab5ce8866","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"ee736931bcb117efdd2118795ccfa4b2d0beb8fec426f91ae448e51b03510707","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"9068fb04d9df0cb5de85ced5c4d70a935096c4cb289ab76b038e0a2496c92503","impliedFormat":1},{"version":"1f2bcc8836f72a2ff7a6804dc5379e9b73bf94a51d8e60c43cf5b874b5f4f6ff","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"100985057cdd198e32b471b9c92a39080e5e50720b2cb290d04ddf40fbe71c84","impliedFormat":99},{"version":"333d9b9067c0213cd7b275d1d78bab0577ba31ef7a63306ab65a74e83a546a65","impliedFormat":99},{"version":"85566a0b81339b43e063f5cd8cc49a9b9bc177bc5ad3ffd5e4874700040ec11e","impliedFormat":99},{"version":"c2688779f6804c3bc6dfa33d05a810464c684a74f92aee6b0f0d4bcd7dbeed6d","impliedFormat":99},{"version":"16331f489efb6af7d06037074020644d9175f70a7a6466d926f63e74af5a77d8","impliedFormat":99},{"version":"2b2b8b64b39f152439ecb9f04b3d6c1d88d35c75bf14a4eb98f1cc791f092366","impliedFormat":99},{"version":"395548b309c8fe9ffadd8b1055898fffa29bd28ea1f8079f33e48a65601589e2","impliedFormat":99},{"version":"e38871affeac7cf4dd4cc3a55714ff38d55f137c30788d30e454a6e3058f36bc","impliedFormat":99},{"version":"783a0f8fb88d659272c1ac541719e32235881815705b44fb63b6af579885ea75","impliedFormat":99},{"version":"6a60957e322c4c060ddf3073130cbcbcbc5e639e21cd2279df43184bfa8cb9a3","impliedFormat":99},{"version":"5b353617eeb8a37c7a9497ebaeacc027bd7487eec10ffbebca41dcdc2634af70","impliedFormat":99},{"version":"cedbd20d98f3fd7c1fa00742292ab5b13c3fec266ae41b90c47b716ef06cd983","impliedFormat":99},{"version":"9713bcf79cd728919262a2a543484a5f9bd24a15cfec1cee096d9d17a9f5524d","impliedFormat":99},{"version":"35fb129972553f809a7045f3cb952c2598299548018a23238304c020cb16945f","impliedFormat":99},{"version":"855b0379a6b6e96eda055cff16da442b4a7a4548101848b9ae48bce22879569e","impliedFormat":99},{"version":"ea2ac8d236dddbce748dbaffcaa1bfcadae6fbcae1fd0a67e17d5e35d5e38dfc","impliedFormat":99},{"version":"a7750935d6a1cbd259861b5acf1c912f9d3b10efd8602f61fc858f04f261595d","impliedFormat":99},{"version":"e0aa3276d014f3c798dd3101af8c8545b56d79665a7a982b4cf6fe28551a3b56","impliedFormat":99},{"version":"ea744987345eb5ae036495b0185e95eeb7d2d999b0ef80265f79434e83863e9e","impliedFormat":99},{"version":"c3bc54ba21655aaf1db5bb97c42f56bbfe5a3a3c40e3884ef3ba2cdaa9f34c1f","impliedFormat":99},{"version":"705917c38d2e92347b5e57c1c6007da46f1005874ef2257cc8dfff59cba4710f","impliedFormat":99},{"version":"40925b4938b527a6267b1fe56a2e97cc52ea9d73eec90ea8e05df773a182101e","impliedFormat":99},{"version":"2930156137f4885c3ad168804c557edfc9bb88ae0e1df487f4adcdc771286ad7","impliedFormat":99},{"version":"b63e990c632eeee9375c2c43bbd5cdcb23418b79edcb57afa53edf4dd597b33c","impliedFormat":99},{"version":"721dcf072e75b71b5ab7a0bbbd6578f908c36a0bfaefa1454d3e43938bde67a5","impliedFormat":99},{"version":"5704f5ee2642dd0b810bb07ce6e4e51319ed4d6db78747ff54675e72c3fede06","impliedFormat":99},{"version":"da2be38a98356fdd540580a68338df2d2450ec071b1cb5bdbfe8e52075ddde9e","impliedFormat":99},{"version":"3af0bb87094d80e20b0d451626eef1e2da701891c41998ac0a6a6c91cff86f74","impliedFormat":99},{"version":"30a211e9de0dd587f8c690f9ed9378c15c79bcbe762dd85a61c548e5058c3fd6","impliedFormat":99},{"version":"a7cda498cd929d2f958ce49abbaef1abf999ec40884a04cd28ff34317d844e54","impliedFormat":99},{"version":"e48b510f40f29a89d9dbe19a9fca96d7f02b721aec6754fd5c242f9893d06508","impliedFormat":99},{"version":"30d88e2e7c4ca1cdfeb37cf05a2d7a351c68b14ac472e6238401ecb7b75686ea","impliedFormat":99},{"version":"03b34718c02b6225c2f7d7c374cb701ab04461a5cfa66d150531c9f31e39da49","impliedFormat":99},{"version":"7dfe7da785eafad3e3d0cc66545e97f1acf934ebe5b2ec8f4a34341a9ca76ed4","impliedFormat":99},{"version":"8c7829855345152b7b3c196e82147153115d5b568ff97be0e40d161e8d9d2f51","impliedFormat":99},{"version":"f30a36ff98b099ea8c635146dfdd1d810bc14ec303acb653ca938445047b0e41","impliedFormat":99},{"version":"07fa63aca536ca8d8d8c6a56eabcf77f746609921fe23d780a69e2c0a2a65701","impliedFormat":99},{"version":"c8fe48c4437d4ead0a841128d179f8bb99e0e38f9ccb80ca6be14833e30bc129","impliedFormat":99},{"version":"5eac3facc9f59e960c00f41502b34a908776cfba6d7e1a5a4ead5030682b7434","impliedFormat":99},{"version":"d44f8de16b9c6ef4ebd88d4162bc24942bee9975f88162a8962bb572e62dc5df","impliedFormat":99},{"version":"0251c18e8c863bf5ef510043644299aceab6debf3d87aab8c8cfded5aef7d6af","impliedFormat":99},{"version":"292f7dc6b4be74f148f5e5b57b9e8a7f515d7d4f6183d3f9162e127e50959ba9","impliedFormat":99},{"version":"c1608d867d6ddda5c0f4736cf4959e2b2c6bcda660c4c72f7feb36b3998df2bb","impliedFormat":99},{"version":"02d77b0d27ecb78e28d3a376c6cdce05fabcf58f2fd01c102f031d8e375191da","impliedFormat":99},{"version":"daef84b3b89e60054fab1abaafe38eda673f88abdedc3920015d61f1cc5358b8","impliedFormat":99},{"version":"f3318054dc392b6661785263095ed8f1555f0d8f3ce534c8c2de8895b4ec7bd3","impliedFormat":99},{"version":"6c3aa7e0c4eb4d8d7fc24df037980369e70a28f9237cae77511b4cfc6a1b74d0","impliedFormat":99},{"version":"ecc7e0840690cc4b9a2587a4f550b292c35d36150c6c108803bbdfc3bead5b91","impliedFormat":99},{"version":"e11a23b343084cdec24d718fc64369dc8b6dece71314b41d4b5938f2a568834d","impliedFormat":99},{"version":"ce678766176812e8eda3f4925304d4159d806f50fa8a93a72da56e95dae8bbc8","impliedFormat":99},{"version":"bb21d35a36dc1db80a2cf29383bb7304919708cde205bbe246ec47176336e255","impliedFormat":99},{"version":"df657f732e32af7c7550da93e66dfdfa142fc1282b4a392ec78fc9aefbd6fdd0","impliedFormat":99},{"version":"b20ef0766a8a578e5c542aafaa8c53b7e2b0e32a5522f9cf18bc021a81d54dd7","impliedFormat":99},{"version":"9ea0cd8a367cab9b1c632740d1bd998f8c4dbbbda4505f47bebd38a46afbaaa6","impliedFormat":99},{"version":"97980bb49a7e4b15df6f988f914070c831a39426cd9a29a6f7a9af82f397b28c","impliedFormat":99},{"version":"3ddf05b5259b9a0e2b1da1559585655202670e1f78396b4d4efccea0195a41b4","impliedFormat":99},{"version":"1e99c59aadb1af6d090976ade8280ea37208e8f064f79e9a18231fe5b7232890","impliedFormat":99},{"version":"c7ee77eec320d6312899cd8c16484c82b98385e175c57ff00d49cc5a2c291e0d","impliedFormat":99},{"version":"b38d9a4927465a8a5d1ae84e00d323bedfc7f5e77f4bc360078c6f283b964acb","impliedFormat":99},{"version":"27d6b338ff280dc86ff167217c29d7e71b52bd25a3c3b8eb1f5a56c887571d00","impliedFormat":99},{"version":"da60046c4cc6b018869ea8fc71a7b7bf5591d9f5d90ee52c4a614ecc69ff3433","impliedFormat":99},{"version":"8bee1fe0b3dd1b324f08189d81e55f9952007ce2304df07a15568b821b7e524f","impliedFormat":99},{"version":"a3dd2d53781729214a67f4b91d9a65d5310c1bbdcd0595789a5152a493cded91","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e20fc6cca2cf901917bc09c88bf9ee380383717ed990900aa99962ff9e3f786","impliedFormat":99},{"version":"7410b87e621ce92f484a13dfbe72069a6470fb72cc418df865f31b601193595c","impliedFormat":99},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"c96ac2cf9b266d5606f79d99191e3e2c2bede081f60aab6377d16b1e73841429","impliedFormat":99},{"version":"30a4dd54f1f39dee17bafcc0fb9a877932d607d8f24d3f1ac7f8998cf07f2649","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"ccb5f2cdd46a60b0aa3b43aeeac9f0d499640f589806f2486f35ff8a9565784b","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"5e8c09adb8be1b932100a9374cb0f8def9dda6a16a973e91c2322983ed669dd9","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"cc89688d19046618e7f88ea7c25ff04560d939902bf49e60bd38fb4662e38b5b","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"fc67adfb454cf82752ab00e969d14a95fa762f55c34e25327dc77174b0d5f742","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"bc79bd6403aa643e99c8e6733d5a8c7bf214e4528e79c882e77e9e441049e45e","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"8fa1dc3b4a2f43c688f6f4cf1721e1d26d641ef322c14adac867ecfa41aa2109","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"2d9ad35b54c1413e9ee0e74945cd5c8a99516c1fbbd0a12f673c75073436a931","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"23e028cc298226d1f8e87d57950673b3a19b91f23538ee9287d52e77540af8cf","impliedFormat":99},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1},{"version":"b95f2a78de34a873c6dd76dc538b7a5fec77da6a0e0e7efc7aa58f58ddfce270","impliedFormat":1},{"version":"1231f32d791b0fcc13e0c836543b34e83dea6e0b494ee35194a66a50dd25427e","impliedFormat":1},{"version":"66880e558be5ee57d23c12ffd0a90bf07840e088f8fa9b608fadeaf45af78969","impliedFormat":1},{"version":"058186f212307a621cd51160e2124c26208649600b4f0a27835f1d1caae81e65","impliedFormat":1},{"version":"c2bfeeadb18ba18386d7549a69c2049e57f31758b71343543a5c27919197b0fa","impliedFormat":1},{"version":"63b0be497f88d815c410b76985b798132d6c470199f2f31e1390a48480619758","impliedFormat":1},{"version":"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","impliedFormat":1},{"version":"95a31f8eea43d175dfeda85accc45bddce5678acae4e22e2f683b48e0e0188de","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26","impliedFormat":1},{"version":"a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"c21e3729094ed9ecdcb97724ce5b20625bb9ac3b9146d681cafa97d667c12bb5","impliedFormat":1},{"version":"5adf3c3c7204b3614dbc585681a33ef598c68df387298859f9a2521cfb449437","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"bbf7c864f1ffbacf54b524d028b6a77da9f0be0b8fff5c088e3185ee50496762","impliedFormat":1},{"version":"9df147746b0cbd11d022b564e6fdd43ac79b643dc579d2123317ee01cc4f0d70","impliedFormat":1},{"version":"fa244c20411dd53d853ce4b85e7146860be364946da477dad721e66301097460","impliedFormat":1},{"version":"fab2754e047c7818a8eb650cc2194aef4388193acdc4606eb601cb60923f7798","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"b2546f0fbeae6ef5e232c04100e1d8c49d36d1fff8e4755f663a3e3f06e7f2d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","impliedFormat":1},{"version":"b75188f1d06bba9e266aad819df75b51ed1fcc19ac0750dc6a55a8eb1b7c2134","impliedFormat":1},{"version":"d8272401aa994ed8a60f71067acbcc9a73d847be6badf1b9397a8ce965af6318","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1087c6c9066684d3e72a8fcc5445f34e85572792bc16f5aab01208bcbbbe64be","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"eb27bc1c8d46234252298d3d7252c8459667daa0953b974f9d2c581c46703b2a","impliedFormat":1},{"version":"1b096ca6b209d1fed9ce68edd110ff6de8bec4fab2689d2adc481ffc1b1dc20b","impliedFormat":1},{"version":"9c02f12da30d30dd5f5ccaeedfb9b925ed4e5114059e9be6ed2ecf87a492fd16","impliedFormat":1},{"version":"8c8f8e816a38f1a0cc2dd3813d3bede2d773df36e72f4cb55d9daabd22016925","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"f86d0150d5abc55bf5bb479beacc34a7e9d4ab4e3014315fb74626baf1558857","impliedFormat":1},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"d77523951427fca92c7fdcaafb776bfb5d76cb0dfd8a7b18f38710332386ad6d","impliedFormat":1},{"version":"d9dcda644a9ecb57df163cbeaaca093c696335a53f47b5dbbf7cf0671b76e2eb","impliedFormat":1},{"version":"2d4d871246a21c785aec2a5b745ad79cdc877de3866f586887c8c74ddec97b8d","impliedFormat":1},{"version":"0cfa403fc15d0fda3214c3d8b75a42abcfa60c07e739de908e57d1f76220b7f9","impliedFormat":1},{"version":"d99cef4ae065cde21bd536998282a9882d8fb36a902725f03d71c3a9e3a24aa4","impliedFormat":1},{"version":"f3d4606a83fbdeedeeecd982ac35945bc02d50499cc65c72d71a143afa7e7334","impliedFormat":1},{"version":"bc919e8ad895c43568f8125523ab0f91810d5208afcc5bff2ba4713dffda0d97","impliedFormat":1},{"version":"6771b9c4bb2253e2a51c5ef7155419558289b885857e275ff61f90a979049cc3","impliedFormat":1},{"version":"6a1fb700b666a19112cddb4ab24e671c83ce40f6bfe64d1e7cb59c88263d0ec2","impliedFormat":1},{"version":"cc060af11b9bc0ed723d1200951bdc3255ff189475183a1f9ed06fd9c57206a6","impliedFormat":1},{"version":"a0aa9907949f7688394904c4d16b93c8d3154a9eda70ab096e0cfb37ef48e9b1","impliedFormat":1},{"version":"816dd83b87f2f1986f4c9072d38262ae96ee6589fab8a9ebc3b8d8f30263b8d3","impliedFormat":1},{"version":"5512a0ca56d3a21dd2843b62c939ff885d8853e55524bada67d1e393649e4bd6","impliedFormat":1},{"version":"3cd6ea92f13a0bf3c120ac271bc0ba57bf4cc3078e010150887c657f78b41959","impliedFormat":1},{"version":"4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","impliedFormat":1},{"version":"d9a256f69f3956993e65efd88336644be8f8dd36d149e859c14704ef6c6c0eec","impliedFormat":1},{"version":"d18f13c33148de7f0b1241734cb10dfe4c1e9505acad51ee48c3f4c1bd09e0dd","impliedFormat":1},{"version":"f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","impliedFormat":1}],"root":[[383,386]],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationDir":"./dist","declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"stripInternal":true,"target":9,"useDefineForClassFields":false,"useUnknownInCatchVariables":false},"referencedMap":[[919,1],[89,1],[386,2],[385,3],[384,4],[383,5],[377,6],[311,1],[310,1],[357,1],[365,1],[349,7],[353,8],[366,9],[367,10],[351,11],[350,12],[354,13],[368,14],[362,1],[369,14],[363,15],[348,16],[379,17],[360,18],[364,19],[370,20],[324,21],[371,22],[359,13],[372,13],[352,23],[313,24],[355,25],[356,19],[336,19],[337,26],[338,27],[312,28],[339,29],[315,30],[314,31],[333,32],[340,21],[341,19],[342,9],[317,33],[318,9],[319,34],[320,9],[321,34],[322,35],[343,36],[323,37],[347,38],[325,39],[326,35],[327,40],[328,24],[316,41],[344,42],[329,43],[361,44],[330,37],[345,36],[346,9],[331,9],[332,9],[334,45],[335,39],[373,13],[374,1],[375,46],[307,1],[358,47],[378,1],[299,48],[653,1],[450,49],[448,1],[615,1],[649,50],[648,50],[647,1],[651,51],[652,51],[650,1],[618,1],[616,52],[619,53],[617,53],[620,1],[659,1],[660,1],[664,1],[661,1],[671,52],[670,1],[672,1],[673,54],[665,55],[669,56],[666,57],[662,1],[667,58],[668,59],[663,1],[635,52],[631,52],[634,52],[633,52],[632,52],[628,52],[627,52],[630,52],[629,52],[622,52],[623,60],[621,1],[626,61],[624,52],[677,62],[656,63],[658,63],[657,63],[654,64],[655,63],[675,1],[674,1],[676,1],[636,65],[637,1],[640,1],[643,1],[638,1],[645,1],[646,66],[642,1],[639,1],[641,1],[644,1],[625,1],[536,1],[539,67],[538,1],[387,68],[156,1],[388,1],[389,1],[390,1],[447,69],[391,70],[436,71],[393,72],[392,73],[394,70],[395,70],[397,74],[396,70],[398,75],[399,75],[400,70],[402,76],[403,70],[404,76],[405,70],[407,70],[408,70],[409,70],[410,77],[406,70],[411,1],[412,78],[413,78],[414,78],[415,78],[416,78],[425,79],[417,78],[418,78],[419,78],[420,78],[422,78],[421,78],[423,78],[424,78],[426,70],[427,70],[401,70],[428,76],[430,80],[429,70],[431,70],[432,70],[433,81],[435,70],[434,70],[437,70],[439,70],[440,82],[438,70],[441,70],[442,70],[443,70],[444,70],[445,70],[446,70],[453,83],[449,49],[451,84],[452,49],[455,85],[456,86],[457,1],[458,1],[464,87],[454,68],[465,1],[470,88],[468,89],[471,1],[473,90],[474,90],[475,1],[476,1],[478,91],[479,1],[480,1],[481,90],[482,1],[483,1],[484,92],[485,1],[486,1],[487,93],[488,1],[489,94],[490,1],[491,1],[492,1],[493,1],[496,1],[495,95],[472,1],[497,96],[498,1],[494,1],[499,1],[500,90],[501,97],[502,98],[504,99],[511,100],[510,101],[509,102],[505,1],[508,103],[506,1],[463,104],[513,105],[512,104],[516,106],[477,1],[518,107],[519,108],[521,109],[523,110],[524,110],[525,110],[522,1],[528,111],[526,112],[527,112],[529,1],[530,1],[466,1],[531,113],[532,114],[533,1],[534,115],[535,116],[544,117],[507,1],[514,118],[515,1],[545,119],[469,1],[546,120],[549,121],[547,121],[548,122],[600,123],[602,124],[603,125],[601,126],[604,127],[605,128],[606,129],[607,130],[608,131],[609,132],[610,133],[611,134],[612,135],[613,136],[614,109],[459,1],[517,1],[806,1],[807,1],[813,137],[810,138],[809,139],[812,140],[808,1],[811,138],[503,1],[814,114],[129,141],[130,141],[131,142],[88,143],[132,144],[133,145],[134,146],[83,1],[86,147],[84,1],[85,1],[135,148],[136,149],[137,150],[138,151],[139,152],[140,153],[141,153],[143,154],[142,155],[144,156],[145,157],[146,158],[128,159],[87,1],[147,160],[148,161],[149,162],[182,163],[150,164],[151,165],[152,166],[106,167],[116,168],[105,167],[126,169],[97,170],[96,171],[125,114],[119,172],[124,173],[99,174],[113,175],[98,176],[122,177],[94,178],[93,114],[123,179],[95,180],[100,181],[101,1],[104,181],[91,1],[127,182],[117,183],[108,184],[109,185],[111,186],[107,187],[110,188],[120,114],[102,189],[103,190],[112,191],[92,192],[115,183],[114,181],[118,1],[121,193],[153,194],[154,195],[155,196],[157,197],[158,198],[159,199],[160,200],[161,200],[162,201],[163,1],[164,202],[166,203],[165,204],[167,205],[168,206],[169,207],[170,208],[171,209],[172,210],[173,211],[174,212],[175,213],[176,214],[177,215],[178,216],[179,217],[180,218],[181,219],[815,114],[816,1],[817,1],[823,220],[818,1],[824,1],[827,1],[828,1],[829,1],[461,1],[832,221],[831,222],[462,1],[836,223],[841,224],[840,225],[843,224],[842,226],[839,227],[837,1],[838,228],[833,1],[835,229],[844,230],[845,1],[848,231],[873,232],[874,233],[849,234],[852,234],[871,232],[872,232],[862,232],[861,235],[859,232],[854,232],[867,232],[865,232],[869,232],[853,232],[866,232],[870,232],[855,232],[856,232],[868,232],[850,232],[857,232],[858,232],[860,232],[864,232],[875,236],[863,232],[851,232],[888,237],[887,1],[882,236],[884,238],[883,236],[876,236],[877,236],[879,236],[881,236],[885,238],[886,238],[878,238],[880,238],[460,239],[890,240],[889,89],[467,241],[891,68],[892,1],[893,1],[894,1],[897,242],[896,243],[895,244],[680,245],[679,1],[899,246],[520,1],[915,247],[913,248],[912,249],[903,250],[904,251],[911,252],[905,251],[906,250],[907,250],[908,250],[909,253],[902,254],[910,249],[901,1],[914,255],[916,256],[917,1],[918,257],[80,1],[81,258],[595,259],[552,1],[554,260],[553,261],[558,262],[593,263],[590,264],[592,265],[555,264],[556,266],[560,266],[559,267],[557,268],[591,269],[589,264],[594,270],[587,1],[588,1],[561,271],[566,264],[568,264],[563,264],[564,271],[570,264],[571,272],[562,264],[567,264],[569,264],[565,264],[585,273],[584,264],[586,274],[580,264],[582,264],[581,264],[577,264],[583,275],[578,264],[579,276],[572,264],[573,264],[574,264],[575,264],[576,264],[551,1],[900,1],[90,1],[537,1],[834,1],[797,277],[793,1],[794,1],[792,1],[795,1],[796,1],[798,1],[790,1],[791,278],[799,279],[681,280],[309,1],[543,281],[194,282],[195,283],[193,284],[196,285],[190,286],[191,287],[192,288],[186,286],[187,286],[189,289],[188,286],[185,290],[207,291],[275,292],[274,293],[273,294],[212,295],[228,296],[226,297],[227,298],[213,299],[298,300],[198,1],[202,1],[200,301],[201,1],[205,302],[208,1],[225,303],[203,1],[220,304],[206,305],[221,306],[224,307],[222,307],[219,308],[199,1],[204,1],[223,309],[229,310],[217,1],[211,311],[209,312],[218,313],[215,314],[214,314],[210,315],[216,316],[294,317],[288,318],[281,319],[280,320],[289,321],[290,307],[282,322],[295,323],[276,324],[277,325],[278,326],[297,327],[279,320],[283,323],[284,328],[291,329],[292,305],[293,328],[296,307],[285,326],[230,330],[286,331],[287,332],[272,333],[270,334],[271,334],[234,334],[235,334],[236,334],[237,334],[238,334],[239,334],[240,334],[241,334],[242,334],[262,334],[243,334],[244,334],[245,334],[246,334],[247,334],[248,334],[269,334],[249,334],[250,334],[251,334],[252,334],[267,334],[253,334],[268,334],[254,334],[265,334],[266,334],[255,334],[256,334],[257,334],[263,334],[264,334],[258,334],[259,334],[260,334],[261,334],[233,335],[232,336],[231,337],[197,1],[376,1],[541,338],[542,339],[382,340],[380,1],[381,1],[184,1],[682,341],[725,342],[724,343],[723,344],[726,1],[802,345],[801,1],[805,346],[803,347],[678,348],[804,349],[727,350],[800,351],[789,352],[729,353],[730,353],[731,353],[732,353],[733,353],[786,353],[734,353],[735,353],[736,353],[737,353],[738,353],[739,353],[740,353],[741,353],[785,353],[742,353],[743,353],[744,353],[745,353],[746,353],[747,353],[748,353],[749,353],[750,353],[751,353],[752,353],[753,353],[788,353],[754,353],[755,353],[756,353],[757,353],[758,353],[759,353],[760,353],[761,353],[762,353],[763,353],[764,353],[765,353],[787,353],[766,353],[767,353],[768,353],[769,353],[770,353],[771,353],[772,353],[773,353],[774,353],[775,353],[776,353],[777,353],[778,353],[779,353],[780,353],[781,353],[782,353],[783,353],[784,353],[728,354],[721,355],[722,356],[183,357],[822,358],[819,114],[821,359],[820,1],[825,1],[826,360],[540,361],[847,362],[846,363],[597,364],[596,365],[550,366],[898,1],[598,1],[830,222],[79,1],[713,367],[699,368],[710,369],[683,1],[701,370],[700,1],[702,371],[708,372],[707,1],[684,1],[705,1],[706,1],[692,373],[687,1],[686,374],[685,1],[694,1],[711,375],[690,373],[693,1],[698,1],[691,373],[688,374],[689,1],[695,374],[696,374],[709,1],[704,1],[712,1],[703,1],[714,1],[697,1],[715,376],[716,376],[720,377],[717,378],[718,379],[719,378],[77,1],[78,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[8,1],[52,1],[49,1],[50,1],[51,1],[53,1],[9,1],[54,1],[55,1],[56,1],[58,1],[57,1],[59,1],[60,1],[10,1],[61,1],[62,1],[63,1],[11,1],[64,1],[65,1],[66,1],[67,1],[68,1],[1,1],[69,1],[70,1],[12,1],[74,1],[72,1],[76,1],[71,1],[75,1],[73,1],[599,380],[82,381],[301,382],[302,383],[305,384],[300,1],[306,382],[303,382],[304,382],[308,1]],"latestChangedDtsFile":"./dist/cli-run.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/grafast/dataplan-json/dist/index.d.ts b/grafast/dataplan-json/dist/index.d.ts new file mode 100644 index 0000000000..2c2ef6949e --- /dev/null +++ b/grafast/dataplan-json/dist/index.d.ts @@ -0,0 +1,2 @@ +export { jsonParse, JSONParseStep, JSONValue } from "./steps/jsonParse.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-json/dist/index.d.ts.map b/grafast/dataplan-json/dist/index.d.ts.map new file mode 100644 index 0000000000..a0caec8d6b --- /dev/null +++ b/grafast/dataplan-json/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-json/dist/index.js b/grafast/dataplan-json/dist/index.js new file mode 100644 index 0000000000..f974a6480d --- /dev/null +++ b/grafast/dataplan-json/dist/index.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.JSONParseStep = exports.jsonParse = void 0; +var jsonParse_js_1 = require("./steps/jsonParse.js"); +Object.defineProperty(exports, "jsonParse", { enumerable: true, get: function () { return jsonParse_js_1.jsonParse; } }); +Object.defineProperty(exports, "JSONParseStep", { enumerable: true, get: function () { return jsonParse_js_1.JSONParseStep; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/dataplan-json/dist/index.js.map b/grafast/dataplan-json/dist/index.js.map new file mode 100644 index 0000000000..5f74c4da5d --- /dev/null +++ b/grafast/dataplan-json/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2E;AAAlE,yGAAA,SAAS,OAAA;AAAE,6GAAA,aAAa,OAAA"} \ No newline at end of file diff --git a/grafast/dataplan-json/dist/steps/jsonParse.d.ts b/grafast/dataplan-json/dist/steps/jsonParse.d.ts new file mode 100644 index 0000000000..0f5e2738e2 --- /dev/null +++ b/grafast/dataplan-json/dist/steps/jsonParse.d.ts @@ -0,0 +1,30 @@ +import type { AccessStep, ExecutionDetails, GrafastResultsList } from "grafast"; +import { Step } from "grafast"; +export type JSONValue = string | number | boolean | null | { + [key: string]: JSONValue; +} | Array; +/** + * This plan accepts as JSON string as its only input and will result in the + * parsed JSON object (or array, boolean, string, etc). + */ +export declare class JSONParseStep extends Step { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + constructor($stringPlan: Step); + toStringMeta(): string; + get(key: TKey): AccessStep; + at(index: TIndex): AccessStep; + deduplicate(_peers: readonly Step[]): readonly Step[]; + execute({ indexMap, values: [stringDep], }: ExecutionDetails<[string]>): GrafastResultsList; +} +/** + * This plan accepts as JSON string as its only input and will result in the + * parsed JSON object (or array, boolean, string, etc). + */ +export declare function jsonParse($string: Step): JSONParseStep; +//# sourceMappingURL=jsonParse.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-json/dist/steps/jsonParse.d.ts.map b/grafast/dataplan-json/dist/steps/jsonParse.d.ts.map new file mode 100644 index 0000000000..a3a0f6f57c --- /dev/null +++ b/grafast/dataplan-json/dist/steps/jsonParse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"jsonParse.d.ts","sourceRoot":"","sources":["../../src/steps/jsonParse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAoB,IAAI,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,KAAK,CAAC,SAAS,CAAC,CAAC;AAErB;;;GAGG;AACH,qBAAa,aAAa,CAAC,KAAK,SAAS,SAAS,CAAE,SAAQ,IAAI,CAAC,KAAK,CAAC;IACrE,MAAM,CAAC,QAAQ;;;MAGb;IAGF,aAAa,UAAS;gBAEV,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAK5C,YAAY,IAAI,MAAM;IAItB,GAAG,CAAC,IAAI,SAAS,MAAM,KAAK,EAC1B,GAAG,EAAE,IAAI,GACR,UAAU,CACX,KAAK,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAC/D;IAID,EAAE,CAAC,MAAM,SAAS,MAAM,KAAK,GAAG,MAAM,EACpC,KAAK,EAAE,MAAM,GACZ,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAIrB,WAAW,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,GAAG,SAAS,IAAI,EAAE;IAK5D,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,SAAS,CAAC,GACpB,EAAE,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;CAsB1D;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,SAAS,SAAS,EAC/C,OAAO,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAC3B,aAAa,CAAC,KAAK,CAAC,CAEtB"} \ No newline at end of file diff --git a/grafast/dataplan-json/dist/steps/jsonParse.js b/grafast/dataplan-json/dist/steps/jsonParse.js new file mode 100644 index 0000000000..bc19cc17e0 --- /dev/null +++ b/grafast/dataplan-json/dist/steps/jsonParse.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.JSONParseStep = void 0; +exports.jsonParse = jsonParse; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const grafast_1 = require("grafast"); +/** + * This plan accepts as JSON string as its only input and will result in the + * parsed JSON object (or array, boolean, string, etc). + */ +class JSONParseStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/json", + exportName: "JSONParseStep", + }; } + constructor($stringPlan) { + super(); + // We're not safe because if parsing JSON fails we'll include a rejected + // promise. + this.isSyncAndSafe = false; + this.addDependency($stringPlan); + } + toStringMeta() { + return chalk_1.default.bold.yellow(String(this.getDep(0).id)); + } + get(key) { + return (0, grafast_1.access)(this, [key]); + } + at(index) { + return (0, grafast_1.access)(this, [index]); + } + deduplicate(_peers) { + // We're all the same + return _peers; + } + execute({ indexMap, values: [stringDep], }) { + return indexMap((i) => { + const v = stringDep.at(i); + if (typeof v === "string") { + try { + return JSON.parse(v); + } + catch (e) { + return Promise.reject(e); + } + } + else if (v == null) { + return null; + } + else { + return Promise.reject(new Error(`JSONParseStep: expected string to parse, but received ${Array.isArray(v) ? "array" : typeof v}`)); + } + }); + } +} +exports.JSONParseStep = JSONParseStep; +/** + * This plan accepts as JSON string as its only input and will result in the + * parsed JSON object (or array, boolean, string, etc). + */ +function jsonParse($string) { + return new JSONParseStep($string); +} +(0, grafast_1.exportAs)("@dataplan/json", jsonParse, "jsonParse"); +//# sourceMappingURL=jsonParse.js.map \ No newline at end of file diff --git a/grafast/dataplan-json/dist/steps/jsonParse.js.map b/grafast/dataplan-json/dist/steps/jsonParse.js.map new file mode 100644 index 0000000000..eff40da98c --- /dev/null +++ b/grafast/dataplan-json/dist/steps/jsonParse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"jsonParse.js","sourceRoot":"","sources":["../../src/steps/jsonParse.ts"],"names":[],"mappings":";;;AAyFA,8BAIC;;AA7FD,0DAA0B;AAO1B,qCAAiD;AAUjD;;;GAGG;AACH,MAAa,aAAuC,SAAQ,cAAW;aAC9D,aAAQ,GAAG;QAChB,UAAU,EAAE,gBAAgB;QAC5B,UAAU,EAAE,eAAe;KAC5B,AAHc,CAGb;IAKF,YAAY,WAAgC;QAC1C,KAAK,EAAE,CAAC;QALV,wEAAwE;QACxE,WAAW;QACX,kBAAa,GAAG,KAAK,CAAC;QAIpB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,YAAY;QACV,OAAO,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,GAAG,CACD,GAAS;QAIT,OAAO,IAAA,gBAAM,EAAC,IAAI,EAAE,CAAC,GAAa,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,EAAE,CACA,KAAa;QAEb,OAAO,IAAA,gBAAM,EAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;IAEM,WAAW,CAAC,MAAuB;QACxC,qBAAqB;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,SAAS,CAAC,GACQ;QAC3B,OAAO,QAAQ,CAAyB,CAAC,CAAC,EAAE,EAAE;YAC5C,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;iBAAM,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,OAAO,IAAW,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,yDACE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CACtC,EAAE,CACH,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;;AA7DH,sCA8DC;AAED;;;GAGG;AACH,SAAgB,SAAS,CACvB,OAA4B;IAE5B,OAAO,IAAI,aAAa,CAAQ,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,IAAA,kBAAQ,EAAC,gBAAgB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-json/tsconfig.tsbuildinfo b/grafast/dataplan-json/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..f061644229 --- /dev/null +++ b/grafast/dataplan-json/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/chalk/index.d.ts","../grafast/dist/therecanbeonlyone.d.ts","../../utils/lru/dist/index.d.ts","../../utils/graphile-config/dist/interfaces.d.ts","../../utils/graphile-config/dist/functionality.d.ts","../../utils/graphile-config/dist/hooks.d.ts","../../utils/graphile-config/dist/middleware.d.ts","../../utils/graphile-config/dist/resolvepresets.d.ts","../../utils/graphile-config/dist/index.d.ts","../../node_modules/graphql/version.d.ts","../../node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/graphql/language/source.d.ts","../../node_modules/graphql/jsutils/path.d.ts","../../node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/graphql/language/kinds.d.ts","../../node_modules/graphql/language/tokenkind.d.ts","../../node_modules/graphql/language/ast.d.ts","../../node_modules/graphql/language/location.d.ts","../../node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/graphql/language/directivelocation.d.ts","../../node_modules/graphql/type/directives.d.ts","../../node_modules/graphql/type/schema.d.ts","../../node_modules/graphql/type/definition.d.ts","../../node_modules/graphql/execution/execute.d.ts","../../node_modules/graphql/graphql.d.ts","../../node_modules/graphql/type/scalars.d.ts","../../node_modules/graphql/type/introspection.d.ts","../../node_modules/graphql/type/validate.d.ts","../../node_modules/graphql/type/assertname.d.ts","../../node_modules/graphql/type/index.d.ts","../../node_modules/graphql/language/printlocation.d.ts","../../node_modules/graphql/language/lexer.d.ts","../../node_modules/graphql/language/parser.d.ts","../../node_modules/graphql/language/printer.d.ts","../../node_modules/graphql/language/visitor.d.ts","../../node_modules/graphql/language/predicates.d.ts","../../node_modules/graphql/language/index.d.ts","../../node_modules/graphql/execution/subscribe.d.ts","../../node_modules/graphql/execution/values.d.ts","../../node_modules/graphql/execution/index.d.ts","../../node_modules/graphql/subscription/index.d.ts","../../node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/graphql/validation/validate.d.ts","../../node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/graphql/validation/rules/deferstreamdirectiveonrootfieldrule.d.ts","../../node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/graphql/validation/rules/streamdirectiveonlistfieldrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/graphql/validation/index.d.ts","../../node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/graphql/error/locatederror.d.ts","../../node_modules/graphql/error/index.d.ts","../../node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/graphql/utilities/printschema.d.ts","../../node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/graphql/utilities/concatast.d.ts","../../node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/graphql/utilities/index.d.ts","../../node_modules/graphql/index.d.ts","../../node_modules/eventemitter3/index.d.ts","../grafast/dist/constraints.d.ts","../grafast/dist/bucket.d.ts","../grafast/dist/steps/__item.d.ts","../grafast/dist/steps/__flag.d.ts","../grafast/dist/steps/access.d.ts","../grafast/dist/steps/__value.d.ts","../grafast/dist/steps/listtransform.d.ts","../grafast/dist/steps/connection.d.ts","../grafast/dist/steps/constant.d.ts","../grafast/dist/steps/each.d.ts","../grafast/dist/steps/error.d.ts","../grafast/dist/steps/filter.d.ts","../grafast/dist/steps/first.d.ts","../grafast/dist/steps/groupby.d.ts","../grafast/dist/multistep.d.ts","../grafast/dist/steps/lambda.d.ts","../grafast/dist/steps/last.d.ts","../grafast/dist/steps/list.d.ts","../grafast/dist/steps/listen.d.ts","../grafast/dist/steps/node.d.ts","../grafast/dist/steps/partitionbyindex.d.ts","../grafast/dist/steps/remapkeys.d.ts","../grafast/dist/steps/reverse.d.ts","../grafast/dist/steps/applyinput.d.ts","../grafast/dist/steps/setter.d.ts","../grafast/dist/steps/sideeffect.d.ts","../grafast/dist/steps/__inputlist.d.ts","../grafast/dist/steps/__inputobject.d.ts","../grafast/dist/steps/__inputstaticleaf.d.ts","../grafast/dist/steps/__trackedvalue.d.ts","../grafast/dist/steps/applytransforms.d.ts","../grafast/dist/steps/bakedinput.d.ts","../grafast/dist/steps/condition.d.ts","../grafast/dist/steps/graphqlresolver.d.ts","../grafast/dist/steps/load.d.ts","../grafast/dist/steps/polymorphicbranch.d.ts","../grafast/dist/steps/proxy.d.ts","../grafast/dist/steps/index.d.ts","../grafast/dist/graphqlcollectfields.d.ts","../grafast/dist/engine/executeoutputplan.d.ts","../grafast/dist/engine/outputplan.d.ts","../grafast/dist/engine/operationplan.d.ts","../grafast/dist/step.d.ts","../grafast/dist/engine/layerplan.d.ts","../grafast/dist/error.d.ts","../grafast/dist/steps/__inputdefault.d.ts","../grafast/dist/steps/__inputdynamicscalar.d.ts","../grafast/dist/deferred.d.ts","../grafast/dist/utils.d.ts","../grafast/dist/planjsoninterfaces.d.ts","../grafast/dist/interfaces.d.ts","../grafast/dist/steps/object.d.ts","../grafast/dist/exportas.d.ts","../grafast/dist/grafastprint.d.ts","../grafast/dist/makegrafastschema.d.ts","../grafast/dist/dev.d.ts","../grafast/dist/engine/lib/defaultplanresolver.d.ts","../grafast/dist/engine/lib/withgloballayerplan.d.ts","../grafast/dist/execute.d.ts","../grafast/dist/grafastgraphql.d.ts","../grafast/dist/middleware.d.ts","../grafast/dist/operationplan-input.d.ts","../grafast/dist/polymorphic.d.ts","../grafast/dist/stringifypayload.d.ts","../grafast/dist/stripansi.d.ts","../grafast/dist/subscribe.d.ts","../../node_modules/iterall/index.d.ts","../grafast/dist/args.d.ts","../grafast/dist/version.d.ts","../grafast/dist/index.d.ts","./src/steps/jsonparse.ts","./src/index.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/events/index.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/file.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/filereader.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/assert/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/codemirror/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/cookies/node_modules/@types/express/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-axis/index.d.ts","../../node_modules/@types/d3-brush/index.d.ts","../../node_modules/@types/d3-chord/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@types/d3-contour/index.d.ts","../../node_modules/@types/d3-delaunay/index.d.ts","../../node_modules/@types/d3-dispatch/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-dsv/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-fetch/index.d.ts","../../node_modules/@types/d3-force/index.d.ts","../../node_modules/@types/d3-format/index.d.ts","../../node_modules/@types/d3-geo/index.d.ts","../../node_modules/@types/d3-hierarchy/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-polygon/index.d.ts","../../node_modules/@types/d3-quadtree/index.d.ts","../../node_modules/@types/d3-random/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-scale-chromatic/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-time-format/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/d3/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/interpret/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/jsonwebtoken/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","../../node_modules/@types/koa-bodyparser/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/ajv/node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/@types/license-checker-webpack-plugin/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@iconify/types/types.d.ts","../../node_modules/@iconify/utils/lib/customisations/defaults.d.ts","../../node_modules/@iconify/utils/lib/customisations/merge.d.ts","../../node_modules/@iconify/utils/lib/customisations/bool.d.ts","../../node_modules/@iconify/utils/lib/customisations/flip.d.ts","../../node_modules/@iconify/utils/lib/customisations/rotate.d.ts","../../node_modules/@iconify/utils/lib/icon/name.d.ts","../../node_modules/@iconify/utils/lib/icon/defaults.d.ts","../../node_modules/@iconify/utils/lib/icon/merge.d.ts","../../node_modules/@iconify/utils/lib/icon/transformations.d.ts","../../node_modules/@iconify/utils/lib/svg/viewbox.d.ts","../../node_modules/@iconify/utils/lib/icon/square.d.ts","../../node_modules/@iconify/utils/lib/icon-set/tree.d.ts","../../node_modules/@iconify/utils/lib/icon-set/parse.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","../../node_modules/@iconify/utils/lib/icon-set/expand.d.ts","../../node_modules/@iconify/utils/lib/icon-set/minify.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","../../node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","../../node_modules/@iconify/utils/lib/svg/build.d.ts","../../node_modules/@iconify/utils/lib/svg/defs.d.ts","../../node_modules/@iconify/utils/lib/svg/id.d.ts","../../node_modules/@iconify/utils/lib/svg/size.d.ts","../../node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","../../node_modules/@iconify/utils/lib/svg/trim.d.ts","../../node_modules/@iconify/utils/lib/svg/pretty.d.ts","../../node_modules/@iconify/utils/lib/svg/html.d.ts","../../node_modules/@iconify/utils/lib/svg/url.d.ts","../../node_modules/@iconify/utils/lib/svg/inner-html.d.ts","../../node_modules/@iconify/utils/lib/svg/parse.d.ts","../../node_modules/@iconify/utils/lib/colors/types.d.ts","../../node_modules/@iconify/utils/lib/colors/keywords.d.ts","../../node_modules/@iconify/utils/lib/colors/index.d.ts","../../node_modules/@iconify/utils/lib/css/types.d.ts","../../node_modules/@iconify/utils/lib/css/icon.d.ts","../../node_modules/@iconify/utils/lib/css/icons.d.ts","../../node_modules/@antfu/utils/dist/index.d.mts","../../node_modules/@iconify/utils/lib/loader/types.d.ts","../../node_modules/@iconify/utils/lib/loader/utils.d.ts","../../node_modules/@iconify/utils/lib/loader/custom.d.ts","../../node_modules/@iconify/utils/lib/loader/modern.d.ts","../../node_modules/@iconify/utils/lib/loader/loader.d.ts","../../node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","../../node_modules/@iconify/utils/lib/emoji/convert.d.ts","../../node_modules/@iconify/utils/lib/emoji/format.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","../../node_modules/@iconify/utils/lib/emoji/data.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/components.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/name.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","../../node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","../../node_modules/@iconify/utils/lib/emoji/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","../../node_modules/@iconify/utils/lib/misc/strings.d.ts","../../node_modules/@iconify/utils/lib/misc/objects.d.ts","../../node_modules/@iconify/utils/lib/misc/title.d.ts","../../node_modules/@iconify/utils/lib/index.d.ts","../../node_modules/mermaid/dist/rendering-util/icons.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/dompurify/dist/purify.es.d.mts","../../node_modules/mermaid/dist/config.type.d.ts","../../node_modules/type-fest/source/basic.d.ts","../../node_modules/type-fest/source/except.d.ts","../../node_modules/type-fest/source/mutable.d.ts","../../node_modules/type-fest/source/merge.d.ts","../../node_modules/type-fest/source/merge-exclusive.d.ts","../../node_modules/type-fest/source/require-at-least-one.d.ts","../../node_modules/type-fest/source/require-exactly-one.d.ts","../../node_modules/type-fest/source/partial-deep.d.ts","../../node_modules/type-fest/source/readonly-deep.d.ts","../../node_modules/type-fest/source/literal-union.d.ts","../../node_modules/type-fest/source/promisable.d.ts","../../node_modules/type-fest/source/opaque.d.ts","../../node_modules/type-fest/source/set-optional.d.ts","../../node_modules/type-fest/source/set-required.d.ts","../../node_modules/type-fest/source/value-of.d.ts","../../node_modules/type-fest/source/promise-value.d.ts","../../node_modules/type-fest/source/async-return-type.d.ts","../../node_modules/type-fest/source/conditional-keys.d.ts","../../node_modules/type-fest/source/conditional-except.d.ts","../../node_modules/type-fest/source/conditional-pick.d.ts","../../node_modules/type-fest/source/union-to-intersection.d.ts","../../node_modules/type-fest/source/stringified.d.ts","../../node_modules/type-fest/source/fixed-length-array.d.ts","../../node_modules/type-fest/source/iterable-element.d.ts","../../node_modules/type-fest/source/entry.d.ts","../../node_modules/type-fest/source/entries.d.ts","../../node_modules/type-fest/source/set-return-type.d.ts","../../node_modules/type-fest/source/asyncify.d.ts","../../node_modules/type-fest/source/package-json.d.ts","../../node_modules/type-fest/source/tsconfig-json.d.ts","../../node_modules/type-fest/base.d.ts","../../node_modules/type-fest/source/utilities.d.ts","../../node_modules/type-fest/ts41/camel-case.d.ts","../../node_modules/type-fest/ts41/delimiter-case.d.ts","../../node_modules/type-fest/ts41/kebab-case.d.ts","../../node_modules/type-fest/ts41/pascal-case.d.ts","../../node_modules/type-fest/ts41/snake-case.d.ts","../../node_modules/type-fest/ts41/index.d.ts","../../node_modules/mermaid/dist/types.d.ts","../../node_modules/mermaid/dist/utils.d.ts","../../node_modules/mermaid/dist/diagram.d.ts","../../node_modules/mermaid/dist/diagram-api/types.d.ts","../../node_modules/mermaid/dist/diagram-api/detecttype.d.ts","../../node_modules/mermaid/dist/errors.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","../../node_modules/mermaid/dist/rendering-util/types.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","../../node_modules/dagre-d3-es/src/graphlib/graph.d.ts","../../node_modules/dagre-d3-es/src/graphlib/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/render.d.ts","../../node_modules/dagre-d3-es/src/index.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","../../node_modules/mermaid/dist/logger.d.ts","../../node_modules/mermaid/dist/internals.d.ts","../../node_modules/mermaid/dist/mermaidapi.d.ts","../../node_modules/mermaid/dist/rendering-util/render.d.ts","../../node_modules/mermaid/dist/mermaid.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/mock-fs/lib/item.d.ts","../../node_modules/@types/mock-fs/lib/file.d.ts","../../node_modules/@types/mock-fs/lib/directory.d.ts","../../node_modules/@types/mock-fs/lib/symlink.d.ts","../../node_modules/@types/mock-fs/lib/filesystem.d.ts","../../node_modules/@types/mock-fs/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/nodemon/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/pg/node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pluralize/index.d.ts","../../node_modules/prettier/doc.d.ts","../../node_modules/prettier/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/ps-tree/index.d.ts","../../node_modules/ts-toolbelt/out/index.d.ts","../../node_modules/@types/ramda/tools.d.ts","../../node_modules/@types/ramda/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/minipass/dist/commonjs/index.d.ts","../../node_modules/lru-cache/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/path-scurry/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts","../../node_modules/glob/dist/commonjs/pattern.d.ts","../../node_modules/glob/dist/commonjs/processor.d.ts","../../node_modules/glob/dist/commonjs/walker.d.ts","../../node_modules/glob/dist/commonjs/ignore.d.ts","../../node_modules/glob/dist/commonjs/glob.d.ts","../../node_modules/glob/dist/commonjs/has-magic.d.ts","../../node_modules/glob/dist/commonjs/index.d.ts","../../node_modules/rimraf/dist/commonjs/opt-arg.d.ts","../../node_modules/rimraf/dist/commonjs/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/source-list-map/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/tapable/index.d.ts","../../node_modules/@types/tern/lib/tern/index.d.ts","../../node_modules/@types/tern/lib/infer/index.d.ts","../../node_modules/@types/tern/index.d.ts","../../node_modules/source-map/source-map.d.ts","../../node_modules/@types/uglify-js/index.d.ts","../../node_modules/anymatch/index.d.ts","../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../node_modules/@types/webpack-sources/lib/source.d.ts","../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../node_modules/@types/webpack-sources/lib/index.d.ts","../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../node_modules/@types/webpack-sources/index.d.ts","../../node_modules/@types/webpack/index.d.ts","../../node_modules/@types/webpack-bundle-analyzer/index.d.ts","../../node_modules/@types/websocket/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../../../node_modules/@types/color-name/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/global.d.ts"],"fileIdsList":[[269,313],[79,262,269,313],[79,80,261,269,313],[190,240,242,261,269,313],[193,232,269,313],[193,228,233,234,269,313],[228,234,242,269,313],[235,261,269,313],[190,192,230,232,235,240,242,261,269,313],[82,190,193,228,231,234,235,240,242,261,269,313],[242,269,313],[93,190,240,242,261,269,313],[193,269,313],[190,229,240,261,269,313],[81,82,88,190,206,228,229,233,234,236,239,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,269,313],[88,94,190,191,192,215,228,229,233,234,235,236,237,238,240,241,261,269,313],[190,228,234,240,242,261,269,313],[88,269,313],[228,234,269,313],[190,228,233,234,240,242,261,269,313],[190,229,233,235,240,242,261,269,313],[194,228,234,242,269,313],[221,228,234,242,269,313],[190,200,228,234,240,242,261,269,313],[190,200,228,234,240,261,269,313],[228,234,242,261,269,313],[190,192,195,196,197,228,234,240,242,261,269,313],[196,228,234,261,269,313],[195,228,234,242,269,313],[190,228,229,234,240,242,261,269,313],[198,228,234,242,269,313],[194,198,199,228,234,269,313],[199,228,234,242,269,313],[190,228,234,240,261,269,313],[198,199,228,234,269,313],[194,195,196,197,198,199,200,201,202,203,204,205,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,243,261,269,313],[206,228,234,242,269,313],[195,200,228,234,242,269,313],[194,199,228,234,242,261,269,313],[195,206,228,234,242,261,269,313],[190,207,228,234,240,242,261,269,313],[200,228,234,242,269,313],[215,261,269,313],[93,190,240,261,269,313],[190,228,233,234,239,240,242,261,269,313],[269,313,425],[269,313,623],[269,313,591,626],[269,313,591],[269,313,591,592],[269,313,648],[269,313,638,640],[269,313,638,640,641,642,643,644],[269,313,638,640,641],[269,313,638,640,641,642],[269,313,638,640,641,642,643],[269,313,591,598],[269,313,591,601],[269,313,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652],[269,313,591,592,629,630],[269,313,591,592,629],[269,313,591,592,601],[269,313,591,592,601,612],[269,313,514],[269,313,328,363],[269,313,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423],[269,313,367],[269,313,367,371],[269,313,365,367,369],[269,313,365,367],[269,313,367,373],[269,313,366,367],[269,313,378],[269,313,367,384,385,386],[269,313,367,388],[269,313,367,389,390,391,392,393,394,395,396,397,398,399,400,401],[269,313,367,370],[269,313,367,369],[269,313,367,378],[269,313,425,426,427,428,429],[269,313,425,427],[269,313,328,363,431],[269,313,319,363],[269,313,356,363,440],[269,313,328,363,431,445,446],[269,313,432,440,444],[269,313,449,477],[269,313,448,454],[269,313,459],[269,313,454],[269,313,453],[269,313,471],[269,313,467],[269,313,449,466,477],[269,313,448,449,450,451,452,453,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478],[269,313,480],[269,313,483,487],[269,313,483,484,486],[269,313,487],[269,313,482,483,484],[269,313,325,328,363,437,438,439],[269,313,432,438,440,444,489],[269,313,326,363,491,492],[269,313,325,326,363,494],[269,313,326,363],[269,313,497],[269,313,499,505],[269,313,500,501,502,503,504],[269,313,505],[269,313,325,328,330,333,345,356,363],[269,313,363],[269,313,510],[269,313,511],[269,313,516,519],[269,313,326,356,363],[269,313,318,363,480],[269,313,325,363],[269,313,524],[269,312,313,325,328,329,333,340,356,363,364,442,443,446,447,507,523],[269,313,575],[269,313,577,579,580,581,582,583,584,585,586,587,588,589],[269,313,577,578,580,581,582,583,584,585,586,587,588,589],[269,313,578,579,580,581,582,583,584,585,586,587,588,589],[269,313,577,578,579,581,582,583,584,585,586,587,588,589],[269,313,577,578,579,580,582,583,584,585,586,587,588,589],[269,313,577,578,579,580,581,583,584,585,586,587,588,589],[269,313,577,578,579,580,581,582,584,585,586,587,588,589],[269,313,577,578,579,580,581,582,583,585,586,587,588,589],[269,313,577,578,579,580,581,582,583,584,586,587,588,589],[269,313,577,578,579,580,581,582,583,584,585,587,588,589],[269,313,577,578,579,580,581,582,583,584,585,586,588,589],[269,313,577,578,579,580,581,582,583,584,585,586,587,589],[269,313,577,578,579,580,581,582,583,584,585,586,587,588],[269,313,785,786,787,788],[269,313,784],[269,313,363,784],[269,313,784,785,786,787],[269,310,313],[269,312,313],[313],[269,313,318,348],[269,313,314,319,325,326,333,345,356],[269,313,314,315,325,333],[264,265,266,269,313],[269,313,316,357],[269,313,317,318,326,334],[269,313,318,345,353],[269,313,319,321,325,333],[269,312,313,320],[269,313,321,322],[269,313,325],[269,313,323,325],[269,312,313,325],[269,313,325,326,327,345,356],[269,313,325,326,327,341,345,348],[269,308,313,361],[269,313,321,325,328,333,345,356],[269,313,325,326,328,329,333,345,353,356],[269,313,328,330,345,353,356],[267,268,269,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362],[269,313,325,331],[269,313,332,356,361],[269,313,321,325,333,345],[269,280,284,313,356],[269,280,313,345,356],[269,275,313],[269,277,280,313,353,356],[269,313,333,353],[269,275,313,363],[269,277,280,313,333,356],[269,272,273,276,279,313,325,345,356],[269,280,287,313],[269,272,278,313],[269,280,301,302,313],[269,276,280,313,348,356,363],[269,301,313,363],[269,274,275,313,363],[269,280,313],[269,274,275,276,277,278,279,280,281,282,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,302,303,304,305,306,307,313],[269,280,295,313],[269,280,287,288,313],[269,278,280,288,289,313],[269,279,313],[269,272,275,280,313],[269,280,284,288,289,313],[269,284,313],[269,278,280,283,313,356],[269,272,277,280,287,313],[269,313,345],[269,275,280,301,313,361,363],[269,313,334],[269,313,335],[269,312,313,336],[269,310,311,312,313,314,315,316,317,318,319,320,321,322,323,325,326,327,328,329,330,331,332,333,334,335,336,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362],[269,313,339],[269,313,340],[269,313,325,341,342],[269,313,341,343,357,359],[269,313,325,345,346,348],[269,313,347,348],[269,313,345,346],[269,313,348],[269,313,349],[269,310,313,345],[269,313,325,351,352],[269,313,351,352],[269,313,318,333,345,353],[269,313,354],[269,313,333,355],[269,313,328,340,356],[269,313,318,357],[269,313,345,358],[269,313,332,359],[269,313,360],[269,313,318,325,327,336,345,356,359,361],[269,313,345,362],[269,313,325,345,353,363,794,795,798,799],[269,313,806,807],[269,313,806],[269,313,811],[269,313,505,814,815],[269,313,810,912],[269,313,810,913],[269,313,505,814],[269,313,810,813],[269,313,804,809,810],[269,313,328,345,363],[269,313,345,363],[269,313,839,878],[269,313,839,863,878],[269,313,878],[269,313,839],[269,313,839,864,878],[269,313,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877],[269,313,864,878],[269,313,326,345,363,436],[269,313,326,445],[269,313,328,363,437,443],[269,313,885,886],[269,313,483,885],[269,313,483,886],[269,313,655],[269,313,888],[269,313,328,333,363,575],[269,313,363,892,893,894,895,896,897,898,899,900,901,902],[269,313,891,892,901],[269,313,892,901],[269,313,882,891,892,901],[269,313,891,892,893,894,895,896,897,898,899,900,902],[269,313,892],[269,313,318,891,901],[269,313,318,363,574,888,889,890,903],[269,313,325,328,330,333,356,363],[269,313,325,328,330,333,345,353,356,362,363],[269,313,909],[269,313,530,531,535,562,563,565,566,567,569,570],[269,313,528,529],[269,313,528],[269,313,530,570],[269,313,530,531,567,568,570],[269,313,570],[269,313,527,570,571],[269,313,530,531,569,570],[269,313,530,531,533,534,569,570],[269,313,530,531,532,569,570],[269,313,530,531,535,562,563,564,565,566,569,570],[269,313,527,530,531,535,567,569],[269,313,535,570],[269,313,537,538,539,540,541,542,543,544,545,546,570],[269,313,560,570],[269,313,536,547,555,556,557,558,559,561],[269,313,540,570],[269,313,548,549,550,551,552,553,554,570],[269,313,768,769,770,771,772],[269,313,766],[269,313,767,773,774],[269,313,656],[269,313,513,518],[269,313,822,824,828,829,832],[269,313,833],[269,313,824,828,831],[269,313,822,824,828,831,832,833,834],[269,313,828],[269,313,824,828,829,831],[269,313,822,824,829,830,832],[269,313,825,826,827],[269,313,326,335,363,822,823],[90,91,97,98,269,313],[99,165,166,269,313],[90,97,99,269,313],[91,99,269,313],[90,92,93,94,97,99,102,103,269,313],[92,104,118,119,269,313],[90,97,102,103,104,269,313],[90,94,97,99,101,102,103,269,313],[90,91,102,103,104,269,313],[89,105,110,117,120,121,164,167,189,269,313],[90,269,313],[91,95,96,269,313],[91,95,96,97,98,100,111,112,113,114,115,116,269,313],[91,96,97,269,313],[91,269,313],[90,91,96,97,99,112,269,313],[97,269,313],[91,97,98,269,313],[95,97,269,313],[104,118,269,313],[90,92,93,94,97,102,269,313],[90,97,100,103,269,313],[92,101,102,103,106,107,108,109,269,313],[103,269,313],[90,94,97,99,101,103,269,313],[99,102,269,313],[99,269,313],[90,97,103,269,313],[91,97,102,113,269,313],[102,168,269,313],[99,103,269,313],[97,102,269,313],[102,269,313],[90,100,269,313],[90,97,269,313],[97,102,103,269,313],[122,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,269,313],[102,103,269,313],[94,97,269,313],[90,97,101,102,103,115,269,313],[90,94,97,103,269,313],[90,94,97,269,313],[123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,269,313],[115,123,269,313],[123,269,313],[90,97,99,102,122,123,269,313],[90,97,99,101,102,103,115,122,269,313],[269,313,516],[80,269,313,517],[269,313,657],[269,313,658,700],[269,313,479,658,696,699],[269,313,698,700],[269,313,449,477,658,697,698,704,776,777],[269,313,654,658,697,698,699,700,701,702,704,778,779,780],[269,313,658,697,699,700],[269,313,591,653],[269,313,700,704,778],[269,313,704],[269,313,449,477,697,704,765,775,781],[269,313,697,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764],[269,313,449,477,697,704],[269,313,658,703,765],[269,313,658],[269,313,449,477,479,658,697],[269,313,325,349,363],[269,313,363,795,796,797],[269,313,345,363,795],[269,313,801],[269,313,515],[269,313,836],[269,313,326,835],[269,313,572],[269,313,484,526,571],[269,313,484,572],[269,313,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688],[269,313,674],[269,313,674,685],[269,313,660,676],[269,313,676],[269,313,683],[269,313,659],[269,313,660],[269,313,668],[269,313,690],[269,313,689,691,692,693,694,695],[269,313,692],[269,313,691],[269,313,328,333,353,356,359,483,488,526,572,573,574],[83,269,313],[83,84,269,313],[83,84,85,86,87,269,313]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8c2f60c3192f66fe9e5e7a7a941534583cdff4f5a059fad30b1b863a547f388a","impliedFormat":1},{"version":"27b4308d9e3db258a09b8b7bd92677320d654f5fc089abbbcb1fd2f70b14c909","impliedFormat":1},{"version":"d1d7e7d247badcbc50cf0bd6b1096dc7ab3cd36b31e9803b3c0acbbfacc493d2","impliedFormat":1},{"version":"6c2a2e7e8500f70a127dbb259d99c0f3951394df7c46a69eb2569f0e8c14665e","impliedFormat":1},{"version":"924e12558578f341179bb878e75cfd9aa648254f5ac6cf228832fae40a52c067","impliedFormat":1},{"version":"3f7705b6434455ff25ac2d336388564173179a4aed8cd0d1b1ea235f0fd3de23","impliedFormat":1},{"version":"b5f6aef5039b1b98a67bf3a3ed52f8693a56be698da9e4a41e2d67b0751ee005","affectsGlobalScope":true,"impliedFormat":1},{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"f473be7c909dbd10c40f013e70da40f24648b2abb01025436fe0a0eecd0e83be","impliedFormat":1},{"version":"c98583f02275727ead0256c97298c15fb77a1c1e473b03c3b61291c63c66d385","impliedFormat":1},{"version":"9a7904e39add402d71343ac8de5303e990d9abb1fc703c64991c655b718267a5","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"f671901909a26ae633328d6d899992193ca9ea718e6315f2c3d46f39c437f02c","impliedFormat":1},{"version":"7920b8aa27a7b6a90bf9f5dc21eedac7f38ca8717ebe70495ab616eb52b3247b","impliedFormat":1},{"version":"485fb40ef0ae61e1f8f5f494a2aa4a69df73dc860b5c94ef8fc8dc42679fdb26","impliedFormat":1},{"version":"1f53ae308869bfb894735576727f3dca47d0405ba7fee4f076a701b449ce6f94","impliedFormat":1},{"version":"84bdeff726a44cad4c07230ccdd2b777e53608d081eb8b27f6d28540ac22a915","impliedFormat":1},{"version":"1950e4d79983ccc330513fb28324280bbd138fc69e2739353008ae5a75f976e6","impliedFormat":1},{"version":"2e9b3ece2914738d48a674dc4d677a6cef576ef045356961120a7915735e13f4","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"3c8c852d93800512dc47f4554efe94789bd81733947e2066a916ba70fe6992fd","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"5a2ae43daf9d478f37780e3ae08089a46347e395812c7c4526684878e34b1401","impliedFormat":1},{"version":"d60984fcae46158649bf553c1a649428ced1dfaa789086a7fb79a819536b0023","impliedFormat":1},{"version":"ff90925b7aef60c568d491966f90f37cfe4eb126a590e68a33c017b9be483f84","impliedFormat":1},{"version":"cbd12dce7f4a3542b0f00690efcf1211e50ad87bd78cedbf7beb60acb27d20a0","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"6b6fdab709d30fbedb090e783a610662e60b4922843f42ef801e3073a23392ee","impliedFormat":1},{"version":"65b2a90560049039460015abe63b8fa7f205bb78796a8de48a3661cfe7e07e28","impliedFormat":1},{"version":"1b6173159974df8ff78f3b01b8b89449053c1912c2ec715a2dc664d8d93a54c1","impliedFormat":1},{"version":"2b4b6a59d7d1020b65f9c878850b1aa2ae8eceb26025224d6bee2c5d7883d815","impliedFormat":1},{"version":"d45acd2463649e59b4dafb4ee051426783c6a13a72c21fac94265676f7fc01d8","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"7ef6d45ce6f0ee16a0441063ca89cebfbe4c00647132f5fe31bbe5420e20843b","impliedFormat":1},{"version":"11c2481df1d73d5d667ce282d1ec9fbcedee39f0a0382fd591cf6434b21f05d0","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"ac7eec65e925055052e4c3d88a303457150e7ddf8f02256a674315335b95af70","impliedFormat":1},{"version":"bb61172ecd43ac71849821f49ef6afa6515230386b253817c380873bdc49da50","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"1b3a76621e54583d0f1a9fcde6b7aa7642283412b103744f7b2a5c3c19108959","impliedFormat":1},{"version":"6f0f5830c13abe710e1e7e97bed1ae039f3a9fc8b5ce2a076141eaf0c854fee6","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"3307e5b71a5eea118476097fde4580e60c20b187e945f42d7eb69a8dbbe7e09a","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"0a08db8f792dd2b329dfb09bb2c7805298d03888608acd9eb554a8ad820e1079","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"490725ebec9ddfc97663887989ff1a49323b7cce7293970732ef962cffed3699","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"cf3f331aad22bfead8f79aae52f022f25bf9ce25185cfc87f3c4a59c060a699e","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"da129261494c4094bf55c761ba5f0ae4d5426d83ed5e312bc7f8600727bb8a05","impliedFormat":1},{"version":"cd2f8f7d90d8d283bb4b91b57406bf793df731d39bc2c119e3fa514a057d21f8","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"1930700210612b5324055fd9d335f4f2a7bb3f1b1433e1adadd7bdc5ee50272f","impliedFormat":1},{"version":"b998db2d97135f8958613fd1d795fc58a17b8fcc452288eaec13e8c8d870d1ac","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"2d8df720a088cfdc1253782b120f400cbe0d4516bb06e98c88ae7c2af1447653","impliedFormat":1},{"version":"99acda6ceb0b1e5a754aa8e7af740702e50ab515561be3d987392f04d0f7078e","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"806f43175b88c9a2ef89448cef56bc95c4df32a27be99748c517e5ca076919e8","impliedFormat":1},{"version":"5832c4ed86047766c1d4cfe2aa5780e3ab5d8d842d12664d0f71faf78c80dd7e","impliedFormat":1},{"version":"a43d21378510cf4ed5aad29f64f3d0fc6e0a30bb2bb81af0ea776b239a77d068","impliedFormat":1},{"version":"60c4cb259d73efe80ca3854715efdf93710a8b11a560a7f9741d6638280b4a80","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"faa402775a4c220279f9c26074a0010f10a7f0293c506ffd0857ea45e8ba7733","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"08b603e3737ff32a685eefca3e7f21324b8b868f3322416cef759f8a54d234ef","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"14d8af44e19148423a5a0817544a229e3ba324e1cd814c1d7b4ca2690baf434c","impliedFormat":1},{"version":"91122fba45414382787d7cffbd90298118a2970f8f12d91cff302f3a482f01e1","impliedFormat":1},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"b6ac3e813f3bc41717619291caf2fbc75ee84b4f5bd3abd3e48885831ebdaf96","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"691e623f6b017a026baf823394aa6d74efabfe877b799c539e085e3f82247cd8","impliedFormat":1},{"version":"a4808116b12ab27b11b3800dbc2b64dd122d4748d48a111957b87b52fd3cda2d","impliedFormat":1},{"version":"2501feb6d0a73d980a9b8e5e03c7e15053788a7fbae6d55cf93df3b0e06dbedb","impliedFormat":1},{"version":"dc9412bbe64fc748d330f3e574c0440753daefc81cc74791198a0223f2114b5a","impliedFormat":1},{"version":"bbd9e6f68bf6e418bd44d7991a4860b1d386a30b798d1be773931ac7bd1e657a","impliedFormat":1},{"version":"f7ff9fd2db48fbabaf6516a4c3515b07325baf4c7a35766a7bc1ce72a1bb9b83","impliedFormat":1},{"version":"e383a277c8c485ffafdeea2bd0d28036bd8d1be4b2d6099a7b27ecc4419fe8d4","impliedFormat":1},{"version":"66a1d3c8e68134692c9784cfcd8ca275d8e24ace1bc01c432c5a2cc27ef27701","impliedFormat":1},{"version":"18b79e1c4ef00056857db2070ed947e32dae63dbbaefadee3cb6e8f21d5193d2","impliedFormat":1},{"version":"cbce9fb00ac5676380dafebfd7e5ce1561f17dfbe6356597d6e5d9b6b9bd5fe2","impliedFormat":1},{"version":"ae042e01074576c186a734888cd420dcf9eccf57053c9d7de5326cc235b7d3ac","impliedFormat":1},{"version":"040c519477a40f166f9d3d1f1e792761de759c5301466833b74d119957c794b3","impliedFormat":1},{"version":"d5a20d626aa5d02f7732d87050b9f3589627f36e4b4d01fe171d2cb9a958b21c","impliedFormat":1},{"version":"d36fb912245b9e1c7a4ac59cffe51d83546d2b03f52e2b3b9fff969d01257800","impliedFormat":1},{"version":"70ecd65df736dcf74d8304cd3767a863b7fab2bfa04a73c039c995cfd88489dc","impliedFormat":1},{"version":"53960fc36042dc4aef356c0273674bb0e7f65059720fb42ac36d29a8d2e3cbf1","impliedFormat":1},{"version":"8c607552166070130883b20fb7da9c7b7006e065239c2075f47e3349f3664c66","impliedFormat":1},{"version":"d3878648b6e0c7f8ca809b4a03d8d13ddccdde282c6c84aa1faf59f0780a888c","impliedFormat":1},{"version":"c1a24626823048792dc4440975646629ae984fa3354cd2f09270834d90fd997d","impliedFormat":1},{"version":"696e8b13ed6b15e0395fa6438f43e1363e09204f080640c6cb5437323f9ed8fb","impliedFormat":1},{"version":"a5d6fe2a52c03c4f5edb8c1ef06ccfc777ae377d0f0dbd7df3b066b0f9cec946","impliedFormat":1},{"version":"34b4698d4b6ccfb2b1e3e034d4463ecf490a6c700d229685f7b5b08ccc150393","impliedFormat":1},{"version":"f19baa96f4a8c3b23453401f7864ef337ebd2533dca12c042155cbd526341f29","impliedFormat":1},{"version":"a1604f4912418542596cf7598f199be7f276b7ad715416c59603d048894733e4","impliedFormat":1},{"version":"11b0c060c13dcf6fd09d60d9870f4921492a4d3c1b39a33f9d93f22f1dfb7c3b","impliedFormat":1},{"version":"a59bdaea7395061b93e12c89996770f196ada0f3e9197e2343763c65d0588dd8","impliedFormat":1},{"version":"9ffe848f345f1ac8c2fa2f4706c38840fe2beb455e19c5dce756e0ad09776235","impliedFormat":1},{"version":"013c10b8066b319a9dc033db24f0467737406810561d0c55d8bab3c8212788bb","impliedFormat":1},{"version":"b424df9fec80812448f7b2977e3220d5a2eb88e6c8e8b675c282f4eb1f4b8834","impliedFormat":1},{"version":"d66670300c6ad07603217e119240d129d327ee2cb4e05cdfc86f7f01e36a42ea","impliedFormat":1},{"version":"3dbba617428a6892f0e7a3c16d960738db464eb8df6724df7d95e7a4f116f110","impliedFormat":1},{"version":"3d7926e64b370e31cd4080bb432adb9e92fe096e31bee0685ee49d75cd317120","impliedFormat":1},{"version":"5862b0752f1eeef4061683d1311ebec322696c9ccd497e14b9d0c97545b317b6","impliedFormat":1},{"version":"c9829971663604cc72b30018b901c7cd97483587953e8a9535616ae04c808867","impliedFormat":1},{"version":"b0b73baeadd229c956da12d8b08f9c464b15e653d6dc5838bea41c733de7fe00","impliedFormat":1},{"version":"88ad86557665308c7957b0aeefbba159d9c99ed57e1d9a696cb4b068ea30f68d","impliedFormat":1},{"version":"8ce9716f8368167c631c4240de8cb2b5997c1c2ad9d885609079ec4c30877139","impliedFormat":1},{"version":"35595df80753dbc2b21a04ddb000835b32f0b9ad56ea259d4e6e9ee674debef4","impliedFormat":1},{"version":"efc5e846a8dcc7aeb97cdf4d6e529079e4ab45ac3cd39ab38ca96599bbcf232f","impliedFormat":1},{"version":"730450f8a576f827f2044ff9e3f0f7130e605b79087552c11ac5d92fda9a7e1d","impliedFormat":1},{"version":"9a62c9484c14c0cb33dbcdcc11e405821ee668e714799f7a125b840eeb8e89ef","impliedFormat":1},{"version":"1fb8ecfdc58a9071337c56072dd9b3c78c7d2f76730a1be8d27224ca083227a5","impliedFormat":1},{"version":"3bb99d9565690ee166e65b90817eb27c7c942b0efa84609bf2fcf0a8cc9405b8","impliedFormat":1},{"version":"c742fe995845140002d0baa8785af21a3bab8527b5584cdb0b407a226107f585","impliedFormat":1},{"version":"ffa065aa3455b257438ce8c9768c5e0f80ea3820094ee8a1120fb4437cc3e7a4","impliedFormat":1},{"version":"c325aac67ed6a692a807c9396d513ce37ed8f56c8d8ca7bf4ea76d4cd09e7c20","impliedFormat":1},{"version":"9d39a014e37dc53a1dafdb2ef5099417bd00174b815ac7e390414372b30a14bd","impliedFormat":1},{"version":"86a07b0fb1f46d39132ef555b215e7db97e906596697469df465c310646d3528","impliedFormat":1},{"version":"0e198c29a6251d421945c8d803c593eeaa2e92de8d8aee6412a2911195055162","impliedFormat":1},{"version":"f7df54c02497181cc6e63d6eada933f477a18b3a72776a0a77e63de603439061","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"a6292eb5c4a48e71b5f49c4ca89b9aa76108a93b7ac98c656a8f1dfc5a614bd7","impliedFormat":1},{"version":"7a9121b2912c6821f2783964444cac3050e17b3b75512965e0a32e66b414d592","impliedFormat":1},{"version":"9e8cb3ec89db85e85513bb89adbe63b8acccad3fffe11d6d8df01c865c77fb5a","impliedFormat":1},{"version":"f3dd8466af3baf161e0d203a1a28c7bbf9f863679c3b0e659371b1835b40f193","impliedFormat":1},{"version":"e8f141e5548179b835f699a1026f79ea581eeac1a4e57f5f22dcd0b4a772cbbc","impliedFormat":1},{"version":"2ef7e3af3848886c22ace971e69966b203eb67b2d1787d5e44c99519c09892aa","impliedFormat":1},{"version":"ddad846edb02abe8e625649c4a5dd64be1bde5d7631302d1fa4d45d14ed8b51f","impliedFormat":1},{"version":"a119ad4d2a84d13a333dbfa30e43bfccf4a0dc040c732d676adab436626f25ee","impliedFormat":1},{"version":"a7e006e3243d9746d204b7addb1f034e5deb4a0d157d8c85ecada87a86f222ff","impliedFormat":1},{"version":"fda09dd5bb69c3fdf9ae579b4b9f5a7db565223896f50aed99760821c1517bbc","impliedFormat":1},{"version":"261a9e319315e52f88b1cb347db2ce4277ea7a6eb6fccd90c289b119353d5b78","impliedFormat":1},{"version":"4871318522f755858f7edb640a4c3ea1614ff99be9d69340f5a51ce82fd809df","impliedFormat":1},{"version":"5208acbce57501f3d5dd58f4956d43734b3a007b8b86578c935785ec72408e04","impliedFormat":1},{"version":"41449e5c8ad2b4ad46497762cb72ec680457e35e03b658842f257a79da3d694c","impliedFormat":1},{"version":"2e567bb91461de2ab714bfd4261ce4f58c389cd3dba268958fdaef6cf20f7e3c","impliedFormat":1},{"version":"7c296bb31e778cea0fd700a14fbe683b665db7115f09700d8416cf24b83cdfcc","impliedFormat":1},{"version":"0b3109399eb9e01963064b099613e2f79810b0771aef56b628c4e6651f35440e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a98c2d548ef63067ff2f888217688ee3529493cdd64fd45668aacb3c6da9c3d7","signature":"a300b3d1fd727ce517240746c0d70c6f620a5bb97ae06b84f92c32acb8458949","impliedFormat":1},{"version":"fa2bec09f892e9cbb2b86167134b987c2008d0e5654123bb0d533037b0982cd4","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"400db42c3a46984118bff14260d60cec580057dc1ab4c2d7310beb643e4f5935","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a37b8d00d03f0381d2db2fe31b0571dc9d7cc0f4b87ca103cc3cd2277690ba0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"afbe82d2b4857d674686255c44c8590dfe0b40927713876f875fdf4960473441","impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"87f287f296f3ff07dbd14ea7853c2400d995dccd7bd83206196d6c0974774e96","impliedFormat":1},{"version":"78ef0198c323d0f7b16f993ada3459f0e7e20567e7f56fe0c5ee78f31cb0840c","impliedFormat":1},{"version":"01dea450d742aa55ce9b8ab8877bbda8eb73bf88609e440cc34f6f59f35080db","impliedFormat":1},{"version":"5ec614ed82e045de15417a47e2568be5310d43d4764ee43d295ea38caafbfd17","impliedFormat":1},{"version":"b788ef070e70003842cbd03c3e04f87d46b67a47b71e9e7d8713fd8c58c5f5ec","impliedFormat":1},{"version":"583d365dc19f813f1e2767771e844c7c4ea9ab1a01e85e0119f2e083488379c2","impliedFormat":1},{"version":"b82fc3869c625b828dd3feac4b5ebf335ed007d586dc16176602db73bc4e7c65","impliedFormat":1},{"version":"05e30605274c26f405c411eebed776fa2102418c05beec885e5c9bd0fa716f32","impliedFormat":1},{"version":"58c7f7820dc027a539b0437be7e1f8bdf663f91fbc9e861d80bb9368a38d4a94","impliedFormat":1},{"version":"d67d6b779d0dece9450d7a4170d3ee58ea7fcae0af2ab5e1d0ad711474b4f7f5","impliedFormat":1},{"version":"1066c11177d085898185548e1b38ed15fcea50061508f7c313ab8bec35d46b95","impliedFormat":1},{"version":"bbc49fd9dc6ee162ba3d270c834398e0c1d44e657ac4edfa55ac837902b7e0da","impliedFormat":1},{"version":"6993f360de4984b6743764fad3b88246d5dc6cfa45567783fc23833ad4e50c13","impliedFormat":1},{"version":"f11eb1fb4e569b293a7cae9e7cdae57e13efc12b0e4510e927868c93ec055e82","impliedFormat":1},{"version":"715682cddbefe50e27e5e7896acf4af0ffc48f9e18f64b0a0c2f8041e3ea869b","impliedFormat":1},{"version":"6d2f5a67bfe2034aa77b38f10977a57e762fd64e53c14372bcc5f1d3175ca322","impliedFormat":1},{"version":"4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","impliedFormat":1},{"version":"33859aa36b264dd91bef77c279a5a0d259c6b63684d0c6ad538e515c69a489ec","impliedFormat":1},{"version":"33fa69f400b34c83e541dd5f4474f1c6fb2788614a1790c6c7b346b5c7eaa7dd","impliedFormat":1},{"version":"be213d7cbc3e5982b22df412cf223c2ac9d841c75014eae4c263761cd9d5e4c0","impliedFormat":1},{"version":"66451f9540fdf68a5fd93898257ccd7428cf7e49029f2e71b8ce70c8d927b87a","impliedFormat":1},{"version":"8a051690018330af516fd9ea42b460d603f0839f44d3946ebb4b551fe3bc7703","impliedFormat":1},{"version":"301fb04ef91ae1340bec1ebc3acdd223861c887a4a1127303d8eef7638b2d893","impliedFormat":1},{"version":"06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","impliedFormat":1},{"version":"fc26991e51514bfc82e0f20c25132268b1d41e8928552dbaed7cc6f3d08fc3ac","impliedFormat":1},{"version":"5d82bb58dec5014c02aaeb3da465d34f4b7d5c724afea07559e3dfca6d8da5bc","impliedFormat":1},{"version":"44448f58f4d731dc28a02b5987ab6f20b9f77ad407dcf57b68c853fe52195cd7","impliedFormat":1},{"version":"b2818e8d05d6e6ad0f1899abf90a70309240a15153ea4b8d5e0c151e117b7338","impliedFormat":1},{"version":"1c708c15bb96473ce8ec2a946bd024ecded341169a0b84846931f979172244ba","impliedFormat":1},{"version":"ed0f5e1f45dc7c3f40356e0a855e8594aa57c125a5d8dfeef118e0a3024f98ff","impliedFormat":1},{"version":"dc187f457333356ddc1ab8ec7833cd836f85e0bbcade61290dc55116244867cb","impliedFormat":1},{"version":"25525e173de74143042e824eaa786fa18c6b19e9dafb64da71a5faacc5bd2a5c","impliedFormat":1},{"version":"7a3d649f2de01db4b316cf4a0ce5d96832ee83641f1dc84d3e9981accf29c3a1","impliedFormat":1},{"version":"26e4260ee185d4af23484d8c11ef422807fb8f51d33aa68d83fab72eb568f228","impliedFormat":1},{"version":"c4d52d78e3fb4f66735d81663e351cf56037270ed7d00a9b787e35c1fc7183ce","impliedFormat":1},{"version":"864a5505d0e9db2e1837dce8d8aae8b7eeaa5450754d8a1967bf2843124cc262","impliedFormat":1},{"version":"2d045f00292ac7a14ead30d1f83269f1f0ad3e75d1f8e5a245ab87159523cf98","impliedFormat":1},{"version":"54bcb32ab0c7c72b61becd622499a0ae1c309af381801a30878667e21cba85bb","impliedFormat":1},{"version":"20666518864143f162a9a43249db66ca1d142e445e2d363d5650a524a399b992","impliedFormat":1},{"version":"28439c9ebd31185ae3353dd8524115eaf595375cd94ca157eefcf1280920436a","impliedFormat":1},{"version":"84344d56f84577d4ac1d0d59749bb2fde14c0fb460d0bfb04e57c023748c48a6","impliedFormat":1},{"version":"89bcaf21b0531640604ca9e0796f54a6e1b4e2d43c07422ffa1e3d2e1bb0e456","impliedFormat":1},{"version":"66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","impliedFormat":1},{"version":"35a0eac48984d20f6da39947cf81cd71e0818feefc03dcb28b4ac7b87a636cfd","impliedFormat":1},{"version":"f6c226d8222108b3485eb0745e8b0ee48b0b901952660db20e983741e8852654","impliedFormat":1},{"version":"93c3b758c4dc64ea499c9416b1ed0e69725133644b299b86c5435e375d823c75","impliedFormat":1},{"version":"4e85f443714cff4858fdaffed31052492fdd03ff7883b22ed938fc0e34b48093","impliedFormat":1},{"version":"0146912d3cad82e53f779a0b7663f181824bba60e32715adb0e9bd02c560b8c6","impliedFormat":1},{"version":"70754650d1eba1fc96a4ed9bbbc8458b341b41063fe79f8fa828db7059696712","impliedFormat":1},{"version":"220783c7ca903c6ce296b210fae5d7e5c5cc1942c5a469b23d537f0fbd37eb18","impliedFormat":1},{"version":"0974c67cf3e2d539d0046c84a5e816e235b81c8516b242ece2ed1bdbb5dbd3d6","impliedFormat":1},{"version":"b4186237e7787a397b6c5ae64e155e70ac2a43fdd13ff24dfb6c1e3d2f930570","impliedFormat":1},{"version":"2647784fffa95a08af418c179b7b75cf1d20c3d32ed71418f0a13259bf505c54","impliedFormat":1},{"version":"0480102d1a385b96c05316b10de45c3958512bb9e834dbecbbde9cc9c0b22db3","impliedFormat":1},{"version":"eea44cfed69c9b38cc6366bd149a5cfa186776ca2a9fb87a3746e33b7e4f5e74","impliedFormat":1},{"version":"7f375e5ef1deb2c2357cba319b51a8872063d093cab750675ac2eb1cef77bee9","impliedFormat":1},{"version":"b7f06aec971823244f909996a30ef2bbeae69a31c40b0b208d0dfd86a8c16d4f","impliedFormat":1},{"version":"0421510c9570dfae34b3911e1691f606811818df00354df7abd028cee454979f","impliedFormat":1},{"version":"1517236728263863a79500653cc15ceb286f048907b3dba3141a482ca6946bd7","impliedFormat":1},{"version":"7c7b418e467a88a714b4c6dac321923b933f82875f063f48abf952021a2c2df1","impliedFormat":1},{"version":"33120063a7e106818ce109be9238569edca74d4e8530f853bd30d298d1375fd8","impliedFormat":1},{"version":"8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4584e95c63371b5d507749924d94e324c7e041f964975a92e7c8a1abc840328","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"0504070e7eaba788f5d0d5926782ed177f1db01cee28363c488fae94950c0bbc","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"6847334317c1bc1e6fc4b679b0095bbd2b6ee3b85fe3f26fc26bac462f68ef5e","impliedFormat":1},{"version":"2224f3072e3cc07906eeed5c71746779511fba2dd224addc5489bcdb489bdee5","impliedFormat":1},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"7f15c8d21ca2c062f4760ff3408e1e0ec235bad2ca4e2842d1da7fc76bb0b12f","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","impliedFormat":1},{"version":"fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"fbf802b3a028f5eb22ad406ee5fc7c368f0acfd3a2a6d0f805120766f5717ec8","impliedFormat":1},{"version":"63786b6f821dee19eb898afb385bd58f1846e6cba593a35edcf9631ace09ba25","impliedFormat":1},{"version":"ff954afaefd9bd5fad03678cae63fd23e0aaaf4d311b27bfb35e1d6d83833997","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"818e7c86776c67f49dbd781d445e13297b59aa7262e54b065b1332d7dcc6f59a","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"7e8d3f08435ad2cefe67f58182618bfc9a0a29db08cf2544b94cbcae754a9bd9","impliedFormat":1},{"version":"8cf9b9045a614f883b623c2f1a631ec6a93321747e933330b2eec0ee47164a34","impliedFormat":1},{"version":"cee62e64fc4bdfb3798ab8e21486fadd2027ce4128349989acc63905366f91c5","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"c68eb17ea7b2ff7f8bcfe1a9e82b8210c3112820d9e74b56b0fbecaab5ce8866","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"ee736931bcb117efdd2118795ccfa4b2d0beb8fec426f91ae448e51b03510707","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"9068fb04d9df0cb5de85ced5c4d70a935096c4cb289ab76b038e0a2496c92503","impliedFormat":1},{"version":"1f2bcc8836f72a2ff7a6804dc5379e9b73bf94a51d8e60c43cf5b874b5f4f6ff","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"100985057cdd198e32b471b9c92a39080e5e50720b2cb290d04ddf40fbe71c84","impliedFormat":99},{"version":"333d9b9067c0213cd7b275d1d78bab0577ba31ef7a63306ab65a74e83a546a65","impliedFormat":99},{"version":"85566a0b81339b43e063f5cd8cc49a9b9bc177bc5ad3ffd5e4874700040ec11e","impliedFormat":99},{"version":"c2688779f6804c3bc6dfa33d05a810464c684a74f92aee6b0f0d4bcd7dbeed6d","impliedFormat":99},{"version":"16331f489efb6af7d06037074020644d9175f70a7a6466d926f63e74af5a77d8","impliedFormat":99},{"version":"2b2b8b64b39f152439ecb9f04b3d6c1d88d35c75bf14a4eb98f1cc791f092366","impliedFormat":99},{"version":"395548b309c8fe9ffadd8b1055898fffa29bd28ea1f8079f33e48a65601589e2","impliedFormat":99},{"version":"e38871affeac7cf4dd4cc3a55714ff38d55f137c30788d30e454a6e3058f36bc","impliedFormat":99},{"version":"783a0f8fb88d659272c1ac541719e32235881815705b44fb63b6af579885ea75","impliedFormat":99},{"version":"6a60957e322c4c060ddf3073130cbcbcbc5e639e21cd2279df43184bfa8cb9a3","impliedFormat":99},{"version":"5b353617eeb8a37c7a9497ebaeacc027bd7487eec10ffbebca41dcdc2634af70","impliedFormat":99},{"version":"cedbd20d98f3fd7c1fa00742292ab5b13c3fec266ae41b90c47b716ef06cd983","impliedFormat":99},{"version":"9713bcf79cd728919262a2a543484a5f9bd24a15cfec1cee096d9d17a9f5524d","impliedFormat":99},{"version":"35fb129972553f809a7045f3cb952c2598299548018a23238304c020cb16945f","impliedFormat":99},{"version":"855b0379a6b6e96eda055cff16da442b4a7a4548101848b9ae48bce22879569e","impliedFormat":99},{"version":"ea2ac8d236dddbce748dbaffcaa1bfcadae6fbcae1fd0a67e17d5e35d5e38dfc","impliedFormat":99},{"version":"a7750935d6a1cbd259861b5acf1c912f9d3b10efd8602f61fc858f04f261595d","impliedFormat":99},{"version":"e0aa3276d014f3c798dd3101af8c8545b56d79665a7a982b4cf6fe28551a3b56","impliedFormat":99},{"version":"ea744987345eb5ae036495b0185e95eeb7d2d999b0ef80265f79434e83863e9e","impliedFormat":99},{"version":"c3bc54ba21655aaf1db5bb97c42f56bbfe5a3a3c40e3884ef3ba2cdaa9f34c1f","impliedFormat":99},{"version":"705917c38d2e92347b5e57c1c6007da46f1005874ef2257cc8dfff59cba4710f","impliedFormat":99},{"version":"40925b4938b527a6267b1fe56a2e97cc52ea9d73eec90ea8e05df773a182101e","impliedFormat":99},{"version":"2930156137f4885c3ad168804c557edfc9bb88ae0e1df487f4adcdc771286ad7","impliedFormat":99},{"version":"b63e990c632eeee9375c2c43bbd5cdcb23418b79edcb57afa53edf4dd597b33c","impliedFormat":99},{"version":"721dcf072e75b71b5ab7a0bbbd6578f908c36a0bfaefa1454d3e43938bde67a5","impliedFormat":99},{"version":"5704f5ee2642dd0b810bb07ce6e4e51319ed4d6db78747ff54675e72c3fede06","impliedFormat":99},{"version":"da2be38a98356fdd540580a68338df2d2450ec071b1cb5bdbfe8e52075ddde9e","impliedFormat":99},{"version":"3af0bb87094d80e20b0d451626eef1e2da701891c41998ac0a6a6c91cff86f74","impliedFormat":99},{"version":"30a211e9de0dd587f8c690f9ed9378c15c79bcbe762dd85a61c548e5058c3fd6","impliedFormat":99},{"version":"a7cda498cd929d2f958ce49abbaef1abf999ec40884a04cd28ff34317d844e54","impliedFormat":99},{"version":"e48b510f40f29a89d9dbe19a9fca96d7f02b721aec6754fd5c242f9893d06508","impliedFormat":99},{"version":"30d88e2e7c4ca1cdfeb37cf05a2d7a351c68b14ac472e6238401ecb7b75686ea","impliedFormat":99},{"version":"03b34718c02b6225c2f7d7c374cb701ab04461a5cfa66d150531c9f31e39da49","impliedFormat":99},{"version":"7dfe7da785eafad3e3d0cc66545e97f1acf934ebe5b2ec8f4a34341a9ca76ed4","impliedFormat":99},{"version":"8c7829855345152b7b3c196e82147153115d5b568ff97be0e40d161e8d9d2f51","impliedFormat":99},{"version":"f30a36ff98b099ea8c635146dfdd1d810bc14ec303acb653ca938445047b0e41","impliedFormat":99},{"version":"07fa63aca536ca8d8d8c6a56eabcf77f746609921fe23d780a69e2c0a2a65701","impliedFormat":99},{"version":"c8fe48c4437d4ead0a841128d179f8bb99e0e38f9ccb80ca6be14833e30bc129","impliedFormat":99},{"version":"5eac3facc9f59e960c00f41502b34a908776cfba6d7e1a5a4ead5030682b7434","impliedFormat":99},{"version":"d44f8de16b9c6ef4ebd88d4162bc24942bee9975f88162a8962bb572e62dc5df","impliedFormat":99},{"version":"0251c18e8c863bf5ef510043644299aceab6debf3d87aab8c8cfded5aef7d6af","impliedFormat":99},{"version":"292f7dc6b4be74f148f5e5b57b9e8a7f515d7d4f6183d3f9162e127e50959ba9","impliedFormat":99},{"version":"c1608d867d6ddda5c0f4736cf4959e2b2c6bcda660c4c72f7feb36b3998df2bb","impliedFormat":99},{"version":"02d77b0d27ecb78e28d3a376c6cdce05fabcf58f2fd01c102f031d8e375191da","impliedFormat":99},{"version":"daef84b3b89e60054fab1abaafe38eda673f88abdedc3920015d61f1cc5358b8","impliedFormat":99},{"version":"f3318054dc392b6661785263095ed8f1555f0d8f3ce534c8c2de8895b4ec7bd3","impliedFormat":99},{"version":"6c3aa7e0c4eb4d8d7fc24df037980369e70a28f9237cae77511b4cfc6a1b74d0","impliedFormat":99},{"version":"ecc7e0840690cc4b9a2587a4f550b292c35d36150c6c108803bbdfc3bead5b91","impliedFormat":99},{"version":"e11a23b343084cdec24d718fc64369dc8b6dece71314b41d4b5938f2a568834d","impliedFormat":99},{"version":"ce678766176812e8eda3f4925304d4159d806f50fa8a93a72da56e95dae8bbc8","impliedFormat":99},{"version":"bb21d35a36dc1db80a2cf29383bb7304919708cde205bbe246ec47176336e255","impliedFormat":99},{"version":"df657f732e32af7c7550da93e66dfdfa142fc1282b4a392ec78fc9aefbd6fdd0","impliedFormat":99},{"version":"b20ef0766a8a578e5c542aafaa8c53b7e2b0e32a5522f9cf18bc021a81d54dd7","impliedFormat":99},{"version":"9ea0cd8a367cab9b1c632740d1bd998f8c4dbbbda4505f47bebd38a46afbaaa6","impliedFormat":99},{"version":"97980bb49a7e4b15df6f988f914070c831a39426cd9a29a6f7a9af82f397b28c","impliedFormat":99},{"version":"3ddf05b5259b9a0e2b1da1559585655202670e1f78396b4d4efccea0195a41b4","impliedFormat":99},{"version":"1e99c59aadb1af6d090976ade8280ea37208e8f064f79e9a18231fe5b7232890","impliedFormat":99},{"version":"c7ee77eec320d6312899cd8c16484c82b98385e175c57ff00d49cc5a2c291e0d","impliedFormat":99},{"version":"b38d9a4927465a8a5d1ae84e00d323bedfc7f5e77f4bc360078c6f283b964acb","impliedFormat":99},{"version":"27d6b338ff280dc86ff167217c29d7e71b52bd25a3c3b8eb1f5a56c887571d00","impliedFormat":99},{"version":"da60046c4cc6b018869ea8fc71a7b7bf5591d9f5d90ee52c4a614ecc69ff3433","impliedFormat":99},{"version":"8bee1fe0b3dd1b324f08189d81e55f9952007ce2304df07a15568b821b7e524f","impliedFormat":99},{"version":"a3dd2d53781729214a67f4b91d9a65d5310c1bbdcd0595789a5152a493cded91","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e20fc6cca2cf901917bc09c88bf9ee380383717ed990900aa99962ff9e3f786","impliedFormat":99},{"version":"7410b87e621ce92f484a13dfbe72069a6470fb72cc418df865f31b601193595c","impliedFormat":99},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"c96ac2cf9b266d5606f79d99191e3e2c2bede081f60aab6377d16b1e73841429","impliedFormat":99},{"version":"30a4dd54f1f39dee17bafcc0fb9a877932d607d8f24d3f1ac7f8998cf07f2649","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"ccb5f2cdd46a60b0aa3b43aeeac9f0d499640f589806f2486f35ff8a9565784b","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"5e8c09adb8be1b932100a9374cb0f8def9dda6a16a973e91c2322983ed669dd9","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"cc89688d19046618e7f88ea7c25ff04560d939902bf49e60bd38fb4662e38b5b","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"fc67adfb454cf82752ab00e969d14a95fa762f55c34e25327dc77174b0d5f742","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"bc79bd6403aa643e99c8e6733d5a8c7bf214e4528e79c882e77e9e441049e45e","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"8fa1dc3b4a2f43c688f6f4cf1721e1d26d641ef322c14adac867ecfa41aa2109","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"2d9ad35b54c1413e9ee0e74945cd5c8a99516c1fbbd0a12f673c75073436a931","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"23e028cc298226d1f8e87d57950673b3a19b91f23538ee9287d52e77540af8cf","impliedFormat":99},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1},{"version":"b95f2a78de34a873c6dd76dc538b7a5fec77da6a0e0e7efc7aa58f58ddfce270","impliedFormat":1},{"version":"1231f32d791b0fcc13e0c836543b34e83dea6e0b494ee35194a66a50dd25427e","impliedFormat":1},{"version":"66880e558be5ee57d23c12ffd0a90bf07840e088f8fa9b608fadeaf45af78969","impliedFormat":1},{"version":"058186f212307a621cd51160e2124c26208649600b4f0a27835f1d1caae81e65","impliedFormat":1},{"version":"c2bfeeadb18ba18386d7549a69c2049e57f31758b71343543a5c27919197b0fa","impliedFormat":1},{"version":"63b0be497f88d815c410b76985b798132d6c470199f2f31e1390a48480619758","impliedFormat":1},{"version":"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","impliedFormat":1},{"version":"95a31f8eea43d175dfeda85accc45bddce5678acae4e22e2f683b48e0e0188de","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26","impliedFormat":1},{"version":"a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"c21e3729094ed9ecdcb97724ce5b20625bb9ac3b9146d681cafa97d667c12bb5","impliedFormat":1},{"version":"5adf3c3c7204b3614dbc585681a33ef598c68df387298859f9a2521cfb449437","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"bbf7c864f1ffbacf54b524d028b6a77da9f0be0b8fff5c088e3185ee50496762","impliedFormat":1},{"version":"9df147746b0cbd11d022b564e6fdd43ac79b643dc579d2123317ee01cc4f0d70","impliedFormat":1},{"version":"fa244c20411dd53d853ce4b85e7146860be364946da477dad721e66301097460","impliedFormat":1},{"version":"fab2754e047c7818a8eb650cc2194aef4388193acdc4606eb601cb60923f7798","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"b2546f0fbeae6ef5e232c04100e1d8c49d36d1fff8e4755f663a3e3f06e7f2d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","impliedFormat":1},{"version":"041597c12abeaa2ef07766775955fc87cfc65c43e0fe86c836071bea787e967c","impliedFormat":1},{"version":"0838507efff4f479c6f603ec812810ddfe14ab32abf8f4a8def140be970fe439","impliedFormat":1},{"version":"f67c92f5cb2bf5a9929ee73216f08749db4f22b04a18e5205ed6e75ca48e9feb","impliedFormat":1},{"version":"7212c2d58855b8df35275180e97903a4b6093d4fbaefea863d8d028da63938c6","impliedFormat":1},{"version":"de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","impliedFormat":1},{"version":"1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","impliedFormat":1},{"version":"854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","impliedFormat":1},{"version":"dd9faff42b456b5f03b85d8fbd64838eb92f6f7b03b36322cbc59c005b7033d3","impliedFormat":1},{"version":"6ff702721d87c0ba8e7f8950e7b0a3b009dfd912fab3997e0b63fab8d83919c3","impliedFormat":1},{"version":"9dce9fc12e9a79d1135699d525aa6b44b71a45e32e3fa0cf331060b980b16317","impliedFormat":1},{"version":"586b2fd8a7d582329658aaceec22f8a5399e05013deb49bcfde28f95f093c8ee","impliedFormat":1},{"version":"dedc0ab5f7babe4aef870618cd2d4bc43dc67d1584ee43b68fc6e05554ef8f34","impliedFormat":1},{"version":"ef1f3eadd7bed282de45bafd7c2c00105cf1db93e22f6cd763bec8a9c2cf6df1","impliedFormat":1},{"version":"3d8885d13f76ff35b7860039e83c936ff37553849707c2fd1d580d193a52be5b","impliedFormat":1},{"version":"b75188f1d06bba9e266aad819df75b51ed1fcc19ac0750dc6a55a8eb1b7c2134","impliedFormat":1},{"version":"d8272401aa994ed8a60f71067acbcc9a73d847be6badf1b9397a8ce965af6318","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1087c6c9066684d3e72a8fcc5445f34e85572792bc16f5aab01208bcbbbe64be","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"eb27bc1c8d46234252298d3d7252c8459667daa0953b974f9d2c581c46703b2a","impliedFormat":1},{"version":"1b096ca6b209d1fed9ce68edd110ff6de8bec4fab2689d2adc481ffc1b1dc20b","impliedFormat":1},{"version":"9c02f12da30d30dd5f5ccaeedfb9b925ed4e5114059e9be6ed2ecf87a492fd16","impliedFormat":1},{"version":"8c8f8e816a38f1a0cc2dd3813d3bede2d773df36e72f4cb55d9daabd22016925","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"f86d0150d5abc55bf5bb479beacc34a7e9d4ab4e3014315fb74626baf1558857","impliedFormat":1},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"d77523951427fca92c7fdcaafb776bfb5d76cb0dfd8a7b18f38710332386ad6d","impliedFormat":1},{"version":"d9dcda644a9ecb57df163cbeaaca093c696335a53f47b5dbbf7cf0671b76e2eb","impliedFormat":1},{"version":"2d4d871246a21c785aec2a5b745ad79cdc877de3866f586887c8c74ddec97b8d","impliedFormat":1},{"version":"0cfa403fc15d0fda3214c3d8b75a42abcfa60c07e739de908e57d1f76220b7f9","impliedFormat":1},{"version":"d99cef4ae065cde21bd536998282a9882d8fb36a902725f03d71c3a9e3a24aa4","impliedFormat":1},{"version":"f3d4606a83fbdeedeeecd982ac35945bc02d50499cc65c72d71a143afa7e7334","impliedFormat":1},{"version":"bc919e8ad895c43568f8125523ab0f91810d5208afcc5bff2ba4713dffda0d97","impliedFormat":1},{"version":"6771b9c4bb2253e2a51c5ef7155419558289b885857e275ff61f90a979049cc3","impliedFormat":1},{"version":"6a1fb700b666a19112cddb4ab24e671c83ce40f6bfe64d1e7cb59c88263d0ec2","impliedFormat":1},{"version":"cc060af11b9bc0ed723d1200951bdc3255ff189475183a1f9ed06fd9c57206a6","impliedFormat":1},{"version":"a0aa9907949f7688394904c4d16b93c8d3154a9eda70ab096e0cfb37ef48e9b1","impliedFormat":1},{"version":"816dd83b87f2f1986f4c9072d38262ae96ee6589fab8a9ebc3b8d8f30263b8d3","impliedFormat":1},{"version":"5512a0ca56d3a21dd2843b62c939ff885d8853e55524bada67d1e393649e4bd6","impliedFormat":1},{"version":"3cd6ea92f13a0bf3c120ac271bc0ba57bf4cc3078e010150887c657f78b41959","impliedFormat":1},{"version":"4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","impliedFormat":1},{"version":"d9a256f69f3956993e65efd88336644be8f8dd36d149e859c14704ef6c6c0eec","impliedFormat":1},{"version":"d18f13c33148de7f0b1241734cb10dfe4c1e9505acad51ee48c3f4c1bd09e0dd","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","impliedFormat":1}],"root":[262,263],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationDir":"./dist","declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"stripInternal":true,"target":9,"useDefineForClassFields":false,"useUnknownInCatchVariables":false},"referencedMap":[[911,1],[270,1],[263,2],[262,3],[259,4],[193,1],[192,1],[239,1],[247,1],[231,5],[235,6],[248,7],[249,8],[233,9],[232,10],[236,11],[250,12],[244,1],[251,12],[245,13],[230,14],[261,15],[242,16],[246,17],[252,18],[206,19],[253,20],[241,11],[254,11],[234,21],[195,22],[237,23],[238,17],[218,17],[219,24],[220,25],[194,26],[221,27],[197,28],[196,29],[215,30],[222,19],[223,17],[224,7],[199,31],[200,7],[201,32],[202,7],[203,32],[204,33],[225,34],[205,35],[229,36],[207,37],[208,33],[209,38],[210,22],[198,39],[226,40],[211,41],[243,42],[212,35],[227,34],[228,7],[213,7],[214,7],[216,43],[217,37],[255,11],[256,1],[257,44],[81,1],[240,45],[260,1],[629,1],[427,46],[425,1],[591,1],[625,47],[624,47],[623,1],[627,48],[628,48],[626,1],[594,1],[592,49],[595,50],[593,50],[596,1],[635,1],[636,1],[640,1],[637,1],[647,49],[646,1],[648,1],[649,51],[641,52],[645,53],[642,54],[638,1],[643,55],[644,56],[639,1],[611,49],[607,49],[610,49],[609,49],[608,49],[604,49],[603,49],[606,49],[605,49],[598,49],[599,57],[597,1],[602,58],[600,49],[653,59],[632,60],[634,60],[633,60],[630,61],[631,60],[651,1],[650,1],[652,1],[612,62],[613,1],[616,1],[619,1],[614,1],[621,1],[622,63],[618,1],[615,1],[617,1],[620,1],[601,1],[513,1],[515,64],[514,1],[364,65],[337,1],[365,1],[366,1],[367,1],[424,66],[368,67],[413,68],[370,69],[369,70],[371,67],[372,67],[374,71],[373,67],[375,72],[376,72],[377,67],[379,73],[380,67],[381,73],[382,67],[384,67],[385,67],[386,67],[387,74],[383,67],[388,1],[389,75],[390,75],[391,75],[392,75],[393,75],[402,76],[394,75],[395,75],[396,75],[397,75],[399,75],[398,75],[400,75],[401,75],[403,67],[404,67],[378,67],[405,73],[407,77],[406,67],[408,67],[409,67],[410,78],[412,67],[411,67],[414,67],[416,67],[417,79],[415,67],[418,67],[419,67],[420,67],[421,67],[422,67],[423,67],[430,80],[426,46],[428,81],[429,46],[432,82],[433,83],[434,1],[435,1],[441,84],[431,65],[442,1],[447,85],[445,86],[448,1],[450,87],[451,87],[452,1],[453,1],[455,88],[456,1],[457,1],[458,87],[459,1],[460,1],[461,89],[462,1],[463,1],[464,90],[465,1],[466,91],[467,1],[468,1],[469,1],[470,1],[473,1],[472,92],[449,1],[474,93],[475,1],[471,1],[476,1],[477,87],[478,94],[479,95],[481,96],[488,97],[487,98],[486,99],[482,1],[485,100],[483,1],[440,101],[490,102],[489,101],[493,103],[454,1],[495,104],[496,105],[498,106],[500,107],[501,107],[502,107],[499,1],[505,108],[503,109],[504,109],[506,1],[507,1],[443,1],[508,110],[509,111],[510,1],[511,112],[512,113],[520,114],[484,1],[491,115],[492,1],[521,116],[446,1],[522,117],[525,118],[523,118],[524,119],[576,120],[578,121],[579,122],[577,123],[580,124],[581,125],[582,126],[583,127],[584,128],[585,129],[586,130],[587,131],[588,132],[589,133],[590,106],[436,1],[494,1],[782,1],[783,1],[789,134],[786,135],[785,136],[788,137],[784,1],[787,135],[480,1],[790,111],[310,138],[311,138],[312,139],[269,140],[313,141],[314,142],[315,143],[264,1],[267,144],[265,1],[266,1],[316,145],[317,146],[318,147],[319,148],[320,149],[321,150],[322,150],[324,151],[323,152],[325,153],[326,154],[327,155],[309,156],[268,1],[328,157],[329,158],[330,159],[363,160],[331,161],[332,162],[333,163],[287,164],[297,165],[286,164],[307,166],[278,167],[277,168],[306,111],[300,169],[305,170],[280,171],[294,172],[279,173],[303,174],[275,175],[274,111],[304,176],[276,177],[281,178],[282,1],[285,178],[272,1],[308,179],[298,180],[289,181],[290,182],[292,183],[288,184],[291,185],[301,111],[283,186],[284,187],[293,188],[273,189],[296,180],[295,178],[299,1],[302,190],[334,191],[335,192],[336,193],[338,194],[339,195],[340,196],[341,197],[342,197],[343,198],[344,1],[345,199],[347,200],[346,201],[348,202],[349,203],[350,204],[351,205],[352,206],[353,207],[354,208],[355,209],[356,210],[357,211],[358,212],[359,213],[360,214],[361,215],[362,216],[791,111],[792,1],[793,1],[799,217],[794,1],[800,1],[803,1],[804,1],[805,1],[438,1],[808,218],[807,219],[439,1],[812,220],[817,221],[816,222],[819,221],[818,223],[815,224],[813,1],[814,225],[809,1],[811,226],[820,227],[821,1],[838,228],[863,229],[864,230],[839,231],[842,231],[861,229],[862,229],[852,229],[851,232],[849,229],[844,229],[857,229],[855,229],[859,229],[843,229],[856,229],[860,229],[845,229],[846,229],[858,229],[840,229],[847,229],[848,229],[850,229],[854,229],[865,233],[853,229],[841,229],[878,234],[877,1],[872,233],[874,235],[873,233],[866,233],[867,233],[869,233],[871,233],[875,235],[876,235],[868,235],[870,235],[437,236],[880,237],[879,86],[444,238],[881,65],[882,1],[883,1],[884,1],[887,239],[886,240],[885,241],[656,242],[655,1],[889,243],[497,1],[905,244],[903,245],[902,246],[893,247],[894,248],[901,249],[895,248],[896,247],[897,247],[898,247],[899,250],[892,251],[900,246],[891,1],[904,252],[906,253],[907,1],[908,254],[909,1],[910,255],[571,256],[528,1],[530,257],[529,258],[534,259],[569,260],[566,261],[568,262],[531,261],[532,263],[536,263],[535,264],[533,265],[567,266],[565,261],[570,267],[563,1],[564,1],[537,268],[542,261],[544,261],[539,261],[540,268],[546,261],[547,269],[538,261],[543,261],[545,261],[541,261],[561,270],[560,261],[562,271],[556,261],[558,261],[557,261],[553,261],[559,272],[554,261],[555,273],[548,261],[549,261],[550,261],[551,261],[552,261],[527,1],[890,1],[271,1],[80,1],[810,1],[773,274],[769,1],[770,1],[768,1],[771,1],[772,1],[774,1],[766,1],[767,275],[775,276],[657,277],[191,1],[519,278],[833,279],[834,280],[832,281],[835,282],[829,283],[830,284],[831,285],[825,283],[826,283],[828,286],[827,283],[824,287],[99,288],[167,289],[166,290],[165,291],[104,292],[120,293],[118,294],[119,295],[105,296],[190,297],[90,1],[94,1],[92,298],[93,1],[97,299],[100,1],[117,300],[95,1],[112,301],[98,302],[113,303],[116,304],[114,304],[111,305],[91,1],[96,1],[115,306],[121,307],[109,1],[103,308],[101,309],[110,310],[107,311],[106,311],[102,312],[108,313],[186,314],[180,315],[173,316],[172,317],[181,318],[182,304],[174,319],[187,320],[168,321],[169,322],[170,323],[189,324],[171,317],[175,320],[176,325],[183,326],[184,302],[185,325],[188,304],[177,323],[122,327],[178,328],[179,329],[164,330],[162,331],[163,331],[126,331],[127,331],[128,331],[129,331],[130,331],[131,331],[132,331],[133,331],[134,331],[154,331],[135,331],[136,331],[137,331],[138,331],[139,331],[140,331],[161,331],[141,331],[142,331],[143,331],[144,331],[159,331],[145,331],[160,331],[146,331],[157,331],[158,331],[147,331],[148,331],[149,331],[155,331],[156,331],[150,331],[151,331],[152,331],[153,331],[125,332],[124,333],[123,334],[89,1],[258,1],[517,335],[518,336],[823,1],[658,337],[701,338],[700,339],[699,340],[702,1],[778,341],[777,1],[781,342],[779,343],[654,344],[780,345],[703,346],[776,347],[765,348],[705,349],[706,349],[707,349],[708,349],[709,349],[762,349],[710,349],[711,349],[712,349],[713,349],[714,349],[715,349],[716,349],[717,349],[761,349],[718,349],[719,349],[720,349],[721,349],[722,349],[723,349],[724,349],[725,349],[726,349],[727,349],[728,349],[729,349],[764,349],[730,349],[731,349],[732,349],[733,349],[734,349],[735,349],[736,349],[737,349],[738,349],[739,349],[740,349],[741,349],[763,349],[742,349],[743,349],[744,349],[745,349],[746,349],[747,349],[748,349],[749,349],[750,349],[751,349],[752,349],[753,349],[754,349],[755,349],[756,349],[757,349],[758,349],[759,349],[760,349],[704,350],[697,351],[698,352],[822,353],[798,354],[795,111],[797,355],[796,1],[801,1],[802,356],[516,357],[837,358],[836,359],[573,360],[572,361],[526,362],[888,1],[574,1],[806,219],[79,1],[689,363],[675,364],[686,365],[659,1],[677,366],[676,1],[678,367],[684,368],[683,1],[660,1],[681,1],[682,1],[668,369],[663,1],[662,370],[661,1],[670,1],[687,371],[666,369],[669,1],[674,1],[667,369],[664,370],[665,1],[671,370],[672,370],[685,1],[680,1],[688,1],[679,1],[690,1],[673,1],[691,372],[692,372],[696,373],[693,374],[694,375],[695,374],[77,1],[78,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[8,1],[52,1],[49,1],[50,1],[51,1],[53,1],[9,1],[54,1],[55,1],[56,1],[58,1],[57,1],[59,1],[60,1],[10,1],[61,1],[62,1],[63,1],[11,1],[64,1],[65,1],[66,1],[67,1],[68,1],[1,1],[69,1],[70,1],[12,1],[74,1],[72,1],[76,1],[71,1],[75,1],[73,1],[575,376],[84,377],[85,378],[88,379],[83,1],[86,377],[87,377],[82,1]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/adaptors/pg.d.ts b/grafast/dataplan-pg/dist/adaptors/pg.d.ts new file mode 100644 index 0000000000..3816075124 --- /dev/null +++ b/grafast/dataplan-pg/dist/adaptors/pg.d.ts @@ -0,0 +1,110 @@ +/** + * This is an adaptor for the `pg` module. + */ +import "../interfaces.js"; +import type { GrafastSubscriber, PromiseOrDirect } from "grafast"; +import type { Pool, PoolClient, PoolConfig } from "pg"; +import type { PgClient, WithPgClient } from "../executor.js"; +import type { MakePgServiceOptions } from "../interfaces.js"; +declare global { + namespace Grafast { + interface Context { + pgSettings: Record | null; + withPgClient: WithPgClient; + pgSubscriber: PgSubscriber | null; + } + } + namespace GraphileConfig { + interface PgAdaptors { + "@dataplan/pg/adaptors/pg": { + adaptorSettings: PgAdaptorSettings | undefined; + makePgServiceOptions: PgAdaptorMakePgServiceOptions; + client: NodePostgresPgClient; + }; + } + } +} +declare const $$isSetup: unique symbol; +export interface NodePostgresPgClient extends PgClient { + rawClient: PoolClient; +} +declare const $$queue: unique symbol; +declare module "pg" { + interface PoolClient { + [$$queue]?: Promise | null; + [$$isSetup]?: true; + } +} +/** + * Returns a `withPgClient` for the given `Pool` instance. + */ +export declare function makePgAdaptorWithPgClient(pool: Pool, release?: () => PromiseOrDirect): WithPgClient; +/** + * Returns a `withPgClient` for the given `PoolClient` instance. ONLY + * SUITABLE FOR TESTS! + * + */ +export declare function makeWithPgClientViaPgClientAlreadyInTransaction(pgClient: PoolClient, alreadyInTransaction?: boolean): WithPgClient; +export interface PgAdaptorSettings extends CommonPgAdaptorAndServiceSettings { + /** ONLY FOR USE IN TESTS! */ + poolClient?: PoolClient; + /** ONLY FOR USE IN TESTS! */ + poolClientIsInTransaction?: boolean; + /** ONLY FOR USE IN TESTS! */ + superuserPoolClient?: PoolClient; + /** ONLY FOR USE IN TESTS! */ + superuserPoolClientIsInTransaction?: boolean; +} +interface CommonPgAdaptorAndServiceSettings { + pool?: Pool; + poolConfig?: Omit; + connectionString?: string; + /** For installing the watch fixtures */ + superuserPool?: Pool; + /** For installing the watch fixtures */ + superuserPoolConfig?: Omit; + /** For installing the watch fixtures */ + superuserConnectionString?: string; +} +/** @deprecated Use PgAdaptorSettings instead. */ +export type PgAdaptorOptions = PgAdaptorSettings; +export declare function createWithPgClient(options?: PgAdaptorSettings, variant?: "SUPERUSER" | string | null): WithPgClient; +/** + * This class provides helpers for Postgres' LISTEN/NOTIFY pub/sub + * implementation. We aggregate all LISTEN/NOTIFY events so that we can supply + * them all via a single pgClient. We grab and release this client from/to the + * pool automatically. If the Postgres connection is interrupted then we'll + * automatically reconnect and re-establish the LISTENs, however _events can be + * lost_ when this happens, so you should be careful that Postgres connections + * will not be prematurely terminated in general. + */ +export declare class PgSubscriber implements GrafastSubscriber { + private pool; + private topics; + private eventEmitter; + private alive; + constructor(pool: Pool); + private recordNotification; + subscribe(topic: TTopic): AsyncIterableIterator; + private listen; + private unlisten; + private subscribedTopics; + private sync; + private syncWithClient; + private resetClient; + private listeningClient; + private listeningClientPromise; + private getClient; + release(): void; + private promise; + private chain; +} +export interface PgAdaptorMakePgServiceOptions extends MakePgServiceOptions, CommonPgAdaptorAndServiceSettings { +} +export declare function makePgService(options: PgAdaptorMakePgServiceOptions): GraphileConfig.PgServiceConfiguration<"@dataplan/pg/adaptors/pg">; +export {}; +//# sourceMappingURL=pg.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/adaptors/pg.d.ts.map b/grafast/dataplan-pg/dist/adaptors/pg.d.ts.map new file mode 100644 index 0000000000..8853a899e1 --- /dev/null +++ b/grafast/dataplan-pg/dist/adaptors/pg.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/adaptors/pg.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/adaptors/pg.js b/grafast/dataplan-pg/dist/adaptors/pg.js new file mode 100644 index 0000000000..f4b33d0a68 --- /dev/null +++ b/grafast/dataplan-pg/dist/adaptors/pg.js @@ -0,0 +1,634 @@ +"use strict"; +/** + * This is an adaptor for the `pg` module. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgSubscriber = void 0; +exports.makePgAdaptorWithPgClient = makePgAdaptorWithPgClient; +exports.makeWithPgClientViaPgClientAlreadyInTransaction = makeWithPgClientViaPgClientAlreadyInTransaction; +exports.createWithPgClient = createWithPgClient; +exports.makePgService = makePgService; +const tslib_1 = require("tslib"); +// IMPORTANT: This file should only be available via direct (path) import, it should not be included in the main package exports. +require("../interfaces.js"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const eventemitter3_1 = tslib_1.__importDefault(require("eventemitter3")); +const grafast_1 = require("grafast"); +const pg = tslib_1.__importStar(require("pg")); +const PgPool = pg.Pool ?? pg.default?.Pool; +// Set `DATAPLAN_PG_PREPARED_STATEMENT_CACHE_SIZE=0` to disable prepared statements +const cacheSizeFromEnv = process.env.DATAPLAN_PG_PREPARED_STATEMENT_CACHE_SIZE + ? parseInt(process.env.DATAPLAN_PG_PREPARED_STATEMENT_CACHE_SIZE, 10) + : null; +/** + * If 0, prepared statements are disabled. Otherwise how many prepared + * statements should we keep around at any one time? + */ +const PREPARED_STATEMENT_CACHE_SIZE = !!cacheSizeFromEnv || cacheSizeFromEnv === 0 ? cacheSizeFromEnv : 100; +const $$isSetup = Symbol("isConfiguredForDataplanPg"); +/** + * \> JIT compilation is beneficial primarily for long-running CPU-bound + * \> queries. Frequently these will be analytical queries. For short + * \> queries the added overhead of performing JIT compilation will + * \> often be higher than the time it can save. + * -- https://www.postgresql.org/docs/14/jit-decision.html + * + * `@dataplan/pg` is designed for extremely fast queries, but sometimes + * user code can make Postgres think the cost of the query is going to + * be very high (this is especially the case when lots of "computed + * column functions" are used), and thus enables JIT. In testing we've + * seen queries that would take 50ms with `jit=off` take 8200ms with + * jit on. As such we've made the decision to disable jit for all + * queries. + * + * If you don't agree with our decision, disable this by setting the + * environmental variable `DATAPLAN_PG_DONT_DISABLE_JIT=1`. + */ +const DONT_DISABLE_JIT = process.env.DATAPLAN_PG_DONT_DISABLE_JIT === "1"; +function newNodePostgresPgClient(pgClient, txLevel, alwaysQueue, alreadyInTransaction) { + let queue = null; + const addToQueue = (callback) => { + const result = queue ? queue.then(callback) : callback(); + const clearIfSame = () => { + // Clear queue unless it has moved on + if (queue === newQueue) { + queue = null; + } + }; + const newQueue = result.then(clearIfSame, clearIfSame); + queue = newQueue; + return result; + }; + return { + rawClient: pgClient, + withTransaction(callback) { + // Transactions always queue; creating queue if need be + return addToQueue(async () => { + if (txLevel === 0 && !alreadyInTransaction) { + await pgClient.query({ text: "begin" }); + } + else { + await pgClient.query({ + text: `savepoint tx${txLevel === 0 ? "" : txLevel}`, + }); + } + try { + const newClient = newNodePostgresPgClient(pgClient, txLevel + 1, alwaysQueue, alreadyInTransaction); + const innerResult = await callback(newClient); + if (txLevel === 0 && !alreadyInTransaction) { + await pgClient.query({ text: "commit" }); + } + else { + await pgClient.query({ + text: `release savepoint tx${txLevel === 0 ? "" : txLevel}`, + }); + } + return innerResult; + } + catch (e) { + try { + if (txLevel === 0 && !alreadyInTransaction) { + await pgClient.query({ text: "rollback" }); + } + else { + await pgClient.query({ + text: `rollback to savepoint tx${txLevel === 0 ? "" : txLevel}`, + }); + } + } + catch (e2) { + console.error(`Error occurred whilst rolling back: ${e}`); + } + throw e; + } + }); + }, + query(opts) { + // Queries only need to queue if there's a queue already + if (queue || alwaysQueue) { + return addToQueue(doIt); + } + else { + return doIt(); + } + function doIt() { + const { text, name, values, arrayMode } = opts; + const queryObj = arrayMode + ? { + text, + values, + rowMode: "array", + } + : { + text, + values, + }; + if (PREPARED_STATEMENT_CACHE_SIZE > 0 && name != null) { + // Hacking into pgClient internals - this is dangerous, but it's the only way I know to get a prepared statement LRU + const connection = pgClient.connection; + if (connection && connection.parsedStatements) { + if (!connection._graphilePreparedStatementCache) { + connection._graphilePreparedStatementCache = new lru_1.default({ + maxLength: PREPARED_STATEMENT_CACHE_SIZE, + dispose(key) { + if (connection.parsedStatements[key]) { + pgClient + .query(`deallocate ${pgClient.escapeIdentifier(key)}`) + .then(() => { + delete connection.parsedStatements[key]; + }) + .catch((e) => { + // eslint-disable-next-line no-console + console.error("Error releasing prepared query", e); + }); + } + }, + }); + } + if (!connection._graphilePreparedStatementCache.get(name)) { + // We're relying on dispose to clear out the old ones. + connection._graphilePreparedStatementCache.set(name, true); + } + queryObj.name = name; + } + } + return pgClient.query(queryObj); + } + }, + }; +} +const $$queue = Symbol("tag"); +async function makeNodePostgresWithPgClient_inner(pgClient, pgSettings, callback, alwaysQueue, alreadyInTransaction) { + /** Transaction level; 0 = no transaction; 1 = begin; 2,... = savepoint */ + const pgSettingsEntries = []; + if (pgSettings != null) { + for (const [key, value] of Object.entries(pgSettings)) { + if (value == null) + continue; + pgSettingsEntries.push([key, "" + value]); + } + } + // PERF: under what situations is this actually required? We added it to + // force test queries that were sharing the same client to run in series + // rather than parallel (probably for the filter plugin test suite?) but it + // adds a tiny bit of overhead and most likely is only needed for people + // using makeWithPgClientViaPgClientAlreadyInTransaction. + while (pgClient[$$queue]) { + await pgClient[$$queue]; + } + return (pgClient[$$queue] = (async () => { + try { + // If there's pgSettings; create a transaction and set them, otherwise no transaction needed + if (pgSettingsEntries.length > 0) { + await pgClient.query({ + text: alreadyInTransaction ? "savepoint tx" : "begin", + }); + try { + await pgClient.query({ + text: "select set_config(el->>0, el->>1, true) from json_array_elements($1::json) el", + values: [JSON.stringify(pgSettingsEntries)], + }); + const client = newNodePostgresPgClient(pgClient, 1, alwaysQueue, alreadyInTransaction); + const result = await callback(client); + await pgClient.query({ + text: alreadyInTransaction ? "release savepoint tx" : "commit", + }); + return result; + } + catch (e) { + await pgClient.query({ + text: alreadyInTransaction + ? "rollback to savepoint tx" + : "rollback", + }); + throw e; + } + } + else { + const client = newNodePostgresPgClient(pgClient, 0, alwaysQueue, alreadyInTransaction); + return await callback(client); + } + } + finally { + pgClient[$$queue] = null; + } + })()); +} +/** + * Returns a `withPgClient` for the given `Pool` instance. + */ +function makePgAdaptorWithPgClient(pool, release = () => { }) { + const withPgClient = async (pgSettings, callback) => { + const pgClient = await pool.connect(); + if (!pgClient[$$isSetup]) { + pgClient[$$isSetup] = true; + if (!DONT_DISABLE_JIT) { + // We don't actually disable JIT, it's the optimization that's expensive so we disable that. + pgClient.query("set jit_optimize_above_cost = -1;").catch((e) => { + console.error(`Error occurred applying @dataplan/pg global Postgres settings: ${e}`); + }); + } + } + try { + return await makeNodePostgresWithPgClient_inner(pgClient, pgSettings, callback, false, false); + } + finally { + // NOTE: have decided not to `RESET ALL` here; otherwise timezone,jit,etc will reset + pgClient.release(); + } + }; + let released = false; + const releaseOnce = () => { + if (released) { + throw new Error("Release called twice on the same withPgClient"); + } + else { + released = true; + release(); + } + }; + withPgClient.release = releaseOnce; + return withPgClient; +} +/** + * Returns a `withPgClient` for the given `PoolClient` instance. ONLY + * SUITABLE FOR TESTS! + * + */ +function makeWithPgClientViaPgClientAlreadyInTransaction(pgClient, alreadyInTransaction = false) { + const release = () => { }; + const withPgClient = async (pgSettings, callback) => { + return makeNodePostgresWithPgClient_inner(pgClient, pgSettings, callback, + // Ensure only one withPgClient can run at a time, since we only have on pgClient. + true, alreadyInTransaction); + }; + let released = false; + const releaseOnce = () => { + if (released) { + throw new Error("Release called twice on the same withPgClient"); + } + else { + released = true; + release(); + } + }; + withPgClient.release = releaseOnce; + return withPgClient; +} +function createWithPgClient(options = Object.create(null), variant) { + if (variant === "SUPERUSER") { + if (options.superuserPool) { + return makePgAdaptorWithPgClient(options.superuserPool); + } + else if (options.superuserPoolClient) { + return makeWithPgClientViaPgClientAlreadyInTransaction(options.superuserPoolClient, options.superuserPoolClientIsInTransaction); + } + else if (options.superuserConnectionString) { + const pool = new PgPool({ + ...options.superuserPoolConfig, + connectionString: options.superuserConnectionString, + }); + const release = () => pool.end(); + return makePgAdaptorWithPgClient(pool, release); + } + // Otherwise, fall through to default handling + } + if (options.pool != null) { + return makePgAdaptorWithPgClient(options.pool); + } + else if (options.poolClient) { + return makeWithPgClientViaPgClientAlreadyInTransaction(options.poolClient, options.poolClientIsInTransaction); + } + else { + const pool = new PgPool({ + ...options.poolConfig, + connectionString: options.connectionString, + }); + const release = () => pool.end(); + return makePgAdaptorWithPgClient(pool, release); + } +} +// This is here as a TypeScript assertion, to ensure we conform to PgAdaptor +const adaptor = { + createWithPgClient, + makePgService, +}; +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); +/** + * This class provides helpers for Postgres' LISTEN/NOTIFY pub/sub + * implementation. We aggregate all LISTEN/NOTIFY events so that we can supply + * them all via a single pgClient. We grab and release this client from/to the + * pool automatically. If the Postgres connection is interrupted then we'll + * automatically reconnect and re-establish the LISTENs, however _events can be + * lost_ when this happens, so you should be careful that Postgres connections + * will not be prematurely terminated in general. + */ +class PgSubscriber { + constructor(pool) { + this.pool = pool; + this.topics = {}; + this.eventEmitter = new eventemitter3_1.default(); + this.alive = true; + this.recordNotification = (notification) => { + this.eventEmitter.emit(notification.channel, notification.payload); + }; + this.subscribedTopics = new Set(); + this.listeningClient = null; + this.listeningClientPromise = null; + // Avoid race conditions by chaining everything + this.promise = Promise.resolve(); + } + subscribe(topic) { + if (!this.alive) { + throw new Error("This PgSubscriber has been released."); + } + // eslint-disable-next-line @typescript-eslint/no-this-alias + const that = this; + const { eventEmitter, topics } = this; + const stack = []; + const queue = []; + let finished = false; + function doFinally(value) { + if (!finished) { + finished = { done: true, value }; + if (queue) { + const promises = queue.splice(0, queue.length); + promises.forEach((p) => p.resolve(finished)); + } + eventEmitter.removeListener(topic, recv); + // Every code path above this has to go through a `yield` and thus + // `asyncIterableIterator` will definitely be defined. + const idx = topics[topic]?.indexOf(asyncIterableIterator); + if (idx != null && idx >= 0) { + topics[topic].splice(idx, 1); + if (topics[topic].length === 0) { + delete topics[topic]; + that.unlisten(topic); + } + } + } + return finished; + } + const asyncIterableIterator = { + [Symbol.asyncIterator]() { + return this; + }, + async next() { + if (stack.length > 0) { + const value = await stack.shift(); + return { done: false, value }; + } + else if (finished) { + return finished; + } + else { + // This must be done synchronously - there must be **NO AWAIT BEFORE THIS** + const waiting = (0, grafast_1.defer)(); + queue.push(waiting); + const value = await waiting; + return { done: false, value }; + } + }, + async return(value) { + return doFinally(value); + }, + async throw() { + return doFinally(); + }, + }; + function recv(payload) { + if (queue.length > 0) { + const first = queue.shift(); + first.resolve(payload); + } + else { + stack.push(payload); + } + } + eventEmitter.addListener(topic, recv); + if (!topics[topic]) { + topics[topic] = [asyncIterableIterator]; + this.listen(topic); + } + else { + topics[topic].push(asyncIterableIterator); + } + return asyncIterableIterator; + } + listen(_topic) { + this.sync(); + } + unlisten(_topic) { + this.sync(); + } + sync() { + this.chain(async () => { + if (!this.alive) { + return; + } + const client = await this.getClient(); + await this.syncWithClient(client); + }).then(null, () => this.resetClient()); + } + async syncWithClient(client) { + if (!this.alive) { + throw new Error("PgSubscriber released; aborting syncWithClient"); + } + const expectedTopics = Object.keys(this.topics); + const topicsToAdd = expectedTopics.filter((t) => !this.subscribedTopics.has(t)); + const topicsToRemove = [...this.subscribedTopics.values()].filter((t) => !expectedTopics.includes(t)); + for (const topic of topicsToAdd) { + await client.query(`LISTEN ${client.escapeIdentifier(topic)}`); + this.subscribedTopics.add(topic); + } + for (const topic of topicsToRemove) { + await client.query(`UNLISTEN ${client.escapeIdentifier(topic)}`); + this.subscribedTopics.delete(topic); + } + } + resetClient() { + this.chain(() => { + if (!this.alive) { + return; + } + const client = this.listeningClient; + if (client !== null) { + client.off("notification", this.recordNotification); + client.release(); + this.listeningClient = null; + this.subscribedTopics.clear(); + if (this.listeningClientPromise) { + throw new Error("This should not occur (found listeningClientPromise in resetClient)"); + } + if (Object.keys(this.topics).length > 0) { + // Trigger a new client to be fetched and have it sync. + this.getClient().then(null, () => { + // Must be released; ignore + }); + } + } + }); + } + getClient() { + if (!this.alive) { + return Promise.reject(new Error("Released; aborting getClient")); + } + if (this.listeningClient) { + return Promise.resolve(this.listeningClient); + } + else { + if (!this.listeningClientPromise) { + const promise = (async () => { + for (let attempts = 0;; attempts++) { + try { + if (!this.alive) { + return Promise.reject(new Error("PgSubscriber released; aborting getClient")); + } + const logError = (e) => { + console.error(`Error on listening client: ${e}`); + }; + const client = await this.pool.connect(); + try { + client.on("error", logError); + client.on("notification", this.recordNotification); + await this.syncWithClient(client); + // All good; we can return this client finally! + this.listeningClientPromise = null; + this.listeningClient = client; + client.off("error", logError); + client.on("error", (e) => { + logError(e); + this.resetClient(); + }); + return client; + } + catch (e) { + client.off("error", logError); + client.off("notification", this.recordNotification); + client.release(); + throw e; + } + } + catch (e) { + console.error(`Error with listening client during getClient (attempt ${attempts + 1}): ${e}`); + // Exponential back-off (maximum 30 seconds) + await sleep(Math.min(100 * Math.exp(attempts), 30000)); + } + } + })(); + promise.then(null, () => { + /* ignore */ + }); + this.listeningClientPromise = promise; + return promise; + } + else { + return this.listeningClientPromise; + } + } + } + release() { + if (this.alive) { + this.alive = false; + for (const topic of Object.keys(this.topics)) { + for (const asyncIterableIterator of this.topics[topic]) { + if (asyncIterableIterator.return) { + asyncIterableIterator.return(); + } + else if (asyncIterableIterator.throw) { + asyncIterableIterator.throw(new Error("Released")); + } + else { + // What do we do now?! + // TYPES: if instead of using an AsyncIterableIterator we required it was an AsyncGenerator then this problem would go away. + console.error(`Could not return or throw from iterator for topic '${topic}'`); + } + } + delete this.topics[topic]; + } + const unlistenAndRelease = async (client) => { + try { + for (const topic of this.subscribedTopics) { + await client.query(`UNLISTEN ${client.escapeIdentifier(topic)}`); + this.subscribedTopics.delete(topic); + } + } + catch (e) { + // ignore + } + client.release(); + }; + if (this.listeningClient) { + unlistenAndRelease(this.listeningClient); + } + else if (this.listeningClientPromise) { + this.listeningClientPromise.then(unlistenAndRelease, () => { + /* ignore */ + }); + } + } + } + async chain(callback) { + this.promise = this.promise.then(callback, callback); + return this.promise; + } +} +exports.PgSubscriber = PgSubscriber; +function mkpool(name, releasers, poolConfig, connectionString) { + const pool = new PgPool({ ...poolConfig, connectionString }); + releasers.push(() => pool.end()); + // If you pass your own pool, you're responsible for doing this yourself + pool.on("connect", (client) => { + client.on("error", (e) => { + console.error(`Client error (active, ${name})`, e); + }); + }); + pool.on("error", (e) => { + console.error(`Client error (in pool, ${name})`, e); + }); + return pool; +} +function makePgService(options) { + const { name = "main", + // Begin: CommonPgAdaptorAndServiceSettings + pool: rawPool, poolConfig, connectionString, superuserPool: rawSuperuserPool, superuserPoolConfig, superuserConnectionString, + // End: CommonPgAdaptorAndServiceSettings + schemas, withPgClientKey = name === "main" ? "withPgClient" : `${name}_withPgClient`, pgSettingsKey = name === "main" ? "pgSettings" : `${name}_pgSettings`, pgSubscriberKey = name === "main" ? "pgSubscriber" : `${name}_pgSubscriber`, pubsub = true, pgSettings, pgSettingsForIntrospection, } = options; + if (pgSettings !== undefined && typeof pgSettingsKey !== "string") { + throw new Error(`makePgService called with pgSettings but no pgSettingsKey - please indicate where the settings should be stored, e.g. 'pgSettingsKey: "pgSettings"' (must be unique across sources)`); + } + const releasers = []; + const pool = rawPool ?? mkpool("pool", releasers, poolConfig, connectionString); + const superuserPool = rawSuperuserPool ?? + (superuserConnectionString + ? mkpool("superuserPool", releasers, superuserPoolConfig, superuserConnectionString) + : undefined); + let pgSubscriber = options.pgSubscriber ?? null; + if (!pgSubscriber && pubsub) { + pgSubscriber = new PgSubscriber(pool); + releasers.push(() => pgSubscriber.release?.()); + } + const service = { + name, + schemas: Array.isArray(schemas) ? schemas : [schemas ?? "public"], + withPgClientKey: withPgClientKey, + pgSettingsKey: pgSettingsKey, + pgSubscriberKey: pgSubscriberKey, + pgSettings, + pgSettingsForIntrospection, + pgSubscriber, + adaptor, + adaptorSettings: { + pool, + superuserPool, + }, + async release() { + // Release in reverse order + for (const releaser of [...releasers].reverse()) { + await releaser(); + } + }, + }; + return service; +} +//# sourceMappingURL=pg.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/adaptors/pg.js.map b/grafast/dataplan-pg/dist/adaptors/pg.js.map new file mode 100644 index 0000000000..9e8fe93db9 --- /dev/null +++ b/grafast/dataplan-pg/dist/adaptors/pg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/adaptors/pg.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/box.d.ts b/grafast/dataplan-pg/dist/codecUtils/box.d.ts new file mode 100644 index 0000000000..0c40aec357 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/box.d.ts @@ -0,0 +1,23 @@ +export interface PgBox { + a: { + x: number; + y: number; + }; + b: { + x: number; + y: number; + }; +} +/** + * Parses the Postgres box syntax. + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-BOX} + */ +export declare function parseBox(f: string): PgBox; +/** + * Stringifies a box to the Postgres box syntax. + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-BOX} + */ +export declare function stringifyBox(box: PgBox): string; +//# sourceMappingURL=box.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/box.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/box.d.ts.map new file mode 100644 index 0000000000..e9dde90d28 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/box.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../src/codecUtils/box.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAczC;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,KAAK,GAAG,MAAM,CAE/C"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/box.js b/grafast/dataplan-pg/dist/codecUtils/box.js new file mode 100644 index 0000000000..dfb1ce4494 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/box.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseBox = parseBox; +exports.stringifyBox = stringifyBox; +const grafast_1 = require("grafast"); +/** + * Parses the Postgres box syntax. + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-BOX} + */ +function parseBox(f) { + if (f[0] === "(" && f[f.length - 1] === ")") { + const [x1, y1, x2, y2] = f + .slice(1, f.length - 1) + .replace(/[()]/g, "") + .split(",") + .map((f) => parseFloat(f)); + return { + a: { x: x1, y: y1 }, + b: { x: x2, y: y2 }, + }; + } + else { + throw new grafast_1.SafeError(`Failed to parse box ${f}`); + } +} +/** + * Stringifies a box to the Postgres box syntax. + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-BOX} + */ +function stringifyBox(box) { + return `${box.a.x},${box.a.y},${box.b.x},${box.b.y}`; +} +//# sourceMappingURL=box.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/box.js.map b/grafast/dataplan-pg/dist/codecUtils/box.js.map new file mode 100644 index 0000000000..03d283ca57 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/box.js.map @@ -0,0 +1 @@ +{"version":3,"file":"box.js","sourceRoot":"","sources":["../../src/codecUtils/box.ts"],"names":[],"mappings":";;AAYA,4BAcC;AAOD,oCAEC;AAnCD,qCAAoC;AAOpC;;;;GAIG;AACH,SAAgB,QAAQ,CAAC,CAAS;IAChC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;aACvB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACtB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO;YACL,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;YACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;SACpB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,mBAAS,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,GAAU;IACrC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvD,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/circle.d.ts b/grafast/dataplan-pg/dist/codecUtils/circle.d.ts new file mode 100644 index 0000000000..a81637acc1 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/circle.d.ts @@ -0,0 +1,18 @@ +import type { PgPoint } from "./point.js"; +export interface PgCircle { + center: PgPoint; + radius: number; +} +/** + * Parses the Postgres circle syntax + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9} + */ +export declare function parseCircle(f: string): PgCircle; +/** + * Stringifies to the Postgres circle syntax + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9} + */ +export declare function stringifyCircle(circle: PgCircle): string; +//# sourceMappingURL=circle.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/circle.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/circle.d.ts.map new file mode 100644 index 0000000000..0553f3c663 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/circle.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"circle.d.ts","sourceRoot":"","sources":["../../src/codecUtils/circle.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAc/C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAExD"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/circle.js b/grafast/dataplan-pg/dist/codecUtils/circle.js new file mode 100644 index 0000000000..48bdbbad5e --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/circle.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseCircle = parseCircle; +exports.stringifyCircle = stringifyCircle; +const grafast_1 = require("grafast"); +const point_js_1 = require("./point.js"); +/** + * Parses the Postgres circle syntax + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9} + */ +function parseCircle(f) { + if (f[0] === "<" && f[f.length - 1] === ">") { + const [x, y, r] = f + .slice(1, f.length - 1) + .replace(/[()]/g, "") + .split(",") + .map((f) => parseFloat(f)); + return { + center: { x, y }, + radius: r, + }; + } + else { + throw new grafast_1.SafeError(`Failed to parse circle ${f}`); + } +} +/** + * Stringifies to the Postgres circle syntax + * + * @see {@link https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9} + */ +function stringifyCircle(circle) { + return `<${(0, point_js_1.stringifyPoint)(circle.center)},${circle.radius}>`; +} +//# sourceMappingURL=circle.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/circle.js.map b/grafast/dataplan-pg/dist/codecUtils/circle.js.map new file mode 100644 index 0000000000..c9b2411c55 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/circle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"circle.js","sourceRoot":"","sources":["../../src/codecUtils/circle.ts"],"names":[],"mappings":";;AAeA,kCAcC;AAOD,0CAEC;AAtCD,qCAAoC;AAGpC,yCAA4C;AAO5C;;;;GAIG;AACH,SAAgB,WAAW,CAAC,CAAS;IACnC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;aAChB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACtB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO;YACL,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;YAChB,MAAM,EAAE,CAAC;SACV,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,mBAAS,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAC,MAAgB;IAC9C,OAAO,IAAI,IAAA,yBAAc,EAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAC/D,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/hstore.d.ts b/grafast/dataplan-pg/dist/codecUtils/hstore.d.ts new file mode 100644 index 0000000000..fb60a7e22d --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/hstore.d.ts @@ -0,0 +1,16 @@ +export interface PgHStore { + [key: string]: string | null; +} +/** + * Parses the Postgres HStore syntax + * + * @see {@link https://www.postgresql.org/docs/14/hstore.html#id-1.11.7.25.5} + */ +export declare function parseHstore(hstoreString: string): PgHStore; +/** + * Stringifies to the Postgres HStore syntax + * + * @see {@link https://www.postgresql.org/docs/14/hstore.html#id-1.11.7.25.5} + */ +export declare function stringifyHstore(o: PgHStore | null): string | null; +//# sourceMappingURL=hstore.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/hstore.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/hstore.d.ts.map new file mode 100644 index 0000000000..9d4b17bfce --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/hstore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"hstore.d.ts","sourceRoot":"","sources":["../../src/codecUtils/hstore.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC9B;AAOD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,CAoI1D;AAUD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAiBjE"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/hstore.js b/grafast/dataplan-pg/dist/codecUtils/hstore.js new file mode 100644 index 0000000000..93b711c6bd --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/hstore.js @@ -0,0 +1,192 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseHstore = parseHstore; +exports.stringifyHstore = stringifyHstore; +const grafast_1 = require("grafast"); +// TESTS: need unit tests for this! +// NOTE: I've not tried running this and I was sleep-deprived when I wrote it. +// NOTE: I don't believe this is vulnerable to prototype polution since we do +// `Object.create(null)` and you can only set the value to a string or null. +/** + * Parses the Postgres HStore syntax + * + * @see {@link https://www.postgresql.org/docs/14/hstore.html#id-1.11.7.25.5} + */ +function parseHstore(hstoreString) { + const hstore = Object.create(null); + // Parse via a simple character-wise scanner + let mode = "EXPECT_KEY"; + let key = null; + let value = null; + for (let i = 0, l = hstoreString.length; i < l; i++) { + const char = hstoreString[i]; + switch (mode) { + case "EXPECT_KEY": { + if (/\s/.test(char)) { + continue; + } + else if (char === '"') { + mode = "KEY_QUOTES"; + key = ""; + } + else if (char === "\\") { + mode = "KEY_RAW"; + key = hstoreString[++i]; + } + else { + mode = "KEY_RAW"; + key = char; + } + break; + } + case "KEY_QUOTES": { + if (char === '"') { + mode = "EXPECT_ARROW"; + } + else if (char === "\\") { + key += hstoreString[++i]; + } + else { + key += char; + } + break; + } + case "KEY_RAW": { + if (/\s/.test(char)) { + mode = "EXPECT_ARROW"; + continue; + } + else if (char === "=" && hstoreString[i + 1] === ">") { + ++i; + mode = "EXPECT_VALUE"; + } + else if (char === "\\") { + key += hstoreString[++i]; + } + else { + key += char; + } + break; + } + case "EXPECT_ARROW": { + if (/\s/.test(char)) { + mode = "EXPECT_ARROW"; + continue; + } + else if (char === "=" && hstoreString[i + 1] === ">") { + ++i; + mode = "EXPECT_VALUE"; + } + else { + throw new grafast_1.SafeError("Invalid hstore value - expected '=>'"); + } + break; + } + case "EXPECT_VALUE": { + if (/\s/.test(char)) { + continue; + } + else if (char === '"') { + mode = "VALUE_QUOTES"; + value = ""; + } + else if (char === "\\") { + mode = "VALUE_RAW"; + value = hstoreString[++i]; + } + else { + mode = "VALUE_RAW"; + value = char; + } + break; + } + case "VALUE_QUOTES": { + if (char === '"') { + if (key == null) + throw new grafast_1.SafeError("No key"); + hstore[key] = value; + key = null; + value = null; + mode = "EXPECT_COMMA"; + } + else if (char === "\\") { + value += hstoreString[++i]; + } + else { + value += char; + } + break; + } + case "VALUE_RAW": { + if (char === "," || /\s/.test(char)) { + if (key == null) + throw new grafast_1.SafeError("No key"); + hstore[key] = value === "NULL" ? null : value; + key = null; + value = null; + mode = char === "," ? "EXPECT_KEY" : "EXPECT_COMMA"; + continue; + } + else if (char === "\\") { + value += hstoreString[++i]; + } + else { + value += char; + } + break; + } + case "EXPECT_COMMA": { + if (/\s/.test(char)) { + continue; + } + else if (char === ",") { + mode = "EXPECT_KEY"; + } + else { + throw new grafast_1.SafeError("Invalid hstore value - expected comma"); + } + break; + } + default: { + const never = mode; + throw new grafast_1.SafeError(`Reached invalid mode ${never}`); + } + } + } + if (key != null) { + hstore[key] = mode === "VALUE_RAW" && value === "NULL" ? null : value; + } + return hstore; +} +// To include a double quote or a backslash in a key or value, escape it with a +// backslash. [...] A value (but not a key) can be an SQL NULL. [...] +// Double-quote the NULL to treat it as the ordinary string “NULL”. +// -- https://www.postgresql.org/docs/14/static/hstore.html +function toHstoreString(str) { + return str == null ? "NULL" : '"' + str.replace(/(["\\])/g, "\\$1") + '"'; +} +/** + * Stringifies to the Postgres HStore syntax + * + * @see {@link https://www.postgresql.org/docs/14/hstore.html#id-1.11.7.25.5} + */ +function stringifyHstore(o) { + if (o == null) { + return null; + } + if (typeof o !== "object") { + throw new grafast_1.SafeError("Expected an hstore object"); + } + const keys = Object.keys(o); + const encodeKeyValue = (key) => { + const value = o[key]; + if (value == null) { + return `${toHstoreString(key)} => NULL`; + } + else { + return `${toHstoreString(key)} => ${toHstoreString(String(value))}`; + } + }; + return keys.map(encodeKeyValue).join(", "); +} +//# sourceMappingURL=hstore.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/hstore.js.map b/grafast/dataplan-pg/dist/codecUtils/hstore.js.map new file mode 100644 index 0000000000..5822d54bc7 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/hstore.js.map @@ -0,0 +1 @@ +{"version":3,"file":"hstore.js","sourceRoot":"","sources":["../../src/codecUtils/hstore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/index.d.ts b/grafast/dataplan-pg/dist/codecUtils/index.d.ts new file mode 100644 index 0000000000..b6d35b1dac --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/index.d.ts @@ -0,0 +1,10 @@ +export * from "./box.js"; +export * from "./circle.js"; +export * from "./hstore.js"; +export * from "./interval.js"; +export * from "./line.js"; +export * from "./lseg.js"; +export * from "./path.js"; +export * from "./point.js"; +export * from "./polygon.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/index.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/index.d.ts.map new file mode 100644 index 0000000000..1f9ec48c7c --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codecUtils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/index.js b/grafast/dataplan-pg/dist/codecUtils/index.js new file mode 100644 index 0000000000..a0c5d1dbdc --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/index.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +tslib_1.__exportStar(require("./box.js"), exports); +tslib_1.__exportStar(require("./circle.js"), exports); +tslib_1.__exportStar(require("./hstore.js"), exports); +tslib_1.__exportStar(require("./interval.js"), exports); +tslib_1.__exportStar(require("./line.js"), exports); +tslib_1.__exportStar(require("./lseg.js"), exports); +tslib_1.__exportStar(require("./path.js"), exports); +tslib_1.__exportStar(require("./point.js"), exports); +tslib_1.__exportStar(require("./polygon.js"), exports); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/index.js.map b/grafast/dataplan-pg/dist/codecUtils/index.js.map new file mode 100644 index 0000000000..a29fbf8ba6 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codecUtils/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,sDAA4B;AAC5B,sDAA4B;AAC5B,wDAA8B;AAC9B,oDAA0B;AAC1B,oDAA0B;AAC1B,oDAA0B;AAC1B,qDAA2B;AAC3B,uDAA6B"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/interval.d.ts b/grafast/dataplan-pg/dist/codecUtils/interval.d.ts new file mode 100644 index 0000000000..3851bf1c5f --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/interval.d.ts @@ -0,0 +1,26 @@ +/** + * The representation of an 'interval' from Postgres. All entries are integers + * _except_ `seconds` which is floating point + */ +export interface PgInterval { + years: number; + months: number; + days: number; + hours: number; + minutes: number; + seconds: number; +} +/** + * Parses Postgres' 'interval' syntax. Note we only support + * `intervalstyle = 'postgres'` right now. + * + * @see {@link https://www.postgresql.org/docs/14/datatype-datetime.html#DATATYPE-INTERVAL-OUTPUT} + */ +export declare function parseInterval(interval: string): PgInterval; +/** + * Stringifies to Postgres' 'interval' syntax + * + * @see {@link https://www.postgresql.org/docs/14/datatype-datetime.html#DATATYPE-INTERVAL-INPUT} + */ +export declare function stringifyInterval(interval: PgInterval): string; +//# sourceMappingURL=interval.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/interval.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/interval.d.ts.map new file mode 100644 index 0000000000..58c5502e1e --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/interval.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"interval.d.ts","sourceRoot":"","sources":["../../src/codecUtils/interval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAuBD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAe1D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAgB9D"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/interval.js b/grafast/dataplan-pg/dist/codecUtils/interval.js new file mode 100644 index 0000000000..f291b120e0 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/interval.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseInterval = parseInterval; +exports.stringifyInterval = stringifyInterval; +// Regexp construction enhanced from `postgres-interval`, which is licensed +// under the MIT license and is copyright (c) Ben Drucker +// (bendrucker.me). +const NUMBER = "([+-]?\\d+)"; +const YEAR = `${NUMBER}\\s+years?`; +const MONTH = `${NUMBER}\\s+mons?`; +const DAY = `${NUMBER}\\s+days?`; +// NOTE: PostgreSQL automatically overflows seconds into minutes and minutes +// into hours, so we can rely on minutes and seconds always being 2 digits +// (plus decimal for seconds). The overflow stops at hours - hours do not +// overflow into days, so could be arbitrarily long. +const TIME = "([+-])?(\\d+):(\\d\\d):(\\d\\d(?:\\.\\d{1,6})?)"; +const INTERVAL = new RegExp("^" + + // All parts of an interval are optional + [YEAR, MONTH, DAY, TIME].map((str) => "(?:" + str + ")?").join("\\s*") + + "$"); +/** + * Parses Postgres' 'interval' syntax. Note we only support + * `intervalstyle = 'postgres'` right now. + * + * @see {@link https://www.postgresql.org/docs/14/datatype-datetime.html#DATATYPE-INTERVAL-OUTPUT} + */ +function parseInterval(interval) { + const [, years, months, days, plusMinusTime, hours, minutes, seconds] = INTERVAL.exec(interval || "") || []; + const timeMultiplier = plusMinusTime === "-" ? -1 : 1; + return { + years: years ? parseInt(years, 10) : 0, + months: months ? parseInt(months, 10) : 0, + days: days ? parseInt(days, 10) : 0, + hours: hours ? timeMultiplier * parseInt(hours, 10) : 0, + minutes: minutes ? timeMultiplier * parseInt(minutes, 10) : 0, + // Seconds can be decimal; all other values are integer + seconds: seconds ? timeMultiplier * parseFloat(seconds) : 0, + }; +} +/** + * Stringifies to Postgres' 'interval' syntax + * + * @see {@link https://www.postgresql.org/docs/14/datatype-datetime.html#DATATYPE-INTERVAL-INPUT} + */ +function stringifyInterval(interval) { + const keys = [ + "seconds", + "minutes", + "hours", + "days", + "months", + "years", + ]; + const parts = []; + for (const key of keys) { + if (interval[key]) { + parts.push(`${interval[key]} ${key}`); + } + } + return parts.join(" ") || "0 seconds"; +} +//# sourceMappingURL=interval.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/interval.js.map b/grafast/dataplan-pg/dist/codecUtils/interval.js.map new file mode 100644 index 0000000000..14ba0deeda --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/interval.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interval.js","sourceRoot":"","sources":["../../src/codecUtils/interval.ts"],"names":[],"mappings":";;AAwCA,sCAeC;AAOD,8CAgBC;AAjED,2EAA2E;AAC3E,+EAA+E;AAC/E,mBAAmB;AAEnB,MAAM,MAAM,GAAG,aAAa,CAAC;AAC7B,MAAM,IAAI,GAAG,GAAG,MAAM,YAAY,CAAC;AACnC,MAAM,KAAK,GAAG,GAAG,MAAM,WAAW,CAAC;AACnC,MAAM,GAAG,GAAG,GAAG,MAAM,WAAW,CAAC;AACjC,4EAA4E;AAC5E,0EAA0E;AAC1E,yEAAyE;AACzE,oDAAoD;AACpD,MAAM,IAAI,GAAG,iDAAiD,CAAC;AAE/D,MAAM,QAAQ,GAAG,IAAI,MAAM,CACzB,GAAG;IACD,wCAAwC;IACxC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACtE,GAAG,CACN,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,QAAgB;IAC5C,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GACnE,QAAQ,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAEtC,MAAM,cAAc,GAAG,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,cAAc,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,uDAAuD;QACvD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,QAAoB;IACpD,MAAM,IAAI,GAAG;QACX,SAAS;QACT,SAAS;QACT,OAAO;QACP,MAAM;QACN,QAAQ;QACR,OAAO;KACC,CAAC;IACX,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;AACxC,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/line.d.ts b/grafast/dataplan-pg/dist/codecUtils/line.d.ts new file mode 100644 index 0000000000..59d325cec1 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/line.d.ts @@ -0,0 +1,23 @@ +export interface PgLine { + a: { + x: number; + y: number; + }; + b: { + x: number; + y: number; + }; +} +/** + * Parses the Postgres line syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LINE + */ +export declare function parseLine(f: string): PgLine; +/** + * Stringifies to the Postgres line syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LINE + */ +export declare function stringifyLine(line: PgLine): string; +//# sourceMappingURL=line.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/line.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/line.d.ts.map new file mode 100644 index 0000000000..57736cad2e --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/line.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"line.d.ts","sourceRoot":"","sources":["../../src/codecUtils/line.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/line.js b/grafast/dataplan-pg/dist/codecUtils/line.js new file mode 100644 index 0000000000..ea610e3113 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/line.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseLine = parseLine; +exports.stringifyLine = stringifyLine; +const grafast_1 = require("grafast"); +/** + * Parses the Postgres line syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LINE + */ +function parseLine(f) { + if (f[0] === "{" && f[f.length - 1] === "}") { + const [A, B, C] = f + .slice(1, f.length - 1) + .split(",") + .map((f) => parseFloat(f)); + // Lines have the form Ax + By + C = 0. + // So if y = 0, Ax + C = 0; x = -C/A or if A is 0 then C = 0, x can be anything + // If x = 0, By + C = 0; y = -C/B or if B is 0 then C = 0, y can be anything + return { + a: { x: A === 0 ? 1 : -C / A, y: 0 }, + b: { x: 0, y: B === 0 ? 1 : -C / B }, + }; + } + else { + throw new grafast_1.SafeError(`Failed to parse line ${f}`); + } +} +/** + * Stringifies to the Postgres line syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LINE + */ +function stringifyLine(line) { + return `${line.a.x},${line.a.y},${line.b.x},${line.b.y}`; +} +//# sourceMappingURL=line.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/line.js.map b/grafast/dataplan-pg/dist/codecUtils/line.js.map new file mode 100644 index 0000000000..086a3a400e --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/line.js.map @@ -0,0 +1 @@ +{"version":3,"file":"line.js","sourceRoot":"","sources":["../../src/codecUtils/line.ts"],"names":[],"mappings":";;AAYA,8BAgBC;AAOD,sCAEC;AArCD,qCAAoC;AAOpC;;;;GAIG;AACH,SAAgB,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;aAChB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACtB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,uCAAuC;QACvC,+EAA+E;QAC/E,4EAA4E;QAC5E,OAAO;YACL,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;YACpC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;SACrC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,mBAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/lseg.d.ts b/grafast/dataplan-pg/dist/codecUtils/lseg.d.ts new file mode 100644 index 0000000000..bb8c580aec --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/lseg.d.ts @@ -0,0 +1,23 @@ +export interface PgLseg { + a: { + x: number; + y: number; + }; + b: { + x: number; + y: number; + }; +} +/** + * Parses the Postgres line segment syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LSEG + */ +export declare function parseLseg(f: string): PgLseg; +/** + * Stringifies to the Postgres line segment syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LSEG + */ +export declare function stringifyLseg(lseg: PgLseg): string; +//# sourceMappingURL=lseg.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/lseg.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/lseg.d.ts.map new file mode 100644 index 0000000000..8478803ce4 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/lseg.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"lseg.d.ts","sourceRoot":"","sources":["../../src/codecUtils/lseg.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAc3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/lseg.js b/grafast/dataplan-pg/dist/codecUtils/lseg.js new file mode 100644 index 0000000000..74c672527c --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/lseg.js @@ -0,0 +1,35 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseLseg = parseLseg; +exports.stringifyLseg = stringifyLseg; +const grafast_1 = require("grafast"); +/** + * Parses the Postgres line segment syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LSEG + */ +function parseLseg(f) { + if (f[0] === "[" && f[f.length - 1] === "]") { + const [x1, y1, x2, y2] = f + .slice(1, f.length - 1) + .replace(/[()]/g, "") + .split(",") + .map((f) => parseFloat(f)); + return { + a: { x: x1, y: y1 }, + b: { x: x2, y: y2 }, + }; + } + else { + throw new grafast_1.SafeError(`Failed to parse lseg ${f}`); + } +} +/** + * Stringifies to the Postgres line segment syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#DATATYPE-LSEG + */ +function stringifyLseg(lseg) { + return `${lseg.a.x},${lseg.a.y},${lseg.b.x},${lseg.b.y}`; +} +//# sourceMappingURL=lseg.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/lseg.js.map b/grafast/dataplan-pg/dist/codecUtils/lseg.js.map new file mode 100644 index 0000000000..7fab4e8f64 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/lseg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"lseg.js","sourceRoot":"","sources":["../../src/codecUtils/lseg.ts"],"names":[],"mappings":";;AAYA,8BAcC;AAOD,sCAEC;AAnCD,qCAAoC;AAOpC;;;;GAIG;AACH,SAAgB,SAAS,CAAC,CAAS;IACjC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;aACvB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACtB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO;YACL,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;YACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;SACpB,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,mBAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/path.d.ts b/grafast/dataplan-pg/dist/codecUtils/path.d.ts new file mode 100644 index 0000000000..4e4462b99a --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/path.d.ts @@ -0,0 +1,18 @@ +import type { PgPoint } from "./point.js"; +export interface PgPath { + isOpen: boolean; + points: PgPoint[]; +} +/** + * Parses the Postgres path syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +export declare function parsePath(f: string): PgPath; +/** + * Stringifies to the Postgres path syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +export declare function stringifyPath(path: PgPath): string; +//# sourceMappingURL=path.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/path.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/path.d.ts.map new file mode 100644 index 0000000000..b95a1229a5 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/path.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/codecUtils/path.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CA2B3C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMlD"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/path.js b/grafast/dataplan-pg/dist/codecUtils/path.js new file mode 100644 index 0000000000..eab8f86b93 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/path.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parsePath = parsePath; +exports.stringifyPath = stringifyPath; +const grafast_1 = require("grafast"); +const point_js_1 = require("./point.js"); +/** + * Parses the Postgres path syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +function parsePath(f) { + let isOpen = null; + if (f[0] === "(" && f[f.length - 1] === ")") { + isOpen = false; + } + else if (f[0] === "[" && f[f.length - 1] === "]") { + isOpen = true; + } + if (isOpen !== null) { + const xsAndYs = f + .slice(1, f.length - 1) + .replace(/[()]/g, "") + .split(",") + .map((f) => parseFloat(f)); + if (xsAndYs.length % 2 !== 0) { + throw new grafast_1.SafeError("Invalid path representation"); + } + const points = []; + for (let i = 0, l = xsAndYs.length; i < l; i += 2) { + points.push({ x: xsAndYs[i], y: xsAndYs[i + 1] }); + } + return { + isOpen, + points, + }; + } + else { + throw new grafast_1.SafeError(`Failed to parse path ${f}`); + } +} +/** + * Stringifies to the Postgres path syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +function stringifyPath(path) { + const openParen = path.isOpen ? "[" : "("; + const closeParen = path.isOpen ? "]" : ")"; + return `${openParen}${path.points + .map(point_js_1.stringifyPoint) + .join(",")}${closeParen}`; +} +//# sourceMappingURL=path.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/path.js.map b/grafast/dataplan-pg/dist/codecUtils/path.js.map new file mode 100644 index 0000000000..c723b0ff17 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/path.js.map @@ -0,0 +1 @@ +{"version":3,"file":"path.js","sourceRoot":"","sources":["../../src/codecUtils/path.ts"],"names":[],"mappings":";;AAeA,8BA2BC;AAOD,sCAMC;AAvDD,qCAAoC;AAGpC,yCAA4C;AAO5C;;;;GAIG;AACH,SAAgB,SAAS,CAAC,CAAS;IACjC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,GAAG,KAAK,CAAC;IACjB,CAAC;SAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACnD,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,CAAC;aACd,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACtB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,mBAAS,CAAC,6BAA6B,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO;YACL,MAAM;YACN,MAAM;SACP,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,mBAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,IAAY;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3C,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM;SAC9B,GAAG,CAAC,yBAAc,CAAC;SACnB,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/point.d.ts b/grafast/dataplan-pg/dist/codecUtils/point.d.ts new file mode 100644 index 0000000000..c9dc66fe9a --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/point.d.ts @@ -0,0 +1,17 @@ +export interface PgPoint { + x: number; + y: number; +} +/** + * Parses the Postgres point syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.5 + */ +export declare function parsePoint(f: string): PgPoint; +/** + * Stringifies to the Postgres point syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.5 + */ +export declare function stringifyPoint(point: PgPoint): string; +//# sourceMappingURL=point.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/point.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/point.d.ts.map new file mode 100644 index 0000000000..dcc98c4dd1 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/point.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../src/codecUtils/point.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAU7C;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAErD"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/point.js b/grafast/dataplan-pg/dist/codecUtils/point.js new file mode 100644 index 0000000000..5535f8dc42 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/point.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parsePoint = parsePoint; +exports.stringifyPoint = stringifyPoint; +const grafast_1 = require("grafast"); +/** + * Parses the Postgres point syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.5 + */ +function parsePoint(f) { + if (f[0] === "(" && f[f.length - 1] === ")") { + const [x, y] = f + .slice(1, f.length - 1) + .split(",") + .map((f) => parseFloat(f)); + return { x, y }; + } + else { + throw new grafast_1.SafeError(`Failed to parse point ${f}`); + } +} +/** + * Stringifies to the Postgres point syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.5 + */ +function stringifyPoint(point) { + return `(${point.x},${point.y})`; +} +//# sourceMappingURL=point.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/point.js.map b/grafast/dataplan-pg/dist/codecUtils/point.js.map new file mode 100644 index 0000000000..149905478a --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/point.js.map @@ -0,0 +1 @@ +{"version":3,"file":"point.js","sourceRoot":"","sources":["../../src/codecUtils/point.ts"],"names":[],"mappings":";;AAYA,gCAUC;AAOD,wCAEC;AA/BD,qCAAoC;AAOpC;;;;GAIG;AACH,SAAgB,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;aACb,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aACtB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,mBAAS,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,KAAc;IAC3C,OAAO,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC;AACnC,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/polygon.d.ts b/grafast/dataplan-pg/dist/codecUtils/polygon.d.ts new file mode 100644 index 0000000000..8de7e504a6 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/polygon.d.ts @@ -0,0 +1,17 @@ +import type { PgPoint } from "./point.js"; +export interface PgPolygon { + points: PgPoint[]; +} +/** + * Parses the Postgres polygon syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +export declare function parsePolygon(f: string): PgPolygon; +/** + * Stringifies to the Postgres polygon syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +export declare function stringifyPolygon(polygon: PgPolygon): string; +//# sourceMappingURL=polygon.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/polygon.d.ts.map b/grafast/dataplan-pg/dist/codecUtils/polygon.d.ts.map new file mode 100644 index 0000000000..ee4242a621 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/polygon.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../src/codecUtils/polygon.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAoBjD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,CAE3D"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/polygon.js b/grafast/dataplan-pg/dist/codecUtils/polygon.js new file mode 100644 index 0000000000..43d111bb96 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/polygon.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parsePolygon = parsePolygon; +exports.stringifyPolygon = stringifyPolygon; +const grafast_1 = require("grafast"); +const point_js_1 = require("./point.js"); +/** + * Parses the Postgres polygon syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +function parsePolygon(f) { + if (f[0] === "(" && f[f.length - 1] === ")") { + const xsAndYs = f + //.slice(1, f.length - 1) + .replace(/[()]/g, "") + .split(",") + .map((f) => parseFloat(f)); + if (xsAndYs.length % 2 !== 0) { + throw new grafast_1.SafeError("Invalid polygon representation"); + } + const points = []; + for (let i = 0, l = xsAndYs.length; i < l; i += 2) { + points.push({ x: xsAndYs[i], y: xsAndYs[i + 1] }); + } + return { + points, + }; + } + else { + throw new grafast_1.SafeError(`Failed to parse polygon`); + } +} +/** + * Stringifies to the Postgres polygon syntax. + * + * https://www.postgresql.org/docs/current/datatype-geometric.html#id-1.5.7.16.9 + */ +function stringifyPolygon(polygon) { + return polygon.points.map(point_js_1.stringifyPoint).join(","); +} +//# sourceMappingURL=polygon.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecUtils/polygon.js.map b/grafast/dataplan-pg/dist/codecUtils/polygon.js.map new file mode 100644 index 0000000000..3cb3db3162 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecUtils/polygon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"polygon.js","sourceRoot":"","sources":["../../src/codecUtils/polygon.ts"],"names":[],"mappings":";;AAcA,oCAoBC;AAOD,4CAEC;AA3CD,qCAAoC;AAGpC,yCAA4C;AAM5C;;;;GAIG;AACH,SAAgB,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,CAAC;YACf,yBAAyB;aACxB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,mBAAS,CAAC,gCAAgC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO;YACL,MAAM;SACP,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,mBAAS,CAAC,yBAAyB,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,OAAkB;IACjD,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecs.d.ts b/grafast/dataplan-pg/dist/codecs.d.ts new file mode 100644 index 0000000000..7501765c44 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecs.d.ts @@ -0,0 +1,239 @@ +import type { JSONValue } from "grafast"; +import type { SQL } from "pg-sql2"; +import type { PgBox, PgCircle, PgHStore, PgInterval, PgLine, PgLseg, PgPath, PgPoint, PgPolygon } from "./codecUtils/index.js"; +import type { PgExecutor } from "./executor.js"; +import type { PgCodec, PgCodecExtensions, PgCodecPolymorphism, PgEnumCodec, PgEnumValue } from "./interfaces.js"; +export type PgCodecAttributeViaExplicit = { + relation: string; + attribute: string; +}; +export type PgCodecAttributeVia = string | PgCodecAttributeViaExplicit; +/** @deprecated Use DataplanPg.PgCodecAttributeExtensions instead */ +export type PgCodecAttributeExtensions = DataplanPg.PgCodecAttributeExtensions; +export interface PgCodecAttribute { + /** + * How to translate to/from PG and how to cast. + */ + codec: TCodec; + /** + * Is the column/attribute guaranteed to not be null? + */ + notNull: TNotNull; + hasDefault?: boolean; + /** + * The SQL expression for a derivative attributes, e.g.: + * + * ```js + * expression: (alias) => sql`${alias}.first_name || ' ' || ${alias}.last_name` + * ``` + */ + expression?: (alias: SQL) => SQL; + /** + * If this attribute actually exists on a relation rather than locally, the name + * of the (unique) relation this attribute belongs to. + */ + via?: PgCodecAttributeVia; + /** + * If the attribute exists identically on a relation and locally (e.g. + * `posts.author_id` and `users.id` have exactly the same value due to a + * foreign key reference) then the plans can choose which one to grab. + * + * @remarks + * + * ``` + * create table users (id serial primary key); + * create table posts (id serial primary key, author_id int references users); + * create table comments (id serial primary key, user_id int references users); + * create table pets (id serial primary key, owner_id int references users); + * ``` + * + * Here: + * - posts.author_id *identical via* 'author.id' + * - comments.user_id *identical via* 'user.id' + * - pets.owner_id *identical via* 'owner.id' + * + * Note however that `users.id` is not *identical via* anything, because + * these are all plural relationships. So identicalVia is generally one-way + * (except in 1-to-1 relationships). + */ + identicalVia?: PgCodecAttributeVia; + /** + * Set this true if you're using column-level select privileges and there are + * roles accessible that do not have permission to select it. This will tell + * us not to auto-select it to more efficiently resolve row nullability + * questions - we'll only try when the user explicitly tells us to. + */ + restrictedAccess?: boolean; + description?: string; + extensions?: Partial; +} +export type PgCodecAttributes = TCodecMap; +export type ObjectFromPgCodecAttributes = { + [attributeName in keyof TAttributes]: TAttributes[attributeName] extends PgCodecAttribute ? UCodec extends PgCodec ? UNonNull extends true ? Exclude : UFromJs | null : never : never; +}; +export type PgRecordTypeCodecSpec = { + name: TName; + executor: PgExecutor; + identifier: SQL; + attributes: TAttributes; + polymorphism?: PgCodecPolymorphism; + description?: string; + extensions?: Partial; + isAnonymous?: boolean; +}; +/** + * Returns a PgCodec that represents a composite type (a type with + * attributes). + * + * name - the name of this type + * identifier - a pg-sql2 fragment that uniquely identifies this type, suitable to be fed after `::` into an SQL query. + * attributes - the attributes this composite type has + * extensions - an optional object that you can use to associate arbitrary data with this type + * isAnonymous - if true, this represents an "anonymous" type, typically the return value of a function or something like that. If this is true, then name and identifier are ignored. + */ +export declare function recordCodec(config: PgRecordTypeCodecSpec): PgCodec, undefined, undefined, undefined>; +export type PgEnumCodecSpec = { + name: TName; + identifier: SQL; + values: Array | TValue>; + description?: string; + extensions?: Partial; +}; +/** + * Returns a PgCodec that represents a Postgres enum type. + * + * - name - the name of the enum + * - identifier - a pg-sql2 fragment that uniquely identifies this type, suitable to be fed after `::` into an SQL query. + * - values - a list of the values that this enum can represent + * - extensions - an optional object that you can use to associate arbitrary data with this type + */ +export declare function enumCodec(config: PgEnumCodecSpec): PgEnumCodec; +export declare function isEnumCodec(t: PgCodec): t is PgEnumCodec; +type PgCodecTFromJavaScript> = TInnerCodec extends PgCodec ? UFromJs : any; +/** + * Given a PgCodec, this returns a new PgCodec that represents a list + * of the former. + * + * List codecs CANNOT BE NESTED - Postgres array types don't have defined + * dimensionality, so an array of an array of a type doesn't really make sense + * to Postgres, it being the same as an array of the type. + * + * @param innerCodec - the codec that represents the "inner type" of the array + * @param extensions - an optional object that you can use to associate arbitrary data with this type + * @param typeDelim - the delimeter used to separate entries in this list when Postgres stringifies it + * @param identifier - a pg-sql2 fragment that represents the name of this type + */ +export declare function listOfCodec, TName extends string = `${TInnerCodec extends PgCodec ? UName : never}[]`>(listedCodec: TInnerCodec, config?: { + description?: string; + extensions?: Partial; + typeDelim?: string; + identifier?: SQL; + name?: TName; +}): PgCodec[], TInnerCodec, undefined, undefined>; +/** + * Represents a PostgreSQL `DOMAIN` over the given codec + * + * @param innerCodec - the codec that represents the "inner type" of the domain + * @param name - the name of the domain + * @param identifier - a pg-sql2 fragment that represents the name of this type + * @param config - extra details about this domain + */ +export declare function domainOfCodec>(innerCodec: TInnerCodec, name: TName, identifier: SQL, config?: { + description?: string; + extensions?: Partial; + notNull?: boolean | null; +}): PgCodec ? U : any, TInnerCodec extends PgCodec ? U : any, undefined, TInnerCodec, undefined>; +interface PgRange { + start: { + value: T; + inclusive: boolean; + } | null; + end: { + value: T; + inclusive: boolean; + } | null; +} +/** + * Returns a PgCodec that represents a range of the given inner PgCodec + * type. + * + * @param innerCodec - the PgCodec that represents the bounds of this range + * @param name - the name of the range + * @param identifier - a pg-sql2 fragment that represents the name of this type + * @param config - extra details about this range + */ +export declare function rangeOfCodec>(innerCodec: TInnerCodec, name: TName, identifier: SQL, config?: { + description?: string; + extensions?: Partial; +}): PgCodec, undefined, undefined, TInnerCodec>; +/** + * Built in PostgreSQL types that we support; note the keys are the "ergonomic" + * names (like 'bigint'), but the values use the underlying PostgreSQL true + * names (those that would be found in the `pg_type` table). + */ +export declare const TYPES: { + readonly void: PgCodec<"void", undefined, string, void, undefined, undefined, undefined>; + readonly boolean: PgCodec<"bool", undefined, string, boolean, undefined, undefined, undefined>; + readonly int2: PgCodec<"int2", undefined, string, number, undefined, undefined, undefined>; + readonly int: PgCodec<"int4", undefined, string, number, undefined, undefined, undefined>; + readonly bigint: PgCodec<"int8", undefined, string, string, undefined, undefined, undefined>; + readonly float4: PgCodec<"float4", undefined, string, number, undefined, undefined, undefined>; + readonly float: PgCodec<"float8", undefined, string, number, undefined, undefined, undefined>; + readonly money: PgCodec<"money", undefined, string, string, undefined, undefined, undefined>; + readonly numeric: PgCodec<"numeric", undefined, string, string, undefined, undefined, undefined>; + readonly char: PgCodec<"char", undefined, string, string, undefined, undefined, undefined>; + readonly bpchar: PgCodec<"bpchar", undefined, string, string, undefined, undefined, undefined>; + readonly varchar: PgCodec<"varchar", undefined, string, string, undefined, undefined, undefined>; + readonly text: PgCodec<"text", undefined, string, string, undefined, undefined, undefined>; + readonly name: PgCodec<"name", undefined, string, string, undefined, undefined, undefined>; + readonly json: PgCodec<"json", undefined, string, JSONValue, undefined, undefined, undefined>; + readonly jsonb: PgCodec<"jsonb", undefined, string, JSONValue, undefined, undefined, undefined>; + readonly xml: PgCodec<"xml", undefined, string, string, undefined, undefined, undefined>; + readonly citext: PgCodec<"citext", undefined, string, string, undefined, undefined, undefined>; + readonly uuid: PgCodec<"uuid", undefined, string, string, undefined, undefined, undefined>; + readonly timestamp: PgCodec<"timestamp", undefined, string, string, undefined, undefined, undefined>; + readonly timestamptz: PgCodec<"timestamptz", undefined, string, string, undefined, undefined, undefined>; + readonly date: PgCodec<"date", undefined, string, string, undefined, undefined, undefined>; + readonly time: PgCodec<"time", undefined, string, string, undefined, undefined, undefined>; + readonly timetz: PgCodec<"timetz", undefined, string, string, undefined, undefined, undefined>; + readonly inet: PgCodec<"inet", undefined, string, string, undefined, undefined, undefined>; + readonly regproc: PgCodec<"regproc", undefined, string, string, undefined, undefined, undefined>; + readonly regprocedure: PgCodec<"regprocedure", undefined, string, string, undefined, undefined, undefined>; + readonly regoper: PgCodec<"regoper", undefined, string, string, undefined, undefined, undefined>; + readonly regoperator: PgCodec<"regoperator", undefined, string, string, undefined, undefined, undefined>; + readonly regclass: PgCodec<"regclass", undefined, string, string, undefined, undefined, undefined>; + readonly regtype: PgCodec<"regtype", undefined, string, string, undefined, undefined, undefined>; + readonly regrole: PgCodec<"regrole", undefined, string, string, undefined, undefined, undefined>; + readonly regnamespace: PgCodec<"regnamespace", undefined, string, string, undefined, undefined, undefined>; + readonly regconfig: PgCodec<"regconfig", undefined, string, string, undefined, undefined, undefined>; + readonly regdictionary: PgCodec<"regdictionary", undefined, string, string, undefined, undefined, undefined>; + readonly cidr: PgCodec<"cidr", undefined, string, string, undefined, undefined, undefined>; + readonly macaddr: PgCodec<"macaddr", undefined, string, string, undefined, undefined, undefined>; + readonly macaddr8: PgCodec<"macaddr8", undefined, string, string, undefined, undefined, undefined>; + readonly interval: PgCodec<"interval", undefined, string, PgInterval, undefined, undefined, undefined>; + readonly bit: PgCodec<"bit", undefined, string, string, undefined, undefined, undefined>; + readonly varbit: PgCodec<"varbit", undefined, string, string, undefined, undefined, undefined>; + readonly point: PgCodec<"point", undefined, string, PgPoint, undefined, undefined, undefined>; + readonly line: PgCodec<"line", undefined, string, PgLine, undefined, undefined, undefined>; + readonly lseg: PgCodec<"lseg", undefined, string, PgLseg, undefined, undefined, undefined>; + readonly box: PgCodec<"box", undefined, string, PgBox, undefined, undefined, undefined>; + readonly path: PgCodec<"path", undefined, string, PgPath, undefined, undefined, undefined>; + readonly polygon: PgCodec<"polygon", undefined, string, PgPolygon, undefined, undefined, undefined>; + readonly circle: PgCodec<"circle", undefined, string, PgCircle, undefined, undefined, undefined>; + readonly hstore: PgCodec<"hstore", undefined, string, PgHStore, undefined, undefined, undefined>; + readonly bytea: PgCodec<"bytea", undefined, string, Buffer, undefined, undefined, undefined>; +}; +/** + * For supported builtin type names ('void', 'bool', etc) that will be found in + * the `pg_catalog` table this will return a PgCodec. + */ +export declare function getCodecByPgCatalogTypeName(pgCatalogTypeName: string): PgCodec<"void", undefined, string, void, undefined, undefined, undefined> | PgCodec<"bool", undefined, string, boolean, undefined, undefined, undefined> | PgCodec<"int2", undefined, string, number, undefined, undefined, undefined> | PgCodec<"int4", undefined, string, number, undefined, undefined, undefined> | PgCodec<"int8", undefined, string, string, undefined, undefined, undefined> | PgCodec<"float4", undefined, string, number, undefined, undefined, undefined> | PgCodec<"float8", undefined, string, number, undefined, undefined, undefined> | PgCodec<"money", undefined, string, string, undefined, undefined, undefined> | PgCodec<"numeric", undefined, string, string, undefined, undefined, undefined> | PgCodec<"char", undefined, string, string, undefined, undefined, undefined> | PgCodec<"bpchar", undefined, string, string, undefined, undefined, undefined> | PgCodec<"varchar", undefined, string, string, undefined, undefined, undefined> | PgCodec<"text", undefined, string, string, undefined, undefined, undefined> | PgCodec<"name", undefined, string, string, undefined, undefined, undefined> | PgCodec<"json", undefined, string, JSONValue, undefined, undefined, undefined> | PgCodec<"jsonb", undefined, string, JSONValue, undefined, undefined, undefined> | PgCodec<"xml", undefined, string, string, undefined, undefined, undefined> | PgCodec<"uuid", undefined, string, string, undefined, undefined, undefined> | PgCodec<"timestamp", undefined, string, string, undefined, undefined, undefined> | PgCodec<"timestamptz", undefined, string, string, undefined, undefined, undefined> | PgCodec<"date", undefined, string, string, undefined, undefined, undefined> | PgCodec<"time", undefined, string, string, undefined, undefined, undefined> | PgCodec<"timetz", undefined, string, string, undefined, undefined, undefined> | PgCodec<"inet", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regproc", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regprocedure", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regoper", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regoperator", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regclass", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regtype", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regrole", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regnamespace", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regconfig", undefined, string, string, undefined, undefined, undefined> | PgCodec<"regdictionary", undefined, string, string, undefined, undefined, undefined> | PgCodec<"cidr", undefined, string, string, undefined, undefined, undefined> | PgCodec<"macaddr", undefined, string, string, undefined, undefined, undefined> | PgCodec<"macaddr8", undefined, string, string, undefined, undefined, undefined> | PgCodec<"interval", undefined, string, PgInterval, undefined, undefined, undefined> | PgCodec<"bit", undefined, string, string, undefined, undefined, undefined> | PgCodec<"varbit", undefined, string, string, undefined, undefined, undefined> | PgCodec<"point", undefined, string, PgPoint, undefined, undefined, undefined> | PgCodec<"line", undefined, string, PgLine, undefined, undefined, undefined> | PgCodec<"lseg", undefined, string, PgLseg, undefined, undefined, undefined> | PgCodec<"box", undefined, string, PgBox, undefined, undefined, undefined> | PgCodec<"path", undefined, string, PgPath, undefined, undefined, undefined> | PgCodec<"polygon", undefined, string, PgPolygon, undefined, undefined, undefined> | PgCodec<"circle", undefined, string, PgCircle, undefined, undefined, undefined> | PgCodec<"bytea", undefined, string, Buffer, undefined, undefined, undefined> | null; +export declare function getInnerCodec>(codec: TCodec): TCodec extends PgCodec ? Exclude : TCodec; +export declare function sqlValueWithCodec(value: unknown, codec: PgCodec): SQL; +export {}; +//# sourceMappingURL=codecs.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecs.d.ts.map b/grafast/dataplan-pg/dist/codecs.d.ts.map new file mode 100644 index 0000000000..d8b5f87ed1 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecs.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../src/codecs.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecs.js b/grafast/dataplan-pg/dist/codecs.js new file mode 100644 index 0000000000..67c18e76db --- /dev/null +++ b/grafast/dataplan-pg/dist/codecs.js @@ -0,0 +1,829 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TYPES = void 0; +exports.recordCodec = recordCodec; +exports.enumCodec = enumCodec; +exports.isEnumCodec = isEnumCodec; +exports.listOfCodec = listOfCodec; +exports.domainOfCodec = domainOfCodec; +exports.rangeOfCodec = rangeOfCodec; +exports.getCodecByPgCatalogTypeName = getCodecByPgCatalogTypeName; +exports.getInnerCodec = getInnerCodec; +exports.sqlValueWithCodec = sqlValueWithCodec; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importDefault(require("pg-sql2")); +const postgres_range_1 = require("postgres-range"); +const index_js_1 = require("./codecUtils/index.js"); +const inspect_js_1 = require("./inspect.js"); +const parseArray_js_1 = require("./parseArray.js"); +// PERF: `identity` can be shortcut +const identity = (value) => value; +/** + * Returns a PgCodec for the given builtin Postgres scalar type, optionally + * pass the following config: + * + * - castFromPg: how to wrap the SQL fragment that represents this type so that + * it's cast to a suitable type for us to receive via the relevant Postgres + * driver + * - listCastFromPg: as castFromPg, but for usage when the expression type is a + * list of this type + * - fromPg: parse the value from Postgres into JS format + * - toPg: serialize the value from JS into a format Postgres will understand + * + * param type - the name of the Postgres type - see the `pg_type` table + * param options - the configuration options described above + */ +function t() { + return (oid, type, options = {}) => { + const { castFromPg, listCastFromPg, fromPg, toPg, isBinary } = options; + return { + name: type, + sqlType: pg_sql2_1.default.identifier(...type.split(".")), + fromPg: fromPg ?? identity, + toPg: toPg ?? identity, + attributes: undefined, + extensions: { oid: oid }, + castFromPg, + listCastFromPg, + executor: null, + isBinary, + [inspect_js_1.inspect.custom]: codecInspect, + }; + }; +} +/** + * | To put a double quote or backslash in a quoted composite field value, + * | precede it with a backslash. + */ +function pgWrapQuotesInCompositeValue(str) { + return `"${str.replace(/["\\]/g, "\\$&")}"`; +} +function toRecordString(val) { + if (val == null) { + return ""; + } + else if (typeof val === "boolean") { + return val ? "t" : "f"; + } + else if (typeof val === "number") { + return "" + val; + } + else if ( + // essentially Array.isArray in this context + typeof val === "object") { + const parts = val.map((v) => toListString(v)); + return `{${parts.join(",")}}`; + } + else if (/[(),"\\]/.test(val) || val.length === 0) { + /* + * The Postgres manual states: + * + * > You can put double quotes around any field value, and must do so if + * > it contains commas or parentheses. + * + * Also: + * + * > In particular, fields containing parentheses, commas, double quotes, + * > or backslashes must be double-quoted. [...] Alternatively, you can + * > avoid quoting and use backslash-escaping to protect all data + * > characters that would otherwise be taken as composite syntax. + * + * We're going to go with double quoting. + */ + return pgWrapQuotesInCompositeValue(val); + } + else { + return "" + val; + } +} +function pgWrapQuotesInArray(str) { + return `"${str.replace(/["\\]/g, "\\$&")}"`; +} +function toListString(val) { + if (val == null) { + return "NULL"; + } + else if (typeof val === "boolean") { + return val ? "t" : "f"; + } + else if (typeof val === "number") { + return "" + val; + } + else if ( + // essentially Array.isArray in this context + typeof val === "object") { + const parts = val.map((v) => toListString(v)); + return `{${parts.join(",")}}`; + } + else { + return pgWrapQuotesInArray(val); + } +} +// TESTS: this needs unit tests! +/** + * Parses a PostgreSQL record string (e.g. `(1,2, hi)`) into a tuple (e.g. + * `["1", "2", " hi"]`). + * + * Postgres says: + * + * | The composite output routine will put double quotes around field values if + * | they are empty strings or contain parentheses, commas, double quotes, + * | backslashes, or white space. (Doing so for white space is not essential, + * | but aids legibility.) Double quotes and backslashes embedded in field + * | values will be doubled. + * + * @see {@link https://www.postgresql.org/docs/current/rowtypes.html#id-1.5.7.24.6} + */ +function recordStringToTuple(value) { + if (!value.startsWith("(") || !value.endsWith(")")) { + throw new Error(`Unsupported record string '${value}'`); + } + let inQuotes = false; + let current = null; + const tuple = []; + // We only need to loop inside the parenthesis. Whitespace is significant in here. + for (let i = 1, l = value.length - 1; i < l; i++) { + const char = value[i]; + if (inQuotes) { + if (current === null) { + throw new Error("Impossible?"); + } + if (char === '"') { + // '""' is an escape for '"' + if (value[i + 1] === '"') { + current += value[++i]; + } + else { + inQuotes = false; + // Expect comma or end + } + } + else if (char === "\\") { + // Backslash is literal escape + current += value[++i]; + } + else { + current += char; + } + } + else if (char === '"') { + if (current !== null) { + throw new Error(`Invalid record string attempts to open quotes when value already exists '${value}'`); + } + inQuotes = true; + current = ""; + } + else if (char === ",") { + tuple.push(current); + current = null; + } + else if (current !== null) { + current += char; + } + else { + current = char; + } + } + if (inQuotes) { + throw new Error(`Invalid record string; exits whilst still in quote marks '${value}'`); + } + tuple.push(current); + return tuple; +} +function realAttributeDefs(attributes) { + const attributeDefs = Object.entries(attributes); + return attributeDefs.filter(([_attributeName, spec]) => !spec.expression && !spec.via); +} +/** + * Takes a list of attributes and returns a mapping function that takes a + * composite value and turns it into a string that PostgreSQL could process as + * the composite value. + * + * @see {@link https://www.postgresql.org/docs/current/rowtypes.html#id-1.5.7.24.6} + */ +function makeRecordToSQLRawValue(attributes) { + const attributeDefs = realAttributeDefs(attributes); + return (value) => { + const values = attributeDefs.map(([attributeName, spec]) => { + const v = value[attributeName]; + const val = v == null ? null : spec.codec.toPg(v); + return toRecordString(val); + }); + return `(${values.join(",")})`; + }; +} +/** + * Takes a list of attributes and returns a mapping function that takes a + * PostgreSQL record string value (e.g. `(1,2,"hi")`) and turns it into a + * JavaScript object. If `asJSON` is true, then instead of a record string value, + * we expect a JSON array value (typically due to casting). + * + * @see {@link https://www.postgresql.org/docs/current/rowtypes.html#id-1.5.7.24.6} + */ +function makeSQLValueToRecord(attributes, asJSON = false) { + const attributeDefs = realAttributeDefs(attributes); + const attributeCount = attributeDefs.length; + return (value) => { + const tuple = asJSON ? JSON.parse(value) : recordStringToTuple(value); + const record = Object.create(null); + for (let i = 0; i < attributeCount; i++) { + const [attributeName, spec] = attributeDefs[i]; + const entry = tuple[i]; + record[attributeName] = entry == null ? null : spec.codec.fromPg(entry); + } + return record; + }; +} +const codecInspect = function () { + const type = this.domainOfCodec + ? `DomainCodec<${this.domainOfCodec.name}>` + : this.arrayOfCodec + ? `ListCodec<${this.arrayOfCodec.name}[]>` + : this.rangeOfCodec + ? `RangeCodec<${this.rangeOfCodec.name}>` + : this.attributes + ? `RecordCodec` + : "Codec"; + return `${type}(${this.name})`; +}; +/** + * Returns a PgCodec that represents a composite type (a type with + * attributes). + * + * name - the name of this type + * identifier - a pg-sql2 fragment that uniquely identifies this type, suitable to be fed after `::` into an SQL query. + * attributes - the attributes this composite type has + * extensions - an optional object that you can use to associate arbitrary data with this type + * isAnonymous - if true, this represents an "anonymous" type, typically the return value of a function or something like that. If this is true, then name and identifier are ignored. + */ +function recordCodec(config) { + const { name, identifier, attributes, polymorphism, description, extensions, isAnonymous = false, executor, } = config; + return { + name, + sqlType: identifier, + isAnonymous, + ...makeRecordCodecToFrom(name, attributes), + attributes, + polymorphism, + description, + extensions, + executor, + [inspect_js_1.inspect.custom]: codecInspect, + }; +} +(0, grafast_1.exportAs)("@dataplan/pg", recordCodec, "recordCodec"); +function listCastViaUnnest(name, frag, castFromPg, guaranteedNotNull) { + const identifier = pg_sql2_1.default.identifier(Symbol(name)); + const arraySql = (0, pg_sql2_1.default) `array(${pg_sql2_1.default.indent((0, pg_sql2_1.default) `select ${castFromPg(identifier)}\nfrom unnest(${frag}) ${identifier}`)})::text`; + if (guaranteedNotNull) { + return arraySql; + } + else { + return (0, pg_sql2_1.default) `(case when (${frag}) is not distinct from null then null::text else ${arraySql} end)`; + } +} +function makeRecordCodecToFrom(name, attributes) { + const attributeDefs = realAttributeDefs(attributes); + if (attributeDefs.some(([_attrName, attr]) => attr.codec.castFromPg)) { + const castFromPg = (fragment) => { + return (0, pg_sql2_1.default) `case when (${fragment}) is not distinct from null then null::text else json_build_array(${pg_sql2_1.default.join(attributeDefs.map(([attrName, attr]) => { + const expr = (0, pg_sql2_1.default) `((${fragment}).${pg_sql2_1.default.identifier(attrName)})`; + if (attr.codec.castFromPg) { + return attr.codec.castFromPg(expr, attr.codec.notNull); + } + else { + return (0, pg_sql2_1.default) `(${expr})::text`; + } + }), ", ")})::text end`; + }; + return { + castFromPg, + listCastFromPg(frag, guaranteedNotNull) { + return listCastViaUnnest(name, frag, castFromPg, guaranteedNotNull); + }, + fromPg: makeSQLValueToRecord(attributes, true), + toPg: makeRecordToSQLRawValue(attributes), + }; + } + else { + return { + fromPg: makeSQLValueToRecord(attributes), + toPg: makeRecordToSQLRawValue(attributes), + }; + } +} +/** + * Returns a PgCodec that represents a Postgres enum type. + * + * - name - the name of the enum + * - identifier - a pg-sql2 fragment that uniquely identifies this type, suitable to be fed after `::` into an SQL query. + * - values - a list of the values that this enum can represent + * - extensions - an optional object that you can use to associate arbitrary data with this type + */ +function enumCodec(config) { + const { name, identifier, values, description, extensions } = config; + return { + name, + sqlType: identifier, + fromPg: identity, + toPg: identity, + values: values.map((value) => typeof value === "string" ? { value } : value), + attributes: undefined, + description, + extensions, + executor: null, + }; +} +(0, grafast_1.exportAs)("@dataplan/pg", enumCodec, "enumCodec"); +function isEnumCodec(t) { + return "values" in t; +} +const $$listCodec = Symbol("listCodec"); +/** + * Given a PgCodec, this returns a new PgCodec that represents a list + * of the former. + * + * List codecs CANNOT BE NESTED - Postgres array types don't have defined + * dimensionality, so an array of an array of a type doesn't really make sense + * to Postgres, it being the same as an array of the type. + * + * @param innerCodec - the codec that represents the "inner type" of the array + * @param extensions - an optional object that you can use to associate arbitrary data with this type + * @param typeDelim - the delimeter used to separate entries in this list when Postgres stringifies it + * @param identifier - a pg-sql2 fragment that represents the name of this type + */ +function listOfCodec(listedCodec, config) { + const innerCodec = listedCodec; + if (!config && innerCodec[$$listCodec]) { + return innerCodec[$$listCodec]; + } + const { description, extensions, identifier = (0, pg_sql2_1.default) `${listedCodec.sqlType}[]`, typeDelim = `,`, name = `${innerCodec.name}[]`, } = config ?? {}; + const { fromPg: innerCodecFromPg, toPg: innerCodecToPg, listCastFromPg: innerCodecListCastFromPg, notNull: innerCodecNotNull, executor, } = innerCodec; + const listCodec = { + name, + sqlType: identifier, + fromPg: innerCodecFromPg === identity + ? parseArray_js_1.parseArray + : (0, parseArray_js_1.makeParseArrayWithTransform)(innerCodecFromPg), + toPg: (value) => { + let result = "{"; + for (let i = 0, l = value.length; i < l; i++) { + if (i > 0) { + result += typeDelim; + } + const v = value[i]; + if (v == null) { + result += "NULL"; + continue; + } + const str = innerCodecToPg(v); + if (str == null) { + result += "NULL"; + continue; + } + if (typeof str !== "string" && typeof str !== "number") { + throw new Error(`Do not know how to encode ${(0, inspect_js_1.inspect)(str)} to an array (send a PR!)`); + } + // > To put a double quote or backslash in a quoted array element + // > value, precede it with a backslash. + // -- https://www.postgresql.org/docs/current/arrays.html#ARRAYS-IO + result += `"${String(str).replace(/[\\"]/g, "\\$&")}"`; + } + result += "}"; + return result; + }, + attributes: undefined, + description, + extensions, + arrayOfCodec: innerCodec, + ...(innerCodecListCastFromPg + ? { + castFromPg: innerCodecListCastFromPg, + listCastFromPg(frag, guaranteedNotNull) { + return listCastViaUnnest(`${name}_item`, frag, (identifier) => innerCodecListCastFromPg.call(this, identifier, innerCodecNotNull), guaranteedNotNull); + }, + } + : null), + executor: executor, + [inspect_js_1.inspect.custom]: codecInspect, + }; + if (!config) { + // Memoize such that every `listOfCodec(foo)` returns the same object. + Object.defineProperty(innerCodec, $$listCodec, { value: listCodec }); + } + return listCodec; +} +(0, grafast_1.exportAs)("@dataplan/pg", listOfCodec, "listOfCodec"); +/** + * Represents a PostgreSQL `DOMAIN` over the given codec + * + * @param innerCodec - the codec that represents the "inner type" of the domain + * @param name - the name of the domain + * @param identifier - a pg-sql2 fragment that represents the name of this type + * @param config - extra details about this domain + */ +function domainOfCodec(innerCodec, name, identifier, config = {}) { + const { description, extensions, notNull } = config; + return { + // Generally same as underlying type: + ...innerCodec, + // Overriding: + name, + sqlType: identifier, + description, + extensions, + domainOfCodec: innerCodec.arrayOfCodec ? undefined : innerCodec, + notNull: Boolean(notNull), + [inspect_js_1.inspect.custom]: codecInspect, + }; +} +(0, grafast_1.exportAs)("@dataplan/pg", domainOfCodec, "domainOfCodec"); +/** + * @see {@link https://www.postgresql.org/docs/14/rangetypes.html#RANGETYPES-IO} + * + * @internal + */ +function escapeRangeValue(value, innerCodec) { + if (value == null) { + return ""; + } + const encoded = "" + (innerCodec.toPg(value) ?? ""); + // PERF: we don't always need to do this + return `"${encoded.replace(/"/g, '""')}"`; +} +/** + * Returns a PgCodec that represents a range of the given inner PgCodec + * type. + * + * @param innerCodec - the PgCodec that represents the bounds of this range + * @param name - the name of the range + * @param identifier - a pg-sql2 fragment that represents the name of this type + * @param config - extra details about this range + */ +function rangeOfCodec(innerCodec, name, identifier, config = {}) { + const { description, extensions } = config; + const needsCast = innerCodec.castFromPg; + const castFromPg = needsCast + ? function castFromPg(frag) { + return (0, pg_sql2_1.default) `json_build_array(${pg_sql2_1.default.indent((0, pg_sql2_1.default) `lower_inc(${frag}),\n${innerCodec.castFromPg((0, pg_sql2_1.default) `lower(${frag})`, innerCodec.notNull)},\n${innerCodec.castFromPg((0, pg_sql2_1.default) `upper(${frag})`, innerCodec.notNull)},\nupper_inc(${frag})`)})::text`; + } + : null; + return { + name, + sqlType: identifier, + description, + extensions, + rangeOfCodec: innerCodec, + ...(castFromPg + ? { + castFromPg, + listCastFromPg(frag, guaranteedNotNull) { + return listCastViaUnnest(name, frag, castFromPg, guaranteedNotNull); + }, + } + : null), + fromPg: needsCast + ? function (value) { + const json = JSON.parse(value); + return { + start: json[1] != null + ? { + value: innerCodec.fromPg(json[1]), + inclusive: !!json[0], + } + : null, + end: json[2] != null + ? { + value: innerCodec.fromPg(json[2]), + inclusive: !!json[3], + } + : null, + }; + } + : function (value) { + const parsed = (0, postgres_range_1.parse)(value); + return { + start: parsed.lower != null + ? { + value: innerCodec.fromPg(parsed.lower), + inclusive: parsed.isLowerBoundClosed(), + } + : null, + end: parsed.upper != null + ? { + value: innerCodec.fromPg(parsed.upper), + inclusive: parsed.isUpperBoundClosed(), + } + : null, + }; + }, + toPg(value) { + let str = ""; + if (value.start == null) { + str += "("; + } + else { + str += `${value.start.inclusive ? "[" : "("}${escapeRangeValue(value.start.value, innerCodec)}`; + } + str += ","; + if (value.end == null) { + str += ")"; + } + else { + str += `${escapeRangeValue(value.end.value, innerCodec)}${value.end.inclusive ? "]" : ")"}`; + } + return str; + }, + attributes: undefined, + executor: innerCodec.executor, + [inspect_js_1.inspect.custom]: codecInspect, + }; +} +(0, grafast_1.exportAs)("@dataplan/pg", rangeOfCodec, "rangeOfCodec"); +/** + * When we can use the raw representation directly, typically suitable for + * text, varchar, char, etc + */ +const verbatim = { + castFromPg: (frag) => frag, +}; +/** + * Casts to something else before casting to text; e.g. `${expression}::numeric::text` + */ +const castVia = (via) => ({ + castFromPg(frag) { + return (0, pg_sql2_1.default) `${pg_sql2_1.default.parens(frag)}::${via}::text`; + }, + listCastFromPg(frag) { + return (0, pg_sql2_1.default) `${pg_sql2_1.default.parens(frag)}::${via}[]::text[]::text`; + }, +}); +const viaNumeric = castVia((0, pg_sql2_1.default) `numeric`); +// const viaJson = castVia(sql`json`); +/** + * Casts using to_char to format dates; also handles arrays via unnest. + */ +const viaDateFormat = (format, prefix = pg_sql2_1.default.blank) => { + const sqlFormat = pg_sql2_1.default.literal(format); + function castFromPg(frag) { + return (0, pg_sql2_1.default) `to_char(${prefix}${frag}, ${sqlFormat}::text)`; + } + return { + castFromPg, + listCastFromPg(frag, guaranteedNotNull) { + return listCastViaUnnest("entry", frag, castFromPg, guaranteedNotNull); + }, + }; +}; +const parseAsTrustedInt = (n) => +n; +const jsonParse = (s) => JSON.parse(s); +const jsonStringify = (o) => JSON.stringify(o); +const stripSubnet32 = { + fromPg(value) { + return value.replace(/\/(32|128)$/, ""); + }, +}; +/** + * Built in PostgreSQL types that we support; note the keys are the "ergonomic" + * names (like 'bigint'), but the values use the underlying PostgreSQL true + * names (those that would be found in the `pg_type` table). + */ +exports.TYPES = { + void: t()("2278", "void"), // void: 2278 + boolean: t()("16", "bool", { + fromPg: (value) => value[0] === "t", + toPg: (v) => { + if (v === true) { + return "t"; + } + else if (v === false) { + return "f"; + } + else { + throw new Error(`${v} isn't a boolean; cowardly refusing to cast it to postgres`); + } + }, + }), + int2: t()("21", "int2", { fromPg: parseAsTrustedInt }), + int: t()("23", "int4", { fromPg: parseAsTrustedInt }), + bigint: t()("20", "int8"), + float4: t()("700", "float4", { fromPg: parseFloat }), + float: t()("701", "float8", { fromPg: parseFloat }), + money: t()("790", "money", viaNumeric), + numeric: t()("1700", "numeric"), + char: t()("18", "char", verbatim), + bpchar: t()("1042", "bpchar", verbatim), + varchar: t()("1043", "varchar", verbatim), + text: t()("25", "text", verbatim), + name: t()("19", "name", verbatim), + json: t()("114", "json", { + fromPg: jsonParse, + toPg: jsonStringify, + }), + jsonb: t()("3802", "jsonb", { + fromPg: jsonParse, + toPg: jsonStringify, + }), + xml: t()("142", "xml"), + citext: t()(undefined, "citext", verbatim), + uuid: t()("2950", "uuid", verbatim), + timestamp: t()("1114", "timestamp", viaDateFormat('YYYY-MM-DD"T"HH24:MI:SS.US')), + timestamptz: t()("1184", "timestamptz", viaDateFormat('YYYY-MM-DD"T"HH24:MI:SS.USTZH:TZM')), + date: t()("1082", "date", viaDateFormat("YYYY-MM-DD")), + time: t()("1083", "time", viaDateFormat("HH24:MI:SS.US", (0, pg_sql2_1.default) `date '1970-01-01' + `)), + timetz: t()("1266", "timetz", viaDateFormat("HH24:MI:SS.USTZH:TZM", (0, pg_sql2_1.default) `date '1970-01-01' + `)), + inet: t()("869", "inet", stripSubnet32), + regproc: t()("24", "regproc"), + regprocedure: t()("2202", "regprocedure"), + regoper: t()("2203", "regoper"), + regoperator: t()("2204", "regoperator"), + regclass: t()("2205", "regclass"), + regtype: t()("2206", "regtype"), + regrole: t()("4096", "regrole"), + regnamespace: t()("4089", "regnamespace"), + regconfig: t()("3734", "regconfig"), + regdictionary: t()("3769", "regdictionary"), + cidr: t()("650", "cidr"), + macaddr: t()("829", "macaddr"), + macaddr8: t()("774", "macaddr8"), + interval: t()("1186", "interval", { + ...viaDateFormat(`YYYY_MM_DD_HH24_MI_SS.US`), + fromPg(value) { + const parts = value.split("_").map(parseFloat); + // Note these are actually all integers except for `seconds`. + const [years, months, days, hours, minutes, seconds] = parts; + return { years, months, days, hours, minutes, seconds }; + }, + toPg: index_js_1.stringifyInterval, + }), + bit: t()("1560", "bit"), + varbit: t()("1562", "varbit"), + point: t()("600", "point", { + fromPg: index_js_1.parsePoint, + toPg: index_js_1.stringifyPoint, + }), + line: t()("628", "line", { fromPg: index_js_1.parseLine, toPg: index_js_1.stringifyLine }), + lseg: t()("601", "lseg", { fromPg: index_js_1.parseLseg, toPg: index_js_1.stringifyLseg }), + box: t()("603", "box", { fromPg: index_js_1.parseBox, toPg: index_js_1.stringifyBox }), + path: t()("602", "path", { fromPg: index_js_1.parsePath, toPg: index_js_1.stringifyPath }), + polygon: t()("604", "polygon", { + fromPg: index_js_1.parsePolygon, + toPg: index_js_1.stringifyPolygon, + }), + circle: t()("718", "circle", { + fromPg: index_js_1.parseCircle, + toPg: index_js_1.stringifyCircle, + }), + hstore: t()(undefined, "hstore", { + fromPg: index_js_1.parseHstore, + toPg: index_js_1.stringifyHstore, + }), + bytea: t()("17", "bytea", { + fromPg(str) { + // The bytea type supports two formats for input and output: “hex” + // format and PostgreSQL's historical “escape” format. Both of these + // are always accepted on input. The output format depends on the + // configuration parameter bytea_output; the default is hex. + // -- https://www.postgresql.org/docs/current/datatype-binary.html + if (str.startsWith("\\x")) { + // Hex format + return Buffer.from(str.substring(2), "hex"); + } + else { + // ENHANCE: consider supporting this + throw new Error(`PostgreSQL bytea escape format is currently unsupported, please use \`bytea_output = 'hex'\` in your PostgreSQL configuration.`); + } + }, + toPg(data) { + return `\\x${data.toString("hex")}`; + }, + isBinary: true, + }), +}; +(0, grafast_1.exportAs)("@dataplan/pg", exports.TYPES, "TYPES"); +for (const [name, codec] of Object.entries(exports.TYPES)) { + (0, grafast_1.exportAs)("@dataplan/pg", codec, ["TYPES", name]); +} +/** + * For supported builtin type names ('void', 'bool', etc) that will be found in + * the `pg_catalog` table this will return a PgCodec. + */ +function getCodecByPgCatalogTypeName(pgCatalogTypeName) { + switch (pgCatalogTypeName) { + case "void": + return exports.TYPES.void; + case "bool": + return exports.TYPES.boolean; + case "bytea": + return exports.TYPES.bytea; // oid: 17 + case "char": + return exports.TYPES.char; + case "bpchar": + return exports.TYPES.bpchar; + case "varchar": + return exports.TYPES.varchar; + case "text": + return exports.TYPES.text; + case "name": + return exports.TYPES.name; + case "uuid": + return exports.TYPES.uuid; + case "xml": + return exports.TYPES.xml; + case "json": + return exports.TYPES.json; + case "jsonb": + return exports.TYPES.jsonb; + case "bit": + return exports.TYPES.bit; + case "varbit": + return exports.TYPES.varbit; + case "int2": + return exports.TYPES.int2; + case "int4": + return exports.TYPES.int; + case "int8": + return exports.TYPES.bigint; + case "float8": + return exports.TYPES.float; + case "float4": + return exports.TYPES.float4; + case "numeric": + return exports.TYPES.numeric; + case "money": + return exports.TYPES.money; + case "box": + return exports.TYPES.box; + case "point": + return exports.TYPES.point; + case "path": + return exports.TYPES.path; + case "line": + return exports.TYPES.line; + case "lseg": + return exports.TYPES.lseg; + case "circle": + return exports.TYPES.circle; + case "polygon": + return exports.TYPES.polygon; + case "cidr": + return exports.TYPES.cidr; + case "inet": + return exports.TYPES.inet; + case "macaddr": + return exports.TYPES.macaddr; + case "macaddr8": + return exports.TYPES.macaddr8; + case "date": + return exports.TYPES.date; + case "timestamp": + return exports.TYPES.timestamp; + case "timestamptz": + return exports.TYPES.timestamptz; + case "time": + return exports.TYPES.time; + case "timetz": + return exports.TYPES.timetz; + case "interval": + return exports.TYPES.interval; + case "regclass": + return exports.TYPES.regclass; + case "regconfig": + return exports.TYPES.regconfig; + case "regdictionary": + return exports.TYPES.regdictionary; + case "regnamespace": + return exports.TYPES.regnamespace; + case "regoper": + return exports.TYPES.regoper; + case "regoperator": + return exports.TYPES.regoperator; + case "regproc": + return exports.TYPES.regproc; + case "regprocedure": + return exports.TYPES.regprocedure; + case "regrole": + return exports.TYPES.regrole; + case "regtype": + return exports.TYPES.regtype; + } + return null; +} +function getInnerCodec(codec) { + if (codec.domainOfCodec) { + return getInnerCodec(codec.domainOfCodec); + } + if (codec.arrayOfCodec) { + return getInnerCodec(codec.arrayOfCodec); + } + if (codec.rangeOfCodec) { + return getInnerCodec(codec.rangeOfCodec); + } + return codec; +} +(0, grafast_1.exportAs)("@dataplan/pg", getInnerCodec, "getInnerCodec"); +function sqlValueWithCodec(value, codec) { + return (0, pg_sql2_1.default) `${pg_sql2_1.default.value(value == null ? null : codec.toPg(value))}::${codec.sqlType}`; +} +//# sourceMappingURL=codecs.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/codecs.js.map b/grafast/dataplan-pg/dist/codecs.js.map new file mode 100644 index 0000000000..b0eeee4df0 --- /dev/null +++ b/grafast/dataplan-pg/dist/codecs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"codecs.js","sourceRoot":"","sources":["../src/codecs.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/datasource.d.ts b/grafast/dataplan-pg/dist/datasource.d.ts new file mode 100644 index 0000000000..f3a876b8e0 --- /dev/null +++ b/grafast/dataplan-pg/dist/datasource.d.ts @@ -0,0 +1,267 @@ +import type { ObjectStep } from "grafast"; +import { ExecutableStep } from "grafast"; +import type { SQL } from "pg-sql2"; +import type { PgCodecAttributes, PgCodecAttributeVia, PgCodecAttributeViaExplicit } from "./codecs.js"; +import type { PgExecutor, PgExecutorContextPlans } from "./executor.js"; +import type { Expand, GetPgCodecAttributes, GetPgRegistryCodecRelations, GetPgRegistryCodecs, PgCodec, PgCodecRelationConfig, PgCodecWithAttributes, PgRefDefinition, PgRegistry, PgRegistryConfig, PlanByUniques } from "./interfaces.js"; +import type { PgClassExpressionStep } from "./steps/pgClassExpression.js"; +import type { PgSelectArgumentDigest, PgSelectArgumentSpec, PgSelectMode, PgSelectStep } from "./steps/pgSelect.js"; +import type { PgSelectSinglePlanOptions, PgSelectSingleStep } from "./steps/pgSelectSingle.js"; +export declare function EXPORTABLE(factory: (...args: TScope) => T, args: [...TScope], nameHint?: string): T; +/** @deprecated Use DataplanPg.PgResourceUniqueExtensions instead */ +export type PgResourceUniqueExtensions = DataplanPg.PgResourceUniqueExtensions; +/** @deprecated Use DataplanPg.PgResourceExtensions instead */ +export type PgResourceExtensions = DataplanPg.PgResourceExtensions; +/** @deprecated Use DataplanPg.PgResourceParameterExtensions instead */ +export type PgResourceParameterExtensions = DataplanPg.PgResourceParameterExtensions; +/** + * If this is a functional (rather than static) resource, this describes one of + * the parameters it accepts. + */ +export interface PgResourceParameter { + /** + * Name of the parameter, if null then we must use positional rather than + * named arguments + */ + name: TName; + /** + * The type of this parameter + */ + codec: TCodec; + /** + * If true, then this parameter must be supplied, otherwise it's optional. + */ + required: boolean; + /** + * If true and the parameter is supplied, then the parameter must not be + * null. + */ + notNull?: boolean; + extensions?: PgResourceParameterExtensions; +} +/** + * Description of a unique constraint on a PgResource. + */ +export interface PgResourceUnique { + /** + * The attributes that are unique + */ + attributes: ReadonlyArray; + /** + * If this is true, this represents the "primary key" of the resource. + */ + isPrimary?: boolean; + description?: string; + /** + * Space for you to add your own metadata + */ + extensions?: PgResourceUniqueExtensions; +} +export interface PgCodecRefPathEntry { + relationName: string; +} +export type PgCodecRefPath = PgCodecRefPathEntry[]; +/** @deprecated Use DataplanPg.PgCodecRefExtensions instead */ +export type PgCodecRefExtensions = DataplanPg.PgCodecRefExtensions; +export interface PgCodecRef { + definition: PgRefDefinition; + paths: Array; + description?: string; + extensions?: PgCodecRefExtensions; +} +export interface PgCodecRefs { + [refName: string]: PgCodecRef; +} +/** + * Configuration options for your PgResource + */ +export interface PgResourceOptions>> = ReadonlyArray>>, TParameters extends readonly PgResourceParameter[] | undefined = readonly PgResourceParameter[] | undefined> { + /** + * The associated codec for this resource + */ + codec: TCodec; + /** + * The PgExecutor to use when servicing this resource; different executors can + * have different caching rules. A plan that uses one executor cannot be + * inlined into a plan for a different executor. + */ + executor: PgExecutor; + selectAuth?: (($step: PgSelectStep>) => void) | null; + name: TName; + identifier?: string; + from: TParameters extends readonly PgResourceParameter[] ? (...args: PgSelectArgumentDigest[]) => SQL : SQL; + uniques?: TUniques; + extensions?: PgResourceExtensions; + parameters?: TParameters; + description?: string; + /** + * Set true if this resource will only return at most one record - this is + * generally only useful for PostgreSQL function resources, in which case you + * should set it false if the function `returns setof` and true otherwise. + */ + isUnique?: boolean; + sqlPartitionByIndex?: SQL; + isMutation?: boolean; + hasImplicitOrder?: boolean; + /** + * If true, this indicates that this was originally a list (array) and thus + * should be treated as having a predetermined and reasonable length rather + * than being unbounded. It's just a hint to schema generation, it doesn't + * affect planning. + */ + isList?: boolean; + /** + * "Virtual" resources cannot be selected from/inserted to/etc, they're + * normally used to generate other resources that are _not_ virtual. + */ + isVirtual?: boolean; +} +export interface PgFunctionResourceOptions>> = ReadonlyArray>>, TNewParameters extends readonly PgResourceParameter[] = readonly PgResourceParameter[]> { + name: TNewName; + identifier?: string; + from: (...args: PgSelectArgumentDigest[]) => SQL; + parameters: TNewParameters; + returnsSetof: boolean; + returnsArray: boolean; + uniques?: TUniques; + extensions?: PgResourceExtensions; + isMutation?: boolean; + hasImplicitOrder?: boolean; + selectAuth?: (($step: PgSelectStep>) => void) | null; + description?: string; +} +/** + * PgResource represents any resource of SELECT-able data in Postgres: tables, + * views, functions, etc. + */ +export declare class PgResource>> = ReadonlyArray>>, TParameters extends readonly PgResourceParameter[] | undefined = readonly PgResourceParameter[] | undefined, TRegistry extends PgRegistry = PgRegistry> { + readonly registry: TRegistry; + readonly codec: TCodec; + readonly executor: PgExecutor; + readonly name: TName; + readonly identifier: string; + readonly from: SQL | ((...args: PgSelectArgumentDigest[]) => SQL); + readonly uniques: TUniques; + private selectAuth?; + /** + * If present, implies that the resource represents a `setof composite[]` (i.e. + * an array of arrays) - and thus is not appropriate to use for GraphQL + * Cursor Connections. + * + * @experimental + */ + sqlPartitionByIndex: SQL | null; + readonly parameters: TParameters; + readonly description: string | undefined; + readonly isUnique: boolean; + readonly isMutation: boolean; + readonly hasImplicitOrder: boolean; + /** + * If true, this indicates that this was originally a list (array) and thus + * should be treated as having a predetermined and reasonable length rather + * than being unbounded. It's just a hint to schema generation, it doesn't + * affect planning. + */ + readonly isList: boolean; + /** + * "Virtual" resources cannot be selected from/inserted to/etc, they're + * normally used to generate other resources that are _not_ virtual. + */ + readonly isVirtual: boolean; + extensions: Partial | undefined; + /** + * @param from - the SQL for the `FROM` clause (without any + * aliasing). If this is a subquery don't forget to wrap it in parens. + * @param name - a nickname for this resource. Doesn't need to be unique + * (but should be). Used for making the SQL query and debug messages easier + * to understand. + */ + constructor(registry: TRegistry, options: PgResourceOptions); + /** + * Often you can access table records from a table directly but also from a + * view or materialized view. This method makes it convenient to construct + * multiple datasources that all represent the same underlying table + * type/relations/etc. + */ + static alternativeResourceOptions>>, const TNewName extends string>(baseOptions: PgResourceOptions, overrideOptions: { + name: TNewName; + identifier?: string; + from: SQL; + uniques?: TNewUniques; + extensions?: PgResourceExtensions; + }): PgResourceOptions; + /** + * Often you can access table records from a table directly but also from a + * number of functions. This method makes it convenient to construct multiple + * datasources that all represent the same underlying table + * type/relations/etc but pull their rows from functions. + */ + static functionResourceOptions>>, const TNewName extends string>(baseOptions: Pick, "codec" | "executor" | "selectAuth">, overrideOptions: PgFunctionResourceOptions): PgResourceOptions; + toString(): string; + getRelations(): GetPgRegistryCodecRelations; + getRelation>(name: TRelationName): GetPgRegistryCodecRelations[TRelationName]; + resolveVia(via: PgCodecAttributeVia, attr: string): PgCodecAttributeViaExplicit; + getReciprocal, TOtherRelationName extends keyof GetPgRegistryCodecRelations>(otherCodec: TOtherCodec, otherRelationName: TOtherRelationName): [ + relationName: keyof GetPgRegistryCodecRelations, + relation: GetPgRegistryCodecRelations[keyof GetPgRegistryCodecRelations] + ] | null; + get(spec: PlanByUniques, TUniques>, _internalOptionsDoNotPass?: PgSelectSinglePlanOptions): GetPgCodecAttributes extends PgCodecAttributes ? PgSelectSingleStep : PgClassExpressionStep; + find(spec?: { + [key in keyof GetPgCodecAttributes]?: ExecutableStep | string | number; + }): PgSelectStep; + execute(args?: ReadonlyArray, mode?: PgSelectMode): ExecutableStep; + applyAuthorizationChecksToPlan($step: PgSelectStep): void; + /** + * @deprecated Please use `.executor.context()` instead - all resources for the + * same executor must use the same context to allow for SQL inlining, unions, + * etc. + */ + context(): ObjectStep; +} +export interface PgRegistryBuilder; +}, TResources extends { + [name in string]: PgResourceOptions>, readonly PgResourceParameter[] | undefined>; +}, TRelations extends { + [codecName in keyof TCodecs]?: { + [relationName in string]: PgCodecRelationConfig, PgResourceOptions>; + }; +}, TExecutors extends { + [name in string]: PgExecutor; +}> { + getRegistryConfig(): PgRegistryConfig, Expand, Expand, Expand>; + addExecutor(codec: TExecutor): PgRegistryBuilder; + addCodec(codec: TCodec): PgRegistryBuilder; + addResource>(resource: TResource): PgRegistryBuilder; + addRelation, const TCodecRelation extends Omit, "localCodec" | "remoteResourceOptions">>(codec: TCodec, relationName: TCodecRelationName, remoteResource: TRemoteResource, relation: TCodecRelation): PgRegistryBuilder; + build(): PgRegistry, Expand, Expand, Expand>; +} +export declare function makeRegistry; +}, TResourceOptions extends { + [name in string]: PgResourceOptions>>, readonly PgResourceParameter[] | undefined>; +}, TRelations extends { + [codecName in keyof TCodecs]?: { + [relationName in string]: PgCodecRelationConfig, PgResourceOptions>; + }; +}, TExecutors extends { + [name in string]: PgExecutor; +}>(config: PgRegistryConfig): PgRegistry; +export declare function makeRegistryBuilder(): PgRegistryBuilder<{}, {}, {}, {}>; +export declare function makePgResourceOptions>(options: TResourceOptions): TResourceOptions; +//# sourceMappingURL=datasource.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/datasource.d.ts.map b/grafast/dataplan-pg/dist/datasource.d.ts.map new file mode 100644 index 0000000000..c4d48edd00 --- /dev/null +++ b/grafast/dataplan-pg/dist/datasource.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../src/datasource.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/datasource.js b/grafast/dataplan-pg/dist/datasource.js new file mode 100644 index 0000000000..00b65e47c2 --- /dev/null +++ b/grafast/dataplan-pg/dist/datasource.js @@ -0,0 +1,776 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgResource = void 0; +exports.EXPORTABLE = EXPORTABLE; +exports.makeRegistry = makeRegistry; +exports.makeRegistryBuilder = makeRegistryBuilder; +exports.makePgResourceOptions = makePgResourceOptions; +const tslib_1 = require("tslib"); +/* eslint-disable graphile-export/export-instances */ +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importDefault(require("pg-sql2")); +const codecs_js_1 = require("./codecs.js"); +const inspect_js_1 = require("./inspect.js"); +const pgSelect_js_1 = require("./steps/pgSelect.js"); +function EXPORTABLE(factory, args, nameHint) { + const fn = factory(...args); + if ((typeof fn === "function" || (typeof fn === "object" && fn !== null)) && + !("$exporter$factory" in fn)) { + Object.defineProperties(fn, { + $exporter$args: { value: args }, + $exporter$factory: { value: factory }, + $exporter$name: { writable: true, value: nameHint }, + }); + } + return fn; +} +/** + * PgResource represents any resource of SELECT-able data in Postgres: tables, + * views, functions, etc. + */ +class PgResource { + /** + * @param from - the SQL for the `FROM` clause (without any + * aliasing). If this is a subquery don't forget to wrap it in parens. + * @param name - a nickname for this resource. Doesn't need to be unique + * (but should be). Used for making the SQL query and debug messages easier + * to understand. + */ + constructor(registry, options) { + // TODO: make a public interface for this information + /** + * If present, implies that the resource represents a `setof composite[]` (i.e. + * an array of arrays) - and thus is not appropriate to use for GraphQL + * Cursor Connections. + * + * @experimental + */ + this.sqlPartitionByIndex = null; + const { codec, executor, name, identifier, from, uniques, extensions, parameters, description, isUnique, sqlPartitionByIndex, isMutation, hasImplicitOrder, selectAuth, isList, isVirtual, } = options; + this.registry = registry; + this.extensions = extensions; + this.codec = codec; + this.executor = executor; + this.name = name; + this.identifier = identifier ?? name; + this.from = from; + this.uniques = uniques ?? []; + this.parameters = parameters; + this.description = description; + this.isUnique = !!isUnique; + this.sqlPartitionByIndex = sqlPartitionByIndex ?? null; + this.isMutation = !!isMutation; + this.hasImplicitOrder = hasImplicitOrder ?? false; + this.isList = !!isList; + this.isVirtual = isVirtual ?? false; + this.selectAuth = selectAuth; + // parameters is null iff from is not a function + const sourceIsFunction = typeof this.from === "function"; + if (this.parameters == null && sourceIsFunction) { + throw new Error(`Resource ${this} is invalid - it's a function but without a parameters array. If the function accepts no parameters please pass an empty array.`); + } + if (this.parameters != null && !sourceIsFunction) { + throw new Error(`Resource ${this} is invalid - parameters can only be specified when the resource is a function.`); + } + if (this.codec.arrayOfCodec?.attributes) { + throw new Error(`Resource ${this} is invalid - creating a resource that returns an array of a composite type is forbidden; please \`unnest\` the array.`); + } + if (this.isUnique && this.sqlPartitionByIndex) { + throw new Error(`Resource ${this} is invalid - cannot be unique and also partitionable`); + } + } + /** + * Often you can access table records from a table directly but also from a + * view or materialized view. This method makes it convenient to construct + * multiple datasources that all represent the same underlying table + * type/relations/etc. + */ + static alternativeResourceOptions(baseOptions, overrideOptions) { + const { name, identifier, from, uniques, extensions } = overrideOptions; + const { codec, executor, selectAuth } = baseOptions; + return { + codec, + executor, + name, + identifier, + from, + uniques, + parameters: undefined, + extensions, + selectAuth, + }; + } + /** + * Often you can access table records from a table directly but also from a + * number of functions. This method makes it convenient to construct multiple + * datasources that all represent the same underlying table + * type/relations/etc but pull their rows from functions. + */ + static functionResourceOptions(baseOptions, overrideOptions) { + const { codec, executor, selectAuth: originalSelectAuth } = baseOptions; + const { name, identifier, from: fnFrom, parameters, returnsSetof, returnsArray, uniques, extensions, isMutation, hasImplicitOrder, selectAuth: overrideSelectAuth, description, } = overrideOptions; + const selectAuth = overrideSelectAuth === null + ? null + : (overrideSelectAuth ?? originalSelectAuth); + if (!returnsArray) { + // This is the easy case + return { + codec, + executor, + name, + identifier, + from: fnFrom, + uniques, + parameters, + extensions, + isUnique: !returnsSetof, + isMutation: Boolean(isMutation), + hasImplicitOrder, + selectAuth, + description, + }; + } + else if (!returnsSetof) { + // This is a `composite[]` function; convert it to a `setof composite` function: + const from = EXPORTABLE((fnFrom, sql) => (...args) => sql `unnest(${fnFrom(...args)})`, [fnFrom, pg_sql2_1.default], `${name}_from`); + return { + codec, + executor, + name, + identifier, + from: from, + uniques, + parameters, + extensions, + isUnique: false, // set now, not unique + isMutation: Boolean(isMutation), + hasImplicitOrder, + selectAuth, + isList: true, + description, + }; + } + else { + // This is a `setof composite[]` function; convert it to `setof composite` and indicate that we should partition it. + const sqlTmp = pg_sql2_1.default.identifier(Symbol(`${name}_tmp`)); + const sqlPartitionByIndex = pg_sql2_1.default.identifier(Symbol(`${name}_idx`)); + const from = EXPORTABLE((fnFrom, sql, sqlPartitionByIndex, sqlTmp) => (...args) => sql `${fnFrom(...args)} with ordinality as ${sqlTmp} (arr, ${sqlPartitionByIndex}) cross join lateral unnest (${sqlTmp}.arr)`, [fnFrom, pg_sql2_1.default, sqlPartitionByIndex, sqlTmp], `${name}_from`); + return { + codec, + executor, + name, + identifier, + from: from, + uniques, + parameters, + extensions, + isUnique: false, // set now, not unique + sqlPartitionByIndex, + isMutation: Boolean(isMutation), + hasImplicitOrder, + selectAuth, + description, + }; + } + } + toString() { + return chalk_1.default.bold.blue(`PgResource(${this.name})`); + } + getRelations() { + return (this.registry.pgRelations[this.codec.name] ?? + Object.create(null)); + } + getRelation(name) { + return this.getRelations()[name]; + } + resolveVia(via, attr) { + if (!via) { + throw new Error("No via to resolve"); + } + if (typeof via === "string") { + // Check + const relation = this.getRelation(via); + if (!relation) { + throw new Error(`Unknown relation '${via}' in ${this}`); + } + if (!relation.remoteResource.codec.attributes[attr]) { + throw new Error(`${this} relation '${via}' does not have attribute '${attr}'`); + } + return { relation: via, attribute: attr }; + } + else { + return via; + } + } + // PERF: this needs optimization. + getReciprocal(otherCodec, otherRelationName) { + if (this.parameters) { + throw new Error(".getReciprocal() cannot be used with functional resources; please use .execute()"); + } + const otherRelation = this.registry.pgRelations[otherCodec.name]?.[otherRelationName]; + const relations = this.getRelations(); + const reciprocal = Object.entries(relations).find(([_relationName, relation]) => { + if (relation.remoteResource.codec !== otherCodec) { + return false; + } + if (!(0, grafast_1.arraysMatch)(relation.localAttributes, otherRelation.remoteAttributes)) { + return false; + } + if (!(0, grafast_1.arraysMatch)(relation.remoteAttributes, otherRelation.localAttributes)) { + return false; + } + return true; + }); + return reciprocal || null; + } + get(spec, + // This is internal, it's an optimisation we can use but you shouldn't. + _internalOptionsDoNotPass) { + if (this.parameters) { + throw new Error(".get() cannot be used with functional resources; please use .execute()"); + } + if (!spec) { + throw new Error(`Cannot ${this}.get without a valid spec`); + } + const keys = Object.keys(spec); + if (!this.uniques.some((uniq) => uniq.attributes.every((key) => keys.includes(key)))) { + throw new Error(`Attempted to call ${this}.get({${keys.join(", ")}}) at child field (TODO: which one?) but that combination of attributes is not unique (uniques: ${JSON.stringify(this.uniques)}). Did you mean to call .find() instead?`); + } + return this.find(spec).single(_internalOptionsDoNotPass); + } + find(spec = Object.create(null)) { + if (this.parameters) { + throw new Error(".get() cannot be used with functional resources; please use .execute()"); + } + if (!this.codec.attributes) { + throw new Error("Cannot call find if there's no attributes"); + } + const attributes = this.codec.attributes; + const keys = Object.keys(spec); /* as Array*/ + const invalidKeys = keys.filter((key) => attributes[key] == null); + if (invalidKeys.length > 0) { + throw new Error(`Attempted to call ${this}.get({${keys.join(", ")}}) but that request included attributes that we don't know about: '${invalidKeys.join("', '")}'`); + } + const identifiers = keys.map((key) => { + const attribute = attributes[key]; + if ("via" in attribute && attribute.via) { + throw new Error(`Attribute '${String(key)}' is defined with a 'via' and thus cannot be used as an identifier for '.find()' or '.get()' calls (requested keys: '${keys.join("', '")}').`); + } + const { codec } = attribute; + const stepOrConstant = spec[key]; + if (stepOrConstant == undefined) { + throw new Error(`Attempted to call ${this}.find({${keys.join(", ")}}) but failed to provide a plan for '${String(key)}'`); + } + return { + step: stepOrConstant instanceof grafast_1.ExecutableStep + ? stepOrConstant + : (0, grafast_1.constant)(stepOrConstant, false), + codec, + matches: (alias) => typeof attribute.expression === "function" + ? attribute.expression(alias) + : (0, pg_sql2_1.default) `${alias}.${pg_sql2_1.default.identifier(key)}`, + }; + }); + return (0, pgSelect_js_1.pgSelect)({ resource: this, identifiers }); + } + execute(args = [], mode = this.isMutation ? "mutation" : "normal") { + const $select = (0, pgSelect_js_1.pgSelect)({ + resource: this, + identifiers: [], + args, + mode, + }); + if (this.isUnique) { + return $select.single(); + } + const sqlPartitionByIndex = this.sqlPartitionByIndex; + if (sqlPartitionByIndex) { + // We're a setof array of composite type function, e.g. `setof users[]`, so we need to reconstitute the plan. + return (0, grafast_1.partitionByIndex)($select, ($row) => $row.select(sqlPartitionByIndex, codecs_js_1.TYPES.int, true), + // Ordinality is 1-indexed but we want a 0-indexed number + 1); + } + else { + return $select; + } + } + applyAuthorizationChecksToPlan($step) { + if (this.selectAuth) { + this.selectAuth($step); + } + // e.g. $step.where(sql`user_id = ${me}`); + return; + } + /** + * @deprecated Please use `.executor.context()` instead - all resources for the + * same executor must use the same context to allow for SQL inlining, unions, + * etc. + */ + context() { + return this.executor.context(); + } + /** @internal */ + executeWithCache(values, options) { + return this.executor.executeWithCache(values, options); + } + /** @internal */ + executeWithoutCache(values, options) { + return this.executor.executeWithoutCache(values, options); + } + /** @internal */ + executeStream(values, options) { + return this.executor.executeStream(values, options); + } + /** @internal */ + executeMutation(options) { + return this.executor.executeMutation(options); + } + /** + * Returns an SQL fragment that evaluates to `'true'` (string) if the row is + * non-null and `'false'` or `null` otherwise. + * + * @see {@link PgCodec.notNullExpression} + * + * @internal + */ + getNullCheckExpression(alias) { + if (this.codec.notNullExpression) { + // Use the user-provided check + return this.codec.notNullExpression(alias); + } + else { + // Every column in a primary key is non-nullable; so just see if one is null + const pk = this.uniques.find((u) => u.isPrimary); + const nonNullableAttribute = (this.codec.attributes + ? Object.entries(this.codec.attributes).find(([_attributeName, spec]) => !spec.via && !spec.expression && spec.notNull)?.[0] + : null) ?? pk?.attributes[0]; + if (nonNullableAttribute) { + const firstAttribute = (0, pg_sql2_1.default) `${alias}.${pg_sql2_1.default.identifier(nonNullableAttribute)}`; + return (0, pg_sql2_1.default) `(not (${firstAttribute} is null))::text`; + } + else { + // Fallback + // NOTE: we cannot use `is distinct from null` here because it's + // commonly used for `select * from ((select my_table.composite).*)` + // and the rows there _are_ distinct from null even if the underlying + // data is not. + return (0, pg_sql2_1.default) `(not (${alias} is null))::text`; + } + } + } +} +exports.PgResource = PgResource; +(0, grafast_1.exportAs)("@dataplan/pg", PgResource, "PgResource"); +function makeRegistry(config) { + const registry = { + pgExecutors: Object.create(null), + pgCodecs: Object.create(null), + pgResources: Object.create(null), + pgRelations: Object.create(null), + }; + // Tell the system to read the built pgCodecs, pgResources, pgRelations from the registry + Object.defineProperties(registry.pgExecutors, { + $exporter$args: { value: [registry] }, + $exporter$factory: { + value: (registry) => registry.pgExecutors, + }, + }); + Object.defineProperties(registry.pgCodecs, { + $exporter$args: { value: [registry] }, + $exporter$factory: { + value: (registry) => registry.pgCodecs, + }, + }); + Object.defineProperties(registry.pgResources, { + $exporter$args: { value: [registry] }, + $exporter$factory: { + value: (registry) => registry.pgResources, + }, + }); + Object.defineProperties(registry.pgRelations, { + $exporter$args: { value: [registry] }, + $exporter$factory: { + value: (registry) => registry.pgRelations, + }, + }); + let addExecutorForbidden = false; + function addExecutor(executor) { + if (addExecutorForbidden) { + throw new Error(`It's too late to call addExecutor now`); + } + const executorName = executor.name; + if (registry.pgExecutors[executorName]) { + if (registry.pgExecutors[executorName] !== executor) { + console.dir({ + existing: registry.pgExecutors[executorName], + new: executor, + }); + throw new Error(`Executor named '${executorName}' is already registered; you cannot have two executors with the same name`); + } + return executor; + } + else { + // Custom spec, pin it back to the registry + registry.pgExecutors[executorName] = executor; + if (!executor.$$export && !executor.$exporter$factory) { + // Tell the system to read the built executor from the registry + Object.defineProperties(executor, { + $exporter$args: { value: [registry, executorName] }, + $exporter$factory: { + value: (registry, executorName) => registry.pgExecutors[executorName], + }, + }); + } + return executor; + } + } + let addCodecForbidden = false; + function addCodec(codec) { + if (addCodecForbidden) { + throw new Error(`It's too late to call addCodec now`); + } + const codecName = codec.name; + if (registry.pgCodecs[codecName]) { + if (registry.pgCodecs[codecName] !== codec) { + console.dir({ + existing: registry.pgCodecs[codecName], + new: codec, + }); + throw new Error(`Codec named '${codecName}' is already registered; you cannot have two codecs with the same name`); + } + return codec; + } + else if (codec.$$export || codec.$exporter$factory) { + registry.pgCodecs[codecName] = codec; + return codec; + } + else { + // Custom spec, pin it back to the registry + registry.pgCodecs[codecName] = codec; + if (codec.attributes) { + const prevCols = codec.attributes; + for (const col of Object.values(prevCols)) { + addCodec(col.codec); + } + } + if (codec.arrayOfCodec) { + addCodec(codec.arrayOfCodec); + } + if (codec.domainOfCodec) { + addCodec(codec.domainOfCodec); + } + if (codec.rangeOfCodec) { + addCodec(codec.rangeOfCodec); + } + // Tell the system to read the built codec from the registry + Object.defineProperties(codec, { + $exporter$args: { value: [registry, codecName] }, + $exporter$factory: { + value: (registry, codecName) => registry.pgCodecs[codecName], + }, + }); + return codec; + } + } + for (const [executorName, executor] of Object.entries(config.pgExecutors)) { + if (executorName !== executor.name) { + throw new Error(`Executor added to registry with wrong name; ${JSON.stringify(executorName)} !== ${JSON.stringify(executor.name)}`); + } + addExecutor(executor); + } + for (const [codecName, codec] of Object.entries(config.pgCodecs)) { + if (codecName !== codec.name) { + throw new Error(`Codec added to registry with wrong name`); + } + addCodec(codec); + } + for (const [resourceName, rawConfig] of Object.entries(config.pgResources)) { + const resourceConfig = { + ...rawConfig, + executor: addExecutor(rawConfig.executor), + codec: addCodec(rawConfig.codec), + parameters: rawConfig.parameters + ? rawConfig.parameters.map((p) => ({ + ...p, + codec: addCodec(p.codec), + })) + : rawConfig.parameters, + }; + const resource = new PgResource(registry, resourceConfig); + // This is the magic that breaks the circular reference: rather than + // building PgResource via a factory we tell the system to just retrieve it + // from the already build registry. + Object.defineProperties(resource, { + $exporter$args: { value: [registry, resourceName] }, + $exporter$factory: { + value: (registry, resourceName) => registry.pgResources[resourceName], + }, + }); + registry.pgResources[resourceName] = resource; + } + // Ensure all the relation codecs are also added + for (const codecName of Object.keys(config.pgRelations)) { + const relations = config.pgRelations[codecName]; + if (!relations) { + continue; + } + for (const relationName of Object.keys(relations)) { + const relationConfig = relations[relationName]; + if (relationConfig) { + addCodec(relationConfig.localCodec); + } + } + } + // DO NOT CALL addCodec BELOW HERE + addCodecForbidden = true; + addExecutorForbidden = true; + /** + * If the user uses a codec with attributes as a column type (or an array of + * the codec is the column type, etc) then we need to have a resource for + * processing this codec. So we add all table-like codecs here, then we + * remove the ones that already have resources, then we build resources for the + * remainder. + */ + const tableLikeCodecsWithoutTableLikeResources = new Set(); + const walkCodec = (codec, isAccessibleViaAttribute = false, seen = new Set()) => { + if (seen.has(codec)) { + return; + } + seen.add(codec); + if (isAccessibleViaAttribute && + codec.attributes && + codec.executor && + !codec.isAnonymous) { + tableLikeCodecsWithoutTableLikeResources.add(codec); + } + if (codec.attributes) { + for (const col of Object.values(codec.attributes)) { + if (isAccessibleViaAttribute) { + walkCodec(col.codec, isAccessibleViaAttribute, seen); + } + else { + walkCodec(col.codec, true, new Set()); + } + } + } + if (codec.arrayOfCodec) { + walkCodec(codec.arrayOfCodec, isAccessibleViaAttribute, seen); + } + if (codec.rangeOfCodec) { + walkCodec(codec.rangeOfCodec, isAccessibleViaAttribute, seen); + } + if (codec.domainOfCodec) { + walkCodec(codec.domainOfCodec, isAccessibleViaAttribute, seen); + } + }; + // Add table-like codecs used within attributes + for (const codec of Object.values(registry.pgCodecs)) { + walkCodec(codec); + } + // Remove from these those codecs that already have resources + for (const resource of Object.values(registry.pgResources)) { + if (!resource.parameters) { + tableLikeCodecsWithoutTableLikeResources.delete(resource.codec); + } + } + // Now add resources for the table-like codecs that don't have them already + for (const codec of tableLikeCodecsWithoutTableLikeResources) { + if (codec.executor) { + const resourceName = `frmcdc_${codec.name}`; + const resource = new PgResource(registry, { + name: resourceName, + executor: codec.executor, + from: (0, pg_sql2_1.default) `(select 1/0 /* codec-only resource; should not select directly */)`, + codec, + identifier: resourceName, + isVirtual: true, + extensions: { + tags: { + behavior: "-*", + }, + }, + }); + Object.defineProperties(resource, { + $exporter$args: { value: [registry, resourceName] }, + $exporter$factory: { + value: (registry, resourceName) => registry.pgResources[resourceName], + }, + }); + registry.pgResources[resourceName] = resource; + } + } + for (const codecName of Object.keys(config.pgRelations)) { + const relations = config.pgRelations[codecName]; + if (!relations) { + continue; + } + const builtRelations = Object.create(null); + // Tell the system to read the built relations from the registry + Object.defineProperties(builtRelations, { + $exporter$args: { value: [registry, codecName] }, + $exporter$factory: { + value: (registry, codecName) => registry.pgRelations[codecName], + }, + }); + for (const relationName of Object.keys(relations)) { + const relationConfig = relations[relationName]; + if (!relationConfig) { + continue; + } + const { localCodec, remoteResourceOptions, ...rest } = relationConfig; + const builtRelation = { + ...rest, + localCodec, + remoteResource: registry.pgResources[remoteResourceOptions.name], + }; + // Tell the system to read the built relation from the registry + Object.defineProperties(builtRelation, { + $exporter$args: { value: [registry, codecName, relationName] }, + $exporter$factory: { + value: (registry, codecName, relationName) => registry.pgRelations[codecName][relationName], + }, + }); + builtRelations[relationName] = builtRelation; + } + registry.pgRelations[codecName] = builtRelations; + } + validateRelations(registry); + return registry; +} +(0, grafast_1.exportAs)("@dataplan/pg", makeRegistry, "makeRegistry"); +function validateRelations(registry) { + // PERF: skip this if not isDev? + const reg = registry; + for (const codec of Object.values(reg.pgCodecs)) { + // Check that all the `via` and `identicalVia` match actual relations. + const relationKeys = Object.keys(reg.pgRelations[codec.name] ?? {}); + if (codec.attributes) { + Object.entries(codec.attributes).forEach(([attributeName, col]) => { + const { via, identicalVia } = col; + if (via != null) { + if (typeof via === "string") { + if (!relationKeys.includes(via)) { + throw new Error(`${codec.name} claims attribute '${attributeName}' is via relation '${via}', but there is no such relation.`); + } + } + else { + if (!relationKeys.includes(via.relation)) { + throw new Error(`${codec.name} claims attribute '${attributeName}' is via relation '${via.relation}', but there is no such relation.`); + } + } + } + if (identicalVia) { + if (typeof identicalVia === "string") { + if (!relationKeys.includes(identicalVia)) { + throw new Error(`${codec.name} claims attribute '${attributeName}' is identicalVia relation '${identicalVia}', but there is no such relation.`); + } + } + else { + if (!relationKeys.includes(identicalVia.relation)) { + throw new Error(`${codec.name} claims attribute '${attributeName}' is identicalVia relation '${identicalVia.relation}', but there is no such relation.`); + } + } + } + }); + } + } +} +// eslint-disable-next-line @typescript-eslint/ban-types +function makeRegistryBuilder() { + const registryConfig = { + pgExecutors: Object.create(null), + pgCodecs: Object.create(null), + pgResources: Object.create(null), + pgRelations: Object.create(null), + }; + const builder = { + getRegistryConfig() { + return registryConfig; + }, + addExecutor(executor) { + const existing = registryConfig.pgExecutors[executor.name]; + if (existing) { + if (existing !== executor) { + throw new Error(`Attempted to add a second executor named '${executor.name}' (existing: ${(0, inspect_js_1.inspect)(existing)}, new: ${(0, inspect_js_1.inspect)(executor)})`); + } + return builder; + } + registryConfig.pgExecutors[executor.name] = executor; + return builder; + }, + addCodec(codec) { + const existing = registryConfig.pgCodecs[codec.name]; + if (existing) { + if (existing !== codec) { + throw new Error(`Attempted to add a second codec named '${codec.name}' (existing: ${(0, inspect_js_1.inspect)(existing)}, new: ${(0, inspect_js_1.inspect)(codec)})`); + } + return builder; + } + registryConfig.pgCodecs[codec.name] = codec; + if (codec.arrayOfCodec) { + this.addCodec(codec.arrayOfCodec); + } + if (codec.domainOfCodec) { + this.addCodec(codec.domainOfCodec); + } + if (codec.rangeOfCodec) { + this.addCodec(codec.rangeOfCodec); + } + if (codec.attributes) { + for (const col of Object.values(codec.attributes)) { + this.addCodec(col.codec); + } + } + return builder; + }, + addResource(resource) { + this.addExecutor(resource.executor); + const existing = registryConfig.pgResources[resource.name]; + if (existing) { + if (existing !== resource) { + throw new Error(`Attempted to add a second resource named '${resource.name}':\n First represented ${printResourceFrom(existing)}.\n Second represents ${printResourceFrom(resource)}.\n Details: ${chalk_1.default.bold.blue.underline `https://err.red/p2rc`}`); + } + return builder; + } + this.addCodec(resource.codec); + registryConfig.pgResources[resource.name] = resource; + return builder; + }, + addRelation(localCodec, relationName, remoteResourceOptions, relation) { + if (!registryConfig.pgCodecs[localCodec.name]) { + throw new Error(`Adding a relation before adding the codec is forbidden.`); + } + if (!registryConfig.pgResources[remoteResourceOptions.name]) { + throw new Error(`Adding a relation before adding the resource is forbidden.`); + } + if (!registryConfig.pgRelations[localCodec.name]) { + registryConfig.pgRelations[localCodec.name] = Object.create(null); + } + registryConfig.pgRelations[localCodec.name][relationName] = { + localCodec, + remoteResourceOptions, + ...relation, + }; + return builder; + }, + build() { + return EXPORTABLE((makeRegistry, registryConfig) => makeRegistry(registryConfig), [makeRegistry, registryConfig], "registry"); + }, + }; + return builder; +} +(0, grafast_1.exportAs)("@dataplan/pg", makeRegistryBuilder, "makeRegistryBuilder"); +function makePgResourceOptions(options) { + return options; +} +(0, grafast_1.exportAs)("@dataplan/pg", makePgResourceOptions, "makePgResourceOptions"); +function printResourceFrom(resource) { + if (typeof resource.from === "function") { + return `a function accepting ${resource.parameters?.length} parameters and returning SQL type '${pg_sql2_1.default.compile(resource.codec.sqlType).text}'`; + } + else { + return `a table/view/etc called '${pg_sql2_1.default.compile(resource.from).text}'`; + } +} +//# sourceMappingURL=datasource.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/datasource.js.map b/grafast/dataplan-pg/dist/datasource.js.map new file mode 100644 index 0000000000..dd3665fc44 --- /dev/null +++ b/grafast/dataplan-pg/dist/datasource.js.map @@ -0,0 +1 @@ +{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../src/datasource.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/examples/exampleSchema.d.ts b/grafast/dataplan-pg/dist/examples/exampleSchema.d.ts new file mode 100644 index 0000000000..f5c82955e1 --- /dev/null +++ b/grafast/dataplan-pg/dist/examples/exampleSchema.d.ts @@ -0,0 +1,13 @@ +import { GraphQLSchema } from "grafast/graphql"; +import type { WithPgClient } from "../"; +import type { NodePostgresPgClient, PgSubscriber } from "../adaptors/pg.js"; +export declare function EXPORTABLE(factory: (...args: TScope) => T, args: [...TScope], nameHint?: string): T; +export interface OurGraphQLContext extends Grafast.Context { + pgSettings: Record; + withPgClient: WithPgClient; + pgSubscriber: PgSubscriber; +} +export declare function makeExampleSchema(options?: { + deoptimize?: boolean; +}): GraphQLSchema; +//# sourceMappingURL=exampleSchema.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/examples/exampleSchema.d.ts.map b/grafast/dataplan-pg/dist/examples/exampleSchema.d.ts.map new file mode 100644 index 0000000000..35364fcdff --- /dev/null +++ b/grafast/dataplan-pg/dist/examples/exampleSchema.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"exampleSchema.d.ts","sourceRoot":"","sources":["../../src/examples/exampleSchema.ts"],"names":[],"mappings":"AAqDA,OAAO,EASL,aAAa,EAId,MAAM,iBAAiB,CAAC;AAKzB,OAAO,KAAK,EAQV,YAAY,EACb,MAAM,KAAK,CAAC;AACb,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAoD5E,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,SAAS,GAAG,EAAE,EAChD,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,KAAK,CAAC,EAC/B,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,CAAC,CAaH;AAKD,MAAM,WAAW,iBAAkB,SAAQ,OAAO,CAAC,OAAO;IACxD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/C,YAAY,EAAE,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACjD,YAAY,EAAE,YAAY,CAAC;CAC5B;AAMD,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAwB,GACtD,aAAa,CAi4Jf"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/examples/exampleSchema.js b/grafast/dataplan-pg/dist/examples/exampleSchema.js new file mode 100644 index 0000000000..d1556c4552 --- /dev/null +++ b/grafast/dataplan-pg/dist/examples/exampleSchema.js @@ -0,0 +1,3488 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EXPORTABLE = EXPORTABLE; +exports.makeExampleSchema = makeExampleSchema; +const tslib_1 = require("tslib"); +/* + * This is a hand-rolled GraphQL schema that we used throughout the development + * of Grafast; it's used for the @dataplan/pg tests and demonstrates common + * patterns as well as edge cases. This is NOT meant to be an example of how + * _you_ should write a schema, in particular it's (deliberately) quite + * inconsistent and has many ways of achieving the same goals. I would not + * recommend reading it in full, but dipping in to particular places you're + * interested in might be useful. + */ +const json_1 = require("@dataplan/json"); +const crypto = tslib_1.__importStar(require("crypto")); +const fs_1 = require("fs"); +const grafast_1 = require("grafast"); +const graphql_1 = require("grafast/graphql"); +const pg_sql2_1 = tslib_1.__importDefault(require("pg-sql2")); +const codecs_js_1 = require("../codecs.js"); +const datasource_js_1 = require("../datasource.js"); +const index_js_1 = require("../index.js"); +const pgPageInfo_js_1 = require("../steps/pgPageInfo.js"); +const pgSelect_js_1 = require("../steps/pgSelect.js"); +const pgUnionAll_js_1 = require("../steps/pgUnionAll.js"); +const withPgClient_js_1 = require("../steps/withPgClient.js"); +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); +function EXPORTABLE(factory, args, nameHint) { + const fn = factory(...args); + if ((typeof fn === "function" || (typeof fn === "object" && fn !== null)) && + !("$exporter$factory" in fn)) { + Object.defineProperties(fn, { + $exporter$args: { value: args }, + $exporter$factory: { value: factory }, + $exporter$name: { writable: true, value: nameHint }, + }); + } + return fn; +} +/*+--------------------------------------------------------------------------+ + | DATA SOURCES | + +--------------------------------------------------------------------------+*/ +function makeExampleSchema(options = Object.create(null)) { + const executor = EXPORTABLE((PgExecutor, context, object) => new PgExecutor({ + name: "main", + context: () => { + const $context = context(); + return object({ + pgSettings: $context.get("pgSettings"), + withPgClient: $context.get("withPgClient"), + }); + }, + }), [index_js_1.PgExecutor, grafast_1.context, grafast_1.object], "defaultPgExecutor"); + /** + * Applies auth checks to the plan; we are using a placeholder here for now. + */ + const selectAuth = EXPORTABLE((sql) => ($step) => { + $step.where(sql `true /* authorization checks */`); + }, [pg_sql2_1.default], "selectAuth"); + const registryConfig = EXPORTABLE((PgResource, TYPES, enumCodec, executor, listOfCodec, makePgResourceOptions, makeRegistryBuilder, recordCodec, selectAuth, sql, sqlFromArgDigests) => { + const col = (options) => { + const { notNull, codec, expression, via, identicalVia } = options; + return { + codec: codec, + notNull: !!notNull, + expression, + via, + identicalVia, + }; + }; + const forumCodec = recordCodec({ + executor, + name: "forums", + identifier: sql `app_public.forums`, + attributes: { + id: col({ notNull: true, codec: TYPES.uuid }), + name: col({ notNull: true, codec: TYPES.citext }), + archived_at: col({ codec: TYPES.timestamptz }), + is_archived: col({ + codec: TYPES.boolean, + expression: (alias) => sql `${alias}.archived_at is not null`, + }), + }, + }); + const userCodec = recordCodec({ + executor, + name: "users", + identifier: sql `app_public.users`, + attributes: { + id: col({ notNull: true, codec: TYPES.uuid }), + username: col({ notNull: true, codec: TYPES.citext }), + gravatar_url: col({ codec: TYPES.text }), + created_at: col({ notNull: true, codec: TYPES.timestamptz }), + }, + }); + const messagesCodec = recordCodec({ + executor, + name: "messages", + identifier: sql `app_public.messages`, + attributes: { + id: col({ notNull: true, codec: TYPES.uuid }), + body: col({ notNull: true, codec: TYPES.text }), + author_id: col({ + notNull: true, + codec: TYPES.uuid, + identicalVia: { relation: "author", attribute: "person_id" }, + }), + forum_id: col({ + notNull: true, + codec: TYPES.uuid, + identicalVia: { relation: "forum", attribute: "id" }, + }), + created_at: col({ notNull: true, codec: TYPES.timestamptz }), + archived_at: col({ codec: TYPES.timestamptz }), + featured: col({ codec: TYPES.boolean }), + is_archived: col({ + codec: TYPES.boolean, + expression: (alias) => sql `${alias}.archived_at is not null`, + }), + }, + }); + const uniqueAuthorCountResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: TYPES.int, + from: (...args) => sql `app_public.unique_author_count(${sqlFromArgDigests(args)})`, + name: "unique_author_count", + parameters: [ + { + name: "featured", + required: false, + codec: TYPES.boolean, + }, + ], + isUnique: true, + }); + const forumNamesArrayResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: listOfCodec(TYPES.text), + from: (...args) => sql `app_public.forum_names_array(${sqlFromArgDigests(args)})`, + name: "forum_names_array", + parameters: [], + isUnique: true, // No setof + }); + const forumNamesCasesResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: listOfCodec(TYPES.text), + from: (...args) => sql `app_public.forum_names_cases(${sqlFromArgDigests(args)})`, + name: "forum_names_cases", + parameters: [], + }); + const forumsUniqueAuthorCountResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: TYPES.int, + from: (...args) => sql `app_public.forums_unique_author_count(${sqlFromArgDigests(args)})`, + name: "forums_unique_author_count", + parameters: [ + { + name: "forums", + required: true, + codec: forumCodec, + }, + { + name: "featured", + required: false, + codec: TYPES.boolean, + }, + ], + isUnique: true, + }); + const scalarTextResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: TYPES.text, + from: sql `(select '')`, + name: "text", + }); + const messageResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: messagesCodec, + from: sql `app_public.messages`, + name: "messages", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const userResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: userCodec, + from: sql `app_public.users`, + name: "users", + uniques: [ + { attributes: ["id"], isPrimary: true }, + { attributes: ["username"] }, + ], + }); + const forumResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: forumCodec, + from: sql `app_public.forums`, + name: "forums", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const usersMostRecentForumResourceOptions = PgResource.functionResourceOptions(forumResourceOptions, { + name: "users_most_recent_forum", + from: (...args) => sql `app_public.users_most_recent_forum(${sqlFromArgDigests(args)})`, + returnsArray: false, + returnsSetof: false, + parameters: [ + { + name: "u", + codec: userResourceOptions.codec, + required: true, + notNull: true, + }, + ], + selectAuth: null, + }); + const featuredMessagesResourceOptions = PgResource.functionResourceOptions(messageResourceOptions, { + name: "featured_messages", + from: (...args) => sql `app_public.featured_messages(${sqlFromArgDigests(args)})`, + returnsSetof: true, + returnsArray: false, + parameters: [], + }); + const forumsFeaturedMessagesResourceOptions = PgResource.functionResourceOptions(messageResourceOptions, { + name: "forums_featured_messages", + from: (...args) => sql `app_public.forums_featured_messages(${sqlFromArgDigests(args)})`, + returnsSetof: true, + returnsArray: false, + parameters: [ + { + name: "forum", + required: true, + codec: forumCodec, + }, + ], + }); + const randomUserArrayResourceOptions = PgResource.functionResourceOptions(userResourceOptions, { + name: "random_user_array", + from: (...args) => sql `app_public.random_user_array(${sqlFromArgDigests(args)})`, + returnsArray: true, + returnsSetof: false, + parameters: [], + }); + const randomUserArraySetResourceOptions = PgResource.functionResourceOptions(userResourceOptions, { + name: "random_user_array_set", + from: (...args) => sql `app_public.random_user_array_set(${sqlFromArgDigests(args)})`, + returnsSetof: true, + returnsArray: true, + parameters: [], + }); + const forumsMessagesListSetResourceOptions = PgResource.functionResourceOptions(messageResourceOptions, { + name: "forums_messages_list_set", + from: (...args) => sql `app_public.forums_messages_list_set(${sqlFromArgDigests(args)})`, + parameters: [ + { + codec: forumCodec, + name: null, + required: true, + }, + ], + returnsArray: true, + returnsSetof: true, + extensions: { + tags: { + name: "messagesListSet", + }, + }, + }); + const unionEntityCodec = recordCodec({ + executor, + name: "union__entity", + identifier: sql `interfaces_and_unions.union__entity`, + attributes: { + person_id: col({ codec: TYPES.int, notNull: false }), + post_id: col({ codec: TYPES.int, notNull: false }), + comment_id: col({ codec: TYPES.int, notNull: false }), + }, + }); + const personBookmarksCodec = recordCodec({ + executor, + name: "person_bookmarks", + identifier: sql `interfaces_and_unions.person_bookmarks`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + person_id: col({ + codec: TYPES.int, + notNull: true, + identicalVia: { relation: "person", attribute: "id" }, + }), + bookmarked_entity: col({ + codec: unionEntityCodec, + notNull: true, + }), + }, + }); + const personBookmarksResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: personBookmarksCodec, + from: sql `interfaces_and_unions.person_bookmarks`, + name: "person_bookmarks", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const personCodec = recordCodec({ + executor, + name: "people", + identifier: sql `interfaces_and_unions.people`, + attributes: { + person_id: col({ codec: TYPES.int, notNull: true }), + username: col({ codec: TYPES.text, notNull: true }), + }, + }); + const personResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: personCodec, + from: sql `interfaces_and_unions.people`, + name: "people", + uniques: [ + { attributes: ["person_id"], isPrimary: true }, + { attributes: ["username"] }, + ], + }); + const postCodec = recordCodec({ + executor, + name: "posts", + identifier: sql `interfaces_and_unions.posts`, + attributes: { + post_id: col({ codec: TYPES.int, notNull: true }), + author_id: col({ + codec: TYPES.int, + notNull: true, + identicalVia: { relation: "author", attribute: "person_id" }, + }), + body: col({ codec: TYPES.text, notNull: true }), + }, + }); + const postResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: postCodec, + from: sql `interfaces_and_unions.posts`, + name: "posts", + uniques: [{ attributes: ["post_id"], isPrimary: true }], + }); + const commentCodec = recordCodec({ + executor, + name: "comments", + identifier: sql `interfaces_and_unions.comments`, + attributes: { + comment_id: col({ codec: TYPES.int, notNull: true }), + author_id: col({ + codec: TYPES.int, + notNull: true, + identicalVia: { relation: "author", attribute: "person_id" }, + }), + post_id: col({ + codec: TYPES.int, + notNull: true, + identicalVia: { relation: "post", attribute: "id" }, + }), + body: col({ codec: TYPES.text, notNull: true }), + }, + }); + const commentResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: commentCodec, + from: sql `interfaces_and_unions.comments`, + name: "comments", + uniques: [{ attributes: ["comment_id"], isPrimary: true }], + }); + const itemTypeEnumCodec = enumCodec({ + name: "item_type", + identifier: sql `interfaces_and_unions.item_type`, + values: ["TOPIC", "POST", "DIVIDER", "CHECKLIST", "CHECKLIST_ITEM"], + }); + const enumTableItemTypeCodec = recordCodec({ + executor, + name: "enum_table_item_type", + identifier: sql `interfaces_and_unions.enum_table_item_type`, + attributes: { + type: { + codec: TYPES.text, + notNull: true, + }, + description: { + codec: TYPES.text, + notNull: false, + }, + }, + }); + const enumTableItemTypeResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: enumTableItemTypeCodec, + from: sql `interfaces_and_unions.enum_table_item_type`, + name: "enum_table_item_type", + uniques: [{ attributes: ["type"], isPrimary: true }], + }); + const enumTableItemTypeEnumCodec = enumCodec({ + name: "enum_table_item_type_enum", + identifier: sql `text`, + values: ["TOPIC", "POST", "DIVIDER", "CHECKLIST", "CHECKLIST_ITEM"], + }); + const singleTableItemsCodec = recordCodec({ + executor, + name: "single_table_items", + identifier: sql `interfaces_and_unions.single_table_items`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + type: col({ + codec: itemTypeEnumCodec, + notNull: true, + }), + type2: col({ + codec: enumTableItemTypeEnumCodec, + notNull: true, + }), + parent_id: col({ + codec: TYPES.int, + notNull: false, + identicalVia: { relation: "parent", attribute: "id" }, + }), + author_id: col({ + codec: TYPES.int, + notNull: true, + identicalVia: { relation: "author", attribute: "person_id" }, + }), + position: col({ codec: TYPES.bigint, notNull: true }), + created_at: col({ codec: TYPES.timestamptz, notNull: true }), + updated_at: col({ codec: TYPES.timestamptz, notNull: true }), + is_explicitly_archived: col({ + codec: TYPES.boolean, + notNull: true, + }), + archived_at: col({ codec: TYPES.timestamptz, notNull: false }), + title: col({ codec: TYPES.text, notNull: false }), + description: col({ codec: TYPES.text, notNull: false }), + note: col({ codec: TYPES.text, notNull: false }), + color: col({ codec: TYPES.text, notNull: false }), + }, + }); + const singleTableItemsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: singleTableItemsCodec, + from: sql `interfaces_and_unions.single_table_items`, + name: "single_table_items", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const relationalItemsCodec = recordCodec({ + executor, + name: "relational_items", + identifier: sql `interfaces_and_unions.relational_items`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + type: col({ + codec: itemTypeEnumCodec, + notNull: true, + }), + type2: col({ + codec: enumTableItemTypeEnumCodec, + notNull: true, + }), + parent_id: col({ + codec: TYPES.int, + notNull: false, + identicalVia: { relation: "parent", attribute: "id" }, + }), + author_id: col({ + codec: TYPES.int, + notNull: true, + identicalVia: { relation: "author", attribute: "person_id" }, + }), + position: col({ codec: TYPES.bigint, notNull: true }), + created_at: col({ codec: TYPES.timestamptz, notNull: true }), + updated_at: col({ codec: TYPES.timestamptz, notNull: true }), + is_explicitly_archived: col({ + codec: TYPES.boolean, + notNull: true, + }), + archived_at: col({ codec: TYPES.timestamptz, notNull: false }), + }, + }); + const relationalItemsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: relationalItemsCodec, + from: sql `interfaces_and_unions.relational_items`, + name: "relational_items", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const relationalCommentableCodec = recordCodec({ + executor, + name: "relational_commentables", + identifier: sql `interfaces_and_unions.relational_commentables`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + type: col({ + codec: itemTypeEnumCodec, + notNull: true, + }), + type2: col({ + codec: enumTableItemTypeEnumCodec, + notNull: true, + }), + }, + }); + const relationalCommentableResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: relationalCommentableCodec, + from: sql `interfaces_and_unions.relational_commentables`, + name: "relational_commentables", + }); + const itemAttributes = { + id: col({ codec: TYPES.int, notNull: true, identicalVia: "item" }), + type: col({ codec: TYPES.text, notNull: true, via: "item" }), + type2: col({ + codec: enumTableItemTypeEnumCodec, + notNull: true, + via: "item", + }), + parent_id: col({ + codec: TYPES.int, + notNull: false, + via: "item", + }), + author_id: col({ + codec: TYPES.int, + notNull: true, + via: "item", + }), + position: col({ codec: TYPES.bigint, notNull: true, via: "item" }), + created_at: col({ + codec: TYPES.timestamptz, + notNull: true, + via: "item", + }), + updated_at: col({ + codec: TYPES.timestamptz, + notNull: true, + via: "item", + }), + is_explicitly_archived: col({ + codec: TYPES.boolean, + notNull: true, + via: "item", + }), + archived_at: col({ + codec: TYPES.timestamptz, + notNull: false, + via: "item", + }), + }; + const relationalTopicsCodec = recordCodec({ + executor, + name: "relational_topics", + identifier: sql `interfaces_and_unions.relational_topics`, + attributes: { + ...itemAttributes, + title: col({ codec: TYPES.text, notNull: false }), + }, + }); + const relationalTopicsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: relationalTopicsCodec, + from: sql `interfaces_and_unions.relational_topics`, + name: "relational_topics", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const relationalPostsCodec = recordCodec({ + executor, + name: "relational_posts", + identifier: sql `interfaces_and_unions.relational_posts`, + attributes: { + ...itemAttributes, + title: col({ codec: TYPES.text, notNull: false }), + description: col({ codec: TYPES.text, notNull: false }), + note: col({ codec: TYPES.text, notNull: false }), + }, + }); + const relationalPostsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: relationalPostsCodec, + from: sql `interfaces_and_unions.relational_posts`, + name: "relational_posts", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const relationalDividersCodec = recordCodec({ + executor, + name: "relational_dividers", + identifier: sql `interfaces_and_unions.relational_dividers`, + attributes: { + ...itemAttributes, + title: col({ codec: TYPES.text, notNull: false }), + color: col({ codec: TYPES.text, notNull: false }), + }, + }); + const relationalDividersResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: relationalDividersCodec, + from: sql `interfaces_and_unions.relational_dividers`, + name: "relational_dividers", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const relationalChecklistsCodec = recordCodec({ + executor, + name: "relational_checklists", + identifier: sql `interfaces_and_unions.relational_checklists`, + attributes: { + ...itemAttributes, + title: col({ codec: TYPES.text, notNull: false }), + }, + }); + const relationalChecklistsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: relationalChecklistsCodec, + from: sql `interfaces_and_unions.relational_checklists`, + name: "relational_checklists", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const relationalChecklistItemsCodec = recordCodec({ + executor, + name: "relational_checklist_items", + identifier: sql `interfaces_and_unions.relational_checklist_items`, + attributes: { + ...itemAttributes, + description: col({ codec: TYPES.text, notNull: true }), + note: col({ codec: TYPES.text, notNull: false }), + }, + }); + const relationalChecklistItemsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: relationalChecklistItemsCodec, + from: sql `interfaces_and_unions.relational_checklist_items`, + name: "relational_checklist_items", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + //////////////////////////////////////// + const unionItemsCodec = recordCodec({ + executor, + name: "union_items", + identifier: sql `interfaces_and_unions.union_items`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + type: col({ + codec: itemTypeEnumCodec, + notNull: true, + }), + type2: col({ + codec: enumTableItemTypeEnumCodec, + notNull: true, + }), + }, + }); + const unionItemsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: unionItemsCodec, + from: sql `interfaces_and_unions.union_items`, + name: "union_items", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const unionTopicsCodec = recordCodec({ + executor, + name: "union_topics", + identifier: sql `interfaces_and_unions.union_topics`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + title: col({ codec: TYPES.text, notNull: false }), + }, + }); + const unionTopicsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: unionTopicsCodec, + from: sql `interfaces_and_unions.union_topics`, + name: "union_topics", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const unionPostsCodec = recordCodec({ + executor, + name: "union_posts", + identifier: sql `interfaces_and_unions.union_posts`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + title: col({ codec: TYPES.text, notNull: false }), + description: col({ codec: TYPES.text, notNull: false }), + note: col({ codec: TYPES.text, notNull: false }), + }, + }); + const unionPostsResource = makePgResourceOptions({ + executor, + selectAuth, + codec: unionPostsCodec, + from: sql `interfaces_and_unions.union_posts`, + name: "union_posts", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const unionDividersCodec = recordCodec({ + executor, + name: "union_dividers", + identifier: sql `interfaces_and_unions.union_dividers`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + title: col({ codec: TYPES.text, notNull: false }), + color: col({ codec: TYPES.text, notNull: false }), + }, + }); + const unionDividersResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: unionDividersCodec, + from: sql `interfaces_and_unions.union_dividers`, + name: "union_dividers", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const unionChecklistsCodec = recordCodec({ + executor, + name: "union_checklists", + identifier: sql `interfaces_and_unions.union_checklists`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + title: col({ codec: TYPES.text, notNull: false }), + }, + }); + const unionChecklistsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: unionChecklistsCodec, + from: sql `interfaces_and_unions.union_checklists`, + name: "union_checklists", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const unionChecklistItemsCodec = recordCodec({ + executor, + name: "union_checklist_items", + identifier: sql `interfaces_and_unions.union_checklist_items`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + description: col({ codec: TYPES.text, notNull: true }), + note: col({ codec: TYPES.text, notNull: false }), + }, + }); + const unionChecklistItemsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: unionChecklistItemsCodec, + from: sql `interfaces_and_unions.union_checklist_items`, + name: "union_checklist_items", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const unionEntityResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: unionEntityCodec, + from: sql `(select null::interfaces_and_unions.union__entity)`, + name: "union__entity", + }); + const entitySearchResourceOptions = PgResource.functionResourceOptions(unionEntityResourceOptions, { + from: (...args) => sql `interfaces_and_unions.search(${sqlFromArgDigests(args)})`, + returnsSetof: true, + returnsArray: false, + name: "entity_search", + parameters: [ + { + name: "query", + required: true, + codec: TYPES.text, + }, + ], + }); + //////////////////////////////////////// + const awsApplicationsCodec = recordCodec({ + executor, + name: "aws_applications", + identifier: sql `interfaces_and_unions.aws_applications`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + name: col({ + codec: TYPES.text, + notNull: true, + }), + last_deployed: col({ + codec: TYPES.timestamptz, + notNull: false, + }), + aws_id: col({ codec: TYPES.text, notNull: false }), + }, + }); + const awsApplicationsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: awsApplicationsCodec, + from: sql `interfaces_and_unions.aws_applications`, + name: "aws_applications", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const gcpApplicationsCodec = recordCodec({ + executor, + name: "gcp_applications", + identifier: sql `interfaces_and_unions.gcp_applications`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + name: col({ + codec: TYPES.text, + notNull: true, + }), + last_deployed: col({ + codec: TYPES.timestamptz, + notNull: false, + }), + gcp_id: col({ codec: TYPES.text, notNull: false }), + }, + }); + const gcpApplicationsResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: gcpApplicationsCodec, + from: sql `interfaces_and_unions.gcp_applications`, + name: "gcp_applications", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const firstPartyVulnerabilitiesCodec = recordCodec({ + executor, + name: "first_party_vulnerabilities", + identifier: sql `interfaces_and_unions.first_party_vulnerabilities`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + name: col({ + codec: TYPES.text, + notNull: true, + }), + cvss_score: col({ codec: TYPES.float, notNull: true }), + team_name: col({ codec: TYPES.text, notNull: false }), + }, + }); + const firstPartyVulnerabilitiesResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: firstPartyVulnerabilitiesCodec, + from: sql `interfaces_and_unions.first_party_vulnerabilities`, + name: "first_party_vulnerabilities", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + const thirdPartyVulnerabilitiesCodec = recordCodec({ + executor, + name: "third_party_vulnerabilities", + identifier: sql `interfaces_and_unions.third_party_vulnerabilities`, + attributes: { + id: col({ codec: TYPES.int, notNull: true }), + name: col({ + codec: TYPES.text, + notNull: true, + }), + cvss_score: col({ codec: TYPES.float, notNull: true }), + vendor_name: col({ codec: TYPES.text, notNull: false }), + }, + }); + const thirdPartyVulnerabilitiesResourceOptions = makePgResourceOptions({ + executor, + selectAuth, + codec: thirdPartyVulnerabilitiesCodec, + from: sql `interfaces_and_unions.third_party_vulnerabilities`, + name: "third_party_vulnerabilities", + uniques: [{ attributes: ["id"], isPrimary: true }], + }); + return makeRegistryBuilder() + .addExecutor(executor) + .addCodec(forumCodec) + .addCodec(userCodec) + .addCodec(messagesCodec) + .addResource(uniqueAuthorCountResourceOptions) + .addResource(forumNamesArrayResourceOptions) + .addResource(forumNamesCasesResourceOptions) + .addResource(forumsUniqueAuthorCountResourceOptions) + .addResource(scalarTextResourceOptions) + .addResource(messageResourceOptions) + .addResource(userResourceOptions) + .addResource(forumResourceOptions) + .addResource(usersMostRecentForumResourceOptions) + .addResource(featuredMessagesResourceOptions) + .addResource(forumsFeaturedMessagesResourceOptions) + .addResource(randomUserArrayResourceOptions) + .addResource(randomUserArraySetResourceOptions) + .addResource(forumsMessagesListSetResourceOptions) + .addCodec(unionEntityCodec) + .addCodec(personBookmarksCodec) + .addResource(personBookmarksResourceOptions) + .addCodec(personCodec) + .addResource(personResourceOptions) + .addCodec(postCodec) + .addResource(postResourceOptions) + .addCodec(commentCodec) + .addResource(commentResourceOptions) + .addCodec(itemTypeEnumCodec) + .addCodec(enumTableItemTypeCodec) + .addResource(enumTableItemTypeResourceOptions) + .addCodec(enumTableItemTypeEnumCodec) + .addCodec(singleTableItemsCodec) + .addResource(singleTableItemsResourceOptions) + .addCodec(relationalItemsCodec) + .addResource(relationalItemsResourceOptions) + .addCodec(relationalCommentableCodec) + .addResource(relationalCommentableResourceOptions) + .addCodec(relationalTopicsCodec) + .addResource(relationalTopicsResourceOptions) + .addCodec(relationalPostsCodec) + .addResource(relationalPostsResourceOptions) + .addCodec(relationalDividersCodec) + .addResource(relationalDividersResourceOptions) + .addCodec(relationalChecklistsCodec) + .addResource(relationalChecklistsResourceOptions) + .addCodec(relationalChecklistItemsCodec) + .addResource(relationalChecklistItemsResourceOptions) + .addCodec(unionItemsCodec) + .addResource(unionItemsResourceOptions) + .addCodec(unionTopicsCodec) + .addResource(unionTopicsResourceOptions) + .addCodec(unionPostsCodec) + .addResource(unionPostsResource) + .addCodec(unionDividersCodec) + .addResource(unionDividersResourceOptions) + .addCodec(unionChecklistsCodec) + .addResource(unionChecklistsResourceOptions) + .addCodec(unionChecklistItemsCodec) + .addResource(unionChecklistItemsResourceOptions) + .addResource(unionEntityResourceOptions) + .addResource(entitySearchResourceOptions) + .addCodec(awsApplicationsCodec) + .addResource(awsApplicationsResourceOptions) + .addCodec(gcpApplicationsCodec) + .addResource(gcpApplicationsResourceOptions) + .addCodec(firstPartyVulnerabilitiesCodec) + .addResource(firstPartyVulnerabilitiesResourceOptions) + .addCodec(thirdPartyVulnerabilitiesCodec) + .addResource(thirdPartyVulnerabilitiesResourceOptions) + .addRelation(messagesCodec, "author", userResourceOptions, { + localAttributes: [`author_id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(messagesCodec, "forum", forumResourceOptions, { + localAttributes: ["forum_id"], + remoteAttributes: ["id"], + isUnique: true, + }) + .addRelation(personBookmarksResourceOptions.codec, "person", personResourceOptions, { + isUnique: true, + localAttributes: ["person_id"], + remoteAttributes: ["person_id"], + }) + .addRelation(personCodec, "singleTableItems", singleTableItemsResourceOptions, { + isUnique: false, + localAttributes: ["person_id"], + remoteAttributes: ["author_id"], + }) + .addRelation(personCodec, "posts", postResourceOptions, { + isUnique: false, + localAttributes: ["person_id"], + remoteAttributes: ["author_id"], + }) + .addRelation(personCodec, "comments", postResourceOptions, { + isUnique: false, + localAttributes: ["person_id"], + remoteAttributes: ["author_id"], + }) + .addRelation(personCodec, "personBookmarks", personBookmarksResourceOptions, { + isUnique: false, + localAttributes: ["person_id"], + remoteAttributes: ["person_id"], + }) + .addRelation(postCodec, "author", personResourceOptions, { + isUnique: true, + localAttributes: ["author_id"], + remoteAttributes: ["person_id"], + }) + .addRelation(postCodec, "comments", commentResourceOptions, { + isUnique: false, + localAttributes: ["post_id"], + remoteAttributes: ["post_id"], + }) + .addRelation(commentCodec, "author", personResourceOptions, { + isUnique: true, + localAttributes: ["author_id"], + remoteAttributes: ["person_id"], + }) + .addRelation(commentCodec, "post", postResourceOptions, { + isUnique: true, + localAttributes: ["post_id"], + remoteAttributes: ["post_id"], + }) + .addRelation(singleTableItemsCodec, "parent", singleTableItemsResourceOptions, { + isUnique: true, + localAttributes: ["parent_id"], + remoteAttributes: ["id"], + }) + .addRelation(singleTableItemsCodec, "children", singleTableItemsResourceOptions, { + isUnique: false, + localAttributes: ["id"], + remoteAttributes: ["parent_id"], + }) + .addRelation(singleTableItemsCodec, "author", personResourceOptions, { + isUnique: true, + localAttributes: ["author_id"], + remoteAttributes: ["person_id"], + }) + .addRelation(relationalTopicsCodec, "item", relationalItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalTopicsCodec, "parent", relationalItemsResourceOptions, { + localAttributes: [`parent_id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalTopicsCodec, "author", personResourceOptions, { + localAttributes: [`author_id`], + remoteAttributes: [`person_id`], + isUnique: true, + }) + .addRelation(relationalPostsCodec, "item", relationalItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalPostsCodec, "parent", relationalItemsResourceOptions, { + localAttributes: [`parent_id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalPostsCodec, "author", personResourceOptions, { + localAttributes: [`author_id`], + remoteAttributes: [`person_id`], + isUnique: true, + }) + .addRelation(relationalPostsCodec, "commentable", relationalCommentableResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalDividersCodec, "item", relationalItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalDividersCodec, "parent", relationalItemsResourceOptions, { + localAttributes: [`parent_id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalDividersCodec, "author", personResourceOptions, { + localAttributes: [`author_id`], + remoteAttributes: [`person_id`], + isUnique: true, + }) + .addRelation(relationalChecklistsCodec, "item", relationalItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalChecklistsCodec, "parent", relationalItemsResourceOptions, { + localAttributes: [`parent_id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalChecklistsCodec, "author", personResourceOptions, { + localAttributes: [`author_id`], + remoteAttributes: [`person_id`], + isUnique: true, + }) + .addRelation(relationalChecklistsCodec, "commentable", relationalCommentableResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalChecklistItemsCodec, "item", relationalItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalChecklistItemsCodec, "parent", relationalItemsResourceOptions, { + localAttributes: [`parent_id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalChecklistItemsCodec, "author", personResourceOptions, { + localAttributes: [`author_id`], + remoteAttributes: [`person_id`], + isUnique: true, + }) + .addRelation(relationalChecklistItemsCodec, "commentable", relationalCommentableResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(relationalItemsCodec, "parent", relationalItemsResourceOptions, { + isUnique: true, + localAttributes: ["parent_id"], + remoteAttributes: ["id"], + }) + .addRelation(relationalItemsCodec, "children", relationalItemsResourceOptions, { + isUnique: false, + localAttributes: ["id"], + remoteAttributes: ["parent_id"], + }) + .addRelation(relationalItemsCodec, "author", personResourceOptions, { + isUnique: true, + localAttributes: ["author_id"], + remoteAttributes: ["person_id"], + }) + .addRelation(relationalItemsCodec, "topic", relationalTopicsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(relationalItemsCodec, "post", relationalPostsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(relationalItemsCodec, "divider", relationalDividersResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(relationalItemsCodec, "checklist", relationalChecklistsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(relationalItemsCodec, "checklistItem", relationalChecklistItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(relationalCommentableCodec, "post", relationalPostsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(relationalCommentableCodec, "checklist", relationalChecklistsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(relationalCommentableCodec, "checklistItem", relationalChecklistItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + // reciprocal: 'item', + }) + .addRelation(unionItemsCodec, "topic", unionTopicsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(unionItemsCodec, "post", unionPostsResource, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(unionItemsCodec, "divider", unionDividersResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(unionItemsCodec, "checklist", unionChecklistsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .addRelation(unionItemsCodec, "checklistItem", unionChecklistItemsResourceOptions, { + localAttributes: [`id`], + remoteAttributes: [`id`], + isUnique: true, + }) + .getRegistryConfig(); + }, [ + index_js_1.PgResource, + index_js_1.TYPES, + index_js_1.enumCodec, + executor, + codecs_js_1.listOfCodec, + datasource_js_1.makePgResourceOptions, + datasource_js_1.makeRegistryBuilder, + index_js_1.recordCodec, + selectAuth, + pg_sql2_1.default, + pgSelect_js_1.sqlFromArgDigests, + ], "registryConfig"); + const registry = EXPORTABLE((makeRegistry, registryConfig) => makeRegistry(registryConfig), [datasource_js_1.makeRegistry, registryConfig], "registry"); + if (Math.random() > 2) { + /* + * This block includes a rudimentary TypeScript types test - we get a + * person by id, follow the relationship to their posts, grab one of these, + * then grab its id. This id should be an int4, we want to ensure that it's + * assignable to 'int4' and NOT assignable to 'text' (i.e. not `string` or + * `any`). + * + * NOTE: this code would throw errors if you actually try and run it + * because it's not being ran as part of a Grafast planning context - hence + * the `if`. + */ + const $person = registry.pgResources.people.get({ + person_id: (0, grafast_1.constant)(1, false), + }); + const $posts = $person.manyRelation("posts"); + const $post = $posts.single(); + const $id = $post.get("post_id"); + const _testGood = $id.pgCodec.name; + // @ts-expect-error + const _testBad = $id.pgCodec.name; + } + const deoptimizeIfAppropriate = EXPORTABLE((__ListTransformStep, options) => (step) => { + if (options.deoptimize) { + const innerPlan = step instanceof __ListTransformStep + ? step.getListStep() + : step; + if ("getClassStep" in innerPlan) { + innerPlan.getClassStep().setInliningForbidden(); + } + else if ("setInliningForbidden" in innerPlan) { + innerPlan.setInliningForbidden(); + } + } + return step; + }, [grafast_1.__ListTransformStep, options]); + const { pgCodecs: { union__entity: unionEntityCodec }, pgResources: { messages: messageResource, users: userResource, forums: forumResource, people: personResource, person_bookmarks: personBookmarksResource, posts: postResource, comments: commentResource, single_table_items: singleTableItemsResource, relational_items: relationalItemsResource, relational_topics: relationalTopicsResource, relational_posts: relationalPostsResource, relational_dividers: relationalDividersResource, relational_checklists: relationalChecklistsResource, relational_checklist_items: relationalChecklistItemsResource, union_items: unionItemsResource, union_topics: unionTopicsResource, union_posts: unionPostsResource, union_dividers: unionDividersResource, union_checklists: unionChecklistsResource, union_checklist_items: unionChecklistItemsResource, relational_commentables: relationalCommentableResource, users_most_recent_forum: usersMostRecentForumResource, forums_unique_author_count: forumsUniqueAuthorCountResource, forums_featured_messages: forumsFeaturedMessagesResource, forums_messages_list_set: forumsMessagesListSetResource, text: scalarTextResource, unique_author_count: uniqueAuthorCountResource, forum_names_array: forumNamesArrayResource, forum_names_cases: forumNamesCasesResource, random_user_array: randomUserArrayResource, random_user_array_set: randomUserArraySetResource, featured_messages: featuredMessagesResource, entity_search: entitySearchResource, first_party_vulnerabilities: firstPartyVulnerabilitiesResource, third_party_vulnerabilities: thirdPartyVulnerabilitiesResource, }, } = registry; + //////////////////////////////////////// + const EnumTableItemType = new graphql_1.GraphQLEnumType({ + name: "EnumTableItemType", + values: { + TOPIC: { value: "TOPIC" }, + POST: { value: "POST" }, + DIVIDER: { value: "DIVIDER" }, + CHECKLIST: { value: "CHECKLIST" }, + CHECKLIST_ITEM: { value: "CHECKLIST_ITEM" }, + }, + }); + function attrField(attrName, type) { + return { + type, + plan: EXPORTABLE((attrName) => function plan($entity) { + return $entity.get(attrName); + }, [attrName]), + }; + } + function singleRelationField(relation, type) { + return { + type, + plan: EXPORTABLE((deoptimizeIfAppropriate, relation) => function plan($entity) { + const $plan = $entity.singleRelation(relation); + deoptimizeIfAppropriate($plan); + return $plan; + }, [deoptimizeIfAppropriate, relation]), + }; + } + const HashType = new graphql_1.GraphQLEnumType({ + name: "HashType", + values: { + MD5: { value: "md5" }, + SHA1: { value: "sha1" }, + SHA256: { value: "sha256" }, + }, + }); + const Hashes = new graphql_1.GraphQLObjectType({ + name: "Hashes", + fields: () => ({ + md5: { + type: graphql_1.GraphQLString, + resolve: EXPORTABLE((crypto) => function resolve(parent) { + return crypto.createHash("md5").update(parent.text).digest("hex"); + }, [crypto]), + }, + sha1: { + type: graphql_1.GraphQLString, + resolve: EXPORTABLE((crypto) => function resolve(parent) { + return crypto + .createHash("sha1") + .update(parent.text) + .digest("hex"); + }, [crypto]), + }, + throwNonNullError: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + resolve: EXPORTABLE(() => function resolve() { + return null; + }, []), + }, + throwTestError: { + type: graphql_1.GraphQLString, + resolve: EXPORTABLE(() => function resolve() { + throw new Error("Test"); + }, []), + }, + sha256: { + type: graphql_1.GraphQLString, + resolve: EXPORTABLE((crypto) => function resolve(parent) { + return crypto + .createHash("sha256") + .update(parent.text) + .digest("hex"); + }, [crypto]), + }, + self: { + type: Hashes, + resolve: EXPORTABLE(() => function resolve(parent) { + return parent; + }, []), + }, + }), + }); + const User = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "User", + fields: () => ({ + // Here we don't use `attrField` because we want to explicitly test the default plan resolver + // username: attrField("username", GraphQLString), + username: { + type: graphql_1.GraphQLString, + }, + gravatarUrl: attrField("gravatar_url", graphql_1.GraphQLString), + mostRecentForum: { + type: Forum, + plan: EXPORTABLE((deoptimizeIfAppropriate, usersMostRecentForumResource) => ($user) => { + const $forum = usersMostRecentForumResource.execute([ + { step: $user.record() }, + ]); + deoptimizeIfAppropriate($forum); + return $forum; + }, [deoptimizeIfAppropriate, usersMostRecentForumResource]), + }, + // This field is to test standard resolvers work on planned types + usernameHash: { + type: graphql_1.GraphQLString, + args: { + hashType: { + type: new graphql_1.GraphQLNonNull(HashType), + }, + }, + plan: EXPORTABLE((object) => function plan($user) { + return object({ username: $user.get("username") }); + }, [grafast_1.object]), + resolve: EXPORTABLE((crypto) => function resolve(user, args) { + return crypto + .createHash(args.hashType) + .update(user.username) + .digest("hex"); + }, [crypto]), + }, + // This field is to test standard resolvers work when returning non-scalars on planned types + usernameHashes: { + type: Hashes, + plan: EXPORTABLE(() => function plan($user) { + return $user.get("username"); + }, []), + resolve: EXPORTABLE(() => function resolve(username) { + return { text: username }; + }, []), + }, + }), + }); + const MessagesOrderBy = new graphql_1.GraphQLEnumType({ + name: "MessagesOrderBy", + values: { + BODY_ASC: { + extensions: { + grafast: { + apply: EXPORTABLE((TYPES, sql) => (qb) => { + qb.orderBy({ + codec: TYPES.text, + fragment: sql `${qb}.body`, + direction: "ASC", + }); + }, [index_js_1.TYPES, pg_sql2_1.default]), + }, + }, + }, + BODY_DESC: { + extensions: { + grafast: { + apply: EXPORTABLE((TYPES, sql) => (qb) => { + qb.orderBy({ + codec: TYPES.text, + fragment: sql `${qb}.body`, + direction: "DESC", + }); + }, [index_js_1.TYPES, pg_sql2_1.default]), + }, + }, + }, + AUTHOR_USERNAME_ASC: { + extensions: { + grafast: { + apply: EXPORTABLE((TYPES, sql) => (qb) => { + const authorAlias = qb.singleRelation("author"); + qb.orderBy({ + codec: TYPES.text, + fragment: sql `${authorAlias}.username`, + direction: "ASC", + }); + }, [index_js_1.TYPES, pg_sql2_1.default]), + }, + }, + }, + AUTHOR_USERNAME_DESC: { + extensions: { + grafast: { + apply: EXPORTABLE((TYPES, sql) => (qb) => { + const authorAlias = qb.singleRelation("author"); + qb.orderBy({ + codec: TYPES.text, + fragment: sql `${authorAlias}.username`, + direction: "DESC", + }); + }, [index_js_1.TYPES, pg_sql2_1.default]), + }, + }, + }, + }, + }); + const Message = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "Message", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLString), + featured: attrField("featured", graphql_1.GraphQLBoolean), + body: attrField("body", graphql_1.GraphQLString), + forum: singleRelationField("forum", Forum), + author: { + type: User, + plan: EXPORTABLE((deoptimizeIfAppropriate) => function plan($message) { + const $user = $message.singleRelation("author"); + deoptimizeIfAppropriate($user); + return $user; + }, [deoptimizeIfAppropriate]), + }, + isArchived: attrField("is_archived", graphql_1.GraphQLBoolean), + }), + }); + const MessageEdge = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "MessageEdge", + fields: { + cursor: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE(() => function plan($node) { + return $node.cursor(); + }, []), + }, + node: { + type: Message, + plan: EXPORTABLE(() => function plan($node) { + return $node; + }, []), + }, + }, + }); + const PageInfo = (0, grafast_1.newObjectTypeBuilder)(pgPageInfo_js_1.PgPageInfoStep)({ + name: "PageInfo", + fields: { + hasNextPage: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLBoolean), + plan: EXPORTABLE(() => ($pageInfo) => $pageInfo.hasNextPage(), []), + }, + hasPreviousPage: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLBoolean), + plan: EXPORTABLE(() => ($pageInfo) => $pageInfo.hasPreviousPage(), []), + }, + startCursor: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE(() => ($pageInfo) => $pageInfo.startCursor(), []), + }, + endCursor: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE(() => ($pageInfo) => $pageInfo.endCursor(), []), + }, + }, + }); + const MessagesConnection = (0, grafast_1.newObjectTypeBuilder)(grafast_1.ConnectionStep)({ + name: "MessagesConnection", + fields: { + edges: { + type: new graphql_1.GraphQLList(MessageEdge), + plan: EXPORTABLE(() => function plan($connection) { + return $connection.edges(); + }, []), + }, + nodes: (0, grafast_1.newGrafastFieldConfigBuilder)()({ + type: new graphql_1.GraphQLList(Message), + plan: EXPORTABLE(() => function plan($connection) { + return $connection.nodes(); + }, []), + }), + pageInfo: (0, grafast_1.newGrafastFieldConfigBuilder)()({ + type: new graphql_1.GraphQLNonNull(PageInfo), + plan: EXPORTABLE(() => function plan($connection) { + // return context(); + return $connection.pageInfo(); + }, []), + }), + totalCount: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + plan: EXPORTABLE((TYPES, sql) => ($connection) => $connection + .cloneSubplanWithoutPagination("aggregate") + .single() + .select(sql `count(*)`, TYPES.bigint, false), [index_js_1.TYPES, pg_sql2_1.default]), + }, + }, + }); + const IncludeArchived = new graphql_1.GraphQLEnumType({ + name: "IncludeArchived", + values: { + INHERIT: { + value: "INHERIT", + }, + YES: { + value: "YES", + }, + NO: { + value: "NO", + }, + EXCLUSIVELY: { + value: "EXCLUSIVELY", + }, + }, + }); + function makeIncludeArchivedArg(getClassStep) { + return { + type: IncludeArchived, + applyPlan: EXPORTABLE((PgSelectSingleStep, constant, getClassStep, includeArchivedCondition, lambda) => function plan($parent, $field, val) { + const $messages = getClassStep($field); + const $value = val.getRaw(); + const $parentPgSelectSingle = $parent instanceof PgSelectSingleStep + ? $parent + : null; + const sqlParentArchivedAt = $parentPgSelectSingle?.resource?.codec + .attributes?.archived_at + ? $messages.placeholder($parentPgSelectSingle.get("archived_at")) + : undefined; + const $condition = lambda([constant(sqlParentArchivedAt), $value], includeArchivedCondition, true); + $messages.apply($condition); + }, [ + index_js_1.PgSelectSingleStep, + grafast_1.constant, + getClassStep, + includeArchivedCondition, + grafast_1.lambda, + ]), + defaultValue: "INHERIT", + }; + } + const MessageCondition = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "MessageCondition", + fields: { + featured: { + type: graphql_1.GraphQLBoolean, + apply: EXPORTABLE((TYPES, sql, sqlValueWithCodec) => function plan($condition, arg) { + if (arg === null) { + $condition.where(sql `${$condition}.featured is null`); + } + else { + $condition.where(sql `${$condition}.featured = ${sqlValueWithCodec(arg, TYPES.boolean)}`); + } + }, [index_js_1.TYPES, pg_sql2_1.default, codecs_js_1.sqlValueWithCodec]), + }, + }, + }); + const BooleanFilter = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "BooleanFilter", + fields: { + equalTo: { + type: graphql_1.GraphQLBoolean, + apply: EXPORTABLE((TYPES, sql, sqlValueWithCodec) => function plan($parent, arg) { + if (arg === null) { + // Ignore + } + else { + $parent.where(sql `${$parent.expression} = ${sqlValueWithCodec(arg, TYPES.boolean)}`); + } + }, [index_js_1.TYPES, pg_sql2_1.default, codecs_js_1.sqlValueWithCodec]), + }, + notEqualTo: { + type: graphql_1.GraphQLBoolean, + apply: EXPORTABLE((TYPES, sql, sqlValueWithCodec) => function plan($parent, arg) { + if (arg === null) { + // Ignore + } + else { + $parent.where(sql `${$parent.expression} <> ${sqlValueWithCodec(arg, TYPES.boolean)}`); + } + }, [index_js_1.TYPES, pg_sql2_1.default, codecs_js_1.sqlValueWithCodec]), + }, + }, + }); + const MessageFilter = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "MessageFilter", + fields: { + featured: { + type: BooleanFilter, + apply: EXPORTABLE((PgBooleanFilter, sql) => function plan($messageFilter, arg) { + if (arg === null) { + // Ignore + } + else { + return new PgBooleanFilter($messageFilter, sql `${$messageFilter}.featured`); + } + }, [index_js_1.PgBooleanFilter, pg_sql2_1.default]), + }, + isArchived: { + type: BooleanFilter, + apply: EXPORTABLE((PgBooleanFilter, sql) => function plan($messageFilter, arg) { + if (arg === null) { + // Ignore + } + else { + return new PgBooleanFilter($messageFilter, sql `${$messageFilter}.is_archived`); + } + }, [index_js_1.PgBooleanFilter, pg_sql2_1.default]), + }, + }, + }); + const ForumCondition = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "ForumCondition", + fields: { + name: { + type: graphql_1.GraphQLString, + apply: EXPORTABLE((TYPES, sql, sqlValueWithCodec) => function plan($condition, arg) { + if (arg === null) { + $condition.where(sql `${$condition}.name is null`); + } + else { + $condition.where(sql `${$condition}.name = ${sqlValueWithCodec(arg, TYPES.text)}`); + } + }, [index_js_1.TYPES, pg_sql2_1.default, codecs_js_1.sqlValueWithCodec]), + }, + }, + }); + const ForumToManyMessageFilter = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "ForumToManyMessageFilter", + fields: { + some: { + type: MessageFilter, + apply: EXPORTABLE(() => function plan($manyFilter, arg) { + if (arg !== null) { + return $manyFilter.some(); + } + }, []), + }, + }, + }); + const ForumFilter = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "ForumFilter", + fields: { + messages: { + type: ForumToManyMessageFilter, + apply: EXPORTABLE((PgManyFilter, messageResource) => function plan($condition, arg) { + if (arg !== null) { + return new PgManyFilter($condition, messageResource, ["id"], ["forum_id"]); + } + }, [index_js_1.PgManyFilter, messageResource]), + }, + }, + }); + const Forum = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "Forum", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLString), + name: attrField("name", graphql_1.GraphQLString), + // Expression attribute + isArchived: attrField("is_archived", graphql_1.GraphQLBoolean), + // Custom expression; actual attribute select shouldn't make it through to the generated query. + archivedAtIsNotNull: { + type: graphql_1.GraphQLBoolean, + plan: EXPORTABLE((TYPES, pgClassExpression) => function plan($forum) { + const $archivedAt = $forum.get("archived_at"); + const $expr1 = pgClassExpression($forum, TYPES.boolean, true) `${$archivedAt} is not null`; + const $expr2 = pgClassExpression($forum, TYPES.boolean, true) `${$expr1} is true`; + return $expr2; + }, [index_js_1.TYPES, index_js_1.pgClassExpression]), + }, + self: { + type: Forum, + plan: EXPORTABLE(() => function plan($forum) { + return $forum; + }, []), + }, + message: { + type: Message, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + }, + }, + plan: EXPORTABLE((deoptimizeIfAppropriate, messageResource) => function plan($forum, { $id }) { + const $forumId = $forum.get("id"); + const $message = messageResource.get({ + forum_id: $forumId, + id: $id, + }); + deoptimizeIfAppropriate($message); + return $message; + }, [deoptimizeIfAppropriate, messageResource]), + }, + messagesList: { + type: new graphql_1.GraphQLList(Message), + args: { + first: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$forum, $messages, arg) { + $messages.setFirst(arg.getRaw()); + }, []), + }, + condition: { + type: MessageCondition, + applyPlan: EXPORTABLE((pgWhere) => function plan(_$forum, $messages, arg) { + arg.apply($messages, pgWhere); + }, [pgWhere]), + }, + filter: { + type: MessageFilter, + applyPlan: EXPORTABLE((pgClassFilterWhere) => function plan(_$forum, $messages, arg) { + arg.apply($messages, pgClassFilterWhere); + }, [pgClassFilterWhere]), + }, + includeArchived: makeIncludeArchivedArg(($messages) => $messages), + }, + plan: EXPORTABLE((deoptimizeIfAppropriate, messageResource) => function plan($forum) { + const $forumId = $forum.get("id"); + const $messages = messageResource.find({ forum_id: $forumId }); + deoptimizeIfAppropriate($messages); + $messages.setTrusted(); + // $messages.leftJoin(...); + // $messages.innerJoin(...); + // $messages.relation('fk_messages_author_id') + // $messages.where(...); + // $messages.orderBy(...); + return $messages; + }, [deoptimizeIfAppropriate, messageResource]), + }, + messagesConnection: { + type: MessagesConnection, + args: { + first: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$forum, $connection, arg) { + $connection.setFirst(arg.getRaw()); + }, []), + }, + last: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setLast(arg.getRaw()); + }, []), + }, + condition: { + type: MessageCondition, + applyPlan: EXPORTABLE((pgWhere) => function plan(_$forum, $connection, arg) { + const $messages = $connection.getSubplan(); + arg.apply($messages, pgWhere); + }, [pgWhere]), + }, + filter: { + type: MessageFilter, + applyPlan: EXPORTABLE((pgClassFilterWhere) => function plan(_$forum, $connection, arg) { + const $messages = $connection.getSubplan(); + arg.apply($messages, pgClassFilterWhere); + }, [pgClassFilterWhere]), + }, + includeArchived: makeIncludeArchivedArg(($connection) => $connection.getSubplan()), + }, + plan: EXPORTABLE((connection, deoptimizeIfAppropriate, messageResource) => function plan($forum) { + const $messages = messageResource.find({ + forum_id: $forum.get("id"), + }); + $messages.setTrusted(); + deoptimizeIfAppropriate($messages); + // $messages.leftJoin(...); + // $messages.innerJoin(...); + // $messages.relation('fk_messages_author_id') + // $messages.where(...); + const $connectionPlan = connection($messages); + // $connectionPlan.orderBy... ? + // DEFINITELY NOT $messages.orderBy BECAUSE we don't want that applied to aggregates. + // DEFINITELY NOT $messages.limit BECAUSE we don't want those limits applied to aggregates or page info. + return $connectionPlan; + }, [grafast_1.connection, deoptimizeIfAppropriate, messageResource]), + }, + uniqueAuthorCount: { + type: graphql_1.GraphQLInt, + args: { + featured: { + type: graphql_1.GraphQLBoolean, + }, + }, + plan: EXPORTABLE((TYPES, forumsUniqueAuthorCountResource) => function plan($forum, { $featured }) { + return forumsUniqueAuthorCountResource.execute([ + { + step: $forum.record(), + }, + { + step: $featured, + pgCodec: TYPES.boolean, + }, + ]); + }, [index_js_1.TYPES, forumsUniqueAuthorCountResource]), + }, + randomUser: { + type: User, + plan: EXPORTABLE((deoptimizeIfAppropriate, pgSelect, sql, sqlFromArgDigests, userResource) => function plan($forum) { + const $user = pgSelect({ + resource: userResource, + identifiers: [], + args: [ + { + step: $forum.record(), + }, + ], + from: (...args) => sql `app_public.forums_random_user(${sqlFromArgDigests(args)})`, + name: "forums_random_user", + }).single(); + deoptimizeIfAppropriate($user); + return $user; + }, [ + deoptimizeIfAppropriate, + index_js_1.pgSelect, + pg_sql2_1.default, + pgSelect_js_1.sqlFromArgDigests, + userResource, + ]), + }, + featuredMessages: { + type: new graphql_1.GraphQLList(Message), + plan: EXPORTABLE((deoptimizeIfAppropriate, forumsFeaturedMessagesResource) => function plan($forum) { + const $messages = forumsFeaturedMessagesResource.execute([ + { + step: $forum.record(), + }, + ]); + deoptimizeIfAppropriate($messages); + return $messages; + }, [deoptimizeIfAppropriate, forumsFeaturedMessagesResource]), + }, + messagesListSet: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLList(Message)), + plan: EXPORTABLE((deoptimizeIfAppropriate, forumsMessagesListSetResource) => function plan($forum) { + const $partitionedMessages = forumsMessagesListSetResource.execute([ + { + step: $forum.record(), + }, + ]); + deoptimizeIfAppropriate($partitionedMessages); + return $partitionedMessages; + }, [deoptimizeIfAppropriate, forumsMessagesListSetResource]), + }, + messagesWithManyTransforms: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLList(Message)), + plan: EXPORTABLE((deoptimizeIfAppropriate, each, filter, groupBy, lambda, messageResource) => function plan($forum) { + // This is a deliberately convoluted plan to ensure that multiple + // filter plans work well together. + // Load _all_ the messages from the DB. + const $messages = messageResource.find(); + deoptimizeIfAppropriate($messages); + // Filter messages to those _not_ in this forum + const $messagesFromOtherForums = filter($messages, ($message) => lambda([$message.get("forum_id"), $forum.get("id")], ([messageForumId, forumId]) => messageForumId !== forumId, true)); + // Group messages by the "featured" property + const $grouped = groupBy($messagesFromOtherForums, ($message) => $message.get("featured")); + // Since `groupBy` results in a `Map`, turn it into an array by just getting the values + const $entries = lambda($grouped, (map) => [...map.values()], true); + // Now map over the resulting list of list of values and wrap with the message list item plan. + return each($entries, ($group) => each($group, ($item) => $messages.listItem($item))); + }, [ + deoptimizeIfAppropriate, + grafast_1.each, + grafast_1.filter, + grafast_1.groupBy, + grafast_1.lambda, + messageResource, + ]), + }, + }), + }); + const singleTableTypeNameCallback = EXPORTABLE(() => (v) => { + if (v == null) { + return v; + } + const type = { + TOPIC: "SingleTableTopic", + POST: "SingleTablePost", + DIVIDER: "SingleTableDivider", + CHECKLIST: "SingleTableChecklist", + CHECKLIST_ITEM: "SingleTableChecklistItem", + }[v]; + if (!type) { + throw new Error(`Could not determine type for '${v}'`); + } + return type; + }, []); + const singleTableTypeName = EXPORTABLE((lambda, singleTableTypeNameCallback) => ($entity) => { + const $type = $entity.get("type"); + const $typeName = lambda($type, singleTableTypeNameCallback, true); + return $typeName; + }, [grafast_1.lambda, singleTableTypeNameCallback]); + const singleTableItemInterface = EXPORTABLE((pgSingleTablePolymorphic, singleTableTypeName) => ($item) => pgSingleTablePolymorphic(singleTableTypeName($item), $item), [index_js_1.pgSingleTablePolymorphic, singleTableTypeName]); + const relationalItemPolymorphicTypeMap = EXPORTABLE((deoptimizeIfAppropriate) => ({ + RelationalTopic: { + match: (t) => t === "TOPIC", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("topic")), + }, + RelationalPost: { + match: (t) => t === "POST", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("post")), + }, + RelationalDivider: { + match: (t) => t === "DIVIDER", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("divider")), + }, + RelationalChecklist: { + match: (t) => t === "CHECKLIST", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("checklist")), + }, + RelationalChecklistItem: { + match: (t) => t === "CHECKLIST_ITEM", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("checklistItem")), + }, + }), [deoptimizeIfAppropriate]); + const relationalItemInterface = EXPORTABLE((pgPolymorphic, relationalItemPolymorphicTypeMap) => ($item) => pgPolymorphic($item, $item.get("type"), relationalItemPolymorphicTypeMap), [index_js_1.pgPolymorphic, relationalItemPolymorphicTypeMap]); + const unionItemPolymorphicTypeMap = EXPORTABLE((deoptimizeIfAppropriate) => ({ + UnionTopic: { + match: (t) => t === "TOPIC", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("topic")), + }, + UnionPost: { + match: (t) => t === "POST", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("post")), + }, + UnionDivider: { + match: (t) => t === "DIVIDER", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("divider")), + }, + UnionChecklist: { + match: (t) => t === "CHECKLIST", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("checklist")), + }, + UnionChecklistItem: { + match: (t) => t === "CHECKLIST_ITEM", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("checklistItem")), + }, + }), [deoptimizeIfAppropriate]); + const unionItemUnion = EXPORTABLE((pgPolymorphic, unionItemPolymorphicTypeMap) => ($item) => pgPolymorphic($item, $item.get("type"), unionItemPolymorphicTypeMap), [index_js_1.pgPolymorphic, unionItemPolymorphicTypeMap]); + const relationalCommentablePolymorphicTypeMap = EXPORTABLE((deoptimizeIfAppropriate) => ({ + RelationalPost: { + match: (t) => t === "POST", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("post")), + }, + RelationalChecklist: { + match: (t) => t === "CHECKLIST", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("checklist")), + }, + RelationalChecklistItem: { + match: (t) => t === "CHECKLIST_ITEM", + plan: (_, $item) => deoptimizeIfAppropriate($item.singleRelation("checklistItem")), + }, + }), [deoptimizeIfAppropriate]); + const relationalCommentableInterface = EXPORTABLE((pgPolymorphic, relationalCommentablePolymorphicTypeMap) => ($item) => pgPolymorphic($item, $item.get("type"), relationalCommentablePolymorphicTypeMap), [index_js_1.pgPolymorphic, relationalCommentablePolymorphicTypeMap]); + const entityPolymorphicTypeMap = EXPORTABLE((commentResource, personResource, postResource) => ({ + Person: { + match: (v) => v[0] != null, + plan: ($list) => personResource.get({ person_id: $list.at(0) }), + }, + Post: { + match: (v) => v[1] != null, + plan: ($list) => postResource.get({ post_id: $list.at(1) }), + }, + Comment: { + match: (v) => v[2] != null, + plan: ($list) => commentResource.get({ comment_id: $list.at(2) }), + }, + }), [commentResource, personResource, postResource]); + /** + * This makes a polymorphic plan that returns the "entity" represented by the + * "interfaces_and_unions.union__entity" type in the database (a composite + * type with an attribute that's a "foreign key" to each table that's + * included in the union). + * + * i.e. if `$item.get('person_id')` is set, then it's a Person and we should + * grab that person from the `personResource`. If `post_id` is set it's a Post, + * and so on. + */ + const entityUnion = EXPORTABLE((entityPolymorphicTypeMap, list, pgPolymorphic) => ($item) => pgPolymorphic($item, list([ + $item.get("person_id"), + $item.get("post_id"), + $item.get("comment_id"), + ]), entityPolymorphicTypeMap), [entityPolymorphicTypeMap, grafast_1.list, index_js_1.pgPolymorphic]); + const PersonBookmark = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "PersonBookmark", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLInt), + person: singleRelationField("person", Person), + bookmarkedEntity: { + type: Entity, + plan: EXPORTABLE((entityUnion) => function plan($personBookmark) { + const $entity = $personBookmark.get("bookmarked_entity"); + return entityUnion($entity); + }, [entityUnion]), + }, + }), + }); + const Person = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "Person", + fields: () => ({ + personId: attrField("person_id", graphql_1.GraphQLInt), + username: attrField("username", graphql_1.GraphQLString), + singleTableItemsList: { + type: new graphql_1.GraphQLList(SingleTableItem), + plan: EXPORTABLE((deoptimizeIfAppropriate, each, singleTableItemInterface, singleTableItemsResource) => function plan($person) { + const $personId = $person.get("person_id"); + const $items = singleTableItemsResource.find({ + author_id: $personId, + }); + deoptimizeIfAppropriate($items); + return each($items, singleTableItemInterface); + }, [ + deoptimizeIfAppropriate, + grafast_1.each, + singleTableItemInterface, + singleTableItemsResource, + ]), + }, + relationalItemsList: { + type: new graphql_1.GraphQLList(RelationalItem), + plan: EXPORTABLE((deoptimizeIfAppropriate, each, relationalItemInterface, relationalItemsResource) => function plan($person) { + const $personId = $person.get("person_id"); + const $items = relationalItemsResource.find({ + author_id: $personId, + }); + deoptimizeIfAppropriate($items); + return each($items, ($item) => relationalItemInterface($item)); + }, [ + deoptimizeIfAppropriate, + grafast_1.each, + relationalItemInterface, + relationalItemsResource, + ]), + }, + personBookmarksList: { + type: new graphql_1.GraphQLList(PersonBookmark), + plan: EXPORTABLE(() => function plan($person) { + return $person.manyRelation("personBookmarks"); + }, []), + }, + }), + }); + const Post = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "Post", + fields: () => ({ + postId: attrField("post_id", graphql_1.GraphQLInt), + body: attrField("body", graphql_1.GraphQLString), + author: singleRelationField("author", Person), + }), + }); + const Comment = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "Comment", + fields: () => ({ + commentId: attrField("comment_id", graphql_1.GraphQLInt), + author: singleRelationField("author", Person), + post: singleRelationField("post", Post), + body: attrField("body", graphql_1.GraphQLString), + }), + }); + //////////////////////////////////////// + const SingleTableItem = new graphql_1.GraphQLInterfaceType({ + name: "SingleTableItem", + fields: () => ({ + id: { type: graphql_1.GraphQLInt }, + type: { type: graphql_1.GraphQLString }, + type2: { type: EnumTableItemType }, + parent: { type: SingleTableItem }, + author: { type: Person }, + position: { type: graphql_1.GraphQLString }, + createdAt: { type: graphql_1.GraphQLString }, + updatedAt: { type: graphql_1.GraphQLString }, + isExplicitlyArchived: { type: graphql_1.GraphQLBoolean }, + archivedAt: { type: graphql_1.GraphQLString }, + }), + }); + const commonSingleTableItemFields = { + id: attrField("id", graphql_1.GraphQLInt), + type: attrField("type", graphql_1.GraphQLString), + type2: attrField("type2", EnumTableItemType), + parent: { + type: SingleTableItem, + plan: EXPORTABLE((deoptimizeIfAppropriate, singleTableItemInterface) => function plan($entity) { + const $plan = $entity.singleRelation("parent"); + deoptimizeIfAppropriate($plan); + return singleTableItemInterface($plan); + }, [deoptimizeIfAppropriate, singleTableItemInterface]), + }, + author: singleRelationField("author", Person), + position: attrField("position", graphql_1.GraphQLString), + createdAt: attrField("created_at", graphql_1.GraphQLString), + updatedAt: attrField("updated_at", graphql_1.GraphQLString), + isExplicitlyArchived: attrField("is_explicitly_archived", graphql_1.GraphQLBoolean), + archivedAt: attrField("archived_at", graphql_1.GraphQLString), + }; + const SingleTableTopic = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "SingleTableTopic", + interfaces: [SingleTableItem], + fields: () => ({ + ...commonSingleTableItemFields, + title: attrField("title", graphql_1.GraphQLString), + }), + }); + const SingleTablePost = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "SingleTablePost", + interfaces: [SingleTableItem], + fields: () => ({ + ...commonSingleTableItemFields, + title: attrField("title", graphql_1.GraphQLString), + description: attrField("description", graphql_1.GraphQLString), + note: attrField("note", graphql_1.GraphQLString), + }), + }); + const SingleTableDivider = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "SingleTableDivider", + interfaces: [SingleTableItem], + fields: () => ({ + ...commonSingleTableItemFields, + title: attrField("title", graphql_1.GraphQLString), + color: attrField("color", graphql_1.GraphQLString), + }), + }); + const SingleTableChecklist = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "SingleTableChecklist", + interfaces: [SingleTableItem], + fields: () => ({ + ...commonSingleTableItemFields, + title: attrField("title", graphql_1.GraphQLString), + }), + }); + const SingleTableChecklistItem = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "SingleTableChecklistItem", + interfaces: [SingleTableItem], + fields: () => ({ + ...commonSingleTableItemFields, + description: attrField("description", graphql_1.GraphQLString), + note: attrField("note", graphql_1.GraphQLString), + }), + }); + //////////////////////////////////////// + const RelationalItem = new graphql_1.GraphQLInterfaceType({ + name: "RelationalItem", + fields: () => ({ + id: { type: graphql_1.GraphQLInt }, + type: { type: graphql_1.GraphQLString }, + type2: { type: EnumTableItemType }, + parent: { type: RelationalItem }, + author: { type: Person }, + position: { type: graphql_1.GraphQLString }, + createdAt: { type: graphql_1.GraphQLString }, + updatedAt: { type: graphql_1.GraphQLString }, + isExplicitlyArchived: { type: graphql_1.GraphQLBoolean }, + archivedAt: { type: graphql_1.GraphQLString }, + }), + }); + const RelationalCommentable = new graphql_1.GraphQLInterfaceType({ + name: "RelationalCommentable", + fields: () => ({ + id: { type: graphql_1.GraphQLInt }, + type: { type: graphql_1.GraphQLString }, + type2: { type: EnumTableItemType }, + }), + }); + const commonRelationalItemFields = () => ({ + id: attrField("id", graphql_1.GraphQLInt), + type: attrField("type", graphql_1.GraphQLString), + type2: attrField("type2", EnumTableItemType), + parent: { + type: RelationalItem, + plan: EXPORTABLE((deoptimizeIfAppropriate, relationalItemInterface) => function plan($entity) { + const $plan = $entity.singleRelation("parent"); + deoptimizeIfAppropriate($plan); + return relationalItemInterface($plan); + }, [deoptimizeIfAppropriate, relationalItemInterface]), + }, + author: singleRelationField("author", Person), + position: attrField("position", graphql_1.GraphQLString), + createdAt: attrField("created_at", graphql_1.GraphQLString), + updatedAt: attrField("updated_at", graphql_1.GraphQLString), + isExplicitlyArchived: attrField("is_explicitly_archived", graphql_1.GraphQLBoolean), + archivedAt: attrField("archived_at", graphql_1.GraphQLString), + }); + const RelationalTopic = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "RelationalTopic", + interfaces: [RelationalItem], + fields: () => ({ + ...commonRelationalItemFields(), + title: attrField("title", graphql_1.GraphQLString), + }), + }); + const RelationalPost = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "RelationalPost", + interfaces: [RelationalItem, RelationalCommentable], + fields: () => ({ + ...commonRelationalItemFields(), + title: attrField("title", graphql_1.GraphQLString), + description: attrField("description", graphql_1.GraphQLString), + note: attrField("note", graphql_1.GraphQLString), + titleLower: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE((pgSelect, scalarTextResource, sql, sqlFromArgDigests) => function plan($entity) { + return pgSelect({ + resource: scalarTextResource, + identifiers: [], + args: [ + { + step: $entity.record(), + }, + ], + from: (...args) => sql `interfaces_and_unions.relational_posts_title_lower(${sqlFromArgDigests(args)})`, + name: "relational_posts_title_lower", + }).single(); + }, [index_js_1.pgSelect, scalarTextResource, pg_sql2_1.default, pgSelect_js_1.sqlFromArgDigests]), + }, + }), + }); + const RelationalDivider = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "RelationalDivider", + interfaces: [RelationalItem], + fields: () => ({ + ...commonRelationalItemFields(), + title: attrField("title", graphql_1.GraphQLString), + color: attrField("color", graphql_1.GraphQLString), + }), + }); + const RelationalChecklist = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "RelationalChecklist", + interfaces: [RelationalItem, RelationalCommentable], + fields: () => ({ + ...commonRelationalItemFields(), + title: attrField("title", graphql_1.GraphQLString), + }), + }); + const RelationalChecklistItem = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "RelationalChecklistItem", + interfaces: [RelationalItem, RelationalCommentable], + fields: () => ({ + ...commonRelationalItemFields(), + description: attrField("description", graphql_1.GraphQLString), + note: attrField("note", graphql_1.GraphQLString), + }), + }); + //////////////////////////////////////// + const UnionItem = new graphql_1.GraphQLUnionType({ + name: "UnionItem", + types: () => [ + UnionTopic, + UnionPost, + UnionDivider, + UnionChecklist, + UnionChecklistItem, + ], + }); + const UnionTopic = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "UnionTopic", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLInt), + title: attrField("title", graphql_1.GraphQLString), + }), + }); + const UnionPost = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "UnionPost", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLInt), + title: attrField("title", graphql_1.GraphQLString), + description: attrField("description", graphql_1.GraphQLString), + note: attrField("note", graphql_1.GraphQLString), + }), + }); + const UnionDivider = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "UnionDivider", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLInt), + title: attrField("title", graphql_1.GraphQLString), + color: attrField("color", graphql_1.GraphQLString), + }), + }); + const UnionChecklist = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "UnionChecklist", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLInt), + title: attrField("title", graphql_1.GraphQLString), + }), + }); + const UnionChecklistItem = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgSelectSingleStep)({ + name: "UnionChecklistItem", + fields: () => ({ + id: attrField("id", graphql_1.GraphQLInt), + description: attrField("description", graphql_1.GraphQLString), + note: attrField("note", graphql_1.GraphQLString), + }), + }); + //////////////////////////////////////// + const Entity = new graphql_1.GraphQLUnionType({ + name: "Entity", + types: () => [Person, Post, Comment], + }); + //////////////////////////////////////// + const Vulnerability = new graphql_1.GraphQLInterfaceType({ + name: "Vulnerability", + fields: { + cvssScore: { + type: graphql_1.GraphQLFloat, + }, + }, + }); + const FirstPartyVulnerability = (0, grafast_1.newObjectTypeBuilder)(grafast_1.ExecutableStep)({ + name: "FirstPartyVulnerability", + interfaces: [Vulnerability], + fields: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + plan: EXPORTABLE(() => function plan($v) { + return $v.get("id"); + }, []), + }, + name: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + plan: EXPORTABLE(() => function plan($v) { + return $v.get("name"); + }, []), + }, + cvssScore: { + type: graphql_1.GraphQLFloat, + plan: EXPORTABLE(() => function plan($v) { + return $v.get("cvss_score"); + }, []), + }, + teamName: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE(() => function plan($v) { + return $v.get("team_name"); + }, []), + }, + }, + }); + const ThirdPartyVulnerability = (0, grafast_1.newObjectTypeBuilder)(grafast_1.ExecutableStep)({ + name: "ThirdPartyVulnerability", + interfaces: [Vulnerability], + fields: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + plan: EXPORTABLE(() => function plan($v) { + return $v.get("id"); + }, []), + }, + name: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + plan: EXPORTABLE(() => function plan($v) { + return $v.get("name"); + }, []), + }, + cvssScore: { + type: graphql_1.GraphQLFloat, + plan: EXPORTABLE(() => function plan($v) { + return $v.get("cvss_score"); + }, []), + }, + vendorName: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE(() => function plan($v) { + return $v.get("vendor_name"); + }, []), + }, + }, + }); + const VulnerabilityEdge = (0, grafast_1.newObjectTypeBuilder)(pgUnionAll_js_1.PgUnionAllSingleStep)({ + name: "VulnerabilityEdge", + fields: { + cursor: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE(() => function plan($node) { + return $node.cursor(); + }, []), + }, + node: { + type: Vulnerability, + plan: EXPORTABLE(() => function plan($node) { + return $node; + }, []), + }, + }, + }); + const VulnerabilitiesConnection = (0, grafast_1.newObjectTypeBuilder)(grafast_1.ConnectionStep)({ + name: "VulnerabilitiesConnection", + fields: { + edges: { + type: new graphql_1.GraphQLList(VulnerabilityEdge), + plan: EXPORTABLE(() => function plan($connection) { + return $connection.edges(); + }, []), + }, + pageInfo: (0, grafast_1.newGrafastFieldConfigBuilder)()({ + type: new graphql_1.GraphQLNonNull(PageInfo), + plan: EXPORTABLE(() => function plan($connection) { + return $connection.pageInfo(); + }, []), + }), + }, + }); + const VulnerabilityCondition = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "VulnerabilityCondition", + fields: { + todo: { + type: graphql_1.GraphQLString, + }, + }, + }); + const VulnerabilitiesOrderBy = new graphql_1.GraphQLEnumType({ + name: "VulnerabilitiesOrderBy", + values: { + CVSS_SCORE_ASC: { + extensions: { + grafast: { + apply: EXPORTABLE(() => (qb) => { + qb.orderBy({ + attribute: "cvss_score", + direction: "ASC", + }); + }, []), + }, + }, + }, + CVSS_SCORE_DESC: { + extensions: { + grafast: { + apply: EXPORTABLE(() => (qb) => { + qb.orderBy({ + attribute: "cvss_score", + direction: "DESC", + }); + }, []), + }, + }, + }, + }, + }); + //////////////////////////////////////// + const Query = (0, grafast_1.newObjectTypeBuilder)(grafast_1.__ValueStep)({ + name: "Query", + fields: { + forums: { + type: new graphql_1.GraphQLList(Forum), + args: { + first: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $forums, arg) { + $forums.setFirst(arg.getRaw()); + }, []), + }, + includeArchived: makeIncludeArchivedArg(($forums) => $forums), + condition: { + type: ForumCondition, + applyPlan: EXPORTABLE((pgWhere) => function plan(_$root, $forums, arg) { + arg.apply($forums, pgWhere); + }, [pgWhere]), + }, + filter: { + type: ForumFilter, + applyPlan: EXPORTABLE((pgClassFilterWhere) => function plan(_$root, $forums, arg) { + arg.apply($forums, pgClassFilterWhere); + }, [pgClassFilterWhere]), + }, + }, + plan: EXPORTABLE((deoptimizeIfAppropriate, forumResource) => function plan(_$root) { + const $forums = forumResource.find(); + deoptimizeIfAppropriate($forums); + return $forums; + }, [deoptimizeIfAppropriate, forumResource]), + }, + forum: { + type: Forum, + plan: EXPORTABLE((deoptimizeIfAppropriate, forumResource) => function plan(_$root, { $id }) { + const $forum = forumResource.get({ + id: $id, + }); + deoptimizeIfAppropriate($forum); + return $forum; + }, [deoptimizeIfAppropriate, forumResource]), + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + }, + }, + }, + message: { + type: Message, + plan: EXPORTABLE((deoptimizeIfAppropriate, messageResource) => function plan(_$root, { $id }) { + const $message = messageResource.get({ + id: $id, + }); + deoptimizeIfAppropriate($message); + return $message; + }, [deoptimizeIfAppropriate, messageResource]), + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + }, + }, + }, + allMessagesConnection: { + type: MessagesConnection, + args: { + condition: { + type: MessageCondition, + applyPlan: EXPORTABLE((pgWhere) => function plan(_$root, $connection, arg) { + const $messages = $connection.getSubplan(); + arg.apply($messages, pgWhere); + }, [pgWhere]), + }, + filter: { + type: MessageFilter, + applyPlan: EXPORTABLE((pgClassFilterWhere) => function plan(_$root, $connection, arg) { + const $messages = $connection.getSubplan(); + arg.apply($messages, pgClassFilterWhere); + }, [pgClassFilterWhere]), + }, + includeArchived: makeIncludeArchivedArg(($connection) => $connection.getSubplan()), + first: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, val) { + $connection.setFirst(val.getRaw()); + }, []), + }, + last: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setLast(arg.getRaw()); + }, []), + }, + after: { + type: graphql_1.GraphQLString, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setAfter(arg.getRaw()); + }, []), + }, + before: { + type: graphql_1.GraphQLString, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setBefore(arg.getRaw()); + }, []), + }, + orderBy: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(MessagesOrderBy)), + }, + }, + plan: EXPORTABLE((connection, deoptimizeIfAppropriate, messageResource) => function plan(_, fieldArgs) { + const $messages = messageResource.find(); + deoptimizeIfAppropriate($messages); + // $messages.leftJoin(...); + // $messages.innerJoin(...); + // $messages.relation('fk_messages_author_id') + // $messages.where(...); + const $connectionPlan = connection($messages); + fieldArgs.apply($messages, "orderBy"); + // DEFINITELY NOT $messages.orderBy BECAUSE we don't want that applied to aggregates. + // DEFINITELY NOT $messages.limit BECAUSE we don't want those limits applied to aggregates or page info. + return $connectionPlan; + }, [grafast_1.connection, deoptimizeIfAppropriate, messageResource]), + }, + uniqueAuthorCount: { + type: graphql_1.GraphQLInt, + args: { + featured: { + type: graphql_1.GraphQLBoolean, + }, + }, + plan: EXPORTABLE((TYPES, deoptimizeIfAppropriate, uniqueAuthorCountResource) => function plan(_$root, { $featured }) { + const $plan = uniqueAuthorCountResource.execute([ + { + step: $featured, + pgCodec: TYPES.boolean, + name: "featured", + }, + ]); + deoptimizeIfAppropriate($plan); + return $plan; + }, [index_js_1.TYPES, deoptimizeIfAppropriate, uniqueAuthorCountResource]), + }, + forumNames: { + type: new graphql_1.GraphQLList(graphql_1.GraphQLString), + plan: EXPORTABLE((pgSelect, scalarTextResource, sql) => function plan(_$root) { + const $plan = pgSelect({ + resource: scalarTextResource, + identifiers: [], + from: sql `app_public.forum_names()`, + name: "forum_names", + }); + return $plan; + }, [index_js_1.pgSelect, scalarTextResource, pg_sql2_1.default]), + }, + forumNamesArray: { + type: new graphql_1.GraphQLList(graphql_1.GraphQLString), + plan: EXPORTABLE((forumNamesArrayResource) => function plan(_$root) { + return forumNamesArrayResource.execute(); + }, [forumNamesArrayResource]), + }, + forumNamesCasesList: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLList(graphql_1.GraphQLString)), + plan: EXPORTABLE((forumNamesCasesResource) => function plan(_$root) { + const $plan = forumNamesCasesResource.execute(); + return $plan; + }, [forumNamesCasesResource]), + }, + // TODO + /* + forumNamesCasesConnection: { + type: new GraphQLList(GraphQLString), + plan: EXPORTABLE( + (forumNamesArrayResource, connection) => + function plan(_$root) { + const $plan = forumNamesArrayResource.execute(); + return connection($plan); + }, + [forumNamesArrayResource, connection], + ), + }, + */ + FORUM_NAMES: { + type: new graphql_1.GraphQLList(graphql_1.GraphQLString), + description: "Like forumNames, only we convert them all to upper case", + plan: EXPORTABLE((each, lambda, pgSelect, scalarTextResource, sql) => function plan(_$root) { + const $names = pgSelect({ + resource: scalarTextResource, + identifiers: [], + from: sql `app_public.forum_names()`, + name: "forum_names", + }); + // return lambda($names, (names: string[]) => names.map(name => name.toUpperCase())), + return each($names, ($name) => lambda($name, (name) => name.toUpperCase(), true)); + }, [grafast_1.each, grafast_1.lambda, index_js_1.pgSelect, scalarTextResource, pg_sql2_1.default]), + }, + randomUser: { + type: User, + plan: EXPORTABLE((deoptimizeIfAppropriate, pgSelect, sql, userResource) => function plan() { + const $users = pgSelect({ + resource: userResource, + identifiers: [], + from: sql `app_public.random_user()`, + name: "random_user", + }); + deoptimizeIfAppropriate($users); + return $users.single(); + }, [deoptimizeIfAppropriate, index_js_1.pgSelect, pg_sql2_1.default, userResource]), + }, + randomUserArray: { + type: new graphql_1.GraphQLList(User), + plan: EXPORTABLE((deoptimizeIfAppropriate, randomUserArrayResource) => function plan() { + const $select = randomUserArrayResource.execute(); + deoptimizeIfAppropriate($select); + return $select; + }, [deoptimizeIfAppropriate, randomUserArrayResource]), + }, + randomUserArraySet: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLList(User)), + plan: EXPORTABLE((deoptimizeIfAppropriate, randomUserArraySetResource) => function plan() { + const $selectPartitioned = randomUserArraySetResource.execute(); + deoptimizeIfAppropriate($selectPartitioned); + return $selectPartitioned; + }, [deoptimizeIfAppropriate, randomUserArraySetResource]), + }, + featuredMessages: { + type: new graphql_1.GraphQLList(Message), + plan: EXPORTABLE((deoptimizeIfAppropriate, featuredMessagesResource, pgSelect) => function plan() { + const $messages = pgSelect({ + resource: featuredMessagesResource, + identifiers: [], + }); + deoptimizeIfAppropriate($messages); + return $messages; + }, [deoptimizeIfAppropriate, featuredMessagesResource, index_js_1.pgSelect]), + }, + people: { + type: new graphql_1.GraphQLList(Person), + plan: EXPORTABLE((deoptimizeIfAppropriate, personResource) => function plan() { + const $people = personResource.find(); + deoptimizeIfAppropriate($people); + return $people; + }, [deoptimizeIfAppropriate, personResource]), + }, + singleTableItemById: { + type: SingleTableItem, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((singleTableItemInterface, singleTableItemsResource) => function plan(_$root, { $id }) { + const $item = singleTableItemsResource.get({ + id: $id, + }); + return singleTableItemInterface($item); + }, [singleTableItemInterface, singleTableItemsResource]), + }, + singleTableTopicById: { + type: SingleTableTopic, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((constant, singleTableItemsResource) => function plan(_$root, { $id }) { + const $item = singleTableItemsResource.get({ + id: $id, + type: constant("TOPIC", false), + }); + return $item; + }, [grafast_1.constant, singleTableItemsResource]), + }, + relationalItemById: { + type: RelationalItem, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((relationalItemInterface, relationalItemsResource) => function plan(_$root, { $id }) { + const $item = relationalItemsResource.get({ + id: $id, + }); + return relationalItemInterface($item); + }, [relationalItemInterface, relationalItemsResource]), + }, + relationalTopicById: { + type: RelationalTopic, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((relationalTopicsResource) => function plan(_$root, { $id }) { + return relationalTopicsResource.get({ + id: $id, + }); + }, [relationalTopicsResource]), + }, + allRelationalCommentablesList: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(RelationalCommentable)), + args: { + first: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $each, val) { + const $commentables = $each.getListStep(); + $commentables.setFirst(val.getRaw()); + }, []), + }, + }, + plan: EXPORTABLE((TYPES, each, relationalCommentableInterface, relationalCommentableResource, sql) => function plan() { + const $commentables = relationalCommentableResource.find(); + $commentables.orderBy({ + codec: TYPES.int, + fragment: sql `${$commentables.alias}.id`, + direction: "ASC", + }); + return each($commentables, ($commentable) => relationalCommentableInterface($commentable)); + }, [ + index_js_1.TYPES, + grafast_1.each, + relationalCommentableInterface, + relationalCommentableResource, + pg_sql2_1.default, + ]), + }, + unionItemById: { + type: UnionItem, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((unionItemUnion, unionItemsResource) => function plan(_$root, { $id }) { + const $item = unionItemsResource.get({ + id: $id, + }); + return unionItemUnion($item); + }, [unionItemUnion, unionItemsResource]), + }, + unionItemByIdViaUnionAll: { + type: UnionItem, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((TYPES, pgUnionAll, sql, unionChecklistItemsResource, unionChecklistsResource, unionDividersResource, unionPostsResource, unionTopicsResource) => function plan(_$root, { $id }) { + const $items = pgUnionAll({ + resourceByTypeName: { + UnionTopic: unionTopicsResource, + UnionPost: unionPostsResource, + UnionDivider: unionDividersResource, + UnionChecklist: unionChecklistsResource, + UnionChecklistItem: unionChecklistItemsResource, + }, + }); + $items.where(sql `${$items}.id = ${$items.placeholder($id, TYPES.int)}`); + return $items.single(); + }, [ + index_js_1.TYPES, + pgUnionAll_js_1.pgUnionAll, + pg_sql2_1.default, + unionChecklistItemsResource, + unionChecklistsResource, + unionDividersResource, + unionPostsResource, + unionTopicsResource, + ]), + }, + unionTopicById: { + type: UnionTopic, + args: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((unionTopicsResource) => function plan(_$root, { $id }) { + return unionTopicsResource.get({ + id: $id, + }); + }, [unionTopicsResource]), + }, + allUnionItemsList: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(UnionItem)), + plan: EXPORTABLE((TYPES, each, sql, unionItemUnion, unionItemsResource) => function plan() { + const $items = unionItemsResource.find(); + $items.orderBy({ + codec: TYPES.int, + fragment: sql `${$items.alias}.id`, + direction: "ASC", + }); + return each($items, ($item) => unionItemUnion($item)); + }, [index_js_1.TYPES, grafast_1.each, pg_sql2_1.default, unionItemUnion, unionItemsResource]), + }, + searchEntities: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(Entity)), + args: { + query: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + }, + }, + plan: EXPORTABLE((TYPES, deoptimizeIfAppropriate, each, entitySearchResource, entityUnion) => function plan(_$root, { $query }) { + const $step = entitySearchResource.execute([ + { + step: $query, + pgCodec: TYPES.text, + name: "query", + }, + ]); + deoptimizeIfAppropriate($step); + return each($step, ($item) => entityUnion($item)); + }, [ + index_js_1.TYPES, + deoptimizeIfAppropriate, + grafast_1.each, + entitySearchResource, + entityUnion, + ]), + }, + personByPersonId: { + type: Person, + args: { + personId: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + plan: EXPORTABLE((personResource) => function plan(_$root, { $personId }) { + return personResource.get({ + person_id: $personId, + }); + }, [personResource]), + }, + nonNullableNull: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + description: "Claims to be non-nullable, but always returns null. Used to test root-level null handling.", + plan: EXPORTABLE((constant) => function plan() { + return constant(null); + }, [grafast_1.constant]), + }, + nonNullableError: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + description: "Non-nullable, always throws. Used to test root-level null handling.", + plan: EXPORTABLE((error) => function plan() { + return error(new Error("Generic error from nonNullableError field in example schema")); + }, [grafast_1.error]), + }, + deepObject: { + type: new graphql_1.GraphQLObjectType({ + name: "DeepObject", + fields: { + number: { + type: graphql_1.GraphQLInt, + }, + numbers: { + type: new graphql_1.GraphQLList(graphql_1.GraphQLInt), + }, + friend: { + type: new graphql_1.GraphQLObjectType({ + name: "DeepObjectFriend", + fields: { + name: { type: graphql_1.GraphQLString }, + occupation: { type: graphql_1.GraphQLString }, + status: { type: graphql_1.GraphQLString }, + }, + }), + }, + }, + }), + resolve: EXPORTABLE(() => function resolve() { + return { + number: 42, + numbers: [1, 1, 2, 3, 5, 8, 13], + friend: { + name: "Marvin", + occupation: "Android", + status: "paranoid", + }, + }; + }, []), + }, + vulnerabilities: { + type: new graphql_1.GraphQLList(Vulnerability), + args: { + first: { + type: graphql_1.GraphQLInt, + }, + offset: { + type: graphql_1.GraphQLInt, + }, + }, + plan: EXPORTABLE((TYPES, constant, firstPartyVulnerabilitiesResource, pgUnionAll, sql, thirdPartyVulnerabilitiesResource) => function plan(_, { $first, $offset }) { + // IMPORTANT: for cursor pagination, type must be part of cursor condition + const $vulnerabilities = pgUnionAll({ + name: "vulnerabilities", + attributes: { + cvss_score: { + codec: TYPES.float, + notNull: false, + }, + }, + resourceByTypeName: { + FirstPartyVulnerability: firstPartyVulnerabilitiesResource, + ThirdPartyVulnerability: thirdPartyVulnerabilitiesResource, + }, + }); + $vulnerabilities.orderBy({ + attribute: "cvss_score", + direction: "DESC", + }); + $vulnerabilities.where({ + type: "attribute", + attribute: "cvss_score", + callback: (alias) => sql `${alias} > ${$vulnerabilities.placeholder(constant(6, false), TYPES.float)}`, + }); + $vulnerabilities.setFirst($first); + $vulnerabilities.setOffset($offset); + return $vulnerabilities; + }, [ + index_js_1.TYPES, + grafast_1.constant, + firstPartyVulnerabilitiesResource, + pgUnionAll_js_1.pgUnionAll, + pg_sql2_1.default, + thirdPartyVulnerabilitiesResource, + ]), + }, + vulnerabilitiesConnection: { + type: VulnerabilitiesConnection, + args: { + condition: { + type: VulnerabilityCondition, + applyPlan: EXPORTABLE((pgWhere) => function plan(_$root, $connection, arg) { + const $collection = $connection.getSubplan(); + arg.apply($collection, pgWhere); + }, [pgWhere]), + }, + first: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, val) { + $connection.setFirst(val.getRaw()); + }, []), + }, + last: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setLast(arg.getRaw()); + }, []), + }, + offset: { + type: graphql_1.GraphQLInt, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setOffset(arg.getRaw()); + }, []), + }, + after: { + type: graphql_1.GraphQLString, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setAfter(arg.getRaw()); + }, []), + }, + before: { + type: graphql_1.GraphQLString, + applyPlan: EXPORTABLE(() => function plan(_$root, $connection, arg) { + $connection.setBefore(arg.getRaw()); + }, []), + }, + orderBy: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(VulnerabilitiesOrderBy)), + }, + }, + plan: EXPORTABLE((TYPES, connection, firstPartyVulnerabilitiesResource, pgUnionAll, thirdPartyVulnerabilitiesResource) => function plan(_, fieldArgs) { + // IMPORTANT: for cursor pagination, type must be part of cursor condition + const $vulnerabilities = pgUnionAll({ + name: "vulnerabilities", + attributes: { + cvss_score: { + codec: TYPES.float, + notNull: false, + }, + }, + resourceByTypeName: { + FirstPartyVulnerability: firstPartyVulnerabilitiesResource, + ThirdPartyVulnerability: thirdPartyVulnerabilitiesResource, + }, + }); + fieldArgs.apply($vulnerabilities, "orderBy"); + return connection($vulnerabilities); + }, [ + index_js_1.TYPES, + grafast_1.connection, + firstPartyVulnerabilitiesResource, + pgUnionAll_js_1.pgUnionAll, + thirdPartyVulnerabilitiesResource, + ]), + }, + }, + }); + const CreateRelationalPostInput = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "CreateRelationalPostInput", + fields: { + title: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + }, + description: { + type: graphql_1.GraphQLString, + }, + note: { + type: graphql_1.GraphQLString, + }, + }, + }); + const RelationalPostPatch = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "RelationalPostPatch", + fields: { + // All nullable, since it's a patch. + title: { + type: graphql_1.GraphQLString, + }, + description: { + type: graphql_1.GraphQLString, + }, + note: { + type: graphql_1.GraphQLString, + }, + }, + }); + const UpdateRelationalPostByIdInput = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "UpdateRelationalPostByIdInput", + fields: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + patch: { + type: new graphql_1.GraphQLNonNull(RelationalPostPatch), + }, + }, + }); + const DeleteRelationalPostByIdInput = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "DeleteRelationalPostByIdInput", + fields: { + id: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt), + }, + }, + }); + const CreateRelationalPostPayload = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgClassExpressionStep)({ + name: "CreateRelationalPostPayload", + fields: { + post: { + type: RelationalPost, + plan: EXPORTABLE((relationalPostsResource) => function plan($post) { + return relationalPostsResource.get({ id: $post.get("id") }); + }, [relationalPostsResource]), + }, + id: { + type: graphql_1.GraphQLInt, + plan: EXPORTABLE(() => function plan($post) { + return $post.get("id"); + }, []), + }, + query: { + type: Query, + plan: EXPORTABLE((rootValue) => function plan() { + return rootValue(); + }, [grafast_1.rootValue]), + }, + }, + }); + const UpdateRelationalPostByIdPayload = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgUpdateSingleStep)({ + name: "UpdateRelationalPostByIdPayload", + fields: { + post: { + type: RelationalPost, + plan: EXPORTABLE((relationalPostsResource) => function plan($post) { + return relationalPostsResource.get({ id: $post.get("id") }); + }, [relationalPostsResource]), + }, + id: { + type: graphql_1.GraphQLInt, + plan: EXPORTABLE(() => function plan($post) { + return $post.get("id"); + }, []), + }, + query: { + type: Query, + plan: EXPORTABLE((rootValue) => function plan() { + return rootValue(); + }, [grafast_1.rootValue]), + }, + }, + }); + const DeleteRelationalPostByIdPayload = (0, grafast_1.newObjectTypeBuilder)(index_js_1.PgDeleteSingleStep)({ + name: "DeleteRelationalPostByIdPayload", + fields: { + // Since we've deleted the post we cannot go and fetch it; so we must + // return the record from the mutation RETURNING clause + post: { + type: RelationalPost, + plan: EXPORTABLE((pgSelectSingleFromRecord, relationalPostsResource) => function plan($post) { + return pgSelectSingleFromRecord(relationalPostsResource, $post.record()); + }, [index_js_1.pgSelectSingleFromRecord, relationalPostsResource]), + }, + id: { + type: graphql_1.GraphQLInt, + plan: EXPORTABLE(() => function plan($post) { + return $post.get("id"); + }, []), + }, + query: { + type: Query, + plan: EXPORTABLE((rootValue) => function plan() { + return rootValue(); + }, [grafast_1.rootValue]), + }, + }, + }); + const MultipleActionsInput = (0, grafast_1.newInputObjectTypeBuilder)()({ + name: "MultipleActionsInput", + fields: { + a: { + type: graphql_1.GraphQLInt, + }, + }, + }); + const MultipleActionsPayload = (0, grafast_1.newObjectTypeBuilder)(withPgClient_js_1.WithPgClientStep)({ + name: "MultipleActionsPayload", + fields: { + i: { + type: new graphql_1.GraphQLList(new graphql_1.GraphQLNonNull(graphql_1.GraphQLInt)), + plan: EXPORTABLE(() => function plan($parent) { + return $parent; + }, []), + }, + }, + }); + const Mutation = (0, grafast_1.newObjectTypeBuilder)(grafast_1.__ValueStep)({ + name: "Mutation", + fields: { + createRelationalPost: { + args: { + input: { + type: new graphql_1.GraphQLNonNull(CreateRelationalPostInput), + }, + }, + type: CreateRelationalPostPayload, + plan: EXPORTABLE((bakedInput, constant, getNullableInputTypeAtPath, pgInsertSingle, relationalItemsResource, relationalPostsResource) => function plan(_$root, fieldArgs) { + const $item = pgInsertSingle(relationalItemsResource, { + type: constant `POST`, + author_id: constant(2, false), + }); + const $itemId = $item.get("id"); + const $post = pgInsertSingle(relationalPostsResource, { + id: $itemId, + }); + const inputArgType = fieldArgs.typeAt("input"); + for (const key of ["title", "description", "note"]) { + const $rawValue = fieldArgs.getRaw(["input", key]); + const $value = bakedInput(getNullableInputTypeAtPath(inputArgType, [key]), $rawValue); + // TODO: pgInsertSingle needs to attributes with undefined values at runtime + $post.set(key, $value); + } + // NOTE: returning a record() here is unnecessary and requires + // `select *` privileges. In a normal schema we'd just return the + // mutation plan directly. Even if we're sharing types it would + // generally be better to return the identifier and then look up the + // record using the identifier. Nonetheless, this is useful for tests. + // Since our field type, `CreateRelationalPostPayload`, is shared between + // `createRelationalPost`, `createThreeRelationalPosts` and + // `createThreeRelationalPostsComputed` must return a common plan + // type that `CreateRelationalPostPayload` can use; in this case a + // `PgClassExpressionStep` + return $post.record(); + }, [ + grafast_1.bakedInput, + grafast_1.constant, + grafast_1.getNullableInputTypeAtPath, + index_js_1.pgInsertSingle, + relationalItemsResource, + relationalPostsResource, + ]), + }, + createThreeRelationalPosts: { + description: "This silly mutation is specifically to ensure that mutation plans are not tree-shaken - we never want to throw away mutation side effects.", + type: CreateRelationalPostPayload, + plan: EXPORTABLE((constant, pgInsertSingle, relationalItemsResource, relationalPostsResource) => function plan() { + // Only the _last_ post plan is returned; there's no dependency on + // the first two posts, and yet they should not be tree-shaken + // because they're mutations. + let $post; + for (let i = 0; i < 3; i++) { + const $item = pgInsertSingle(relationalItemsResource, { + type: constant `POST`, + author_id: constant(2, false), + }); + const $itemId = $item.get("id"); + $post = pgInsertSingle(relationalPostsResource, { + id: $itemId, + title: constant(`Post #${i + 1}`, false), + description: constant(`Desc ${i + 1}`, false), + note: constant(null), + }); + } + // See NOTE in createRelationalPost plan. + return $post.record(); + }, [ + grafast_1.constant, + index_js_1.pgInsertSingle, + relationalItemsResource, + relationalPostsResource, + ]), + }, + createThreeRelationalPostsComputed: { + description: "This silly mutation is specifically to ensure that mutation plans are not tree-shaken even if they use plans that are normally side-effect free - we never want to throw away mutation side effects.", + type: CreateRelationalPostPayload, + plan: EXPORTABLE((TYPES, constant, pgSelect, relationalPostsResource, sql) => function plan() { + // Only the _last_ post plan is returned; there's no dependency on + // the first two posts, and yet they should not be tree-shaken + // because they're mutations. + let $post; + for (let i = 0; i < 3; i++) { + $post = pgSelect({ + resource: relationalPostsResource, + identifiers: [], + from: (authorId, title) => sql `interfaces_and_unions.insert_post(${authorId.placeholder}, ${title.placeholder})`, + args: [ + { + step: constant(2, false), + pgCodec: TYPES.int, + }, + { + step: constant(`Computed post #${i + 1}`, false), + pgCodec: TYPES.text, + }, + ], + mode: "mutation", + }); + } + // See NOTE in createRelationalPost plan. + return $post.single().record(); + }, [index_js_1.TYPES, grafast_1.constant, index_js_1.pgSelect, relationalPostsResource, pg_sql2_1.default]), + }, + updateRelationalPostById: { + args: { + input: { + type: new graphql_1.GraphQLNonNull(UpdateRelationalPostByIdInput), + }, + }, + type: UpdateRelationalPostByIdPayload, + plan: EXPORTABLE((bakedInput, getNullableInputTypeAtPath, pgUpdateSingle, relationalPostsResource) => function plan(_$root, fieldArgs) { + const $post = pgUpdateSingle(relationalPostsResource, { + id: fieldArgs.$input.$id, + }); + const inputArgType = fieldArgs.typeAt("input"); + for (const key of ["title", "description", "note"]) { + const $rawValue = fieldArgs.getRaw(["input", "patch", key]); + const $value = bakedInput(getNullableInputTypeAtPath(inputArgType, ["patch", key]), $rawValue); + // TODO: pgUpdateSingle needs to ignore values set to undefined + $post.set(key, $value); + } + return $post; + }, [ + grafast_1.bakedInput, + grafast_1.getNullableInputTypeAtPath, + index_js_1.pgUpdateSingle, + relationalPostsResource, + ]), + }, + deleteRelationalPostById: { + args: { + input: { + type: new graphql_1.GraphQLNonNull(DeleteRelationalPostByIdInput), + }, + }, + type: DeleteRelationalPostByIdPayload, + plan: EXPORTABLE((pgDeleteSingle, relationalPostsResource) => function plan(_$root, { $input: { $id } }) { + const $post = pgDeleteSingle(relationalPostsResource, { + id: $id, + }); + return $post; + }, [index_js_1.pgDeleteSingle, relationalPostsResource]), + }, + multipleActions: { + args: { + input: { + type: new graphql_1.GraphQLNonNull(MultipleActionsInput), + }, + }, + type: MultipleActionsPayload, + plan: EXPORTABLE((executor, object, sleep, sql, withPgClientTransaction) => function plan(_$root, { $input: { $a } }) { + const $transactionResult = withPgClientTransaction(executor, object({ + a: $a, + }), async (client, { a }) => { + // Set a transaction variable to reference later + await client.query(sql.compile(sql `select set_config('my_app.a', ${sql.value(a ?? 1)}, true);`)); + // Run some SQL + const { rows } = await client.query(sql.compile(sql `select * from generate_series(1, ${sql.value(a ?? 1)}) as i;`)); + // Do some asynchronous work (e.g. talk to Stripe or whatever) + await sleep(2); + // Use the transaction variable to ensure we're still in the transaction + const { rows: rows2 } = await client.query(sql.compile(sql `select i + current_setting('my_app.a', true)::int as i from generate_series(${sql.value(rows[rows.length - 1].i)}, 10) as i;`)); + // Return the data + return rows2.map((row) => row.i); + }); + // This line is critical to test setting hasSideEffects on a withPgClient call + $transactionResult.hasSideEffects = true; + return $transactionResult; + }, [executor, grafast_1.object, sleep, pg_sql2_1.default, withPgClient_js_1.withPgClientTransaction]), + }, + }, + }); + const ForumMessageSubscriptionPayload = (0, grafast_1.newObjectTypeBuilder)(json_1.JSONParseStep)({ + name: "ForumMessageSubscriptionPayload", + fields: { + operationType: { + type: graphql_1.GraphQLString, + plan: EXPORTABLE((lambda) => function plan($event) { + return lambda($event.get("op"), (txt) => String(txt).toLowerCase(), true); + }, [grafast_1.lambda]), + }, + message: { + type: Message, + plan: EXPORTABLE((messageResource) => function plan($event) { + return messageResource.get({ id: $event.get("id") }); + }, [messageResource]), + }, + }, + }); + const Subscription = (0, grafast_1.newObjectTypeBuilder)(grafast_1.__ValueStep)({ + name: "Subscription", + fields: { + forumMessage: { + args: { + forumId: { + type: new graphql_1.GraphQLNonNull(graphql_1.GraphQLString), + }, + }, + type: ForumMessageSubscriptionPayload, + subscribePlan: EXPORTABLE((context, jsonParse, lambda, listen) => function subscribePlan(_$root, args) { + const $forumId = args.getRaw("forumId"); + const $topic = lambda($forumId, (id) => `forum:${id}:message`, true); + const $pgSubscriber = context().get("pgSubscriber"); + return listen($pgSubscriber, $topic, jsonParse); + }, [grafast_1.context, json_1.jsonParse, grafast_1.lambda, grafast_1.listen]), + plan: EXPORTABLE(() => function plan($event) { + return $event; + }, []), + }, + }, + }); + return new graphql_1.GraphQLSchema({ + query: Query, + mutation: Mutation, + subscription: Subscription, + types: [ + // Don't forget to add all types that implement interfaces here + // otherwise they _might_ not show up in the schema. + SingleTableTopic, + SingleTablePost, + SingleTableDivider, + SingleTableChecklist, + SingleTableChecklistItem, + RelationalTopic, + RelationalPost, + RelationalDivider, + RelationalChecklist, + RelationalChecklistItem, + FirstPartyVulnerability, + ThirdPartyVulnerability, + ], + extensions: { + graphileExporter: { + deps: [ + relationalDividersResource, + relationalChecklistsResource, + relationalChecklistItemsResource, + ], + }, + }, + enableDeferStream: true, + }); +} +async function main() { + const filePath = `${__dirname}/../../__tests__/schema.graphql`; + const schema = makeExampleSchema(); + (0, fs_1.writeFileSync)(filePath, + //prettier.format( + (0, graphql_1.printSchema)(schema)); +} +if (require.main === module) { + main().catch((e) => { + console.error(e); + process.exit(1); + }); +} +const pgClassFilterWhere = EXPORTABLE((PgClassFilter) => function pgClassFilterWhere(qb) { + return new PgClassFilter(qb.whereBuilder(), qb.alias); +}, [index_js_1.PgClassFilter]); +function pgWhere(qb) { + return qb.whereBuilder(); +} +const includeArchivedCondition = EXPORTABLE((sql) => function includeArchivedCondition([sqlParentArchivedAt, value]) { + return (queryBuilder) => { + if (value === "YES") { + // No restriction + } + else if (value === "EXCLUSIVELY") { + queryBuilder.where(sql `${queryBuilder}.archived_at is not null`); + } + else if (value === "INHERIT" && + // INHERIT only works if the parent has an archived_at attribute. + sqlParentArchivedAt !== undefined) { + queryBuilder.where(sql `(${queryBuilder.alias}.archived_at is null) = (${sqlParentArchivedAt} is null)`); + } + else { + queryBuilder.where(sql `${queryBuilder}.archived_at is null`); + } + }; +}, [pg_sql2_1.default]); +//# sourceMappingURL=exampleSchema.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/examples/exampleSchema.js.map b/grafast/dataplan-pg/dist/examples/exampleSchema.js.map new file mode 100644 index 0000000000..0ec90ef6b2 --- /dev/null +++ b/grafast/dataplan-pg/dist/examples/exampleSchema.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exampleSchema.js","sourceRoot":"","sources":["../../src/examples/exampleSchema.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/executor.d.ts b/grafast/dataplan-pg/dist/executor.d.ts new file mode 100644 index 0000000000..b58eeb27c2 --- /dev/null +++ b/grafast/dataplan-pg/dist/executor.d.ts @@ -0,0 +1,105 @@ +import type { ExecutableStep, ExecutionEventEmitter, GrafastValuesList, ObjectStep, PromiseOrDirect } from "grafast"; +import type { SQLRawValue } from "pg-sql2"; +export interface PgClientQuery { + /** The query string */ + text: string; + /** The values to put in the placeholders */ + values?: Array; + /** An optimisation, to avoid you having to decode attribute names */ + arrayMode?: boolean; + /** For prepared statements */ + name?: string; +} +export interface PgClientResult { + /** + * For `SELECT` or `INSERT/UPDATE/DELETE ... RETURNING` this will be the list + * of rows returned. + */ + rows: readonly TData[]; + /** + * For `INSERT/UPDATE/DELETE` without `RETURNING`, this will be the number of + * rows created/updated/deleted. + */ + rowCount: number | null; +} +/** + * This is a generic interface that your Postgres client must honor; have a + * look at adaptors/pg.ts for an example of a compliant implementation that + * uses the `pg` module, but you should be able to write an adaptor for many + * different Postgres drivers. + */ +export interface PgClient { + query(opts: PgClientQuery): Promise>; + withTransaction(callback: (client: this) => Promise): Promise; +} +export interface WithPgClient { + (pgSettings: Record | null, callback: (client: TPgClient) => T | Promise): Promise; + release?(): PromiseOrDirect; +} +export type PgExecutorContext = { + pgSettings: TSettings; + withPgClient: WithPgClient; +}; +export type PgExecutorContextPlans = { + pgSettings: ExecutableStep; + withPgClient: ExecutableStep>; +}; +export type PgExecutorInput = { + context: PgExecutorContext; + queryValues: ReadonlyArray; +}; +export type PgExecutorOptions = { + text: string; + rawSqlValues: Array; + identifierIndex?: number | null; + name?: string; + eventEmitter: ExecutionEventEmitter | undefined; + useTransaction?: boolean; +}; +export type PgExecutorMutationOptions = { + context: PgExecutorContext; + text: string; + values: ReadonlyArray; +}; +export type PgExecutorSubscribeOptions = { + context: PgExecutorContext; + topic: string; +}; +/** + * Represents a PostgreSQL database connection, can be used for issuing queries + * to the database. Used by PgResource but also directly by things like + * PgSimpleFunctionCallStep. Was once PgDataSource itself. Multiple PgExecutors + * can exist in the same schema. PgExecutor is also responsible for things like + * caching. + */ +export declare class PgExecutor { + name: TName; + private contextCallback; + private $$cache; + constructor(options: { + name: TName; + context: () => ObjectStep>; + }); + toString(): string; + context(): ObjectStep>; + private _executeWithClient; + private _execute; + private withTransaction; + executeWithCache(values: GrafastValuesList>, common: PgExecutorOptions): Promise<{ + values: GrafastValuesList>; + }>; + executeWithoutCache(values: GrafastValuesList>, common: PgExecutorOptions): Promise<{ + values: GrafastValuesList>; + }>; + private _executeWithOrWithoutCache; + /** + * Returns a list of streams (async iterables), one for each entry in + * `values`, for the results from the cursor defined by running the query + * `common.text` with the given variables. + */ + executeStream(values: GrafastValuesList>, common: PgExecutorOptions): Promise<{ + streams: Array | PromiseLike>; + }>; + executeMutation(options: PgExecutorMutationOptions): Promise>; +} +//# sourceMappingURL=executor.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/executor.d.ts.map b/grafast/dataplan-pg/dist/executor.d.ts.map new file mode 100644 index 0000000000..13e8a6f791 --- /dev/null +++ b/grafast/dataplan-pg/dist/executor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/executor.js b/grafast/dataplan-pg/dist/executor.js new file mode 100644 index 0000000000..99fe8a5d7d --- /dev/null +++ b/grafast/dataplan-pg/dist/executor.js @@ -0,0 +1,586 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgExecutor = void 0; +const tslib_1 = require("tslib"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const debug_1 = tslib_1.__importDefault(require("debug")); +const grafast_1 = require("grafast"); +const formatSQLForDebugging_js_1 = require("./formatSQLForDebugging.js"); +const inspect_js_1 = require("./inspect.js"); +const LOOK_DOWN = "👇".repeat(30); +const LOOK_UP = "👆".repeat(30); +const $$FINISHED = Symbol("finished"); +class Wrapped { + constructor(originalValue) { + this.originalValue = originalValue; + } +} +let cursorCount = 0; +const debug = (0, debug_1.default)("@dataplan/pg:PgExecutor"); +const debugVerbose = debug.extend("verbose"); +const debugExplain = debug.extend("explain"); +/** + * Represents a PostgreSQL database connection, can be used for issuing queries + * to the database. Used by PgResource but also directly by things like + * PgSimpleFunctionCallStep. Was once PgDataSource itself. Multiple PgExecutors + * can exist in the same schema. PgExecutor is also responsible for things like + * caching. + */ +class PgExecutor { + constructor(options) { + const { name, context } = options; + this.name = name; + this.$$cache = Symbol(this.name + "_cache"); + this.contextCallback = context; + } + toString() { + return chalk_1.default.bold.blue(`PgExecutor(${this.name})`); + } + // public context(): ExecutableStep + context() { + return this.contextCallback(); + } + async _executeWithClient(client, text, values, name, publish) { + let queryResult = null, error = null; + const start = process.hrtime.bigint(); + try { + queryResult = await client.query({ + text, + values: values, + arrayMode: true, + name, + }); + } + catch (e) { + error = e; + } + const end = process.hrtime.bigint(); + // TODO: this should be based on the headers of the incoming request + const shouldExplain = debugExplain.enabled; + const explainAnalyzeSafe = shouldExplain && /^\s*select/i.test(text); + let explain = undefined; + if (shouldExplain && !error) { + const explainResult = await client.query({ + text: `EXPLAIN (${explainAnalyzeSafe ? "ANALYZE, " : ""}COSTS, VERBOSE, BUFFERS, SETTINGS) ${text}`, + values: values, + arrayMode: true, + }); + const firstResult = explainResult.rows[0]; + const key = firstResult ? Object.keys(firstResult)[0] : "0"; + explain = + explainResult.rows.length === 1 && + typeof firstResult[key] === "object" && + firstResult[key] !== null + ? // Support for 'FORMAT JSON' + JSON.stringify(firstResult[key], null, 2) + : explainResult.rows.map((r) => r[key]).join("\n"); + } + if (debugVerbose.enabled || debugExplain.enabled) { + const duration = (Number((end - start) / 10000n) / 100).toFixed(2) + "ms"; + const rows = queryResult?.rows; + const rowResults = rows && rows.length > 10 + ? "[\n " + + rows + .slice(0, 3) + .map((row) => (0, inspect_js_1.inspect)(row, { colors: true, depth: 5 }).replace(/\n/g, "\n ")) + .join(",\n ") + + ",\n\n ...\n\n " + + rows + .slice(rows.length - 3) + .map((row) => (0, inspect_js_1.inspect)(row, { colors: true, depth: 5 }).replace(/\n/g, "\n ")) + .join("\n ") + + "\n]" + : (0, inspect_js_1.inspect)(queryResult?.rows, { colors: true, depth: 6 }); + (debugExplain.enabled ? debugExplain : debugVerbose)(`\ + + +%s +# SQL QUERY: +%s + +# PLACEHOLDERS: +%o + +${error + ? `\ +# ERROR: +%o` + : `\ +# RESULT: +%s`} + +# DURATION +${duration} +%s + + +# EXPLAIN +%s + + +`, LOOK_DOWN, (0, formatSQLForDebugging_js_1.formatSQLForDebugging)(text, error), values, error ? error : rowResults, LOOK_UP, explain ?? + (shouldExplain + ? `(Explain disabled ${error ? "due to error" : "due to unknown reason"})` + : `(Use 'DEBUG="@dataplan/pg:PgExecutor:explain"' to enable explain)`)); + } + if (publish !== undefined) { + publish(text, name, explain); + } + if (error) { + throw error; + } + if (!queryResult) { + // Appease TypeScript + throw new Error("No query result and no error? Impossible."); + } + return queryResult; + } + async _execute(context, text, values, name, publish) { + // PERF: we could probably make this more efficient by grouping the + // deferreds further, DataLoader-style, and running one SQL query for + // everything. + return await context.withPgClient(context.pgSettings, (client) => this._executeWithClient(client, text, values, name, publish)); + } + withTransaction(context, callback) { + return context.withPgClient(context.pgSettings, (baseClient) => baseClient.withTransaction((transactionClient) => { + const execute = (text, values) => this._executeWithClient(transactionClient, text, values); + return callback(execute); + })); + } + async executeWithCache(values, common) { + return this._executeWithOrWithoutCache(values, common, true); + } + async executeWithoutCache(values, common) { + return this._executeWithOrWithoutCache(values, common, false); + } + async _executeWithOrWithoutCache(values, common, useCache) { + const { rawSqlValues, identifierIndex, eventEmitter } = common; + const publishExecute = eventEmitter + ? (text, name, explain) => { + eventEmitter.emit("explainOperation", { + operation: { + type: "sql", + title: `SQL query${name ? ` '${name.slice(0, 7)}...'` : ""}`, + query: text, + explain, + }, + }); + } + : undefined; + const valuesCount = values.length; + const results = []; + const batches = (() => { + if (common.useTransaction) { + // If we're using a transaction, use a separate batch for each query. + return values.map(({ context, queryValues }, resultIndex) => [context, [{ queryValues, resultIndex }]]); + } + else { + // Group by context + const groupMap = new Map(); + for (let resultIndex = 0, l = valuesCount; resultIndex < l; resultIndex++) { + results[resultIndex] = undefined; + const { context, queryValues } = values[resultIndex]; + let entry = groupMap.get(context); + if (!entry) { + entry = []; + groupMap.set(context, entry); + } + entry.push({ queryValues, resultIndex }); + } + return groupMap.entries(); + } + })(); + // For each context, run the relevant fetches + const promises = []; + for (const [context, batch] of batches) { + promises.push((async () => { + let cacheForContext = useCache + ? context[this.$$cache] + : null; + if (!cacheForContext) { + cacheForContext = new lru_1.default({ maxLength: 500 /* SQL queries */ }); + if (useCache) { + context[this.$$cache] = cacheForContext; + } + } + const textAndValues = `${common.text}\n${JSON.stringify(rawSqlValues)}`; + let cacheForQuery = cacheForContext.get(textAndValues); + if (!cacheForQuery) { + cacheForQuery = new Map(); + cacheForContext.set(textAndValues, cacheForQuery); + } + const scopedCache = cacheForQuery; + /** + * The `identifiersJSON` (`JSON.stringify(queryValues)`) that don't exist in the cache currently. + */ + const remaining = []; + const remainingDeferreds = []; + try { + // Concurrent requests to the same queryValues should result in the same value/execution. + const batchSize = batch.length; + for (let batchIndex = 0; batchIndex < batchSize; batchIndex++) { + const { queryValues, resultIndex } = batch[batchIndex]; + const identifiersJSON = JSON.stringify(queryValues); // PERF: Canonical? Manual for perf? + const existingResult = scopedCache.get(identifiersJSON); + if (existingResult) { + if (debugVerbose.enabled) { + debugVerbose("%s served %o from cache: %c", this, identifiersJSON, existingResult); + } + results[resultIndex] = existingResult; + } + else { + if (debugVerbose.enabled) { + debugVerbose("%s no entry for %o in cache %c", this, identifiersJSON, scopedCache); + } + if (grafast_1.isDev && remaining.includes(identifiersJSON)) { + throw new Error("Should only fetch each identifiersJSON once, future entries in the loop should receive previous deferred"); + } + const pendingResult = (0, grafast_1.defer)(); // CRITICAL: this MUST resolve later + results[resultIndex] = pendingResult; + scopedCache.set(identifiersJSON, pendingResult); + remaining.push(identifiersJSON) - 1; + remainingDeferreds.push(pendingResult); + } + } + if (remaining.length) { + const { text, name } = common; + const sqlValues = identifierIndex == null + ? rawSqlValues + : [ + ...rawSqlValues, + // Manual JSON-ing + "[" + remaining.join(",") + "]", + ]; + // PERF: we could probably make this more efficient by grouping the + // deferreds further, DataLoader-style, and running one SQL query for + // everything. + const queryResult = common.useTransaction + ? await this.executeMutation({ + context, + text, + values: sqlValues, + }) + : await this._execute(context, text, sqlValues, name, publishExecute); + const { rows } = queryResult; + const groups = Object.create(null); + for (let i = 0, l = rows.length; i < l; i++) { + const result = rows[i]; + const valueIndex = identifierIndex != null + ? result[identifierIndex] + : 0; + if (!groups[valueIndex]) { + groups[valueIndex] = [result]; + } + else { + groups[valueIndex].push(result); + } + } + for (let i = 0, l = remainingDeferreds.length; i < l; i++) { + const remainingDeferred = remainingDeferreds[i]; + const value = groups[i] ?? []; + remainingDeferred.resolve(value); + } + } + } + catch (e) { + // This block guarantees that all remainingDeferreds will be + // rejected - we don't want defers hanging around! + remainingDeferreds.forEach((d) => { + try { + d.reject(e); + } + catch (e2) { + // Ignore error when rejecting + console.error(`Encountered second error when rejecting deferred due to a different error; ignoring error: ${e2}`); + } + }); + return Promise.reject(e); + } + })()); + } + // Avoids UnhandledPromiseRejection error. + await Promise.allSettled(promises); + const finalResults = await Promise.all(results); + return { values: finalResults }; + } + /** + * Returns a list of streams (async iterables), one for each entry in + * `values`, for the results from the cursor defined by running the query + * `common.text` with the given variables. + */ + async executeStream(values, common) { + const { text, rawSqlValues, identifierIndex } = common; + const valuesCount = values.length; + const streams = []; + // Group by context + const groupMap = new Map(); + for (let resultIndex = 0, l = valuesCount; resultIndex < l; resultIndex++) { + streams[resultIndex] = null; + const { context, queryValues } = values[resultIndex]; + let entry = groupMap.get(context); + if (!entry) { + entry = []; + groupMap.set(context, entry); + } + entry.push({ queryValues, resultIndex }); + } + // For each context, run the relevant fetches + const promises = []; + for (const [context, batch] of groupMap.entries()) { + // ENHANCE: this is a mess, we should refactor and simplify it significantly + const tx = (0, grafast_1.defer)(); + let txResolved = false; + let cursorOpen = false; + const promise = (async () => { + const batchIndexesByIdentifiersJSON = new Map(); + // Concurrent requests to the same queryValues should result in the same value/execution. + const batchSize = batch.length; + for (let batchIndex = 0; batchIndex < batchSize; batchIndex++) { + const { queryValues } = batch[batchIndex]; + const identifiersJSON = JSON.stringify(queryValues); // Perf: Canonical? Manual for perf? + const existing = batchIndexesByIdentifiersJSON.get(identifiersJSON); + if (existing !== undefined) { + existing.push(batchIndex); + if (debugVerbose.enabled) { + debugVerbose("%s served %o again (%o)", this, identifiersJSON, existing); + } + //results[resultIndex] = existingResult; + } + else { + if (debugVerbose.enabled) { + debugVerbose("%s no entry for %o, allocating", this, identifiersJSON); + } + batchIndexesByIdentifiersJSON.set(identifiersJSON, [batchIndex]); + } + } + if (batchIndexesByIdentifiersJSON.size <= 0) { + throw new Error("GrafastInternalError<98699a62-cd44-4372-8e92-d730b116a51d>: empty batch doesn't make sense in this context."); + } + const remaining = [...batchIndexesByIdentifiersJSON.keys()]; + const batchIndexesByValueIndex = [ + ...batchIndexesByIdentifiersJSON.values(), + ]; + // PERF: batchIndexesByIdentifiersJSON = null; + const sqlValues = identifierIndex == null + ? rawSqlValues + : [ + ...rawSqlValues, + // Manual JSON-ing + "[" + remaining.join(",") + "]", + ]; + // Maximum PostgreSQL identifier length is typically 63 bytes. + // Minus the `__cursor___` text, this leaves 52 characters for this + // counter. JS's largest safe integer is 2^53-1 which is 16 digits + // long - well under the 52 character limit. Assuming we used 1000 + // cursors per second every second, it would take us 285k years to + // exhaust this. Because this is a cursor we control and know is + // PostgreSQL safe we don't need to escape it. + const cursorIdentifier = `__cursor_${cursorCount++}__`; + const batchFetchSize = 100; + const declareCursorSQL = `declare ${cursorIdentifier} insensitive no scroll cursor without hold for\n${text}`; + const pullViaCursorSQL = `fetch forward ${batchFetchSize} from ${cursorIdentifier}`; + const releaseCursorSQL = `close ${cursorIdentifier}`; + let _deferredStreams = 0; + let valuesPending = 0; + const pending = batch.map(() => []); + const waiting = batch.map(() => null); + let finished = false; + // eslint-disable-next-line no-inner-declarations + function getNext(batchIndex) { + if (pending[batchIndex].length > 0) { + const value = pending[batchIndex].shift(); + valuesPending--; + if (valuesPending < batchFetchSize && !fetching) { + fetchNextBatch().then(null, handleFetchError); + } + if (value instanceof Wrapped) { + return Promise.reject(value.originalValue); + } + else { + return value; + } + } + else { + if (finished) { + throw $$FINISHED; + } + _deferredStreams++; + if (grafast_1.isDev && waiting[batchIndex]) { + throw new Error(`Waiting on more than one record! Forbidden!`); + } + const deferred = (0, grafast_1.defer)(); + waiting[batchIndex] = deferred; + return deferred; + } + } + // eslint-disable-next-line no-inner-declarations + function supplyValue(batchIndex, value) { + const deferred = waiting[batchIndex]; + if (deferred !== null) { + waiting[batchIndex] = null; + _deferredStreams--; + if (value instanceof Wrapped) { + deferred.reject(value.originalValue); + } + else { + deferred.resolve(value); + } + } + else { + valuesPending++; + pending[batchIndex].push(value); + } + } + const executePromise = (0, grafast_1.defer)(); + const handleFetchError = (error) => { + if (finished) { + console.error(`GraphileInternalError<2a6a34e4-a172-4c9a-b74e-b87ccf1b6d47>: Received an error when stream was already finished: ${error}`); + return; + } + finished = true; + tx.resolve(); + txResolved = true; + cursorOpen = false; + executePromise.reject(error); + console.error("Error occurred:"); + console.error(error); + for (let i = 0, l = batch.length; i < l; i++) { + supplyValue(i, new Wrapped(error)); + } + }; + this.withTransaction(context, async (_execute) => { + executePromise.resolve(_execute); + return tx; + }).then(null, handleFetchError); + const execute = await executePromise; + // eslint-disable-next-line no-inner-declarations + let fetching = false; + const fetchNextBatch = async () => { + if (fetching) { + return; + } + if (finished) { + return; + } + fetching = true; + const queryResult = await execute(pullViaCursorSQL, []); + const { rows } = queryResult; + if (rows.length < batchFetchSize) { + releaseCursor(); + } + for (let i = 0, l = rows.length; i < l; i++) { + const result = rows[i]; + const valueIndex = identifierIndex != null + ? result[identifierIndex] + : 0; + const batchIndexes = batchIndexesByValueIndex[valueIndex]; + if (!batchIndexes) { + throw new Error(`GrafastInternalError<8f513ceb-a3dc-4ec7-9ca1-0f0d4576a22d>: could not determine the identifier JSON for value index '${valueIndex}'`); + } + for (let i = 0, l = batchIndexes.length; i < l; i++) { + supplyValue(batchIndexes[i], result); + } + } + fetching = false; + if (finished) { + // We've hit the end of the road + for (let i = 0, l = batch.length; i < l; i++) { + supplyValue(i, new Wrapped($$FINISHED)); + } + } + else { + if (valuesPending < batchFetchSize) { + fetchNextBatch().then(null, handleFetchError); + } + } + }; + // Registers the cursor + cursorOpen = true; + await execute(declareCursorSQL, sqlValues); + // Ensure we release the cursor now we've registered it. + fetchNextBatch().then(null, handleFetchError); + function releaseCursor() { + finished = true; + if (cursorOpen) { + cursorOpen = false; + // Release the cursor + (async () => { + // This also closes the cursor + try { + await execute(releaseCursorSQL, []); + } + finally { + if (!txResolved) { + tx.resolve(); + txResolved = true; + cursorOpen = false; + } + } + })().catch((e) => { + console.error(`Error occurred whilst closing cursor: ${e}`); + }); + } + } + // IMPORTANT: must *NOT* throw between here and the try block in the callback below + let remainingBatches = batch.length; + batch.forEach(({ resultIndex }, batchIndex) => { + streams[resultIndex] = (async function* () { + try { + for (;;) { + yield await getNext(batchIndex); + } + } + catch (e) { + if (e === $$FINISHED) { + return; + } + else { + throw e; + } + } + finally { + remainingBatches--; + if (remainingBatches === 0) { + releaseCursor(); + } + } + })(); + }); + })(); + promise.then(null, (e) => { + console.error("UNEXPECTED ERROR!"); + console.error(e); + tx.resolve(); + txResolved = true; + cursorOpen = false; + batch.forEach(({ resultIndex }) => { + const stream = streams[resultIndex]; + if ((0, grafast_1.isAsyncIterable)(stream)) { + stream[Symbol.asyncIterator]().throw?.(e); + } + streams[resultIndex] = Promise.reject(e); + }); + }); + promises.push(promise); + } + // Avoids UnhandledPromiseRejection error. + await Promise.allSettled(promises); + return { + streams: streams, + }; + } + async executeMutation(options) { + const { context, text, values } = options; + const { withPgClient, pgSettings } = context; + // We don't explicitly need a transaction for mutations + const queryResult = await withPgClient(pgSettings, (client) => this._executeWithClient(client, text, values)); + // PERF: we could probably make this more efficient rather than blowing away the entire cache! + // Wipe the cache since a mutation succeeded. + context[this.$$cache]?.reset(); + return queryResult; + } +} +exports.PgExecutor = PgExecutor; +(0, grafast_1.exportAs)("@dataplan/pg", PgExecutor, "PgExecutor"); +//# sourceMappingURL=executor.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/executor.js.map b/grafast/dataplan-pg/dist/executor.js.map new file mode 100644 index 0000000000..5c701a1e26 --- /dev/null +++ b/grafast/dataplan-pg/dist/executor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts new file mode 100644 index 0000000000..dd3140a1c4 --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts @@ -0,0 +1,20 @@ +import { Modifier } from "grafast"; +import type { SQL, SQLable } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgConditionLike } from "../interfaces.js"; +export declare class PgBooleanFilter extends Modifier implements SQLable { + readonly expression: SQL; + static $$export: { + moduleName: string; + exportName: string; + }; + private conditions; + private havingConditions; + alias: SQL; + constructor(classFilter: PgConditionLike, expression: SQL); + where(condition: SQL): void; + having(condition: SQL): void; + apply(): void; + [$$toSQL](): SQL; +} +//# sourceMappingURL=pgBooleanFilter.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts.map b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts.map new file mode 100644 index 0000000000..53b98b60ac --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgBooleanFilter.d.ts","sourceRoot":"","sources":["../../src/filters/pgBooleanFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,qBAAa,eACX,SAAQ,QAAQ,CAAC,eAAe,CAChC,YAAW,OAAO;aAaA,UAAU,EAAE,GAAG;IAXjC,MAAM,CAAC,QAAQ;;;MAGb;IAEF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAa;IAC9B,KAAK,EAAE,GAAG,CAAC;gBAGhB,WAAW,EAAE,eAAe,EACZ,UAAU,EAAE,GAAG;IAMjC,KAAK,CAAC,SAAS,EAAE,GAAG;IAIpB,MAAM,CAAC,SAAS,EAAE,GAAG;IAIrB,KAAK;IAKL,CAAC,OAAO,CAAC;CAGV"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgBooleanFilter.js b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.js new file mode 100644 index 0000000000..8bb08326dc --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgBooleanFilter = void 0; +const grafast_1 = require("grafast"); +const pg_sql2_1 = require("pg-sql2"); +class PgBooleanFilter extends grafast_1.Modifier { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgBooleanFilter", + }; } + constructor(classFilter, expression) { + super(classFilter); + this.expression = expression; + this.conditions = []; + this.havingConditions = []; + this.alias = classFilter.alias; + } + where(condition) { + this.conditions.push(condition); + } + having(condition) { + this.havingConditions.push(condition); + } + apply() { + this.conditions.forEach((condition) => this.parent.where(condition)); + this.havingConditions.forEach((condition) => this.parent.having(condition)); + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } +} +exports.PgBooleanFilter = PgBooleanFilter; +//# sourceMappingURL=pgBooleanFilter.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgBooleanFilter.js.map b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.js.map new file mode 100644 index 0000000000..9b69839fbb --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgBooleanFilter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgBooleanFilter.js","sourceRoot":"","sources":["../../src/filters/pgBooleanFilter.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AAEnC,qCAAkC;AAIlC,MAAa,eACX,SAAQ,kBAAyB;aAG1B,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,iBAAiB;KAC9B,AAHc,CAGb;IAMF,YACE,WAA4B,EACZ,UAAe;QAE/B,KAAK,CAAC,WAAW,CAAC,CAAC;QAFH,eAAU,GAAV,UAAU,CAAK;QANzB,eAAU,GAAU,EAAE,CAAC;QACvB,qBAAgB,GAAU,EAAE,CAAC;QAQnC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAc;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,SAAc;QACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,CAAC,iBAAO,CAAC;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;;AApCH,0CAqCC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts b/grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts new file mode 100644 index 0000000000..a14b24f704 --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts @@ -0,0 +1,20 @@ +import { Modifier } from "grafast"; +import type { SQL, SQLable } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgConditionLike } from "../index.js"; +import type { PgCondition, PgConditionCapableParent } from "../steps/pgCondition.js"; +export declare class PgClassFilter extends Modifier> implements SQLable, PgConditionLike { + readonly alias: SQL; + static $$export: { + moduleName: string; + exportName: string; + }; + private conditions; + private havingConditions; + constructor(parent: PgCondition, alias: SQL); + where(condition: SQL): void; + having(condition: SQL): void; + apply(): void; + [$$toSQL](): SQL; +} +//# sourceMappingURL=pgClassFilter.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts.map b/grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts.map new file mode 100644 index 0000000000..95871a186b --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgClassFilter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgClassFilter.d.ts","sourceRoot":"","sources":["../../src/filters/pgClassFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EACV,WAAW,EACX,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,aAAa,CACtB,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CAErE,SAAQ,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CACrC,YAAW,OAAO,EAAE,eAAe;aAYjB,KAAK,EAAE,GAAG;IAV5B,MAAM,CAAC,QAAQ;;;MAGb;IAEF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAa;gBAGnC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EACZ,KAAK,EAAE,GAAG;IAK5B,KAAK,CAAC,SAAS,EAAE,GAAG;IAIpB,MAAM,CAAC,SAAS,EAAE,GAAG;IAIrB,KAAK;IAKL,CAAC,OAAO,CAAC;CAGV"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgClassFilter.js b/grafast/dataplan-pg/dist/filters/pgClassFilter.js new file mode 100644 index 0000000000..001b537a00 --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgClassFilter.js @@ -0,0 +1,32 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgClassFilter = void 0; +const grafast_1 = require("grafast"); +const pg_sql2_1 = require("pg-sql2"); +class PgClassFilter extends grafast_1.Modifier { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgClassFilter", + }; } + constructor(parent, alias) { + super(parent); + this.alias = alias; + this.conditions = []; + this.havingConditions = []; + } + where(condition) { + this.conditions.push(condition); + } + having(condition) { + this.havingConditions.push(condition); + } + apply() { + this.conditions.forEach((condition) => this.parent.where(condition)); + this.havingConditions.forEach((condition) => this.parent.having(condition)); + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } +} +exports.PgClassFilter = PgClassFilter; +//# sourceMappingURL=pgClassFilter.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgClassFilter.js.map b/grafast/dataplan-pg/dist/filters/pgClassFilter.js.map new file mode 100644 index 0000000000..042634e5ad --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgClassFilter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgClassFilter.js","sourceRoot":"","sources":["../../src/filters/pgClassFilter.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AAEnC,qCAAkC;AAQlC,MAAa,aAGX,SAAQ,kBAA8B;aAG/B,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,eAAe;KAC5B,AAHc,CAGb;IAKF,YACE,MAA4B,EACZ,KAAU;QAE1B,KAAK,CAAC,MAAM,CAAC,CAAC;QAFE,UAAK,GAAL,KAAK,CAAK;QALpB,eAAU,GAAU,EAAE,CAAC;QACvB,qBAAgB,GAAU,EAAE,CAAC;IAOrC,CAAC;IAED,KAAK,CAAC,SAAc;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,SAAc;QACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,CAAC,iBAAO,CAAC;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;;AApCH,sCAqCC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts b/grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts new file mode 100644 index 0000000000..475335a7f7 --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts @@ -0,0 +1,18 @@ +import { Modifier } from "grafast"; +import type { PgResource } from "../datasource.js"; +import { PgTempTable } from "../steps/pgTempTable.js"; +import { PgClassFilter } from "./pgClassFilter.js"; +export declare class PgManyFilter> extends Modifier { + childDataSource: TChildResource; + private myAttrs; + private theirAttrs; + static $$export: { + moduleName: string; + exportName: string; + }; + someTemp: PgTempTable | null; + constructor($parentFilterPlan: PgClassFilter, childDataSource: TChildResource, myAttrs: string[], theirAttrs: string[]); + some(): PgClassFilter>; + apply(): void; +} +//# sourceMappingURL=pgManyFilter.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts.map b/grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts.map new file mode 100644 index 0000000000..cfd2c4cbbc --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgManyFilter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgManyFilter.d.ts","sourceRoot":"","sources":["../../src/filters/pgManyFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,qBAAa,YAAY,CACvB,cAAc,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC1D,SAAQ,QAAQ,CAAC,aAAa,CAAC;IAStB,eAAe,EAAE,cAAc;IACtC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,UAAU;IAVpB,MAAM,CAAC,QAAQ;;;MAGb;IAEK,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,IAAI,CAAQ;gBAEzD,iBAAiB,EAAE,aAAa,EACzB,eAAe,EAAE,cAAc,EAC9B,OAAO,EAAE,MAAM,EAAE,EACjB,UAAU,EAAE,MAAM,EAAE;IAU9B,IAAI;IAiBJ,KAAK;CAqBN"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgManyFilter.js b/grafast/dataplan-pg/dist/filters/pgManyFilter.js new file mode 100644 index 0000000000..491a67330f --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgManyFilter.js @@ -0,0 +1,49 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgManyFilter = void 0; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importDefault(require("pg-sql2")); +const pgTempTable_js_1 = require("../steps/pgTempTable.js"); +const pgClassFilter_js_1 = require("./pgClassFilter.js"); +class PgManyFilter extends grafast_1.Modifier { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgManyFilter", + }; } + constructor($parentFilterPlan, childDataSource, myAttrs, theirAttrs) { + super($parentFilterPlan); + this.childDataSource = childDataSource; + this.myAttrs = myAttrs; + this.theirAttrs = theirAttrs; + this.someTemp = null; + if (myAttrs.length !== theirAttrs.length) { + throw new Error("Expected the local and remote attributes to have the same number of entries."); + } + } + some() { + const tempTable = new pgTempTable_js_1.PgTempTable(this.parent, this.childDataSource); + // Implement the relationship + this.myAttrs.forEach((attr, i) => { + tempTable.where((0, pg_sql2_1.default) `${this.parent.alias}.${pg_sql2_1.default.identifier(attr)} = ${tempTable.alias}.${pg_sql2_1.default.identifier(this.theirAttrs[i])}`); + }); + const $filter = new pgClassFilter_js_1.PgClassFilter(tempTable.wherePlan(), tempTable.alias); + this.someTemp = tempTable; + return $filter; + } + apply() { + if (this.someTemp) { + const conditions = this.someTemp.conditions; + const from = (0, pg_sql2_1.default) `\nfrom ${this.someTemp.fromExpression()} as ${this.someTemp.alias}`; + const sqlConditions = pg_sql2_1.default.join(conditions.map((c) => pg_sql2_1.default.parens(pg_sql2_1.default.indent(c))), " and "); + const where = conditions.length === 0 + ? pg_sql2_1.default.blank + : conditions.length === 1 + ? (0, pg_sql2_1.default) `\nwhere ${sqlConditions}` + : (0, pg_sql2_1.default) `\nwhere\n${pg_sql2_1.default.indent(sqlConditions)}`; + this.parent.where((0, pg_sql2_1.default) `exists(${pg_sql2_1.default.indent((0, pg_sql2_1.default) `select 1${from}${where}`)})`); + } + } +} +exports.PgManyFilter = PgManyFilter; +//# sourceMappingURL=pgManyFilter.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgManyFilter.js.map b/grafast/dataplan-pg/dist/filters/pgManyFilter.js.map new file mode 100644 index 0000000000..a06d9e5d14 --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgManyFilter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgManyFilter.js","sourceRoot":"","sources":["../../src/filters/pgManyFilter.ts"],"names":[],"mappings":";;;;AAAA,qCAAmC;AACnC,8DAA0B;AAG1B,4DAAsD;AACtD,yDAAmD;AAEnD,MAAa,YAEX,SAAQ,kBAAuB;aACxB,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,cAAc;KAC3B,AAHc,CAGb;IAGF,YACE,iBAAgC,EACzB,eAA+B,EAC9B,OAAiB,EACjB,UAAoB;QAE5B,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAJlB,oBAAe,GAAf,eAAe,CAAgB;QAC9B,YAAO,GAAP,OAAO,CAAU;QACjB,eAAU,GAAV,UAAU,CAAU;QALvB,aAAQ,GAAuC,IAAI,CAAC;QAQzD,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,8EAA8E,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI;QACF,MAAM,SAAS,GAAG,IAAI,4BAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAErE,6BAA6B;QAC7B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC/B,SAAS,CAAC,KAAK,CACb,IAAA,iBAAG,EAAA,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,iBAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAC7C,SAAS,CAAC,KACZ,IAAI,iBAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CACzC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,gCAAa,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC5C,MAAM,IAAI,GAAG,IAAA,iBAAG,EAAA,UAAU,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,OACtD,IAAI,CAAC,QAAQ,CAAC,KAChB,EAAE,CAAC;YACH,MAAM,aAAa,GAAG,iBAAG,CAAC,IAAI,CAC5B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAG,CAAC,MAAM,CAAC,iBAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAChD,OAAO,CACR,CAAC;YACF,MAAM,KAAK,GACT,UAAU,CAAC,MAAM,KAAK,CAAC;gBACrB,CAAC,CAAC,iBAAG,CAAC,KAAK;gBACX,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;oBACvB,CAAC,CAAC,IAAA,iBAAG,EAAA,WAAW,aAAa,EAAE;oBAC/B,CAAC,CAAC,IAAA,iBAAG,EAAA,YAAY,iBAAG,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,IAAA,iBAAG,EAAA,UAAU,iBAAG,CAAC,MAAM,CAAC,IAAA,iBAAG,EAAA,WAAW,IAAI,GAAG,KAAK,EAAE,CAAC,GAAG,CACzD,CAAC;QACJ,CAAC;IACH,CAAC;;AA5DH,oCA6DC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts b/grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts new file mode 100644 index 0000000000..0d0ef1c3b6 --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts @@ -0,0 +1,19 @@ +import { Modifier } from "grafast"; +import type { SQL, SQLable } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgConditionLike } from "../interfaces.js"; +export declare class PgOrFilter extends Modifier implements SQLable { + static $$export: { + moduleName: string; + exportName: string; + }; + private conditions; + private havingConditions; + alias: SQL; + constructor($classFilterPlan: PgConditionLike); + where(condition: SQL): void; + having(condition: SQL): void; + apply(): void; + [$$toSQL](): SQL; +} +//# sourceMappingURL=pgOrFilter.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts.map b/grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts.map new file mode 100644 index 0000000000..2b6888297f --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgOrFilter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgOrFilter.d.ts","sourceRoot":"","sources":["../../src/filters/pgOrFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAO,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,qBAAa,UAAW,SAAQ,QAAQ,CAAC,eAAe,CAAE,YAAW,OAAO;IAC1E,MAAM,CAAC,QAAQ;;;MAGb;IAEF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAa;IAC9B,KAAK,EAAE,GAAG,CAAC;gBAEN,gBAAgB,EAAE,eAAe;IAK7C,KAAK,CAAC,SAAS,EAAE,GAAG;IAIpB,MAAM,CAAC,SAAS,EAAE,GAAG;IAIrB,KAAK;IAmBL,CAAC,OAAO,CAAC;CAGV"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgOrFilter.js b/grafast/dataplan-pg/dist/filters/pgOrFilter.js new file mode 100644 index 0000000000..af5d07a3ce --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgOrFilter.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgOrFilter = void 0; +const grafast_1 = require("grafast"); +const pg_sql2_1 = require("pg-sql2"); +class PgOrFilter extends grafast_1.Modifier { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgOrFilter", + }; } + constructor($classFilterPlan) { + super($classFilterPlan); + this.conditions = []; + this.havingConditions = []; + this.alias = $classFilterPlan.alias; + } + where(condition) { + this.conditions.push(condition); + } + having(condition) { + this.havingConditions.push(condition); + } + apply() { + if (this.conditions.length > 0) { + this.parent.where((0, pg_sql2_1.sql) `(${pg_sql2_1.sql.join(this.conditions.map((frag) => pg_sql2_1.sql.indent(pg_sql2_1.sql.parens(frag))), "\nOR\n")})`); + } + if (this.havingConditions.length > 0) { + this.parent.having((0, pg_sql2_1.sql) `(${pg_sql2_1.sql.join(this.havingConditions.map((frag) => pg_sql2_1.sql.indent(pg_sql2_1.sql.parens(frag))), "\nOR\n")})`); + } + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } +} +exports.PgOrFilter = PgOrFilter; +//# sourceMappingURL=pgOrFilter.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/filters/pgOrFilter.js.map b/grafast/dataplan-pg/dist/filters/pgOrFilter.js.map new file mode 100644 index 0000000000..8d41d7cd64 --- /dev/null +++ b/grafast/dataplan-pg/dist/filters/pgOrFilter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgOrFilter.js","sourceRoot":"","sources":["../../src/filters/pgOrFilter.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AAEnC,qCAAuC;AAIvC,MAAa,UAAW,SAAQ,kBAAyB;aAChD,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,YAAY;KACzB,AAHc,CAGb;IAMF,YAAY,gBAAiC;QAC3C,KAAK,CAAC,gBAAgB,CAAC,CAAC;QALlB,eAAU,GAAU,EAAE,CAAC;QACvB,qBAAgB,GAAU,EAAE,CAAC;QAKnC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,SAAc;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,SAAc;QACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,IAAA,aAAG,EAAA,IAAI,aAAG,CAAC,IAAI,CACb,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAG,CAAC,MAAM,CAAC,aAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAC3D,QAAQ,CACT,GAAG,CACL,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAChB,IAAA,aAAG,EAAA,IAAI,aAAG,CAAC,IAAI,CACb,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAG,CAAC,MAAM,CAAC,aAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EACjE,QAAQ,CACT,GAAG,CACL,CAAC;QACJ,CAAC;IACH,CAAC;IAED,CAAC,iBAAO,CAAC;QACP,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;;AA5CH,gCA6CC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts b/grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts new file mode 100644 index 0000000000..11453e775c --- /dev/null +++ b/grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts @@ -0,0 +1,14 @@ +/** + * `@dataplan/pg` builds SQL queries in a particular format, this function will + * tweak the queries to add some syntax highlighting to make the queries easier + * to read. + * + * Further, if this is passed with a Postgres error, we'll try and add a + * pointer that points to the relevant part of the query where the error + * occurred. + */ +export declare function formatSQLForDebugging(sql: string, error?: { + position?: string | number; + message?: string; +} | null): string; +//# sourceMappingURL=formatSQLForDebugging.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts.map b/grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts.map new file mode 100644 index 0000000000..8136350953 --- /dev/null +++ b/grafast/dataplan-pg/dist/formatSQLForDebugging.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"formatSQLForDebugging.d.ts","sourceRoot":"","sources":["../src/formatSQLForDebugging.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC9D,MAAM,CAmDR"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/formatSQLForDebugging.js b/grafast/dataplan-pg/dist/formatSQLForDebugging.js new file mode 100644 index 0000000000..8179710050 --- /dev/null +++ b/grafast/dataplan-pg/dist/formatSQLForDebugging.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.formatSQLForDebugging = formatSQLForDebugging; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +/** + * `@dataplan/pg` builds SQL queries in a particular format, this function will + * tweak the queries to add some syntax highlighting to make the queries easier + * to read. + * + * Further, if this is passed with a Postgres error, we'll try and add a + * pointer that points to the relevant part of the query where the error + * occurred. + */ +function formatSQLForDebugging(sql, error) { + const pos = error?.position != null ? parseInt(String(error.position), 10) : null; + let colourIndex = 0; + const allowedColours = [ + chalk_1.default.red, + chalk_1.default.green, + chalk_1.default.yellow, + chalk_1.default.blue, + chalk_1.default.magenta, + chalk_1.default.cyan, + chalk_1.default.white, + chalk_1.default.black, + ]; + function nextColor() { + colourIndex = (colourIndex + 1) % allowedColours.length; + return allowedColours[colourIndex]; + } + const colours = Object.create(null); + /* Yep - that's `colour` from English and `ize` from American */ + function colourize(str) { + if (!colours[str]) { + colours[str] = nextColor(); + } + return colours[str].bold.call(null, str); + } + function comment(str) { + return chalk_1.default.inverse(str); + } + const lines = sql.split("\n"); + let start = 0; + const output = []; + for (const line of lines) { + const end = start + line.length + 1; + const colouredSql = line + .replace(/__[a-z0-9_]+(?:_[0-9]+|__)/g, colourize) + .replace(/(\/\*.*\*\/|--.*$)/g, comment); + output.push(colouredSql); + if (pos != null && pos >= start && pos < end) { + output.push(chalk_1.default.red("-".repeat(pos - start - 1) + "^ " + error?.message)); + } + start = end; + } + return output.join("\n"); +} +//# sourceMappingURL=formatSQLForDebugging.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/formatSQLForDebugging.js.map b/grafast/dataplan-pg/dist/formatSQLForDebugging.js.map new file mode 100644 index 0000000000..d5ce848fc6 --- /dev/null +++ b/grafast/dataplan-pg/dist/formatSQLForDebugging.js.map @@ -0,0 +1 @@ +{"version":3,"file":"formatSQLForDebugging.js","sourceRoot":"","sources":["../src/formatSQLForDebugging.ts"],"names":[],"mappings":";;AAWA,sDAsDC;;AAjED,0DAA0B;AAE1B;;;;;;;;GAQG;AACH,SAAgB,qBAAqB,CACnC,GAAW,EACX,KAA+D;IAE/D,MAAM,GAAG,GACP,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,cAAc,GAAG;QACrB,eAAK,CAAC,GAAG;QACT,eAAK,CAAC,KAAK;QACX,eAAK,CAAC,MAAM;QACZ,eAAK,CAAC,IAAI;QACV,eAAK,CAAC,OAAO;QACb,eAAK,CAAC,IAAI;QACV,eAAK,CAAC,KAAK;QACX,eAAK,CAAC,KAAK;KACZ,CAAC;IAEF,SAAS,SAAS;QAChB,WAAW,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;QACxD,OAAO,cAAc,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpC,gEAAgE;IAChE,SAAS,SAAS,CAAC,GAAW;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,SAAS,OAAO,CAAC,GAAW;QAC1B,OAAO,eAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI;aACrB,OAAO,CAAC,6BAA6B,EAAE,SAAS,CAAC;aACjD,OAAO,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CACT,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,OAAO,CAAC,CAC/D,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/index.d.ts b/grafast/dataplan-pg/dist/index.d.ts new file mode 100644 index 0000000000..7ea51f4d5d --- /dev/null +++ b/grafast/dataplan-pg/dist/index.d.ts @@ -0,0 +1,102 @@ +import type { GrafastSubscriber } from "grafast"; +import { domainOfCodec, enumCodec, getCodecByPgCatalogTypeName, getInnerCodec, isEnumCodec, listOfCodec, ObjectFromPgCodecAttributes, PgCodecAttribute, PgCodecAttributeExtensions, PgCodecAttributes, PgCodecAttributeVia, PgCodecAttributeViaExplicit, PgEnumCodecSpec, PgRecordTypeCodecSpec, rangeOfCodec, recordCodec, sqlValueWithCodec, TYPES } from "./codecs.js"; +import { PgBox, PgCircle, PgHStore, PgInterval, PgLine, PgLseg, PgPath, PgPoint, PgPolygon } from "./codecUtils/index.js"; +import { makePgResourceOptions, makeRegistry, makeRegistryBuilder, PgCodecRef, PgCodecRefExtensions, PgCodecRefPath, PgCodecRefPathEntry, PgCodecRefs, PgFunctionResourceOptions, PgRegistryBuilder, PgResource, PgResourceExtensions, PgResourceOptions, PgResourceParameter, PgResourceUnique, PgResourceUniqueExtensions } from "./datasource.js"; +import { PgClient, PgClientQuery, PgClientResult, PgExecutor, PgExecutorContext, PgExecutorContextPlans, PgExecutorInput, PgExecutorMutationOptions, PgExecutorOptions, WithPgClient } from "./executor.js"; +import { PgBooleanFilter } from "./filters/pgBooleanFilter.js"; +import { PgClassFilter } from "./filters/pgClassFilter.js"; +import { PgManyFilter } from "./filters/pgManyFilter.js"; +import { PgOrFilter } from "./filters/pgOrFilter.js"; +import type { PgSelectQueryBuilderCallback, PgUnionAllQueryBuilderCallback } from "./interfaces.js"; +import { GetPgCodecAttributes, GetPgRegistryCodecRelations, GetPgRegistryCodecs, GetPgRegistrySources, GetPgResourceAttributes, GetPgResourceCodec, GetPgResourceRegistry, GetPgResourceRelations, GetPgResourceUniques, KeysOfType, MakePgServiceOptions, PgClassSingleStep, PgCodec, PgCodecAnyScalar, PgCodecExtensions, PgCodecList, PgCodecPolymorphism, PgCodecPolymorphismRelational, PgCodecPolymorphismRelationalTypeSpec, PgCodecPolymorphismSingle, PgCodecPolymorphismSingleTypeAttributeSpec, PgCodecPolymorphismSingleTypeSpec, PgCodecPolymorphismUnion, PgCodecRelation, PgCodecRelationConfig, PgCodecRelationExtensions, PgCodecWithAttributes, PgConditionLike, PgDecode, PgEncode, PgEnumCodec, PgEnumValue, PgGroupSpec, PgOrderSpec, PgRefDefinition, PgRefDefinitionExtensions, PgRefDefinitions, PgRegistry, PgTypedStep, PlanByUniques, TuplePlanMap } from "./interfaces.js"; +import { PgLockableParameter, PgLockCallback } from "./pgLocker.js"; +import type { PgAdaptor } from "./pgServices.js"; +import { getWithPgClientFromPgService, withPgClientFromPgService, withSuperuserPgClientFromPgService } from "./pgServices.js"; +import { PgContextPlugin } from "./plugins/PgContextPlugin.js"; +import { pgClassExpression, PgClassExpressionStep } from "./steps/pgClassExpression.js"; +import { PgCondition, PgConditionCapableParent, PgHavingConditionSpec, PgWhereConditionSpec, pgWhereConditionSpecListToSQL } from "./steps/pgCondition.js"; +import { PgCursorStep } from "./steps/pgCursor.js"; +import { pgDeleteSingle, PgDeleteSingleQueryBuilder, PgDeleteSingleStep } from "./steps/pgDeleteSingle.js"; +import { pgInsertSingle, PgInsertSingleQueryBuilder, PgInsertSingleStep } from "./steps/pgInsertSingle.js"; +import { pgPageInfo, PgPageInfoStep } from "./steps/pgPageInfo.js"; +import { pgPolymorphic, PgPolymorphicStep, PgPolymorphicTypeMap } from "./steps/pgPolymorphic.js"; +import { generatePgParameterAnalysis, pgFromExpression, pgFromExpressionRuntime, PgGroupDetails, pgSelect, PgSelectArgumentDigest, PgSelectArgumentRuntimeValue, PgSelectArgumentSpec, pgSelectFromRecords, PgSelectIdentifierSpec, PgSelectMode, PgSelectOptions, PgSelectParsedCursorStep, PgSelectQueryBuilder, PgSelectRowsStep, PgSelectStep, sqlFromArgDigests } from "./steps/pgSelect.js"; +import { pgSelectFromRecord, pgSelectSingleFromRecord, PgSelectSinglePlanOptions, PgSelectSingleStep } from "./steps/pgSelectSingle.js"; +import { pgSingleTablePolymorphic, PgSingleTablePolymorphicStep } from "./steps/pgSingleTablePolymorphic.js"; +import { PgTempTable } from "./steps/pgTempTable.js"; +import { pgUnionAll, PgUnionAllQueryBuilder, PgUnionAllRowsStep, PgUnionAllSingleStep, PgUnionAllStep, PgUnionAllStepCondition, PgUnionAllStepConfig, PgUnionAllStepConfigAttributes, PgUnionAllStepMember, PgUnionAllStepOrder } from "./steps/pgUnionAll.js"; +import { pgUpdateSingle, PgUpdateSingleQueryBuilder, PgUpdateSingleStep } from "./steps/pgUpdateSingle.js"; +import { pgValidateParsedCursor, PgValidateParsedCursorStep } from "./steps/pgValidateParsedCursor.js"; +import { toPg, ToPgStep } from "./steps/toPg.js"; +import { withPgClient, WithPgClientStep, WithPgClientStepCallback, withPgClientTransaction } from "./steps/withPgClient.js"; +import { assertPgClassSingleStep } from "./utils.js"; +export { assertPgClassSingleStep, domainOfCodec, enumCodec, generatePgParameterAnalysis, getCodecByPgCatalogTypeName, getInnerCodec, GetPgCodecAttributes, GetPgRegistryCodecRelations, GetPgRegistryCodecs, GetPgRegistrySources, GetPgResourceAttributes, GetPgResourceCodec, GetPgResourceRegistry, GetPgResourceRelations, GetPgResourceUniques, getWithPgClientFromPgService, isEnumCodec, KeysOfType, listOfCodec, makePgResourceOptions, MakePgServiceOptions, makeRegistry, makeRegistryBuilder, ObjectFromPgCodecAttributes, PgAdaptor, PgBooleanFilter, PgBox, PgCircle, pgClassExpression, PgClassExpressionStep, PgClassFilter, PgClassSingleStep, PgClient, PgClientQuery, PgClientResult, PgCodec, PgCodecAnyScalar, PgCodecAttribute, PgCodecAttributeExtensions, PgCodecAttributes, PgCodecAttributeVia, PgCodecAttributeViaExplicit, PgCodecExtensions, PgCodecList, PgCodecPolymorphism, PgCodecPolymorphismRelational, PgCodecPolymorphismRelationalTypeSpec, PgCodecPolymorphismSingle, PgCodecPolymorphismSingleTypeAttributeSpec, PgCodecPolymorphismSingleTypeSpec, PgCodecPolymorphismUnion, PgCodecRef, PgCodecRefExtensions, PgCodecRefPath, PgCodecRefPathEntry, PgCodecRefs, PgCodecRelation, PgCodecRelationConfig, PgCodecRelationExtensions, PgCodecWithAttributes, PgCondition, PgConditionCapableParent, PgConditionLike, PgContextPlugin, PgCursorStep, PgDecode, pgDeleteSingle, PgDeleteSingleQueryBuilder, PgDeleteSingleStep, PgEncode, PgEnumCodec, PgEnumCodecSpec, PgEnumValue, PgExecutor, PgExecutorContext, PgExecutorContextPlans, PgExecutorInput, PgExecutorMutationOptions, PgExecutorOptions, pgFromExpression, pgFromExpressionRuntime, PgFunctionResourceOptions, PgGroupDetails, PgGroupSpec, PgHavingConditionSpec, PgHStore, pgInsertSingle, PgInsertSingleQueryBuilder, PgInsertSingleStep, PgInterval, PgLine, PgLockableParameter, PgLockCallback, PgLseg, PgManyFilter, PgOrderSpec, PgOrFilter, pgPageInfo, PgPageInfoStep, PgPath, PgPoint, PgPolygon, pgPolymorphic, PgPolymorphicStep, PgPolymorphicTypeMap, PgRecordTypeCodecSpec, PgRefDefinition, PgRefDefinitionExtensions, PgRefDefinitions, PgRegistry, PgRegistryBuilder, PgResource, PgResourceExtensions, PgResourceOptions, PgResourceParameter, PgResourceUnique, PgResourceUniqueExtensions, pgSelect, PgSelectArgumentDigest, PgSelectArgumentRuntimeValue, PgSelectArgumentSpec, pgSelectFromRecord, pgSelectFromRecords, PgSelectIdentifierSpec, PgSelectMode, PgSelectOptions, PgSelectParsedCursorStep, PgSelectQueryBuilder, PgSelectQueryBuilderCallback, PgSelectRowsStep, pgSelectSingleFromRecord, PgSelectSinglePlanOptions, PgSelectSingleStep, PgSelectStep, pgSingleTablePolymorphic, PgSingleTablePolymorphicStep, PgTempTable, PgTypedStep, pgUnionAll, PgUnionAllQueryBuilder, PgUnionAllQueryBuilderCallback, PgUnionAllRowsStep, PgUnionAllSingleStep, PgUnionAllStep, PgUnionAllStepCondition, PgUnionAllStepConfig, PgUnionAllStepConfigAttributes, PgUnionAllStepMember, PgUnionAllStepOrder, pgUpdateSingle, PgUpdateSingleQueryBuilder, PgUpdateSingleStep, pgValidateParsedCursor, PgValidateParsedCursorStep, PgWhereConditionSpec, pgWhereConditionSpecListToSQL, PlanByUniques, rangeOfCodec, recordCodec, sqlFromArgDigests, sqlValueWithCodec, toPg, ToPgStep, TuplePlanMap, TYPES, WithPgClient, withPgClient, withPgClientFromPgService, WithPgClientStep, WithPgClientStepCallback, withPgClientTransaction, withSuperuserPgClientFromPgService, }; +export { version } from "./version.js"; +declare global { + namespace GraphileConfig { + interface PgServiceConfiguration { + name: string; + schemas?: string[]; + adaptor: PgAdaptor; + adaptorSettings?: GraphileConfig.PgAdaptors[TAdaptor]["adaptorSettings"]; + /** The key on 'context' where the withPgClient function will be sourced */ + withPgClientKey: KeysOfType>; + /** Return settings to set in the session */ + pgSettings?: ((requestContext: Grafast.RequestContext) => Record) | Record | null; + /** Settings to set in the session that performs introspection (during gather phase) */ + pgSettingsForIntrospection?: Record | null; + /** The key on 'context' where the pgSettings for this DB will be sourced */ + pgSettingsKey?: KeysOfType | null | undefined>; + /** The GrafastSubscriber to use for subscriptions */ + pgSubscriber?: GrafastSubscriber> | null; + /** Where on the context should the PgSubscriber be stored? */ + pgSubscriberKey?: KeysOfType | null | undefined>; + /** + * Call this when you no longer need this service configuration any more; + * releases any created resources (e.g. connection pools). + */ + release?: () => void | PromiseLike; + } + interface Preset { + pgServices?: ReadonlyArray<{ + [Key in keyof GraphileConfig.PgAdaptors]: PgServiceConfiguration; + }[keyof GraphileConfig.PgAdaptors]>; + } + interface PgAdaptors { + } + } + namespace DataplanPg { + interface PgConditionExtensions { + } + /** + * Custom metadata for a codec + */ + interface PgCodecExtensions { + oid?: string; + listItemNonNull?: boolean; + isEnumTableEnum?: boolean; + } + /** + * Extra metadata you can attach to a unique constraint. + */ + interface PgResourceUniqueExtensions { + } + /** + * Space for extra metadata about this resource + */ + interface PgResourceExtensions { + } + interface PgResourceParameterExtensions { + variant?: string; + } + interface PgCodecRefExtensions { + } + interface PgCodecAttributeExtensions { + } + interface PgRefDefinitionExtensions { + } + interface PgCodecRelationExtensions { + } + } +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/index.d.ts.map b/grafast/dataplan-pg/dist/index.d.ts.map new file mode 100644 index 0000000000..64e5af0a33 --- /dev/null +++ b/grafast/dataplan-pg/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/index.js b/grafast/dataplan-pg/dist/index.js new file mode 100644 index 0000000000..bfe663762a --- /dev/null +++ b/grafast/dataplan-pg/dist/index.js @@ -0,0 +1,164 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pgValidateParsedCursor = exports.PgUpdateSingleStep = exports.pgUpdateSingle = exports.PgUnionAllStep = exports.PgUnionAllSingleStep = exports.PgUnionAllRowsStep = exports.pgUnionAll = exports.PgTempTable = exports.PgSingleTablePolymorphicStep = exports.pgSingleTablePolymorphic = exports.PgSelectStep = exports.PgSelectSingleStep = exports.pgSelectSingleFromRecord = exports.PgSelectRowsStep = exports.pgSelectFromRecords = exports.pgSelectFromRecord = exports.pgSelect = exports.PgResource = exports.PgPolymorphicStep = exports.pgPolymorphic = exports.PgPageInfoStep = exports.pgPageInfo = exports.PgOrFilter = exports.PgManyFilter = exports.PgInsertSingleStep = exports.pgInsertSingle = exports.pgFromExpressionRuntime = exports.pgFromExpression = exports.PgExecutor = exports.PgDeleteSingleStep = exports.pgDeleteSingle = exports.PgCursorStep = exports.PgContextPlugin = exports.PgCondition = exports.PgClassFilter = exports.PgClassExpressionStep = exports.pgClassExpression = exports.PgBooleanFilter = exports.makeRegistryBuilder = exports.makeRegistry = exports.makePgResourceOptions = exports.listOfCodec = exports.isEnumCodec = exports.getWithPgClientFromPgService = exports.getInnerCodec = exports.getCodecByPgCatalogTypeName = exports.generatePgParameterAnalysis = exports.enumCodec = exports.domainOfCodec = exports.assertPgClassSingleStep = void 0; +exports.version = exports.withSuperuserPgClientFromPgService = exports.withPgClientTransaction = exports.WithPgClientStep = exports.withPgClientFromPgService = exports.withPgClient = exports.TYPES = exports.ToPgStep = exports.toPg = exports.sqlValueWithCodec = exports.sqlFromArgDigests = exports.recordCodec = exports.rangeOfCodec = exports.pgWhereConditionSpecListToSQL = exports.PgValidateParsedCursorStep = void 0; +const grafast_1 = require("grafast"); +const codecs_js_1 = require("./codecs.js"); +Object.defineProperty(exports, "domainOfCodec", { enumerable: true, get: function () { return codecs_js_1.domainOfCodec; } }); +Object.defineProperty(exports, "enumCodec", { enumerable: true, get: function () { return codecs_js_1.enumCodec; } }); +Object.defineProperty(exports, "getCodecByPgCatalogTypeName", { enumerable: true, get: function () { return codecs_js_1.getCodecByPgCatalogTypeName; } }); +Object.defineProperty(exports, "getInnerCodec", { enumerable: true, get: function () { return codecs_js_1.getInnerCodec; } }); +Object.defineProperty(exports, "isEnumCodec", { enumerable: true, get: function () { return codecs_js_1.isEnumCodec; } }); +Object.defineProperty(exports, "listOfCodec", { enumerable: true, get: function () { return codecs_js_1.listOfCodec; } }); +Object.defineProperty(exports, "rangeOfCodec", { enumerable: true, get: function () { return codecs_js_1.rangeOfCodec; } }); +Object.defineProperty(exports, "recordCodec", { enumerable: true, get: function () { return codecs_js_1.recordCodec; } }); +Object.defineProperty(exports, "sqlValueWithCodec", { enumerable: true, get: function () { return codecs_js_1.sqlValueWithCodec; } }); +Object.defineProperty(exports, "TYPES", { enumerable: true, get: function () { return codecs_js_1.TYPES; } }); +const datasource_js_1 = require("./datasource.js"); +Object.defineProperty(exports, "makePgResourceOptions", { enumerable: true, get: function () { return datasource_js_1.makePgResourceOptions; } }); +Object.defineProperty(exports, "makeRegistry", { enumerable: true, get: function () { return datasource_js_1.makeRegistry; } }); +Object.defineProperty(exports, "makeRegistryBuilder", { enumerable: true, get: function () { return datasource_js_1.makeRegistryBuilder; } }); +Object.defineProperty(exports, "PgResource", { enumerable: true, get: function () { return datasource_js_1.PgResource; } }); +const executor_js_1 = require("./executor.js"); +Object.defineProperty(exports, "PgExecutor", { enumerable: true, get: function () { return executor_js_1.PgExecutor; } }); +const pgBooleanFilter_js_1 = require("./filters/pgBooleanFilter.js"); +Object.defineProperty(exports, "PgBooleanFilter", { enumerable: true, get: function () { return pgBooleanFilter_js_1.PgBooleanFilter; } }); +const pgClassFilter_js_1 = require("./filters/pgClassFilter.js"); +Object.defineProperty(exports, "PgClassFilter", { enumerable: true, get: function () { return pgClassFilter_js_1.PgClassFilter; } }); +const pgManyFilter_js_1 = require("./filters/pgManyFilter.js"); +Object.defineProperty(exports, "PgManyFilter", { enumerable: true, get: function () { return pgManyFilter_js_1.PgManyFilter; } }); +const pgOrFilter_js_1 = require("./filters/pgOrFilter.js"); +Object.defineProperty(exports, "PgOrFilter", { enumerable: true, get: function () { return pgOrFilter_js_1.PgOrFilter; } }); +const pgServices_js_1 = require("./pgServices.js"); +Object.defineProperty(exports, "getWithPgClientFromPgService", { enumerable: true, get: function () { return pgServices_js_1.getWithPgClientFromPgService; } }); +Object.defineProperty(exports, "withPgClientFromPgService", { enumerable: true, get: function () { return pgServices_js_1.withPgClientFromPgService; } }); +Object.defineProperty(exports, "withSuperuserPgClientFromPgService", { enumerable: true, get: function () { return pgServices_js_1.withSuperuserPgClientFromPgService; } }); +const PgContextPlugin_js_1 = require("./plugins/PgContextPlugin.js"); +Object.defineProperty(exports, "PgContextPlugin", { enumerable: true, get: function () { return PgContextPlugin_js_1.PgContextPlugin; } }); +const pgClassExpression_js_1 = require("./steps/pgClassExpression.js"); +Object.defineProperty(exports, "pgClassExpression", { enumerable: true, get: function () { return pgClassExpression_js_1.pgClassExpression; } }); +Object.defineProperty(exports, "PgClassExpressionStep", { enumerable: true, get: function () { return pgClassExpression_js_1.PgClassExpressionStep; } }); +const pgCondition_js_1 = require("./steps/pgCondition.js"); +Object.defineProperty(exports, "PgCondition", { enumerable: true, get: function () { return pgCondition_js_1.PgCondition; } }); +Object.defineProperty(exports, "pgWhereConditionSpecListToSQL", { enumerable: true, get: function () { return pgCondition_js_1.pgWhereConditionSpecListToSQL; } }); +const pgCursor_js_1 = require("./steps/pgCursor.js"); +Object.defineProperty(exports, "PgCursorStep", { enumerable: true, get: function () { return pgCursor_js_1.PgCursorStep; } }); +const pgDeleteSingle_js_1 = require("./steps/pgDeleteSingle.js"); +Object.defineProperty(exports, "pgDeleteSingle", { enumerable: true, get: function () { return pgDeleteSingle_js_1.pgDeleteSingle; } }); +Object.defineProperty(exports, "PgDeleteSingleStep", { enumerable: true, get: function () { return pgDeleteSingle_js_1.PgDeleteSingleStep; } }); +const pgInsertSingle_js_1 = require("./steps/pgInsertSingle.js"); +Object.defineProperty(exports, "pgInsertSingle", { enumerable: true, get: function () { return pgInsertSingle_js_1.pgInsertSingle; } }); +Object.defineProperty(exports, "PgInsertSingleStep", { enumerable: true, get: function () { return pgInsertSingle_js_1.PgInsertSingleStep; } }); +const pgPageInfo_js_1 = require("./steps/pgPageInfo.js"); +Object.defineProperty(exports, "pgPageInfo", { enumerable: true, get: function () { return pgPageInfo_js_1.pgPageInfo; } }); +Object.defineProperty(exports, "PgPageInfoStep", { enumerable: true, get: function () { return pgPageInfo_js_1.PgPageInfoStep; } }); +const pgPolymorphic_js_1 = require("./steps/pgPolymorphic.js"); +Object.defineProperty(exports, "pgPolymorphic", { enumerable: true, get: function () { return pgPolymorphic_js_1.pgPolymorphic; } }); +Object.defineProperty(exports, "PgPolymorphicStep", { enumerable: true, get: function () { return pgPolymorphic_js_1.PgPolymorphicStep; } }); +const pgSelect_js_1 = require("./steps/pgSelect.js"); +Object.defineProperty(exports, "generatePgParameterAnalysis", { enumerable: true, get: function () { return pgSelect_js_1.generatePgParameterAnalysis; } }); +Object.defineProperty(exports, "pgFromExpression", { enumerable: true, get: function () { return pgSelect_js_1.pgFromExpression; } }); +Object.defineProperty(exports, "pgFromExpressionRuntime", { enumerable: true, get: function () { return pgSelect_js_1.pgFromExpressionRuntime; } }); +Object.defineProperty(exports, "pgSelect", { enumerable: true, get: function () { return pgSelect_js_1.pgSelect; } }); +Object.defineProperty(exports, "pgSelectFromRecords", { enumerable: true, get: function () { return pgSelect_js_1.pgSelectFromRecords; } }); +Object.defineProperty(exports, "PgSelectRowsStep", { enumerable: true, get: function () { return pgSelect_js_1.PgSelectRowsStep; } }); +Object.defineProperty(exports, "PgSelectStep", { enumerable: true, get: function () { return pgSelect_js_1.PgSelectStep; } }); +Object.defineProperty(exports, "sqlFromArgDigests", { enumerable: true, get: function () { return pgSelect_js_1.sqlFromArgDigests; } }); +const pgSelectSingle_js_1 = require("./steps/pgSelectSingle.js"); +Object.defineProperty(exports, "pgSelectFromRecord", { enumerable: true, get: function () { return pgSelectSingle_js_1.pgSelectFromRecord; } }); +Object.defineProperty(exports, "pgSelectSingleFromRecord", { enumerable: true, get: function () { return pgSelectSingle_js_1.pgSelectSingleFromRecord; } }); +Object.defineProperty(exports, "PgSelectSingleStep", { enumerable: true, get: function () { return pgSelectSingle_js_1.PgSelectSingleStep; } }); +const pgSingleTablePolymorphic_js_1 = require("./steps/pgSingleTablePolymorphic.js"); +Object.defineProperty(exports, "pgSingleTablePolymorphic", { enumerable: true, get: function () { return pgSingleTablePolymorphic_js_1.pgSingleTablePolymorphic; } }); +Object.defineProperty(exports, "PgSingleTablePolymorphicStep", { enumerable: true, get: function () { return pgSingleTablePolymorphic_js_1.PgSingleTablePolymorphicStep; } }); +const pgTempTable_js_1 = require("./steps/pgTempTable.js"); +Object.defineProperty(exports, "PgTempTable", { enumerable: true, get: function () { return pgTempTable_js_1.PgTempTable; } }); +const pgUnionAll_js_1 = require("./steps/pgUnionAll.js"); +Object.defineProperty(exports, "pgUnionAll", { enumerable: true, get: function () { return pgUnionAll_js_1.pgUnionAll; } }); +Object.defineProperty(exports, "PgUnionAllRowsStep", { enumerable: true, get: function () { return pgUnionAll_js_1.PgUnionAllRowsStep; } }); +Object.defineProperty(exports, "PgUnionAllSingleStep", { enumerable: true, get: function () { return pgUnionAll_js_1.PgUnionAllSingleStep; } }); +Object.defineProperty(exports, "PgUnionAllStep", { enumerable: true, get: function () { return pgUnionAll_js_1.PgUnionAllStep; } }); +const pgUpdateSingle_js_1 = require("./steps/pgUpdateSingle.js"); +Object.defineProperty(exports, "pgUpdateSingle", { enumerable: true, get: function () { return pgUpdateSingle_js_1.pgUpdateSingle; } }); +Object.defineProperty(exports, "PgUpdateSingleStep", { enumerable: true, get: function () { return pgUpdateSingle_js_1.PgUpdateSingleStep; } }); +const pgValidateParsedCursor_js_1 = require("./steps/pgValidateParsedCursor.js"); +Object.defineProperty(exports, "pgValidateParsedCursor", { enumerable: true, get: function () { return pgValidateParsedCursor_js_1.pgValidateParsedCursor; } }); +Object.defineProperty(exports, "PgValidateParsedCursorStep", { enumerable: true, get: function () { return pgValidateParsedCursor_js_1.PgValidateParsedCursorStep; } }); +const toPg_js_1 = require("./steps/toPg.js"); +Object.defineProperty(exports, "toPg", { enumerable: true, get: function () { return toPg_js_1.toPg; } }); +Object.defineProperty(exports, "ToPgStep", { enumerable: true, get: function () { return toPg_js_1.ToPgStep; } }); +const withPgClient_js_1 = require("./steps/withPgClient.js"); +Object.defineProperty(exports, "withPgClient", { enumerable: true, get: function () { return withPgClient_js_1.withPgClient; } }); +Object.defineProperty(exports, "WithPgClientStep", { enumerable: true, get: function () { return withPgClient_js_1.WithPgClientStep; } }); +Object.defineProperty(exports, "withPgClientTransaction", { enumerable: true, get: function () { return withPgClient_js_1.withPgClientTransaction; } }); +const utils_js_1 = require("./utils.js"); +Object.defineProperty(exports, "assertPgClassSingleStep", { enumerable: true, get: function () { return utils_js_1.assertPgClassSingleStep; } }); +(0, grafast_1.exportAsMany)("@dataplan/pg", { + assertPgClassSingleStep: utils_js_1.assertPgClassSingleStep, + domainOfCodec: codecs_js_1.domainOfCodec, + getInnerCodec: codecs_js_1.getInnerCodec, + enumCodec: codecs_js_1.enumCodec, + getCodecByPgCatalogTypeName: codecs_js_1.getCodecByPgCatalogTypeName, + isEnumCodec: codecs_js_1.isEnumCodec, + listOfCodec: codecs_js_1.listOfCodec, + rangeOfCodec: codecs_js_1.rangeOfCodec, + recordCodec: codecs_js_1.recordCodec, + sqlValueWithCodec: codecs_js_1.sqlValueWithCodec, + makeRegistryBuilder: datasource_js_1.makeRegistryBuilder, + makeRegistry: datasource_js_1.makeRegistry, + makePgResourceOptions: datasource_js_1.makePgResourceOptions, + TYPES: codecs_js_1.TYPES, + PgResource: datasource_js_1.PgResource, + PgExecutor: executor_js_1.PgExecutor, + PgBooleanFilter: pgBooleanFilter_js_1.PgBooleanFilter, + PgClassFilter: pgClassFilter_js_1.PgClassFilter, + PgManyFilter: pgManyFilter_js_1.PgManyFilter, + PgOrFilter: pgOrFilter_js_1.PgOrFilter, + pgClassExpression: pgClassExpression_js_1.pgClassExpression, + PgClassExpressionStep: pgClassExpression_js_1.PgClassExpressionStep, + PgCondition: pgCondition_js_1.PgCondition, + pgWhereConditionSpecListToSQL: pgCondition_js_1.pgWhereConditionSpecListToSQL, + PgCursorStep: pgCursor_js_1.PgCursorStep, + pgDeleteSingle: pgDeleteSingle_js_1.pgDeleteSingle, + PgDeleteSingleStep: pgDeleteSingle_js_1.PgDeleteSingleStep, + pgInsertSingle: pgInsertSingle_js_1.pgInsertSingle, + PgInsertSingleStep: pgInsertSingle_js_1.PgInsertSingleStep, + pgPageInfo: pgPageInfo_js_1.pgPageInfo, + PgPageInfoStep: pgPageInfo_js_1.PgPageInfoStep, + pgPolymorphic: pgPolymorphic_js_1.pgPolymorphic, + PgPolymorphicStep: pgPolymorphic_js_1.PgPolymorphicStep, + pgSelect: pgSelect_js_1.pgSelect, + pgFromExpressionRuntime: pgSelect_js_1.pgFromExpressionRuntime, + pgFromExpression: pgSelect_js_1.pgFromExpression, + generatePgParameterAnalysis: pgSelect_js_1.generatePgParameterAnalysis, + pgSelectFromRecords: pgSelect_js_1.pgSelectFromRecords, + PgSelectStep: pgSelect_js_1.PgSelectStep, + PgSelectRowsStep: pgSelect_js_1.PgSelectRowsStep, + sqlFromArgDigests: pgSelect_js_1.sqlFromArgDigests, + pgSelectFromRecord: pgSelectSingle_js_1.pgSelectFromRecord, + pgSelectSingleFromRecord: pgSelectSingle_js_1.pgSelectSingleFromRecord, + PgSelectSingleStep: pgSelectSingle_js_1.PgSelectSingleStep, + pgSingleTablePolymorphic: pgSingleTablePolymorphic_js_1.pgSingleTablePolymorphic, + pgUnionAll: pgUnionAll_js_1.pgUnionAll, + PgUnionAllSingleStep: pgUnionAll_js_1.PgUnionAllSingleStep, + PgUnionAllRowsStep: pgUnionAll_js_1.PgUnionAllRowsStep, + PgUnionAllStep: pgUnionAll_js_1.PgUnionAllStep, + PgSingleTablePolymorphicStep: pgSingleTablePolymorphic_js_1.PgSingleTablePolymorphicStep, + pgUpdateSingle: pgUpdateSingle_js_1.pgUpdateSingle, + PgUpdateSingleStep: pgUpdateSingle_js_1.PgUpdateSingleStep, + pgValidateParsedCursor: pgValidateParsedCursor_js_1.pgValidateParsedCursor, + PgValidateParsedCursorStep: pgValidateParsedCursor_js_1.PgValidateParsedCursorStep, + PgTempTable: pgTempTable_js_1.PgTempTable, + toPg: toPg_js_1.toPg, + ToPgStep: toPg_js_1.ToPgStep, + withPgClient: withPgClient_js_1.withPgClient, + withPgClientTransaction: withPgClient_js_1.withPgClientTransaction, + WithPgClientStep: withPgClient_js_1.WithPgClientStep, + getWithPgClientFromPgService: pgServices_js_1.getWithPgClientFromPgService, + withPgClientFromPgService: pgServices_js_1.withPgClientFromPgService, + withSuperuserPgClientFromPgService: pgServices_js_1.withSuperuserPgClientFromPgService, + PgContextPlugin: PgContextPlugin_js_1.PgContextPlugin, +}); +var version_js_1 = require("./version.js"); +Object.defineProperty(exports, "version", { enumerable: true, get: function () { return version_js_1.version; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/index.js.map b/grafast/dataplan-pg/dist/index.js.map new file mode 100644 index 0000000000..2688d6dbe6 --- /dev/null +++ b/grafast/dataplan-pg/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/inspect.d.ts b/grafast/dataplan-pg/dist/inspect.d.ts new file mode 100644 index 0000000000..055d98ae5a --- /dev/null +++ b/grafast/dataplan-pg/dist/inspect.d.ts @@ -0,0 +1,10 @@ +export declare let inspect: { + (obj: any, options?: { + colors?: boolean; + depth?: number; + compact?: boolean | number; + breakLength?: number; + }): string; + custom: symbol; +}; +//# sourceMappingURL=inspect.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/inspect.d.ts.map b/grafast/dataplan-pg/dist/inspect.d.ts.map new file mode 100644 index 0000000000..390b857b51 --- /dev/null +++ b/grafast/dataplan-pg/dist/inspect.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAAA,eAAO,IAAI,OAAO,EAAE;IAClB,CACE,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/inspect.js b/grafast/dataplan-pg/dist/inspect.js new file mode 100644 index 0000000000..35c376300a --- /dev/null +++ b/grafast/dataplan-pg/dist/inspect.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.inspect = void 0; +try { + exports.inspect = require("util").inspect; + if (typeof exports.inspect !== "function") { + throw new Error("Failed to load inspect"); + } +} +catch { + exports.inspect = Object.assign((obj) => { + return Array.isArray(obj) || + !obj || + Object.getPrototypeOf(obj) === null || + Object.getPrototypeOf(obj) === Object.prototype + ? String(JSON.stringify(obj)) + : String(obj); + }, { custom: Symbol.for("nodejs.util.inspect.custom") }); +} +//# sourceMappingURL=inspect.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/inspect.js.map b/grafast/dataplan-pg/dist/inspect.js.map new file mode 100644 index 0000000000..3c586db9d3 --- /dev/null +++ b/grafast/dataplan-pg/dist/inspect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":";;;AAaA,IAAI,CAAC;IACH,eAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IAClC,IAAI,OAAO,eAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,eAAO,GAAG,MAAM,CAAC,MAAM,CACrB,CAAC,GAAQ,EAAE,EAAE;QACX,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACvB,CAAC,GAAG;YACJ,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI;YACnC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS;YAC/C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC,EACD,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,CACrD,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/interfaces.d.ts b/grafast/dataplan-pg/dist/interfaces.d.ts new file mode 100644 index 0000000000..1adeab6619 --- /dev/null +++ b/grafast/dataplan-pg/dist/interfaces.d.ts @@ -0,0 +1,405 @@ +import type { Modifier, Step } from "grafast"; +import type { PgSQL, SQL, SQLRawValue } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgCodecAttributes } from "./codecs.js"; +import type { PgCodecRefs, PgResource, PgResourceOptions, PgResourceParameter, PgResourceUnique } from "./datasource.js"; +import type { PgExecutor } from "./executor.js"; +import type { PgDeleteSingleStep } from "./steps/pgDeleteSingle.js"; +import type { PgInsertSingleStep } from "./steps/pgInsertSingle.js"; +import type { PgSelectQueryBuilder } from "./steps/pgSelect.js"; +import type { PgSelectSingleStep } from "./steps/pgSelectSingle.js"; +import type { PgUnionAllQueryBuilder } from "./steps/pgUnionAll.js"; +import type { PgUpdateSingleStep } from "./steps/pgUpdateSingle.js"; +/** + * A class-like source of information - could be from `SELECT`-ing a row, or + * `INSERT...RETURNING` or similar. *ALWAYS* represents a single row (or null). + */ +export type PgClassSingleStep = PgResource> = PgSelectSingleStep | PgInsertSingleStep | PgUpdateSingleStep | PgDeleteSingleStep; +/** + * Given a value of type TInput, returns an `SQL` value to insert into an SQL + * statement. + */ +export type PgEncode = (value: TInput) => SQLRawValue; +/** + * Given a text value from PostgreSQL, returns the value cast to TCanonical. + */ +export type PgDecode = (value: TFromPostgres) => TForJavaScript; +/** @deprecated Use DataplanPg.PgRefDefinitionExtensions instead */ +export type PgRefDefinitionExtensions = DataplanPg.PgRefDefinitionExtensions; +export interface PgRefDefinition { + graphqlType?: string; + sourceGraphqlType?: string; + singular?: boolean; + description?: string; + extensions?: DataplanPg.PgRefDefinitionExtensions; + singleRecordFieldName?: string; + listFieldName?: string; + connectionFieldName?: string; +} +export interface PgRefDefinitions { + [refName: string]: PgRefDefinition; +} +/** @deprecated Use DataplanPg.PgCodecExtensions instead */ +export type PgCodecExtensions = DataplanPg.PgCodecExtensions; +export interface PgCodecPolymorphismSingleTypeAttributeSpec { + attribute: TAttributeName; + isNotNull?: boolean; + rename?: string; +} +export interface PgCodecPolymorphismSingleTypeSpec { + /** The name of the polymorphic subentry of the parent single table polymorphic codec */ + name: string; + /** The attributes that are specific to this concrete type (including any modifiers); empty array is valid */ + attributes: Array>; +} +export interface PgCodecPolymorphismSingle { + mode: "single"; + /** The list of attributes that is used to determine which polymorphic type the record is. Currently this should always have length 1. */ + typeAttributes: readonly TAttributeName[]; + /** These attributes are shared by every concrete type of this codec; empty array is valid */ + commonAttributes: readonly TAttributeName[]; + /** Details the concrete types from this polymorphic single table, including what to call it, and what columns it has. */ + types: { + [typeKey: string]: PgCodecPolymorphismSingleTypeSpec; + }; +} +export interface PgCodecPolymorphismRelationalTypeSpec { + name: string; + /** The name of the database table this type relates to (useful before the relations are established) */ + references: string; + /** The name of the relation to follow to get the related record */ + relationName: string; +} +export interface PgCodecPolymorphismRelational { + mode: "relational"; + typeAttributes: readonly TAttributeName[]; + types: { + [typeKey: string]: PgCodecPolymorphismRelationalTypeSpec; + }; +} +export interface PgCodecPolymorphismUnion { + mode: "union"; +} +export type PgCodecPolymorphism = PgCodecPolymorphismSingle | PgCodecPolymorphismRelational | PgCodecPolymorphismUnion; +/** + * A codec for a Postgres type, tells us how to convert to-and-from Postgres + * (including changes to the SQL statement itself). Also includes metadata + * about the type, for example any of the attributes it has. + */ +export interface PgCodec | undefined = PgCodec | undefined, TDomainItemCodec extends PgCodec | undefined = PgCodec | undefined, TRangeItemCodec extends PgCodec | undefined = PgCodec | undefined> { + /** + * Unique name to identify this codec. + */ + name: TName; + /** + * Given a value of type TFromJavaScript, returns an `SQL` value to insert into an SQL + * statement. + * + * **IMPORTANT**: nulls must already be handled! + */ + toPg: PgEncode; + /** + * Given a text value from PostgreSQL, returns the value cast to TCanonical. + * + * **IMPORTANT**: nulls must already be handled! + */ + fromPg: PgDecode; + /** + * We'll append `::text` by default to each selection; however if this type + * needs something special (e.g. `money` should be converted to `numeric` + * before being converted to `text`) then you can provide this custom + * callback to provide your own casting - this could even include function + * calls if you want. + */ + castFromPg?: (fragment: SQL, guaranteedNotNull?: boolean) => SQL; + /** + * If you provide `castFromPg` you probably ought to also specify + * `listCastFromPg` so that a list of this type can be converted properly. + */ + listCastFromPg?: (fragment: SQL, guaranteedNotNull?: boolean) => SQL; + /** + * When we have an expression of this type, we can safely cast it within + * Postgres using the cast `(${expression})::${sqlType}` to make the type + * explicit. + */ + sqlType: SQL; + /** + * If true, this is an anonymous type (e.g. the return type of a + * `returns record` or `returns table` PostgreSQL function) and thus should + * not be referenced via `sqlType` directly. + */ + isAnonymous?: boolean; + /** + * True if this type is a binary type (e.g. bytea) + */ + isBinary?: boolean; + /** + * If this is a composite type, the attributes it supports. + */ + attributes: TAttributes; + /** + * A callback to return `'true'` (text string) if the composite type + * represented by this codec is non-null, and `null` or `'false'` otherwise. + * + * If this codec represents a composite type (e.g. a row or other type with + * multiple attributes) and this type can be returned from a function then + * there's a risk that the function may return null/an all-nulls composite + * type. This can occur with `returns some_composite_type` or + * `returns setof some_composite_type`, though the former is more common as + * you explicitly need to return nulls in the latter. + * + * We can't simply do `not (foo is null)` because you might be using + * column-level select grants which would prevent this happening. As such we + * give you a chance to provide your own non-null check. In most table cases + * you can use `(${alias}.id is not null)::text` (assuming 'id' is the name + * of your primary key); for composite types you can normally do + * `(not (${alias} is null))::text`. + */ + notNullExpression?: (alias: SQL) => SQL; + /** + * If set, this represents a PostgreSQL array type. Please note: array types + * should NOT be nested. + */ + arrayOfCodec?: TArrayItemCodec; + /** + * The underlying codec that this type is a domain over. + */ + domainOfCodec?: TDomainItemCodec; + /** + * If this is a domain, does it add a non-null constraint? + */ + notNull?: boolean; + /** + * The underlying codec that this type is a range over. + */ + rangeOfCodec?: TRangeItemCodec; + polymorphism?: PgCodecPolymorphism; + description?: string; + /** + * Arbitrary metadata + */ + extensions?: Partial; + /** + * Relations to follow for shortcut references, can be polymorphic, can be + * many-to-many. + */ + refs?: PgCodecRefs; + /** + * If this codec came from a specific database, we should list the executor + * here. If the codec is used with multiple databases, leave this null, but + * note that if it has attributes then it will not be able to be used as the + * type of an attribute itself. + */ + executor: PgExecutor | null; +} +export type PgCodecWithAttributes = PgCodec; +export type PgCodecAnyScalar = PgCodec; +export type PgCodecList = PgCodec> = PgCodec; +export type PgEnumValue = { + value: TValue; + description?: string; +}; +/** + * A PgCodec specifically for enums + */ +export interface PgEnumCodec extends PgCodec { + values: PgEnumValue[]; +} +/** + * A PgTypedStep has a 'pgCodec' property which means we don't need + * to also state the pgCodec to use, this can be an added convenience. + */ +export interface PgTypedStep extends Step { + pgCodec: TCodec; +} +type PgOrderCommonSpec = { + readonly direction: "ASC" | "DESC"; + /** `NULLS FIRST` or `NULLS LAST` or nothing */ + readonly nulls?: "FIRST" | "LAST" | null; +}; +export type PgOrderFragmentSpec = { + /** The expression we're ordering by. */ + readonly fragment: SQL; + /** The codec of the expression that we're ordering by, this is useful when constructing a cursor for it. */ + readonly codec: PgCodec; + readonly attribute?: never; + readonly callback?: never; + readonly nullable?: boolean; +} & PgOrderCommonSpec; +export type PgOrderAttributeSpec = { + /** The attribute you're using for ordering */ + readonly attribute: string; + /** An optional expression to wrap this attribute with, and the type that expression returns */ + readonly callback?: (attributeExpression: SQL, attributeCodec: PgCodec, nullable: boolean) => [fragment: SQL, codec: PgCodec, nullable?: boolean]; + readonly fragment?: never; + readonly codec?: never; + readonly nullable?: boolean; +} & PgOrderCommonSpec; +/** + * The information required to specify an entry in an 'ORDER BY' clause. + */ +export type PgOrderSpec = PgOrderFragmentSpec | PgOrderAttributeSpec; +/** + * The information required to specify an entry in a `GROUP BY` clause. + */ +export interface PgGroupSpec { + fragment: SQL; + codec: PgCodec; + guaranteedNotNull?: boolean; +} +export type TuplePlanMap> = { + [Index in keyof TTuple]: { + [key in keyof TAttributes as Exclude]?: Step>; + } & { + [key in TTuple[number]]: Step>; + }; +}; +/** + * Represents a spec like `{user_id: Step}` or + * `{organization_id: Step, item_id: Step}`. The keys in + * the spec can be any of the attributes in TAttributes, however there must be at + * least one of the unique sets of attributes represented (as specified in + * TUniqueAttributes) - you can then add arbitrary additional attributes if you need + * to. + */ +export type PlanByUniques>> = TAttributes extends PgCodecAttributes ? TuplePlanMap[number] : undefined; +export type PgConditionLike = Modifier & { + alias: SQL; + where(condition: SQL): void; + having(condition: SQL): void; +}; +export type KeysOfType = { + [key in keyof TObject]: TObject[key] extends TValueType ? key : never; +}[keyof TObject]; +export interface MakePgServiceOptions extends Partial> { + connectionString?: string; + schemas?: string | string[]; + superuserConnectionString?: string; + pubsub?: boolean; +} +/** @deprecated Use DataplanPg.PgCodecRelationExtensions instead */ +export type PgCodecRelationExtensions = DataplanPg.PgCodecRelationExtensions; +export interface PgCodecRelationBase { + /** Where the relationship starts */ + localCodec: TLocalCodec; + /** If localCodec is polymorphic, which of the concrete subtypes should this relationship apply to? */ + localCodecPolymorphicTypes?: string[]; + /** + * The attributes locally used in this relationship. + */ + localAttributes: readonly (keyof TLocalCodec["attributes"] & string)[]; + /** + * The remote attributes that are joined against. + */ + remoteAttributes: readonly TRemoteAttributes[]; + /** + * If true then there's at most one record this relationship will find. + */ + isUnique: boolean; + /** + * If true then this is a reverse lookup (where our local attributes are + * referenced by the remote tables remote attributes, rather than the other way + * around), so multiple rows may be found (unless isUnique is true). + */ + isReferencee?: boolean; + /** + * Space for you to add your own metadata. + */ + extensions?: PgCodecRelationExtensions; + description?: string; +} +export interface PgCodecRelationConfig> extends PgCodecRelationBase, any, any> ? keyof UAttributes : never> { + remoteResourceOptions: TRemoteResourceOptions; +} +/** + * Describes a relation from a codec to a resource + */ +export interface PgCodecRelation = PgResource> extends PgCodecRelationBase, any, any, any> ? keyof UAttributes : never> { + /** + * The remote resource this relation relates to. + */ + remoteResource: TRemoteResource; +} +export interface PgRegistryConfig; +}, TResourceOptions extends { + [name in string]: PgResourceOptions>>, readonly PgResourceParameter[] | undefined>; +}, TRelations extends { + [codecName in keyof TCodecs]?: { + [relationName in string]: PgCodecRelationConfig, PgResourceOptions>; + }; +}, TExecutors extends { + [executorName in string]: PgExecutor; +} = { + [executorName: string]: PgExecutor; +}> { + pgExecutors: TExecutors; + pgCodecs: TCodecs; + pgResources: TResourceOptions; + pgRelations: TRelations; +} +export type Expand = T extends unknown ? { + [TKey in keyof T]: T[TKey]; +} : never; +export interface PgRegistry; +} = Record>, TResourceOptions extends { + [name in string]: PgResourceOptions>, readonly PgResourceParameter[] | undefined>; +} = Record>, readonly PgResourceParameter[] | undefined>>, TRelations extends { + [codecName in keyof TCodecs]?: { + [relationName in string]: PgCodecRelationConfig, PgResourceOptions>; + }; +} = Record, PgResourceOptions>>>, TExecutors extends { + [executorName in string]: PgExecutor; +} = { + [executorName: string]: PgExecutor; +}> { + pgExecutors: TExecutors; + pgCodecs: TCodecs; + pgResources: { + [name in keyof TResourceOptions]: TResourceOptions[name] extends PgResourceOptions ? PgResource> : never; + }; + pgRelations: { + [codecName in keyof TRelations]: { + [relationName in keyof TRelations[codecName]]: Expand & { + remoteResource: TRelations[codecName][relationName] extends { + remoteResourceOptions: PgResourceOptions; + } ? PgResource> : never; + }>; + }; + }; +} +export type GetPgRegistryCodecs> = TRegistry["pgCodecs"]; +export type GetPgRegistrySources> = TRegistry["pgResources"]; +export type GetPgRegistryCodecRelations, TCodec extends PgCodec> = TRegistry["pgRelations"][TCodec["name"]]; +export type GetPgCodecAttributes> = TCodec extends PgCodec ? UAttributes extends undefined ? never : UAttributes : PgCodecAttributes; +export type GetPgResourceRegistry> = TResource["registry"]; +export type GetPgResourceCodec> = TResource["codec"]; +export type GetPgResourceAttributes> = GetPgCodecAttributes; +export type GetPgResourceRelations> = TResource["registry"]["pgRelations"][TResource["codec"]["name"]]; +export type GetPgResourceUniques> = TResource["uniques"]; +export type PgSQLCallback = (sql: PgSQL>) => TResult; +export type PgSQLCallbackOrDirect = PgSQLCallback | TResult; +export interface PgQueryBuilder { + /** The alias of the current table */ + alias: SQL; + [$$toSQL](): SQL; + setMeta(key: string, value: unknown): void; + getMetaRaw(key: string): unknown; +} +export type PgSelectQueryBuilderCallback = (qb: PgSelectQueryBuilder) => void; +export type PgUnionAllQueryBuilderCallback = (qb: PgUnionAllQueryBuilder) => void; +export type ReadonlyArrayOrDirect = T | ReadonlyArray; +export type ObjectForResource> = { + [key in keyof GetPgResourceAttributes & string]?: any; +}; +export interface PgQueryRootStep extends Step { + getPgRoot(): PgQueryRootStep; + placeholder($step: PgTypedStep): SQL; + placeholder($step: Step, codec: PgCodec, alreadyEncoded?: boolean): SQL; + deferredSQL($step: Step): SQL; +} +export {}; +//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/interfaces.d.ts.map b/grafast/dataplan-pg/dist/interfaces.d.ts.map new file mode 100644 index 0000000000..bff2f534d6 --- /dev/null +++ b/grafast/dataplan-pg/dist/interfaces.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/interfaces.js b/grafast/dataplan-pg/dist/interfaces.js new file mode 100644 index 0000000000..88e4ecea05 --- /dev/null +++ b/grafast/dataplan-pg/dist/interfaces.js @@ -0,0 +1,4 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const pg_sql2_1 = require("pg-sql2"); +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/interfaces.js.map b/grafast/dataplan-pg/dist/interfaces.js.map new file mode 100644 index 0000000000..4fc226a83b --- /dev/null +++ b/grafast/dataplan-pg/dist/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;AAEA,qCAAkC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/parseArray.d.ts b/grafast/dataplan-pg/dist/parseArray.d.ts new file mode 100644 index 0000000000..43ae5d1400 --- /dev/null +++ b/grafast/dataplan-pg/dist/parseArray.d.ts @@ -0,0 +1,11 @@ +type Transform = (val: string) => T; +/** + * Parses an array according to + * https://www.postgresql.org/docs/17/arrays.html#ARRAYS-IO + * + * Trusts the data (mostly), so only hook up to trusted Postgres servers. + */ +export declare function makeParseArrayWithTransform(transform?: Transform): (str: string) => readonly T[]; +export declare const parseArray: (str: string) => readonly string[]; +export {}; +//# sourceMappingURL=parseArray.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/parseArray.d.ts.map b/grafast/dataplan-pg/dist/parseArray.d.ts.map new file mode 100644 index 0000000000..4275d6d68e --- /dev/null +++ b/grafast/dataplan-pg/dist/parseArray.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parseArray.d.ts","sourceRoot":"","sources":["../src/parseArray.ts"],"names":[],"mappings":"AAaA,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,GAAG,MAAM,EACpD,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,EAAE,MAAM,KAAK,SAAS,CAAC,EAAE,CAgG/B;AAED,eAAO,MAAM,UAAU,QAlGd,MAAM,sBAkGwC,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/parseArray.js b/grafast/dataplan-pg/dist/parseArray.js new file mode 100644 index 0000000000..aa15d61459 --- /dev/null +++ b/grafast/dataplan-pg/dist/parseArray.js @@ -0,0 +1,114 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parseArray = void 0; +exports.makeParseArrayWithTransform = makeParseArrayWithTransform; +const BACKSLASH = "\\"; +const DQUOT = '"'; +const LBRACE = "{"; +const RBRACE = "}"; +const LBRACKET = "["; +const EQUALS = "="; +const COMMA = ","; +/** When the raw value is this, it means a literal `null` */ +const NULL_STRING = "NULL"; +const EMPTY_ARRAY = Object.freeze([]); +/** + * Parses an array according to + * https://www.postgresql.org/docs/17/arrays.html#ARRAYS-IO + * + * Trusts the data (mostly), so only hook up to trusted Postgres servers. + */ +function makeParseArrayWithTransform(transform) { + const haveTransform = transform != null; + return function parseArray(str) { + const rbraceIndex = str.length - 1; + if (rbraceIndex === 1) { + return EMPTY_ARRAY; + } + if (str[rbraceIndex] !== RBRACE) { + throw new Error("Invalid array text - must end with }"); + } + // If starts with `[`, it is specifying the index boundas. Skip past first `=`. + let position = 0; + if (str[position] === LBRACKET) { + position = str.indexOf(EQUALS) + 1; + } + if (str[position++] !== LBRACE) { + throw new Error("Invalid array text - must start with {"); + } + const output = []; + let current = output; + const stack = []; + let currentStringStart = position; + // Allocate on first assignment + let currentString = ""; + let expectValue = true; + for (; position < rbraceIndex; ++position) { + let char = str[position]; + // > The array output routine will put double quotes around element values if + // > they are empty strings, contain curly braces, delimiter characters, double + // > quotes, backslashes, or white space, or match the word NULL. Double quotes + // > and backslashes embedded in element values will be backslash-escaped. + if (char === DQUOT) { + // It's escaped + currentStringStart = ++position; + let dquot = str.indexOf(DQUOT, currentStringStart); + let backSlash = str.indexOf(BACKSLASH, currentStringStart); + while (backSlash !== -1 && backSlash < dquot) { + position = backSlash; + const part = str.slice(currentStringStart, position); + currentString += part; + currentStringStart = ++position; + if (dquot === position++) { + // This was an escaped doublequote; find the next one! + dquot = str.indexOf(DQUOT, position); + } + // Either way, find the next backslash + backSlash = str.indexOf(BACKSLASH, position); + } + position = dquot; + const part = str.slice(currentStringStart, position); + currentString += part; + current.push(haveTransform ? transform(currentString) : currentString); + currentString = ""; + expectValue = false; + } + else if (char === LBRACE) { + const newArray = []; + current.push(newArray); + stack.push(current); + current = newArray; + currentStringStart = position + 1; + expectValue = true; + } + else if (char === COMMA) { + expectValue = true; + } + else if (char === RBRACE) { + expectValue = false; + const arr = stack.pop(); + if (arr === undefined) { + throw new Error("Invalid array text - too many '}'"); + } + current = arr; + } + else if (expectValue) { + currentStringStart = position; + while ((char = str[position]) !== COMMA && + char !== RBRACE && + position < rbraceIndex) { + ++position; + } + const part = str.slice(currentStringStart, position--); + current.push(part === NULL_STRING ? null : haveTransform ? transform(part) : part); + expectValue = false; + } + else { + throw new Error("Was expecting delimeter"); + } + } + return output; + }; +} +exports.parseArray = makeParseArrayWithTransform(); +//# sourceMappingURL=parseArray.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/parseArray.js.map b/grafast/dataplan-pg/dist/parseArray.js.map new file mode 100644 index 0000000000..52d73915f7 --- /dev/null +++ b/grafast/dataplan-pg/dist/parseArray.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parseArray.js","sourceRoot":"","sources":["../src/parseArray.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgLocker.d.ts b/grafast/dataplan-pg/dist/pgLocker.d.ts new file mode 100644 index 0000000000..368034927d --- /dev/null +++ b/grafast/dataplan-pg/dist/pgLocker.d.ts @@ -0,0 +1,48 @@ +import type { PgStmtBaseStep } from "./steps/pgStmt"; +export type PgLockableParameter = "orderBy" | "first" | "last" | "offset" | "groupBy"; +export type PgLockCallback> = (step: TStep) => void; +export declare class PgLocker> { + private parent; + /** + * Determines if the PgSelectStep is "locked" - i.e. its + * FROM,JOINs,WHERE,ORDER BY,LIMIT,OFFSET cannot be changed. Note this does + * not prevent adding more SELECTs + */ + locked: boolean; + constructor(parent: TStep); + private _beforeLock; + private _afterLock; + private _lockedParameter; + /** + * Performs the given call back just before the given PgLockableParameter is + * locked. + * + * @remarks To make sure we do things in the right order (e.g. ensure all the + * `order by` values are established before attempting to interpret a + * `cursor` for `before`/`after`) we need a locking system. This locking + * system allows for final actions to take place _just before_ the element is + * locked, for example _just before_ the order is locked we might want to + * check that the ordering is unique, and if it is not then we may want to + * add the primary key to the ordering. + */ + beforeLock(type: PgLockableParameter, callback: PgLockCallback): void; + /** + * Performs the given call back just after the given PgLockableParameter is + * locked. + */ + afterLock(type: PgLockableParameter, callback: PgLockCallback): void; + private lockCallbacks; + /** + * Calls all the beforeLock actions for the given parameter and then locks + * it. + */ + lockParameter(type: PgLockableParameter): void; + /** + * Throw a helpful error if you're trying to modify something that's already + * locked. + */ + assertParameterUnlocked(type: PgLockableParameter): void; + lockAllParameters(): void; + lock(): void; +} +//# sourceMappingURL=pgLocker.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgLocker.d.ts.map b/grafast/dataplan-pg/dist/pgLocker.d.ts.map new file mode 100644 index 0000000000..1cc3c24723 --- /dev/null +++ b/grafast/dataplan-pg/dist/pgLocker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgLocker.d.ts","sourceRoot":"","sources":["../src/pgLocker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAC3B,SAAS,GACT,OAAO,GACP,MAAM,GACN,QAAQ,GACR,SAAS,CAAC;AACd,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC,IAAI,CAC9D,IAAI,EAAE,KAAK,KACR,IAAI,CAAC;AAEV,qBAAa,QAAQ,CAAC,KAAK,SAAS,cAAc,CAAC,GAAG,CAAC;IAQzC,OAAO,CAAC,MAAM;IAP1B;;;;OAIG;IACI,MAAM,UAAS;gBAEF,MAAM,EAAE,KAAK;IAEjC,OAAO,CAAC,WAAW,CAQjB;IAEF,OAAO,CAAC,UAAU,CAQhB;IAEF,OAAO,CAAC,gBAAgB,CAQtB;IAEF;;;;;;;;;;;OAWG;IACI,UAAU,CACf,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,GAC9B,IAAI;IAKP;;;OAGG;IACI,SAAS,CACd,IAAI,EAAE,mBAAmB,EACzB,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,GAC9B,IAAI;IAKP,OAAO,CAAC,aAAa;IAoBrB;;;OAGG;IACI,aAAa,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAWrD;;;OAGG;IACI,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAcxD,iBAAiB;IAqBjB,IAAI,IAAI,IAAI;CAIpB"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgLocker.js b/grafast/dataplan-pg/dist/pgLocker.js new file mode 100644 index 0000000000..b051c5e4eb --- /dev/null +++ b/grafast/dataplan-pg/dist/pgLocker.js @@ -0,0 +1,129 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgLocker = void 0; +const grafast_1 = require("grafast"); +class PgLocker { + constructor(parent) { + this.parent = parent; + /** + * Determines if the PgSelectStep is "locked" - i.e. its + * FROM,JOINs,WHERE,ORDER BY,LIMIT,OFFSET cannot be changed. Note this does + * not prevent adding more SELECTs + */ + this.locked = false; + this._beforeLock = { + orderBy: [], + groupBy: [], + first: [], + last: [], + offset: [], + }; + this._afterLock = { + orderBy: [], + groupBy: [], + first: [], + last: [], + offset: [], + }; + this._lockedParameter = { + orderBy: false, + groupBy: false, + first: false, + last: false, + offset: false, + }; + } + /** + * Performs the given call back just before the given PgLockableParameter is + * locked. + * + * @remarks To make sure we do things in the right order (e.g. ensure all the + * `order by` values are established before attempting to interpret a + * `cursor` for `before`/`after`) we need a locking system. This locking + * system allows for final actions to take place _just before_ the element is + * locked, for example _just before_ the order is locked we might want to + * check that the ordering is unique, and if it is not then we may want to + * add the primary key to the ordering. + */ + beforeLock(type, callback) { + this.assertParameterUnlocked(type); + this._beforeLock[type].push(callback); + } + /** + * Performs the given call back just after the given PgLockableParameter is + * locked. + */ + afterLock(type, callback) { + this.assertParameterUnlocked(type); + this._afterLock[type].push(callback); + } + lockCallbacks(phase, type) { + const list = phase === "beforeLock" ? this._beforeLock : this._afterLock; + const callbacks = list[type]; + const l = callbacks.length; + if (l > 0) { + const toCall = callbacks.splice(0, l); + for (let i = 0; i < l; i++) { + toCall[i](this.parent); + } + if (callbacks.length > 0) { + throw new Error(`beforeLock callback for '${type}' caused more beforeLock callbacks to be registered`); + } + } + } + /** + * Calls all the beforeLock actions for the given parameter and then locks + * it. + */ + lockParameter(type) { + if (this._lockedParameter[type] !== false) { + return; + } + this.lockCallbacks("beforeLock", type); + this._lockedParameter[type] = grafast_1.isDev + ? new Error("Initially locked here").stack + : true; + this.lockCallbacks("afterLock", type); + } + /** + * Throw a helpful error if you're trying to modify something that's already + * locked. + */ + assertParameterUnlocked(type) { + const isLocked = this._lockedParameter[type]; + if (isLocked !== false) { + if (typeof isLocked === "string") { + throw new Error(`'${type}' has already been locked\n ` + + isLocked.replace(/\n/g, "\n ") + + "\n"); + } + throw new Error(`'${type}' has already been locked`); + } + } + lockAllParameters() { + // // We must execute everything after `from` so we have the alias to reference + // this.lockParameter("from"); + // this.lockParameter("join"); + this.lockParameter("groupBy"); + this.lockParameter("orderBy"); + // // We must execute where after orderBy because cursor queries require all orderBy attributes + // this.lockParameter("cursorComparator"); + // this.lockParameter("whereBound"); + // this.lockParameter("where"); + // // 'where' -> 'whereBound' can affect 'offset'/'limit' + // this.lockParameter("offset"); + // this.lockParameter("limit"); + // this.lockParameter("first"); + // this.lockParameter("last"); + // // We must execute select after orderBy otherwise we cannot generate a cursor + // this.lockParameter("fixedSelectExpression"); + // this.lockParameter("selectCursor"); + // this.lockParameter("select"); + } + lock() { + this.lockAllParameters(); + this.locked = true; + } +} +exports.PgLocker = PgLocker; +//# sourceMappingURL=pgLocker.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgLocker.js.map b/grafast/dataplan-pg/dist/pgLocker.js.map new file mode 100644 index 0000000000..b31e8c2f4c --- /dev/null +++ b/grafast/dataplan-pg/dist/pgLocker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgLocker.js","sourceRoot":"","sources":["../src/pgLocker.ts"],"names":[],"mappings":";;;AAAA,qCAAgC;AAchC,MAAa,QAAQ;IAQnB,YAAoB,MAAa;QAAb,WAAM,GAAN,MAAM,CAAO;QAPjC;;;;WAIG;QACI,WAAM,GAAG,KAAK,CAAC;QAId,gBAAW,GAEf;YACF,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACX,CAAC;QAEM,eAAU,GAEd;YACF,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,EAAE;SACX,CAAC;QAEM,qBAAgB,GAEpB;YACF,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;SACd,CAAC;IA9BkC,CAAC;IAgCrC;;;;;;;;;;;OAWG;IACI,UAAU,CACf,IAAyB,EACzB,QAA+B;QAE/B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,SAAS,CACd,IAAyB,EACzB,QAA+B;QAE/B,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAEO,aAAa,CACnB,KAAiC,EACjC,IAAyB;QAEzB,MAAM,IAAI,GAAG,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,4BAA4B,IAAI,qDAAqD,CACtF,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,IAAyB;QAC5C,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,eAAK;YACjC,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK;YAC1C,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,uBAAuB,CAAC,IAAyB;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,IAAI,IAAI,iCAAiC;oBACvC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;oBACjC,IAAI,CACP,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,IAAI,IAAI,2BAA2B,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEM,iBAAiB;QACtB,+EAA+E;QAC/E,8BAA8B;QAC9B,8BAA8B;QAC9B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC9B,+FAA+F;QAC/F,0CAA0C;QAC1C,oCAAoC;QACpC,+BAA+B;QAC/B,yDAAyD;QACzD,gCAAgC;QAChC,+BAA+B;QAC/B,+BAA+B;QAC/B,8BAA8B;QAC9B,gFAAgF;QAChF,+CAA+C;QAC/C,sCAAsC;QACtC,gCAAgC;IAClC,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;CACF;AAtJD,4BAsJC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgServices.d.ts b/grafast/dataplan-pg/dist/pgServices.d.ts new file mode 100644 index 0000000000..43304b9e15 --- /dev/null +++ b/grafast/dataplan-pg/dist/pgServices.d.ts @@ -0,0 +1,20 @@ +import type { PgClient, WithPgClient } from "./executor.js"; +type PromiseOrDirect = T | PromiseLike; +/** @experimental */ +export interface PgAdaptor { + createWithPgClient: (adaptorSettings: GraphileConfig.PgAdaptors[TAdaptor]["adaptorSettings"], variant?: "SUPERUSER" | string | null) => PromiseOrDirect>; + makePgService: (options: GraphileConfig.PgAdaptors[TAdaptor]["makePgServiceOptions"]) => GraphileConfig.PgServiceConfiguration; +} +/** + * Is "thenable". + */ +export declare function isPromiseLike(t: T | Promise | PromiseLike): t is PromiseLike; +/** + * Get or build the 'withPgClient' callback function for a given database + * config, caching it to make future lookups faster. + */ +export declare function getWithPgClientFromPgService(config: GraphileConfig.PgServiceConfiguration): PromiseOrDirect>; +export declare function withPgClientFromPgService(config: GraphileConfig.PgServiceConfiguration, pgSettings: Record | null, callback: (client: PgClient) => T | Promise): Promise; +export declare function withSuperuserPgClientFromPgService(config: GraphileConfig.PgServiceConfiguration, pgSettings: Record | null, callback: (client: PgClient) => T | Promise): Promise; +export {}; +//# sourceMappingURL=pgServices.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgServices.d.ts.map b/grafast/dataplan-pg/dist/pgServices.d.ts.map new file mode 100644 index 0000000000..f4fd9a8526 --- /dev/null +++ b/grafast/dataplan-pg/dist/pgServices.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgServices.d.ts","sourceRoot":"","sources":["../src/pgServices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE5D,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE7C,oBAAoB;AACpB,MAAM,WAAW,SAAS,CACxB,QAAQ,SACN,MAAM,cAAc,CAAC,UAAU,GAAG,MAAM,cAAc,CAAC,UAAU;IAEnE,kBAAkB,EAAE,CAClB,eAAe,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,EACvE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,KAClC,eAAe,CAClB,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAC5D,CAAC;IACF,aAAa,EAAE,CACb,OAAO,EAAE,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,sBAAsB,CAAC,KACjE,cAAc,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;CACtD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GACjC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAErB;AAcD;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,SACN,MAAM,cAAc,CAAC,UAAU,GAAG,MAAM,cAAc,CAAC,UAAU,EAEnE,MAAM,EAAE,cAAc,CAAC,sBAAsB,CAAC,QAAQ,CAAC,GACtD,eAAe,CAChB,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAC5D,CA2DA;AAED,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,MAAM,EAAE,cAAc,CAAC,sBAAsB,EAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,EACrD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,CAAC,CAUZ;AAGD,wBAAsB,kCAAkC,CAAC,CAAC,EACxD,MAAM,EAAE,cAAc,CAAC,sBAAsB,EAC7C,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,EACrD,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,CAAC,CAUZ"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgServices.js b/grafast/dataplan-pg/dist/pgServices.js new file mode 100644 index 0000000000..853281eb00 --- /dev/null +++ b/grafast/dataplan-pg/dist/pgServices.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isPromiseLike = isPromiseLike; +exports.getWithPgClientFromPgService = getWithPgClientFromPgService; +exports.withPgClientFromPgService = withPgClientFromPgService; +exports.withSuperuserPgClientFromPgService = withSuperuserPgClientFromPgService; +/** + * Is "thenable". + */ +function isPromiseLike(t) { + return t != null && typeof t.then === "function"; +} +const isTest = process.env.NODE_ENV === "test"; +const withPgClientDetailsByConfigCache = new Map(); +/** + * Get or build the 'withPgClient' callback function for a given database + * config, caching it to make future lookups faster. + */ +function getWithPgClientFromPgService(config) { + const existing = withPgClientDetailsByConfigCache.get(config); + if (existing) { + if (isPromiseLike(existing)) { + return existing.then((v) => { + v.retainers++; + return v.withPgClient; + }); + } + else { + existing.retainers++; + return existing.withPgClient; + } + } + else { + const promise = (async () => { + const factory = config.adaptor?.createWithPgClient; + if (typeof factory !== "function") { + throw new Error(`'${config.adaptor}' does not look like a withPgClient adaptor - please ensure it exports a method called 'createWithPgClient'`); + } + const originalWithPgClient = await factory(config.adaptorSettings); + const withPgClient = ((...args) => originalWithPgClient.apply(null, args)); + const cachedValue = { + withPgClient, + retainers: 1, + }; + let released = false; + withPgClient.release = () => { + cachedValue.retainers--; + // To allow for other promises to resolve and add/remove from the retaininers, check after a tick + setTimeout(() => { + if (cachedValue.retainers === 0 && !released) { + released = true; + withPgClientDetailsByConfigCache.delete(config); + return originalWithPgClient.release?.(); + } + // TODO: this used to be zero, but that seems really inefficient... + // Figure out why I did that? + // }, 0); + }, isTest ? 500 : 5000); + }; + withPgClientDetailsByConfigCache.set(config, cachedValue); + return cachedValue; + })(); + if (!withPgClientDetailsByConfigCache.has(config)) { + withPgClientDetailsByConfigCache.set(config, promise); + } + promise.catch(() => { + withPgClientDetailsByConfigCache.delete(config); + }); + return promise.then((v) => v.withPgClient); + } +} +async function withPgClientFromPgService(config, pgSettings, callback) { + const withPgClientFromPgService = getWithPgClientFromPgService(config); + const withPgClient = isPromiseLike(withPgClientFromPgService) + ? await withPgClientFromPgService + : withPgClientFromPgService; + try { + return await withPgClient(pgSettings, callback); + } + finally { + withPgClient.release(); + } +} +// We don't cache superuser withPgClients +async function withSuperuserPgClientFromPgService(config, pgSettings, callback) { + const withPgClient = await config.adaptor.createWithPgClient(config.adaptorSettings, "SUPERUSER"); + try { + return await withPgClient(pgSettings, callback); + } + finally { + withPgClient.release?.(); + } +} +//# sourceMappingURL=pgServices.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/pgServices.js.map b/grafast/dataplan-pg/dist/pgServices.js.map new file mode 100644 index 0000000000..568aa57983 --- /dev/null +++ b/grafast/dataplan-pg/dist/pgServices.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgServices.js","sourceRoot":"","sources":["../src/pgServices.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts new file mode 100644 index 0000000000..57bb5aeb65 --- /dev/null +++ b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts @@ -0,0 +1,10 @@ +export declare const EMPTY_OBJECT: Record; +declare global { + namespace GraphileConfig { + interface Plugins { + PgContextPlugin: true; + } + } +} +export declare const PgContextPlugin: GraphileConfig.Plugin; +//# sourceMappingURL=PgContextPlugin.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts.map b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts.map new file mode 100644 index 0000000000..a1da3ec746 --- /dev/null +++ b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"PgContextPlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/PgContextPlugin.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAE9C,CAAC;AAEF,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB,UAAU,OAAO;YACf,eAAe,EAAE,IAAI,CAAC;SACvB;KACF;CACF;AAED,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,MAmE5C,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/plugins/PgContextPlugin.js b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.js new file mode 100644 index 0000000000..ecb253e5a9 --- /dev/null +++ b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgContextPlugin = exports.EMPTY_OBJECT = void 0; +const pgServices_js_1 = require("../pgServices.js"); +const version_js_1 = require("../version.js"); +exports.EMPTY_OBJECT = Object.freeze(Object.create(null)); +exports.PgContextPlugin = { + name: "PgContextPlugin", + description: "Extends the runtime GraphQL context with details needed to support your configured pgServices", + version: version_js_1.version, + grafast: { + middleware: { + prepareArgs(next, { args }) { + if (!args.contextValue) { + args.contextValue = Object.create(null); + } + const { resolvedPreset: config, requestContext: ctx } = args; + const contextValue = args.contextValue; + if (config?.pgServices) { + for (const pgService of config.pgServices) { + const { pgSettings, pgSettingsKey, withPgClientKey, pgSubscriberKey, pgSubscriber, } = pgService; + if (pgSettings && pgSettingsKey == null) { + throw new Error(`pgService '${pgService.name}' specifies pgSettings, but has no pgSettingsKey.`); + } + if (pgSubscriber && pgSubscriberKey == null) { + throw new Error(`pgService '${pgService.name}' specifies pgSubscriber, but has no pgSubscriberKey.`); + } + if (pgSettingsKey != null) { + if (pgSettingsKey in contextValue) { + throw new Error(`Key '${pgSettingsKey}' already set on the context; refusing to overwrite - please check your configuration.`); + } + contextValue[pgSettingsKey] = + typeof pgSettings === "function" + ? pgSettings(ctx ?? exports.EMPTY_OBJECT) + : (pgSettings ?? undefined); + } + if (pgSubscriberKey != null) { + if (pgSubscriberKey in contextValue) { + throw new Error(`Key '${pgSubscriberKey}' already set on the context; refusing to overwrite - please check your configuration.`); + } + contextValue[pgSubscriberKey] = pgSubscriber; + } + if (withPgClientKey in contextValue) { + throw new Error(`Key '${withPgClientKey}' already set on the context; refusing to overwrite - please check your configuration.`); + } + contextValue[withPgClientKey] = pgServices_js_1.withPgClientFromPgService.bind(null, pgService); + } + } + return next(); + }, + }, + }, +}; +//# sourceMappingURL=PgContextPlugin.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/plugins/PgContextPlugin.js.map b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.js.map new file mode 100644 index 0000000000..1ead282d68 --- /dev/null +++ b/grafast/dataplan-pg/dist/plugins/PgContextPlugin.js.map @@ -0,0 +1 @@ +{"version":3,"file":"PgContextPlugin.js","sourceRoot":"","sources":["../../src/plugins/PgContextPlugin.ts"],"names":[],"mappings":";;;AAGA,oDAA6D;AAC7D,8CAAwC;AAE3B,QAAA,YAAY,GAA0B,MAAM,CAAC,MAAM,CAC9D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CACpB,CAAC;AAUW,QAAA,eAAe,GAA0B;IACpD,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,+FAA+F;IACjG,OAAO,EAAE,oBAAO;IAEhB,OAAO,EAAE;QACP,UAAU,EAAE;YACV,WAAW,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBACvB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1C,CAAC;gBACD,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,YAAmC,CAAC;gBAC9D,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;oBACvB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBAC1C,MAAM,EACJ,UAAU,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,YAAY,GACb,GAAG,SAAS,CAAC;wBACd,IAAI,UAAU,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;4BACxC,MAAM,IAAI,KAAK,CACb,cAAc,SAAS,CAAC,IAAI,mDAAmD,CAChF,CAAC;wBACJ,CAAC;wBACD,IAAI,YAAY,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;4BAC5C,MAAM,IAAI,KAAK,CACb,cAAc,SAAS,CAAC,IAAI,uDAAuD,CACpF,CAAC;wBACJ,CAAC;wBACD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;4BAC1B,IAAI,aAAa,IAAI,YAAY,EAAE,CAAC;gCAClC,MAAM,IAAI,KAAK,CACb,QAAQ,aAAa,wFAAwF,CAC9G,CAAC;4BACJ,CAAC;4BACD,YAAY,CAAC,aAAa,CAAC;gCACzB,OAAO,UAAU,KAAK,UAAU;oCAC9B,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,oBAAY,CAAC;oCACjC,CAAC,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;wBAClC,CAAC;wBACD,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;4BAC5B,IAAI,eAAe,IAAI,YAAY,EAAE,CAAC;gCACpC,MAAM,IAAI,KAAK,CACb,QAAQ,eAAe,wFAAwF,CAChH,CAAC;4BACJ,CAAC;4BACD,YAAY,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;wBAC/C,CAAC;wBACD,IAAI,eAAe,IAAI,YAAY,EAAE,CAAC;4BACpC,MAAM,IAAI,KAAK,CACb,QAAQ,eAAe,wFAAwF,CAChH,CAAC;wBACJ,CAAC;wBACD,YAAY,CAAC,eAAe,CAAC,GAAG,yCAAyB,CAAC,IAAI,CAC5D,IAAI,EACJ,SAAS,CACV,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;SACF;KACF;CACF,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts b/grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts new file mode 100644 index 0000000000..1d792fe780 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts @@ -0,0 +1,49 @@ +import type { AccessStep, UnbatchedExecutionExtra } from "grafast"; +import { UnbatchedStep } from "grafast"; +import type { SQL } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgResource } from "../datasource.js"; +import type { GetPgCodecAttributes, PgClassSingleStep, PgCodec, PgTypedStep } from "../interfaces.js"; +import { PgUnionAllSingleStep } from "./pgUnionAll.js"; +/** + * A plan for selecting a attribute or attribute-like expression. Keep in mind that + * a attribute might not be a scalar (could be a list, compound type, JSON, + * geometry, etc), so this might not be a "leaf". The result of this might be used as the input + * of another layer of plan. + */ +export declare class PgClassExpressionStep> extends UnbatchedStep implements PgTypedStep { + readonly pgCodec: TExpressionCodec; + private guaranteedNotNull?; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + /** + * This is the numeric index of this expression within the grandparent + * PgSelectStep's selection. + */ + private attrIndex; + readonly expression: SQL; + private needsPolymorphicUnwrap; + private needsTupleAccess; + constructor($table: PgClassSingleStep | PgUnionAllSingleStep, pgCodec: TExpressionCodec, strings: TemplateStringsArray, dependencies?: ReadonlyArray | SQL>, guaranteedNotNull?: boolean | undefined); + toStringMeta(): string; + get>(attributeName: TAttr): PgClassExpressionStep[TAttr]["codec"], TResource>; + private _getInternal; + getParentStep(): PgClassSingleStep | PgUnionAllSingleStep; + getMeta(key: string): AccessStep; + optimize(): this; + unbatchedExecute(_extra: UnbatchedExecutionExtra, v: any): any; + deduplicate(peers: Array>): PgClassExpressionStep[]; + [$$toSQL](): SQL; + toSQL(): SQL; +} +/** + * This higher order function takes a table and codec as input and returns a + * tagged template literal function that you can use to build an SQL expression + * that will be selected. + */ +declare function pgClassExpression>(table: PgClassSingleStep | PgUnionAllSingleStep, codec: TExpressionCodec, guaranteedNotNull?: boolean): (strings: TemplateStringsArray, ...dependencies: ReadonlyArray | SQL>) => PgClassExpressionStep; +export { pgClassExpression }; +//# sourceMappingURL=pgClassExpression.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts.map b/grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts.map new file mode 100644 index 0000000000..a99e5d52fa --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgClassExpression.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgClassExpression.d.ts","sourceRoot":"","sources":["../../src/steps/pgClassExpression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAoB,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AACnC,OAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,OAAO,EACP,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAQvD;;;;;GAKG;AACH,qBAAa,qBAAqB,CAC9B,gBAAgB,SAAS,OAAO,EAChC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAEvD,SAAQ,aAAa,CAAC,GAAG,CACzB,YAAW,WAAW,CAAC,gBAAgB,CAAC;aA8BtB,OAAO,EAAE,gBAAgB;IAGzC,OAAO,CAAC,iBAAiB,CAAC;IA/B5B,MAAM,CAAC,QAAQ;;;MAGb;IAEF,aAAa,UAAQ;IAUrB;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAuB;IAExC,SAAgB,UAAU,EAAE,GAAG,CAAC;IAEhC,OAAO,CAAC,sBAAsB,CAAU;IACxC,OAAO,CAAC,gBAAgB,CAAU;gBAGhC,MAAM,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,oBAAoB,EAC3C,OAAO,EAAE,gBAAgB,EACzC,OAAO,EAAE,oBAAoB,EAC7B,YAAY,GAAE,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAM,EAChD,iBAAiB,CAAC,EAAE,OAAO,YAAA;IAsD9B,YAAY,IAAI,MAAM;IAgDtB,GAAG,CAAC,KAAK,SAAS,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,EACnE,aAAa,EAAE,KAAK,GACnB,qBAAqB,CACtB,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EACtD,SAAS,CACV;IAKD,OAAO,CAAC,YAAY;IA+Cb,aAAa,IAAI,iBAAiB,CAAC,SAAS,CAAC,GAAG,oBAAoB;IAkBpE,OAAO,CAAC,GAAG,EAAE,MAAM;IAInB,QAAQ,IAAI,IAAI;IAShB,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG;IAY9D,WAAW,CAChB,KAAK,EAAE,KAAK,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAC5C,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE;IAchD,CAAC,OAAO,CAAC,IAAI,GAAG;IAIhB,KAAK,IAAI,GAAG;CAGpB;AAED;;;;GAIG;AACH,iBAAS,iBAAiB,CACxB,gBAAgB,SAAS,OAAO,EAChC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAErD,KAAK,EAAE,iBAAiB,CAAC,SAAS,CAAC,GAAG,oBAAoB,EAC1D,KAAK,EAAE,gBAAgB,EACvB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,CACD,OAAO,EAAE,oBAAoB,EAC7B,GAAG,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KACnD,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAUtD;AAID,OAAO,EAAE,iBAAiB,EAAE,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgClassExpression.js b/grafast/dataplan-pg/dist/steps/pgClassExpression.js new file mode 100644 index 0000000000..c4e284372f --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgClassExpression.js @@ -0,0 +1,212 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgClassExpressionStep = void 0; +exports.pgClassExpression = pgClassExpression; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importStar(require("pg-sql2")); +const pgDeleteSingle_js_1 = require("./pgDeleteSingle.js"); +const pgInsertSingle_js_1 = require("./pgInsertSingle.js"); +const pgSelectSingle_js_1 = require("./pgSelectSingle.js"); +const pgUnionAll_js_1 = require("./pgUnionAll.js"); +const pgUpdateSingle_js_1 = require("./pgUpdateSingle.js"); +// const debugPlan = debugFactory("@dataplan/pg:PgClassExpressionStep:plan"); +// const debugExecute = debugFactory( "@dataplan/pg:PgClassExpressionStep:execute",); +// const debugPlanVerbose = debugPlan.extend("verbose"); +// const debugExecuteVerbose = debugExecute.extend("verbose"); +/** + * A plan for selecting a attribute or attribute-like expression. Keep in mind that + * a attribute might not be a scalar (could be a list, compound type, JSON, + * geometry, etc), so this might not be a "leaf". The result of this might be used as the input + * of another layer of plan. + */ +class PgClassExpressionStep extends grafast_1.UnbatchedStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgClassExpressionStep", + }; } + constructor($table, pgCodec, strings, dependencies = [], guaranteedNotNull) { + super(); + this.pgCodec = pgCodec; + this.guaranteedNotNull = guaranteedNotNull; + this.isSyncAndSafe = true; + /** + * This is the numeric index of this expression within the grandparent + * PgSelectStep's selection. + */ + this.attrIndex = null; + this.needsPolymorphicUnwrap = + $table instanceof pgUnionAll_js_1.PgUnionAllSingleStep && + $table.getClassStep().mode === "normal"; + this.needsTupleAccess = + $table instanceof pgInsertSingle_js_1.PgInsertSingleStep || + $table instanceof pgUpdateSingle_js_1.PgUpdateSingleStep || + $table instanceof pgDeleteSingle_js_1.PgDeleteSingleStep; + const $row = this.needsTupleAccess ? (0, grafast_1.access)($table, "t") : $table; + this.rowDependencyId = this.addDependency($row); + if (strings.length !== dependencies.length + 1) { + throw new Error(`Invalid call to PgClassExpressionStep; should have exactly one more string (found ${strings.length}) than dependency (found ${dependencies.length}). Recommend using the tagged template literal helper pgClassExpression.`); + } + const badStringIndex = strings.findIndex((s) => typeof s !== "string"); + if (badStringIndex >= 0) { + throw new Error(`Received a non-string at index ${badStringIndex} to strings argument of ${this}.`); + } + const fragments = dependencies.map((stepOrSql, i) => { + if (!stepOrSql) { + throw new Error(`Invalid stepOrSql at index ${i}`); + } + if (pg_sql2_1.default.isSQL(stepOrSql)) { + return stepOrSql; + } + else if (stepOrSql instanceof PgClassExpressionStep && + stepOrSql.getParentStep() === $table) { + // TODO: when we defer placeholders until finalize we'll need to copy + // deps/etc + return stepOrSql.expression; + } + else if ($table instanceof pgSelectSingle_js_1.PgSelectSingleStep) { + // TODO: when we defer placeholders until finalize we'll need to store + // deps/etc + const placeholder = $table.placeholder(stepOrSql); + return placeholder; + } + else { + throw new Error(`Cannot use placeholders when parent plan is ${$table}`); + } + }); + // We're pretending we called `sql` directly by passing the template + // strings array. + this.expression = (0, pg_sql2_1.default)(strings, ...fragments); + } + toStringMeta() { + if (!this.expression) { + return "???"; + } + const expr = pg_sql2_1.default.compile(this.expression); + if (expr.text.length > 23) { + return (expr.text.slice(0, 10) + "..." + expr.text.slice(expr.text.length - 10)); + } + else { + return expr.text; + } + } + /* Here's the proper type of this function, but that makes using it painful. + ```ts + public get< + TAttr extends TExpressionCodec extends PgCodec< + any, + undefined, + infer U, + any, + any, + any, + any + > + ? keyof U + : keyof GetPgCodecAttributes, + >( + attributeName: TAttr, + ): TExpressionCodec extends PgCodec< + any, + undefined, + infer U, + any, + any, + any, + any + > + ? AccessStep + : PgClassExpressionStep< + GetPgCodecAttributes[TAttr]["codec"], + TResource + > { + ``` + + Instead, we'll lie and ignore the `AccessStep` case + */ + get(attributeName) { + return this.cacheStep("get", attributeName, () => this._getInternal(attributeName)); + } + _getInternal(attributeName) { + const attributes = this.pgCodec.attributes; + if (attributes === undefined) { + // Fall back to access, since this could be a 'point' or similar type that doesn't have attributes in Postgres but does in JS. + return (0, grafast_1.access)(this, attributeName); + } + const attribute = attributes[attributeName]; + if (!attribute) { + throw new Error(`Cannot call ${this}.get('${String(attributeName)}') because this does not have that attribute; supported attributes: '${Object.keys(attributes).join("', '")}'.`); + } + if (attribute.via) { + throw new Error(`Cannot call ${this}.get('${String(attributeName)}') because 'via' is not yet supported here - please raise an issue (or, even better, a pull request!).`); + } + if (attribute.expression) { + throw new Error(`Cannot call ${this}.get('${String(attributeName)}') because 'expression' is not yet supported here - please raise an issue (or, even better, a pull request!).`); + } + const sqlExpr = pgClassExpression(this.getParentStep(), attribute.codec, attribute.notNull); + return sqlExpr `${pg_sql2_1.default.parens(this.expression, true)}.${pg_sql2_1.default.identifier(attributeName)}`; + } + getParentStep() { + const $row = this.getDep(this.rowDependencyId); + const step = this.needsTupleAccess + ? $row.getParentStep() + : $row; + if (!(step instanceof pgSelectSingle_js_1.PgSelectSingleStep) && + !(step instanceof pgInsertSingle_js_1.PgInsertSingleStep) && + !(step instanceof pgUpdateSingle_js_1.PgUpdateSingleStep) && + !(step instanceof pgDeleteSingle_js_1.PgDeleteSingleStep) && + !(step instanceof pgUnionAll_js_1.PgUnionAllSingleStep)) { + throw new Error(`Expected ${step} to be a PgSelectSingleStep | PgInsertSingleStep | PgUpdateSingleStep | PgDeleteSingleStep | PgUnionAllSingleStep`); + } + return step; + } + getMeta(key) { + return this.getParentStep().getMeta(key); + } + optimize() { + this.attrIndex = this.getParentStep().selectAndReturnIndex(this.pgCodec.castFromPg + ? this.pgCodec.castFromPg(this.expression, this.guaranteedNotNull) + : (0, pg_sql2_1.default) `${pg_sql2_1.default.parens(this.expression)}::text`); + return this; + } + unbatchedExecute(_extra, v) { + if (v == null) { + return null; + } + const rawValue = v[this.attrIndex]; + if (rawValue == null) { + return null; + } + else { + return this.pgCodec.fromPg(rawValue); + } + } + deduplicate(peers) { + const parentPlan = this.getParentStep(); + const classPlan = parentPlan instanceof pgSelectSingle_js_1.PgSelectSingleStep + ? parentPlan.getClassStep() + : null; + const symbolSubstitutes = classPlan?._symbolSubstitutes; + const options = symbolSubstitutes ? { symbolSubstitutes } : undefined; + return peers.filter((p) => pg_sql2_1.default.isEquivalent(this.expression, p.expression, options)); + } + [pg_sql2_1.$$toSQL]() { + return this.expression; + } + toSQL() { + return this.expression; + } +} +exports.PgClassExpressionStep = PgClassExpressionStep; +/** + * This higher order function takes a table and codec as input and returns a + * tagged template literal function that you can use to build an SQL expression + * that will be selected. + */ +function pgClassExpression(table, codec, guaranteedNotNull) { + return (strings, ...dependencies) => { + return new PgClassExpressionStep(table, codec, strings, dependencies, codec.notNull || guaranteedNotNull); + }; +} +(0, grafast_1.exportAs)("@dataplan/pg", pgClassExpression, "pgClassExpression"); +//# sourceMappingURL=pgClassExpression.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgClassExpression.js.map b/grafast/dataplan-pg/dist/steps/pgClassExpression.js.map new file mode 100644 index 0000000000..76e9a35a08 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgClassExpression.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgClassExpression.js","sourceRoot":"","sources":["../../src/steps/pgClassExpression.ts"],"names":[],"mappings":";;;AAmUS,8CAAiB;;AAlU1B,qCAA0D;AAE1D,2DAAuC;AASvC,2DAAyD;AACzD,2DAAyD;AACzD,2DAAyD;AACzD,mDAAuD;AACvD,2DAAyD;AAEzD,6EAA6E;AAC7E,qFAAqF;AACrF,wDAAwD;AACxD,8DAA8D;AAE9D;;;;;GAKG;AACH,MAAa,qBAIX,SAAQ,uBAAkB;aAGnB,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,uBAAuB;KACpC,AAHc,CAGb;IAuBF,YACE,MAA2D,EAC3C,OAAyB,EACzC,OAA6B,EAC7B,eAAsD,EAAE,EAChD,iBAA2B;QAEnC,KAAK,EAAE,CAAC;QALQ,YAAO,GAAP,OAAO,CAAkB;QAGjC,sBAAiB,GAAjB,iBAAiB,CAAU;QA1BrC,kBAAa,GAAG,IAAI,CAAC;QAUrB;;;WAGG;QACK,cAAS,GAAkB,IAAI,CAAC;QAetC,IAAI,CAAC,sBAAsB;YACzB,MAAM,YAAY,oCAAoB;gBACtC,MAAM,CAAC,YAAY,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC1C,IAAI,CAAC,gBAAgB;YACnB,MAAM,YAAY,sCAAkB;gBACpC,MAAM,YAAY,sCAAkB;gBACpC,MAAM,YAAY,sCAAkB,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAA,gBAAM,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,qFAAqF,OAAO,CAAC,MAAM,4BAA4B,YAAY,CAAC,MAAM,0EAA0E,CAC7N,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;QACvE,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,kCAAkC,cAAc,2BAA2B,IAAI,GAAG,CACnF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAU,YAAY,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE;YACzD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,iBAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC;YACnB,CAAC;iBAAM,IACL,SAAS,YAAY,qBAAqB;gBAC1C,SAAS,CAAC,aAAa,EAAE,KAAK,MAAM,EACpC,CAAC;gBACD,qEAAqE;gBACrE,WAAW;gBACX,OAAO,SAAS,CAAC,UAAU,CAAC;YAC9B,CAAC;iBAAM,IAAI,MAAM,YAAY,sCAAkB,EAAE,CAAC;gBAChD,sEAAsE;gBACtE,WAAW;gBACX,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAClD,OAAO,WAAW,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,+CAA+C,MAAM,EAAE,CACxD,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,oEAAoE;QACpE,iBAAiB;QACjB,IAAI,CAAC,UAAU,GAAG,IAAA,iBAAG,EAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;IAC/C,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,IAAI,GAAG,iBAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC1B,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CACxE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiCE;IACK,GAAG,CACR,aAAoB;QAKpB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,CAC/C,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CACjC,CAAC;IACJ,CAAC;IACO,YAAY,CAGlB,aAAoB;QAKpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAC3C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,8HAA8H;YAC9H,OAAO,IAAA,gBAAM,EAAC,IAAI,EAAE,aAAa,CAAQ,CAAC;QAC5C,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,aAAuB,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,SAAS,MAAM,CAChC,aAAa,CACd,wEAAwE,MAAM,CAAC,IAAI,CAClF,UAAU,CACX,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CACnB,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,SAAS,MAAM,CAChC,aAAa,CACd,wGAAwG,CAC1G,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,SAAS,MAAM,CAChC,aAAa,CACd,+GAA+G,CACjH,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAC/B,IAAI,CAAC,aAAa,EAAE,EACpB,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,OAAO,CAClB,CAAC;QACF,OAAO,OAAO,CAAA,GAAG,iBAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,iBAAG,CAAC,UAAU,CAClE,aAAuB,CACxB,EAAS,CAAC;IACb,CAAC;IAEM,aAAa;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB;YAChC,CAAC,CAAE,IAAwB,CAAC,aAAa,EAAE;YAC3C,CAAC,CAAC,IAAI,CAAC;QACT,IACE,CAAC,CAAC,IAAI,YAAY,sCAAkB,CAAC;YACrC,CAAC,CAAC,IAAI,YAAY,sCAAkB,CAAC;YACrC,CAAC,CAAC,IAAI,YAAY,sCAAkB,CAAC;YACrC,CAAC,CAAC,IAAI,YAAY,sCAAkB,CAAC;YACrC,CAAC,CAAC,IAAI,YAAY,oCAAoB,CAAC,EACvC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,YAAY,IAAI,mHAAmH,CACpI,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACM,OAAO,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,oBAAoB,CACxD,IAAI,CAAC,OAAO,CAAC,UAAU;YACrB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;YAClE,CAAC,CAAC,IAAA,iBAAG,EAAA,GAAG,iBAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAC9C,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,gBAAgB,CAAC,MAA+B,EAAE,CAAM;QAC7D,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC;QACpC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEM,WAAW,CAChB,KAA6C;QAE7C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,SAAS,GACb,UAAU,YAAY,sCAAkB;YACtC,CAAC,CAAC,UAAU,CAAC,YAAY,EAAE;YAC3B,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,iBAAiB,GAAI,SAAiB,EAAE,kBAAkB,CAAC;QACjE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAEhE,CAAC;IACJ,CAAC;IAEM,CAAC,iBAAO,CAAC;QACd,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;;AAtQH,sDAuQC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAIxB,KAA0D,EAC1D,KAAuB,EACvB,iBAA2B;IAK3B,OAAO,CAAC,OAAO,EAAE,GAAG,YAAY,EAAE,EAAE;QAClC,OAAO,IAAI,qBAAqB,CAC9B,KAAK,EACL,KAAK,EACL,OAAO,EACP,YAAY,EACZ,KAAK,CAAC,OAAO,IAAI,iBAAiB,CACnC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,IAAA,kBAAQ,EAAC,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCondition.d.ts b/grafast/dataplan-pg/dist/steps/pgCondition.d.ts new file mode 100644 index 0000000000..ed42379ba3 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCondition.d.ts @@ -0,0 +1,57 @@ +import { Modifier } from "grafast"; +import type { SQL, SQLable } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +export type PgWhereConditionSpec = SQL | PgWhereConditionAttributeSpec; +export interface PgWhereConditionAttributeSpec { + type: "attribute"; + attribute: TAttribute; + callback: (fragment: SQL) => SQL; +} +export type PgHavingConditionSpec<_TAttribute extends string> = SQL; +export interface PgConditionCapableParent { + alias: SQL; + where(condition: PgWhereConditionSpec): void; + having?(condition: PgHavingConditionSpec): void; +} +type PgConditionModeExists = { + mode: "EXISTS"; + tableExpression: SQL; + alias?: string; + equals?: boolean; +}; +export type PgConditionResolvedMode = { + mode: "PASS_THRU"; +} | { + mode: "AND"; +} | { + mode: "OR"; +} | { + mode: "NOT"; +} | PgConditionModeExists; +export type PgConditionMode = "PASS_THRU" | "AND" | "OR" | "NOT" | PgConditionResolvedMode; +export declare class PgCondition extends Modifier implements PgConditionCapableParent, SQLable { + private isHaving; + static $$export: { + moduleName: string; + exportName: string; + }; + private conditions; + private havingConditions; + readonly alias: SQL; + extensions: DataplanPg.PgConditionExtensions; + readonly resolvedMode: PgConditionResolvedMode; + constructor(parent: TParent, isHaving?: boolean, mode?: PgConditionMode); + toStringMeta(): string; + orPlan(): PgCondition; + andPlan(): PgCondition; + notPlan(): PgCondition; + existsPlan(options: Omit): PgCondition; + where(condition: PgWhereConditionSpec): void; + having(condition: PgHavingConditionSpec): void; + private transform; + apply(): void; + [$$toSQL](): SQL; +} +export declare function pgWhereConditionSpecListToSQL(alias: SQL, conditions: PgWhereConditionSpec[], andOr?: "and" | "or", transform?: (frag: SQL) => SQL): SQL | null; +export {}; +//# sourceMappingURL=pgCondition.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCondition.d.ts.map b/grafast/dataplan-pg/dist/steps/pgCondition.d.ts.map new file mode 100644 index 0000000000..f998e72752 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCondition.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgCondition.d.ts","sourceRoot":"","sources":["../../src/steps/pgCondition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAO,MAAM,SAAS,CAAC;AAEvC,MAAM,MAAM,oBAAoB,CAAC,UAAU,SAAS,MAAM,IACtD,GAAG,GACH,6BAA6B,CAAC,UAAU,CAAC,CAAC;AAE9C,MAAM,WAAW,6BAA6B,CAAC,UAAU,SAAS,MAAM;IACtE,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;IACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,CAAC;CAClC;AAED,MAAM,MAAM,qBAAqB,CAAC,WAAW,SAAS,MAAM,IAAI,GAAG,CAAC;AAGpE,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,GAAG,CAAC;IACX,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,CAAC,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACtD;AAED,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,EAAE,GAAG,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,GACf,qBAAqB,CAAC;AAE1B,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,KAAK,GACL,IAAI,GACJ,KAAK,GACL,uBAAuB,CAAC;AAE5B,qBAAa,WAAW,CACpB,OAAO,SAAS,wBAAwB,GAAG,wBAAwB,CAErE,SAAQ,QAAQ,CAAC,OAAO,CACxB,YAAW,wBAAwB,EAAE,OAAO;IAiB1C,OAAO,CAAC,QAAQ;IAflB,MAAM,CAAC,QAAQ;;;MAGb;IAEF,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,gBAAgB,CAAoC;IAE5D,SAAgB,KAAK,EAAE,GAAG,CAAC;IAEpB,UAAU,EAAE,UAAU,CAAC,qBAAqB,CAAuB;IAC1E,SAAgB,YAAY,EAAE,uBAAuB,CAAC;gBAGpD,MAAM,EAAE,OAAO,EACP,QAAQ,UAAQ,EACxB,IAAI,GAAE,eAA6B;IAyB9B,YAAY,IAAI,MAAM;IAI7B,MAAM;IAIN,OAAO;IAIP,OAAO;IAIP,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC;IAWvD,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAAG,IAAI;IAOjD,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,IAAI;IAOnD,OAAO,CAAC,SAAS;IA2CjB,KAAK,IAAI,IAAI;IA4Bb,CAAC,OAAO,CAAC;CAGV;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,GAAG,EACV,UAAU,EAAE,oBAAoB,CAAC,GAAG,CAAC,EAAE,EACvC,KAAK,GAAE,KAAK,GAAG,IAAY,EAC3B,SAAS,GAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAoB,GAC7C,GAAG,GAAG,IAAI,CA8BZ"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCondition.js b/grafast/dataplan-pg/dist/steps/pgCondition.js new file mode 100644 index 0000000000..5140e9fb03 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCondition.js @@ -0,0 +1,175 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgCondition = void 0; +exports.pgWhereConditionSpecListToSQL = pgWhereConditionSpecListToSQL; +const grafast_1 = require("grafast"); +const pg_sql2_1 = require("pg-sql2"); +class PgCondition extends grafast_1.Modifier { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgCondition", + }; } + constructor(parent, isHaving = false, mode = "PASS_THRU") { + super(parent); + this.isHaving = isHaving; + this.conditions = []; + this.havingConditions = []; + this.extensions = Object.create(null); + if (typeof mode === "string") { + this.resolvedMode = { mode }; + } + else { + this.resolvedMode = mode; + } + switch (this.resolvedMode.mode) { + case "PASS_THRU": + case "AND": + case "OR": + case "NOT": { + this.alias = parent.alias; + break; + } + case "EXISTS": { + this.alias = pg_sql2_1.sql.identifier(Symbol(this.resolvedMode.alias ?? "exists")); + break; + } + } + } + toStringMeta() { + return `${this.parent.id}/${this.resolvedMode.mode}`; + } + orPlan() { + return new PgCondition(this, this.isHaving, "OR"); + } + andPlan() { + return new PgCondition(this, this.isHaving, "AND"); + } + notPlan() { + return new PgCondition(this, this.isHaving, "NOT"); + } + existsPlan(options) { + if (this.isHaving) { + // Is this true? + throw new Error(`EXISTS inside having is currently unsupported`); + } + return new PgCondition(this, this.isHaving, { + ...options, + mode: "EXISTS", + }); + } + where(condition) { + if (this.isHaving) { + throw new Error(`Cannot call .where() on a 'having' condition`); + } + this.conditions.push(condition); + } + having(condition) { + if (!this.isHaving) { + throw new Error(`cannot call .having() on a 'where' condition`); + } + this.havingConditions.push(condition); + } + transform(conditions) { + const sqlCondition = pgWhereConditionSpecListToSQL(this.alias, conditions, this.resolvedMode.mode === "OR" ? "or" : "and", this.resolvedMode.mode === "NOT" + ? (frag) => pg_sql2_1.sql.parens((0, pg_sql2_1.sql) `not ${pg_sql2_1.sql.parens(frag)}`) + : (frag) => frag); + if (sqlCondition === null) { + return null; + } + switch (this.resolvedMode.mode) { + case "PASS_THRU": { + throw new Error("Should never reach here"); + } + case "AND": + case "OR": + case "NOT": { + return sqlCondition; + } + case "EXISTS": { + const sqlExists = (0, pg_sql2_1.sql) `exists(${pg_sql2_1.sql.indent `\ +select 1 +from ${this.resolvedMode.tableExpression} as ${this.alias} +where ${sqlCondition}`})`; + if (this.resolvedMode.equals != null) { + return (0, pg_sql2_1.sql) `${sqlExists} = ${this.resolvedMode.equals ? pg_sql2_1.sql.true : pg_sql2_1.sql.false}`; + } + else { + // Assume true + return sqlExists; + } + } + default: { + const never = this.resolvedMode; + throw new Error(`Unhandled mode: ${never.mode}`); + } + } + } + apply() { + if (this.isHaving) { + if (!this.parent.having) { + throw new Error(`${this.parent} doesn't support 'having'`); + } + if (this.resolvedMode.mode === "PASS_THRU") { + this.havingConditions.forEach((condition) => { + this.parent.having(condition); + }); + } + else { + const frag = this.transform(this.havingConditions); + if (frag) { + this.parent.having(frag); + } + } + } + else { + if (this.resolvedMode.mode === "PASS_THRU") { + this.conditions.forEach((condition) => { + this.parent.where(condition); + }); + } + else { + const frag = this.transform(this.conditions); + if (frag) { + this.parent.where(frag); + } + } + } + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } +} +exports.PgCondition = PgCondition; +function pgWhereConditionSpecListToSQL(alias, conditions, andOr = "and", transform = (frag) => frag) { + const mappedConditions = []; + for (const c of conditions) { + if (pg_sql2_1.sql.isSQL(c)) { + if (pg_sql2_1.sql.isEquivalent(c, pg_sql2_1.sql.blank)) { + continue; + } + const frag = pg_sql2_1.sql.parens(c); + mappedConditions.push(pg_sql2_1.sql.indent(transform(frag))); + continue; + } + else { + switch (c.type) { + case "attribute": { + const frag = c.callback((0, pg_sql2_1.sql) `${alias}.${pg_sql2_1.sql.identifier(c.attribute)}`); + mappedConditions.push(pg_sql2_1.sql.indent(transform(frag))); + continue; + } + default: { + const never = c.type; + throw new Error(`Unsupported condition: ` + never); + } + } + } + } + if (mappedConditions.length === 0) { + return null; + } + const joined = pg_sql2_1.sql.join(mappedConditions, `\n${andOr}\n`); + const sqlCondition = pg_sql2_1.sql.parens(joined); + return sqlCondition; +} +//# sourceMappingURL=pgCondition.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCondition.js.map b/grafast/dataplan-pg/dist/steps/pgCondition.js.map new file mode 100644 index 0000000000..943ca898c6 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCondition.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgCondition.js","sourceRoot":"","sources":["../../src/steps/pgCondition.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCursor.d.ts b/grafast/dataplan-pg/dist/steps/pgCursor.d.ts new file mode 100644 index 0000000000..87a02d194f --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCursor.d.ts @@ -0,0 +1,29 @@ +import type { ExecutableStep, UnbatchedExecutionExtra } from "grafast"; +import { UnbatchedStep } from "grafast"; +import type { PgCodec } from "../index.js"; +import type { PgSelectSingleStep } from "./pgSelectSingle.js"; +import type { PgUnionAllSingleStep } from "./pgUnionAll.js"; +export interface PgCursorDetails { + readonly digest: string; + readonly indicies: ReadonlyArray<{ + index: number; + codec: PgCodec; + }>; +} +/** + * Given a PgSelectSingleStep, this will build a cursor by looking at all the + * orders applied and then fetching them and building a cursor string from + * them. + */ +export declare class PgCursorStep | PgUnionAllSingleStep> extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + itemDepId: number; + cursorDetailsDepId: number; + constructor($item: TStep, $cursorDetails: ExecutableStep); + unbatchedExecute(_extra: UnbatchedExecutionExtra, itemTuple: any[] | null, cursorDetails: PgCursorDetails | null): string | null; +} +//# sourceMappingURL=pgCursor.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCursor.d.ts.map b/grafast/dataplan-pg/dist/steps/pgCursor.d.ts.map new file mode 100644 index 0000000000..0469898983 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCursor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgCursor.d.ts","sourceRoot":"","sources":["../../src/steps/pgCursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC,CAAC;CACJ;AAED;;;;GAIG;AACH,qBAAa,YAAY,CACvB,KAAK,SAAS,kBAAkB,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAC5D,SAAQ,aAAa,CAAC,GAAG,CAAC;IAC1B,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;gBAGzB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,CAAC,eAAe,GAAG,IAAI,CAAC;IAOxD,gBAAgB,CACd,MAAM,EAAE,uBAAuB,EAC/B,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EACvB,aAAa,EAAE,eAAe,GAAG,IAAI,GACpC,MAAM,GAAG,IAAI;CAgBjB"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCursor.js b/grafast/dataplan-pg/dist/steps/pgCursor.js new file mode 100644 index 0000000000..383b1b1cea --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCursor.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgCursorStep = void 0; +const grafast_1 = require("grafast"); +/** + * Given a PgSelectSingleStep, this will build a cursor by looking at all the + * orders applied and then fetching them and building a cursor string from + * them. + */ +class PgCursorStep extends grafast_1.UnbatchedStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgCursorStep", + }; } + constructor($item, $cursorDetails) { + super(); + this.isSyncAndSafe = true; + this.itemDepId = this.addDependency($item); + this.cursorDetailsDepId = this.addDependency($cursorDetails); + } + unbatchedExecute(_extra, itemTuple, cursorDetails) { + if (itemTuple == null || cursorDetails == null) + return null; + const { digest, indicies } = cursorDetails; + const cursorTuple = [digest]; + let hasNonNull = false; + for (let i = 0, l = indicies.length; i < l; i++) { + const { index, codec } = indicies[i]; + const orderVal = itemTuple[index]; + if (!hasNonNull && orderVal != null) { + hasNonNull = true; + } + cursorTuple.push(codec.fromPg(orderVal)); + } + if (!hasNonNull) + return null; + return Buffer.from(JSON.stringify(cursorTuple), "utf8").toString("base64"); + } +} +exports.PgCursorStep = PgCursorStep; +//# sourceMappingURL=pgCursor.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgCursor.js.map b/grafast/dataplan-pg/dist/steps/pgCursor.js.map new file mode 100644 index 0000000000..516f065aea --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgCursor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgCursor.js","sourceRoot":"","sources":["../../src/steps/pgCursor.ts"],"names":[],"mappings":";;;AACA,qCAAwC;AAcxC;;;;GAIG;AACH,MAAa,YAEX,SAAQ,uBAAkB;aACnB,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,cAAc;KAC3B,AAHc,CAGb;IAMF,YACE,KAAY,EACZ,cAAsD;QAEtD,KAAK,EAAE,CAAC;QATV,kBAAa,GAAG,IAAI,CAAC;QAUnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED,gBAAgB,CACd,MAA+B,EAC/B,SAAuB,EACvB,aAAqC;QAErC,IAAI,SAAS,IAAI,IAAI,IAAI,aAAa,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QAC5D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC;QAC3C,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACpC,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC;;AAxCH,oCAyCC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts new file mode 100644 index 0000000000..c0ec93170a --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts @@ -0,0 +1,83 @@ +import type { ExecutionDetails, GrafastResultsList, Maybe } from "grafast"; +import { Step } from "grafast"; +import type { SQL } from "pg-sql2"; +import type { PgCodecWithAttributes, PgResource } from "../index.js"; +import type { GetPgResourceAttributes, GetPgResourceCodec, GetPgResourceUniques, PgQueryBuilder, PlanByUniques, ReadonlyArrayOrDirect } from "../interfaces.js"; +import type { PgClassExpressionStep } from "./pgClassExpression.js"; +/** + * Deletes a row in the database, can return columns from the deleted row. + */ +export declare class PgDeleteSingleStep = PgResource> extends Step { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + /** + * Tells us what we're dealing with - data type, columns, where to delete it + * from, what it's called, etc. + */ + readonly resource: TResource; + /** + * This defaults to the name of the resource but you can override it. Aids + * in debugging. + */ + private readonly name; + /** + * To be used as the table alias, we always use a symbol unless the calling + * code specifically indicates a string to use. + */ + private readonly symbol; + /** = sql.identifier(this.symbol) */ + readonly alias: SQL; + /** + * The attributes and their dependency ids for us to find the record by. + */ + private getBys; + /** + * The id for the PostgreSQL context plan. + */ + private contextId; + /** + * When locked, no more selects can be added + */ + private locked; + /** + * The list of things we're selecting. + */ + private selects; + private applyDepIds; + constructor(resource: TResource, getBy: PlanByUniques, GetPgResourceUniques>); + toStringMeta(): string | null; + /** + * Returns a plan representing a named attribute (e.g. column) from the newly + * deleteed row. + */ + get>(attr: TAttr): PgClassExpressionStep[TAttr]["codec"], TResource>; + getMeta(key: string): import("grafast").AccessStep; + record(): PgClassExpressionStep, TResource>; + apply($step: Step>>): void; + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + execute({ indexMap, values, }: ExecutionDetails): Promise>; + finalize(): void; +} +/** + * Delete a row in `resource` identified by the `getBy` unique condition. + */ +export declare function pgDeleteSingle>(resource: TResource, getBy: PlanByUniques, GetPgResourceUniques>): PgDeleteSingleStep; +export interface PgDeleteSingleQueryBuilder<_TResource extends PgResource = PgResource> extends PgQueryBuilder { +} +type PgDeleteSingleQueryBuilderCallback = (qb: PgDeleteSingleQueryBuilder) => void; +export {}; +//# sourceMappingURL=pgDeleteSingle.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts.map b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts.map new file mode 100644 index 0000000000..c024da67b6 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgDeleteSingle.d.ts","sourceRoot":"","sources":["../../src/steps/pgDeleteSingle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgDeleteSingle.js b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.js new file mode 100644 index 0000000000..0975c21c08 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.js @@ -0,0 +1,263 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgDeleteSingleStep = void 0; +exports.pgDeleteSingle = pgDeleteSingle; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importStar(require("pg-sql2")); +const inspect_js_1 = require("../inspect.js"); +const pgClassExpression_js_1 = require("./pgClassExpression.js"); +/** + * Deletes a row in the database, can return columns from the deleted row. + */ +class PgDeleteSingleStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgDeleteSingleStep", + }; } + constructor(resource, getBy) { + super(); + this.isSyncAndSafe = false; + /** + * The attributes and their dependency ids for us to find the record by. + */ + this.getBys = []; + /** + * When locked, no more selects can be added + */ + this.locked = false; + /** + * When finalized, we build the SQL query, queryValues, and note where to feed in + * the relevant queryValues. This saves repeating this work at execution time. + * + * @internal + */ + this.finalizeResults = null; + /** + * The list of things we're selecting. + */ + this.selects = []; + this.applyDepIds = []; + this.hasSideEffects = true; + this.resource = resource; + this.name = resource.name; + this.symbol = Symbol(this.name); + this.alias = pg_sql2_1.default.identifier(this.symbol); + this.contextId = this.addDependency(this.resource.executor.context()); + const keys = getBy + ? Object.keys(getBy) + : []; + if (!this.resource.uniques.some((uniq) => uniq.attributes.every((key) => keys.includes(key)))) { + throw new Error(`Attempted to build 'PgDeleteSingleStep' with a non-unique getBy keys ('${keys.join("', '")}') - please ensure your 'getBy' spec uniquely identifiers a row (resource = ${this.resource}; supported uniques = ${(0, inspect_js_1.inspect)(this.resource.uniques)}).`); + } + keys.forEach((name) => { + if (grafast_1.isDev) { + if (this.getBys.some((col) => col.name === name)) { + throw new Error(`Attribute '${String(name)}' was specified more than once in ${this}'s getBy spec`); + } + } + const value = getBy[name]; + const depId = this.addDependency(value); + const attribute = this.resource.codec.attributes[name]; + const pgCodec = attribute.codec; + this.getBys.push({ name, depId, pgCodec }); + }); + } + toStringMeta() { + return `${this.resource.name}(${this.getBys.map((g) => g.name)})`; + } + /** + * Returns a plan representing a named attribute (e.g. column) from the newly + * deleteed row. + */ + get(attr) { + const resourceAttribute = this.resource.codec.attributes[attr]; + if (!resourceAttribute) { + throw new Error(`${this.resource} does not define an attribute named '${String(attr)}'`); + } + if (resourceAttribute?.via) { + throw new Error(`Cannot select a 'via' attribute from PgDeleteSingleStep`); + } + /* + * Only cast to `::text` during select; we want to use it uncasted in + * conditions/etc. The reasons we cast to ::text include: + * + * - to make return values consistent whether they're direct or in nested + * arrays + * - to make sure that that various PostgreSQL clients we support do not + * mangle the data in unexpected ways - we take responsibility for + * decoding these string values. + */ + const sqlExpr = (0, pgClassExpression_js_1.pgClassExpression)(this, resourceAttribute.codec, resourceAttribute.notNull); + const colPlan = resourceAttribute.expression + ? sqlExpr `${pg_sql2_1.default.parens(resourceAttribute.expression(this.alias))}` + : sqlExpr `${this.alias}.${pg_sql2_1.default.identifier(String(attr))}`; + return colPlan; + } + getMeta(key) { + return (0, grafast_1.access)(this, ["m", key]); + } + record() { + return (0, pgClassExpression_js_1.pgClassExpression)(this, this.resource.codec, false) `${this.alias}`; + } + /** + * Advanced method; rather than returning a plan it returns an index. + * Generally useful for PgClassExpressionStep. + * + * @internal + */ + selectAndReturnIndex(fragment) { + if (this.locked) { + throw new Error("Step is finalized, no more selects may be added"); + } + // Optimisation: if we're already selecting this fragment, return the existing one. + const index = this.selects.findIndex((frag) => pg_sql2_1.default.isEquivalent(frag, fragment)); + if (index >= 0) { + return index; + } + return this.selects.push(fragment) - 1; + } + apply($step) { + this.applyDepIds.push(this.addUnaryDependency($step)); + } + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + async execute({ indexMap, values, }) { + const { alias, contextId, finalizeResults } = this; + if (!finalizeResults) { + throw new Error("Cannot execute PgSelectStep before finalizing it."); + } + const { text, rawSqlValues, queryValueDetailsBySymbol } = finalizeResults; + // We must execute each mutation on its own, but we can at least do so in + // parallel. Note we return a list of promises, each may reject or resolve + // without causing the others to reject. + const contextDep = values[contextId]; + return indexMap(async (i) => { + const context = contextDep.at(i); + const meta = Object.create(null); + const queryBuilder = { + alias, + [pg_sql2_1.$$toSQL]() { + return alias; + }, + setMeta(key, value) { + meta[key] = value; + }, + getMetaRaw(key) { + return meta[key]; + }, + }; + for (const applyDepId of this.applyDepIds) { + const val = values[applyDepId].unaryValue(); + if (Array.isArray(val)) { + val.forEach((v) => v?.(queryBuilder)); + } + else { + val?.(queryBuilder); + } + } + const sqlValues = queryValueDetailsBySymbol.size + ? rawSqlValues.map((v) => { + if (typeof v === "symbol") { + const details = queryValueDetailsBySymbol.get(v); + if (!details) { + throw new Error(`Saw unexpected symbol '${(0, inspect_js_1.inspect)(v)}'`); + } + const val = values[details.depId].at(i); + return val == null ? null : details.processor(val); + } + else { + return v; + } + }) + : rawSqlValues; + const { rows, rowCount } = await this.resource.executeMutation({ + context, + text, + values: sqlValues, + }); + if (rowCount === 0) { + return Promise.reject(new Error(`No values were deleted in collection '${this.resource.name}' because no values you can delete were found matching these criteria.`)); + } + return { __proto__: null, m: meta, t: rows[0] ?? [] }; + }); + } + finalize() { + if (!this.isFinalized) { + this.locked = true; + const resourceSource = this.resource.from; + if (!pg_sql2_1.default.isSQL(resourceSource)) { + throw new Error(`Error in ${this}: can only delete into resources defined as SQL, however ${this.resource} has ${(0, inspect_js_1.inspect)(this.resource.from)}`); + } + const table = (0, pg_sql2_1.default) `${resourceSource} as ${this.alias}`; + const fragmentsWithAliases = this.selects.map((frag, idx) => (0, pg_sql2_1.default) `${frag} as ${pg_sql2_1.default.identifier(String(idx))}`); + const returning = fragmentsWithAliases.length > 0 + ? (0, pg_sql2_1.default) ` returning\n${pg_sql2_1.default.indent(pg_sql2_1.default.join(fragmentsWithAliases, ",\n"))}` + : pg_sql2_1.default.blank; + /* + * NOTE: Though we'd like to do bulk deletes, it's challenging to link it + * back together again. + * + * Currently it seems that the order returned from `delete ... + * using (select ... order by ...) returning ...` is the same order as the + * `order by` was, however this is not guaranteed in the documentation + * and as such cannot be relied upon. Further the pgsql-hackers list + * explicitly declined guaranteeing this behavior: + * + * https://www.postgresql.org/message-id/CAKFQuwbgdJ_xNn0YHWGR0D%2Bv%2B3mHGVqJpG_Ejt96KHoJjs6DkA%40mail.gmail.com + * + * So we have to make do with single deletes, alas. + */ + const getByAttributesCount = this.getBys.length; + if (getByAttributesCount === 0) { + // No attributes specified to find the row?! This is forbidden. + throw new grafast_1.SafeError("Attempted to delete a record, but no information on uniquely determining the record was specified."); + } + else { + // This is our common path + const sqlWhereClauses = []; + const queryValueDetailsBySymbol = new Map(); + for (let i = 0; i < getByAttributesCount; i++) { + const { name, depId, pgCodec } = this.getBys[i]; + const symbol = Symbol(name); + sqlWhereClauses[i] = pg_sql2_1.default.parens((0, pg_sql2_1.default) `${pg_sql2_1.default.identifier(this.symbol, name)} = ${pg_sql2_1.default.value( + // THIS IS A DELIBERATE HACK - we will be replacing this symbol with + // a value before executing the query. + symbol)}::${pgCodec.sqlType}`); + queryValueDetailsBySymbol.set(symbol, { + depId, + processor: pgCodec.toPg, + }); + } + const where = (0, pg_sql2_1.default) ` where ${pg_sql2_1.default.parens(pg_sql2_1.default.join(sqlWhereClauses, " and "))}`; + const query = (0, pg_sql2_1.default) `delete from ${table}${where}${returning};`; + const { text, values: rawSqlValues } = pg_sql2_1.default.compile(query); + this.finalizeResults = { + text, + rawSqlValues, + queryValueDetailsBySymbol, + }; + } + } + super.finalize(); + } +} +exports.PgDeleteSingleStep = PgDeleteSingleStep; +/** + * Delete a row in `resource` identified by the `getBy` unique condition. + */ +function pgDeleteSingle(resource, getBy) { + return new PgDeleteSingleStep(resource, getBy); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgDeleteSingle, "pgDeleteSingle"); +//# sourceMappingURL=pgDeleteSingle.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgDeleteSingle.js.map b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.js.map new file mode 100644 index 0000000000..3bc74c77f3 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgDeleteSingle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgDeleteSingle.js","sourceRoot":"","sources":["../../src/steps/pgDeleteSingle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts b/grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts new file mode 100644 index 0000000000..7efed11b2d --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts @@ -0,0 +1,100 @@ +import type { ExecutionDetails, GrafastResultsList, Maybe, Setter, SetterCapable } from "grafast"; +import { Step } from "grafast"; +import type { SQL, SQLable } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgCodecAttribute } from "../codecs.js"; +import type { PgResource } from "../datasource.js"; +import type { GetPgResourceAttributes, GetPgResourceCodec, ObjectForResource, PgCodecWithAttributes, PgQueryBuilder, PgTypedStep, ReadonlyArrayOrDirect } from "../interfaces.js"; +import type { PgClassExpressionStep } from "./pgClassExpression.js"; +/** + * Inserts a row into resource with the given specified attribute values. + */ +export declare class PgInsertSingleStep = PgResource> extends Step implements SetterCapable<{ + [key in keyof GetPgResourceAttributes & string]: Step; +}>, SQLable { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + /** + * Tells us what we're dealing with - data type, columns, where to insert it, + * what it's called, etc. + */ + readonly resource: TResource; + /** + * This defaults to the name of the resource but you can override it. Aids + * in debugging. + */ + private readonly name; + /** + * To be used as the table alias, we always use a symbol unless the calling + * code specifically indicates a string to use. + */ + private readonly symbol; + /** = sql.identifier(this.symbol) */ + readonly alias: SQL; + /** + * The attributes and their dependency ids for us to insert. + */ + private attributes; + /** + * The id for the PostgreSQL context plan. + */ + private contextId; + /** + * When locked, no more values can be set, no more selects can be added + */ + private locked; + /** + * When finalized, we build the SQL query, queryValues, and note where to feed in + * the relevant queryValues. This saves repeating this work at execution time. + */ + private finalizeResults; + /** + * The list of things we're selecting. + */ + private selects; + private applyDepIds; + constructor(resource: TResource, attributes?: { + [key in keyof GetPgResourceAttributes]?: PgTypedStep[key]["codec"]> | Step; + }); + toStringMeta(): string | null; + set>(name: TKey, value: Step): void; + /** + * Returns a plan representing a named attribute (e.g. column) from the newly + * inserted row. + */ + get>(attr: TAttr): PgClassExpressionStep[TAttr] extends PgCodecAttribute ? UCodec : never, TResource>; + getMeta(key: string): import("grafast").AccessStep; + record(): PgClassExpressionStep, TResource>; + apply($step: Step>>): void; + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + execute({ indexMap, values, }: ExecutionDetails): Promise>; + finalize(): void; + [$$toSQL](): SQL; +} +/** + * Inserts a row into resource with the given specified attribute values. + */ +export declare function pgInsertSingle>(resource: TResource, attributes?: { + [key in keyof GetPgResourceAttributes]?: PgTypedStep[key]["codec"]> | Step; +}): PgInsertSingleStep; +export interface PgInsertSingleQueryBuilder = PgResource> extends PgQueryBuilder, SetterCapable> { + set>(key: TAttributeName, value: ObjectForResource[TAttributeName]): void; + setBuilder(): Setter, this>; +} +type PgInsertSingleQueryBuilderCallback = (qb: PgInsertSingleQueryBuilder) => void; +export {}; +//# sourceMappingURL=pgInsertSingle.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts.map b/grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts.map new file mode 100644 index 0000000000..a6c0ca6a8e --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgInsertSingle.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgInsertSingle.d.ts","sourceRoot":"","sources":["../../src/steps/pgInsertSingle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgInsertSingle.js b/grafast/dataplan-pg/dist/steps/pgInsertSingle.js new file mode 100644 index 0000000000..93080573d1 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgInsertSingle.js @@ -0,0 +1,272 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgInsertSingleStep = void 0; +exports.pgInsertSingle = pgInsertSingle; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importStar(require("pg-sql2")); +const codecs_js_1 = require("../codecs.js"); +const inspect_js_1 = require("../inspect.js"); +const pgClassExpression_js_1 = require("./pgClassExpression.js"); +/** + * Inserts a row into resource with the given specified attribute values. + */ +class PgInsertSingleStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgInsertSingleStep", + }; } + constructor(resource, attributes) { + super(); + this.isSyncAndSafe = false; + /** + * The attributes and their dependency ids for us to insert. + */ + this.attributes = []; + /** + * When locked, no more values can be set, no more selects can be added + */ + this.locked = false; + /** + * When finalized, we build the SQL query, queryValues, and note where to feed in + * the relevant queryValues. This saves repeating this work at execution time. + */ + this.finalizeResults = null; + /** + * The list of things we're selecting. + */ + this.selects = []; + this.applyDepIds = []; + this.hasSideEffects = true; + this.resource = resource; + this.name = resource.name; + this.symbol = Symbol(this.name); + this.alias = pg_sql2_1.default.identifier(this.symbol); + this.contextId = this.addDependency(this.resource.executor.context()); + if (attributes) { + Object.entries(attributes).forEach(([key, value]) => { + if (value) { + this.set(key, value); + } + }); + } + } + toStringMeta() { + return `${this.resource.name}(${this.attributes.map((a) => a.name)})`; + } + set(name, value) { + if (this.locked) { + throw new Error("Cannot set after plan is locked."); + } + if (grafast_1.isDev) { + if (this.attributes.some((col) => col.name === name)) { + throw new Error(`Attribute '${String(name)}' was specified more than once in ${this}`); + } + } + const attribute = this.resource.codec.attributes?.[name]; + if (!attribute) { + throw new Error(`Attribute ${String(name)} not found in ${this.resource.codec}`); + } + const { codec: pgCodec } = attribute; + const depId = this.addDependency(value); + this.attributes.push({ name, depId, pgCodec }); + } + /** + * Returns a plan representing a named attribute (e.g. column) from the newly + * inserted row. + */ + get(attr) { + if (!this.resource.codec.attributes) { + throw new Error(`Cannot call .get() when there's no attributes.`); + } + const resourceAttribute = this.resource.codec.attributes[attr]; + if (!resourceAttribute) { + throw new Error(`${this.resource} does not define an attribute named '${String(attr)}'`); + } + if (resourceAttribute?.via) { + throw new Error(`Cannot select a 'via' attribute from PgInsertSingleStep`); + } + /* + * Only cast to `::text` during select; we want to use it uncasted in + * conditions/etc. The reasons we cast to ::text include: + * + * - to make return values consistent whether they're direct or in nested + * arrays + * - to make sure that that various PostgreSQL clients we support do not + * mangle the data in unexpected ways - we take responsibility for + * decoding these string values. + */ + const sqlExpr = (0, pgClassExpression_js_1.pgClassExpression)(this, resourceAttribute.codec, resourceAttribute.notNull); + const colPlan = resourceAttribute.expression + ? sqlExpr `${pg_sql2_1.default.parens(resourceAttribute.expression(this.alias))}` + : sqlExpr `${this.alias}.${pg_sql2_1.default.identifier(String(attr))}`; + return colPlan; + } + getMeta(key) { + return (0, grafast_1.access)(this, ["m", key]); + } + record() { + return (0, pgClassExpression_js_1.pgClassExpression)(this, this.resource.codec, false) `${this.alias}`; + } + /** + * Advanced method; rather than returning a plan it returns an index. + * Generally useful for PgClassExpressionStep. + * + * @internal + */ + selectAndReturnIndex(fragment) { + // NOTE: it's okay to add selections after the plan is "locked" - lock only + // applies to which rows are being selected, not what is being queried + // about the rows. + // Optimisation: if we're already selecting this fragment, return the existing one. + const index = this.selects.findIndex((frag) => pg_sql2_1.default.isEquivalent(frag, fragment)); + if (index >= 0) { + return index; + } + return this.selects.push(fragment) - 1; + } + apply($step) { + this.applyDepIds.push(this.addUnaryDependency($step)); + } + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + async execute({ indexMap, values, }) { + const { resource, contextId, finalizeResults, alias } = this; + if (!finalizeResults) { + throw new Error("Cannot execute PgSelectStep before finalizing it."); + } + const { table, returning } = finalizeResults; + const contextDep = values[contextId]; + /* + * NOTE: Though we'd like to do bulk inserts, there's no way of us + * reliably linking the data back up again given users might: + * + * - rely on auto-generated primary keys + * - have triggers manipulating the data so we can't match it back up + * + * Currently it seems that the order returned from `insert into ... + * select ... order by ... returning ...` is the same order as the + * `order by` was, however this is not guaranteed in the documentation + * and as such cannot be relied upon. Further the pgsql-hackers list + * explicitly declined guaranteeing this behavior: + * + * https://www.postgresql.org/message-id/CAKFQuwbgdJ_xNn0YHWGR0D%2Bv%2B3mHGVqJpG_Ejt96KHoJjs6DkA%40mail.gmail.com + * + * So we have to make do with single inserts, alas. + */ + // We must execute each mutation on its own, but we can at least do so in + // parallel. Note we return a list of promises, each may reject or resolve + // without causing the others to reject. + return indexMap(async (i) => { + const context = contextDep.at(i); + const sqlAttributes = []; + const sqlValues = []; + for (const { depId, name, pgCodec } of this.attributes) { + const attVal = values[depId].at(i); + // `null` is kept, `undefined` is skipped + if (attVal !== undefined) { + const sqlIdent = pg_sql2_1.default.identifier(name); + const sqlVal = (0, codecs_js_1.sqlValueWithCodec)(attVal, pgCodec); + sqlAttributes.push(sqlIdent); + sqlValues.push(sqlVal); + } + } + const meta = Object.create(null); + const queryBuilder = { + alias, + [pg_sql2_1.$$toSQL]() { + return alias; + }, + setMeta(key, value) { + meta[key] = value; + }, + getMetaRaw(key) { + return meta[key]; + }, + set(name, attVal) { + const pgCodec = resource.codec.attributes[name]?.codec; + if (!pgCodec) { + throw new Error(`Attribute ${name} not recognized on ${resource}`); + } + const sqlIdent = pg_sql2_1.default.identifier(name); + const sqlVal = (0, codecs_js_1.sqlValueWithCodec)(attVal, pgCodec); + sqlAttributes.push(sqlIdent); + sqlValues.push(sqlVal); + }, + setBuilder() { + return (0, grafast_1.setter)(this); + }, + }; + for (const applyDepId of this.applyDepIds) { + const val = values[applyDepId].unaryValue(); + if (Array.isArray(val)) { + val.forEach((v) => v?.(queryBuilder)); + } + else { + val?.(queryBuilder); + } + } + let compileResult; + if (sqlAttributes.length > 0) { + // This is our common path + const attributes = pg_sql2_1.default.join(sqlAttributes, ", "); + const values = pg_sql2_1.default.join(sqlValues, ", "); + const query = (0, pg_sql2_1.default) `insert into ${table} (${attributes}) values (${values})${returning};`; + compileResult = pg_sql2_1.default.compile(query); + } + else { + // No columns to insert?! Odd... but okay. + const query = (0, pg_sql2_1.default) `insert into ${table} default values${returning};`; + compileResult = pg_sql2_1.default.compile(query); + } + const { text, values: stmtValues } = compileResult; + const { rows } = await this.resource.executeMutation({ + context, + text, + values: stmtValues, + }); + return { __proto__: null, m: meta, t: rows[0] ?? [] }; + }); + } + finalize() { + if (!this.isFinalized) { + this.locked = true; + const resourceSource = this.resource.from; + if (!pg_sql2_1.default.isSQL(resourceSource)) { + throw new Error(`Error in ${this}: can only insert into sources defined as SQL, however ${this.resource} has ${(0, inspect_js_1.inspect)(this.resource.from)}`); + } + const table = (0, pg_sql2_1.default) `${resourceSource} as ${this.alias}`; + const fragmentsWithAliases = this.selects.map((frag, idx) => (0, pg_sql2_1.default) `${frag} as ${pg_sql2_1.default.identifier(String(idx))}`); + const returning = fragmentsWithAliases.length > 0 + ? (0, pg_sql2_1.default) ` returning\n${pg_sql2_1.default.indent(pg_sql2_1.default.join(fragmentsWithAliases, ",\n"))}` + : pg_sql2_1.default.blank; + this.finalizeResults = { + table, + returning, + }; + } + super.finalize(); + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } +} +exports.PgInsertSingleStep = PgInsertSingleStep; +/** + * Inserts a row into resource with the given specified attribute values. + */ +function pgInsertSingle(resource, attributes) { + return new PgInsertSingleStep(resource, attributes); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgInsertSingle, "pgInsertSingle"); +//# sourceMappingURL=pgInsertSingle.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgInsertSingle.js.map b/grafast/dataplan-pg/dist/steps/pgInsertSingle.js.map new file mode 100644 index 0000000000..109e53fe9f --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgInsertSingle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgInsertSingle.js","sourceRoot":"","sources":["../../src/steps/pgInsertSingle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts b/grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts new file mode 100644 index 0000000000..25dfa8fe25 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts @@ -0,0 +1,59 @@ +import type { ExecutableStep, ExecutionDetails, GrafastResultsList, PageInfoCapableStep } from "grafast"; +import { ConnectionStep, UnbatchedStep } from "grafast"; +import type { PgCursorStep } from "./pgCursor.js"; +import type { PgSelectParsedCursorStep, PgSelectStep } from "./pgSelect.js"; +import type { PgSelectSingleStep } from "./pgSelectSingle.js"; +import type { PgUnionAllSingleStep, PgUnionAllStep } from "./pgUnionAll.js"; +/** + * Represents the PageInfo for a Relay-style GraphQL Connection. + * + * Invoking PgPageInfoStep should have no direct overhead (e.g. + * `pageInfo { __typename }` is free); cost should not be incurred until one of + * the submethods is called. + * + * {@page ~@dataplan/pg/steps/pgPageInfo.md} + */ +export declare class PgPageInfoStep | PgUnionAllStep> extends UnbatchedStep implements PageInfoCapableStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private connectionStepId; + constructor(connectionPlan: ConnectionStep); + /** + * Returns true if the following hold: + * + * - first is set + * - last is not set + * - if first had been one larger, another record would have been returned. + * + * In all other cases, false is returned. + * + * @see {@link https://relay.dev/graphql/connections.htm#HasNextPage()} + */ + hasNextPage(): ExecutableStep; + /** + * Returns true if the following hold: + * + * - last is set + * - first is not set + * - if last had been one larger, another record would have been returned. + * + * In all other cases, false is returned. + * + * @see {@link https://relay.dev/graphql/connections.htm#HasPreviousPage()} + */ + hasPreviousPage(): ExecutableStep; + startCursor(): PgCursorStep | PgUnionAllSingleStep>; + endCursor(): PgCursorStep | PgUnionAllSingleStep>; + execute({ count }: ExecutionDetails): GrafastResultsList; + unbatchedExecute(): any; +} +/** + * Represents the PageInfo for a Relay-style GraphQL Connection. + * + * {@page ~@dataplan/pg/steps/pgPageInfo.md} + */ +export declare function pgPageInfo | PgUnionAllStep>(connectionPlan: ConnectionStep): PgPageInfoStep; +//# sourceMappingURL=pgPageInfo.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts.map b/grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts.map new file mode 100644 index 0000000000..260f8bd911 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPageInfo.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgPageInfo.d.ts","sourceRoot":"","sources":["../../src/steps/pgPageInfo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAElB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,cAAc,EAKd,aAAa,EACd,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAS5E;;;;;;;;GAQG;AACH,qBAAa,cAAc,CACvB,KAAK,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAE5D,SAAQ,aAAa,CAAC,GAAG,CACzB,YAAW,mBAAmB;IAE9B,MAAM,CAAC,QAAQ;;;MAGb;IAEF,aAAa,UAAQ;IAErB,OAAO,CAAC,gBAAgB,CAAS;gBAG/B,cAAc,EAAE,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,GAAG,CAAC;IAwB3E;;;;;;;;;;OAUG;IACI,WAAW,IAAI,cAAc,CAAC,OAAO,CAAC;IAa7C;;;;;;;;;;OAUG;IACI,eAAe,IAAI,cAAc,CAAC,OAAO,CAAC;IAcjD,WAAW,IAAI,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;IAM3E,SAAS,IAAI,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;IAMzE,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC;IAIhE,gBAAgB;CAGjB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,KAAK,SAAS,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAE1D,cAAc,EAAE,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,GAAG,CAAC,GACxE,cAAc,CAAC,KAAK,CAAC,CAEvB"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPageInfo.js b/grafast/dataplan-pg/dist/steps/pgPageInfo.js new file mode 100644 index 0000000000..639d0bd1a3 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPageInfo.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgPageInfoStep = void 0; +exports.pgPageInfo = pgPageInfo; +const grafast_1 = require("grafast"); +/* + * **IMPORTANT**: see pgPageInfo.md for reasoning behind decisions made in this file + */ +// Reduce GC overhead by reusing the same empty object over and over. +const EMPTY_OBJECT = Object.freeze(Object.create(null)); +/** + * Represents the PageInfo for a Relay-style GraphQL Connection. + * + * Invoking PgPageInfoStep should have no direct overhead (e.g. + * `pageInfo { __typename }` is free); cost should not be incurred until one of + * the submethods is called. + * + * {@page ~@dataplan/pg/steps/pgPageInfo.md} + */ +class PgPageInfoStep extends grafast_1.UnbatchedStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgPageInfoStep", + }; } + constructor(connectionPlan) { + super(); + this.isSyncAndSafe = true; + this.connectionStepId = this.addDependency(connectionPlan); + } + /** + * Might come in handy later? + * + * @internal + */ + getConnectionStep() { + const plan = this.getDep(this.connectionStepId); + if (!(plan instanceof grafast_1.ConnectionStep)) { + throw new Error(`Expected ${plan} to be a ConnectionStep`); + } + return plan; + } + /** + * Returns true if the following hold: + * + * - first is set + * - last is not set + * - if first had been one larger, another record would have been returned. + * + * In all other cases, false is returned. + * + * @see {@link https://relay.dev/graphql/connections.htm#HasNextPage()} + */ + hasNextPage() { + const $connection = this.getConnectionStep(); + const $first = $connection.getFirst() ?? (0, grafast_1.constant)(undefined); + const $last = $connection.getLast() ?? (0, grafast_1.constant)(undefined); + const $node = $connection.cloneSubplanWithPagination(); + const $hasMore = $node.hasMore(); + return (0, grafast_1.lambda)({ first: $first, last: $last, hasMore: $hasMore }, hasNextPageCb, true); + } + /** + * Returns true if the following hold: + * + * - last is set + * - first is not set + * - if last had been one larger, another record would have been returned. + * + * In all other cases, false is returned. + * + * @see {@link https://relay.dev/graphql/connections.htm#HasPreviousPage()} + */ + hasPreviousPage() { + const $connection = this.getConnectionStep(); + const $first = $connection.getFirst() ?? (0, grafast_1.constant)(undefined); + const $last = $connection.getLast() ?? (0, grafast_1.constant)(undefined); + const $offset = $connection.getOffset() ?? (0, grafast_1.constant)(undefined); + const $node = $connection.cloneSubplanWithPagination(); + const $hasMore = $node.hasMore(); + return (0, grafast_1.lambda)({ first: $first, last: $last, offset: $offset, hasMore: $hasMore }, hasPreviousPageCb, true); + } + startCursor() { + const $connection = this.getConnectionStep(); + const $rows = $connection.cloneSubplanWithPagination(); + return $rows.row((0, grafast_1.first)($rows)).cursor(); + } + endCursor() { + const $connection = this.getConnectionStep(); + const $rows = $connection.cloneSubplanWithPagination(); + return $rows.row((0, grafast_1.last)($rows)).cursor(); + } + execute({ count }) { + return new Array(count).fill(EMPTY_OBJECT); + } + unbatchedExecute() { + return EMPTY_OBJECT; + } +} +exports.PgPageInfoStep = PgPageInfoStep; +/** + * Represents the PageInfo for a Relay-style GraphQL Connection. + * + * {@page ~@dataplan/pg/steps/pgPageInfo.md} + */ +function pgPageInfo(connectionPlan) { + return new PgPageInfoStep(connectionPlan); +} +function hasNextPageCb(parts) { + const { first, last, hasMore } = parts; + return first != null && last == null && first !== 0 ? hasMore : false; +} +function hasPreviousPageCb(parts) { + const { first, last, offset, hasMore } = parts; + if (first === 0 || last === 0) { + return false; + } + if (last != null && first == null) { + return hasMore; + } + else if (offset != null && offset !== 0) { + return true; + } + else { + return false; + } +} +//# sourceMappingURL=pgPageInfo.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPageInfo.js.map b/grafast/dataplan-pg/dist/steps/pgPageInfo.js.map new file mode 100644 index 0000000000..135a2013cc --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPageInfo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgPageInfo.js","sourceRoot":"","sources":["../../src/steps/pgPageInfo.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts b/grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts new file mode 100644 index 0000000000..481c299124 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts @@ -0,0 +1,47 @@ +import type { ExecutableStep, PolymorphicData, PolymorphicStep, UnbatchedExecutionExtra } from "grafast"; +import { UnbatchedStep } from "grafast"; +import type { GraphQLObjectType } from "grafast/graphql"; +import type { PgClassExpressionStep } from "./pgClassExpression.js"; +import type { PgSelectSingleStep } from "./pgSelectSingle.js"; +/** + * A map from the potential concrete types a polymorphic item may be, how to + * determine which one is correct, and how to handle it if it matches. + */ +export interface PgPolymorphicTypeMap | PgClassExpressionStep, TTypeSpecifier, TTypeSpecifierStep extends ExecutableStep = ExecutableStep> { + readonly [typeName: string]: { + match(specifier: TTypeSpecifier): boolean; + plan($specifier: TTypeSpecifierStep, $item: TItemStep): ExecutableStep; + }; +} +/** + * This class is used for dealing with polymorphism; you feed it a plan + * representing an item, a second plan indicating the type of that item, and a + * PgPolymorphicTypeMap that helps figure out which type the item is and how to + * handle it. + */ +export declare class PgPolymorphicStep | PgClassExpressionStep, TTypeSpecifier, TTypeSpecifierStep extends ExecutableStep = ExecutableStep> extends UnbatchedStep implements PolymorphicStep { + private readonly possibleTypes; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private typeSpecifierStepId; + private itemStepId; + private readonly types; + constructor($item: TItemStep, $typeSpecifier: TTypeSpecifierStep, possibleTypes: PgPolymorphicTypeMap); + deduplicate(peers: PgPolymorphicStep[]): PgPolymorphicStep[]; + private itemPlan; + private typeSpecifierPlan; + planForType(type: GraphQLObjectType): ExecutableStep; + private getTypeNameFromSpecifier; + unbatchedExecute(_extra: UnbatchedExecutionExtra, _item: any, specifier: any): PolymorphicData | null; +} +/** + * This class is used for dealing with polymorphism; you feed it a plan + * representing an item, a second plan indicating the type of that item, and a + * PgPolymorphicTypeMap that helps figure out which type the item is and how to + * handle it. + */ +export declare function pgPolymorphic | PgClassExpressionStep, TTypeSpecifier = any, TTypeSpecifierStep extends ExecutableStep = ExecutableStep>($item: TItemStep, $typeSpecifier: TTypeSpecifierStep, possibleTypes: PgPolymorphicTypeMap): PgPolymorphicStep; +//# sourceMappingURL=pgPolymorphic.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts.map b/grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts.map new file mode 100644 index 0000000000..540d6da6b4 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPolymorphic.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgPolymorphic.d.ts","sourceRoot":"","sources":["../../src/steps/pgPolymorphic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,eAAe,EACf,uBAAuB,EACxB,MAAM,SAAS,CAAC;AACjB,OAAO,EAKL,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,oBAAoB,CACnC,SAAS,SAAS,kBAAkB,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC3E,cAAc,EACd,kBAAkB,SAChB,cAAc,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC,cAAc,CAAC;IAEjE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG;QAC3B,KAAK,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC;QAC1C,IAAI,CAAC,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,GAAG,cAAc,CAAC;KACxE,CAAC;CACH;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB,CAC1B,SAAS,SAAS,kBAAkB,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC3E,cAAc,EACd,kBAAkB,SAChB,cAAc,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC,cAAc,CAAC,CAEnE,SAAQ,aAAa,CAAC,GAAG,CACzB,YAAW,eAAe;IAexB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAbhC,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;gBAGxC,KAAK,EAAE,SAAS,EAChB,cAAc,EAAE,kBAAkB,EACjB,aAAa,EAAE,oBAAoB,CAClD,SAAS,EACT,cAAc,EACd,kBAAkB,CACnB;IASH,WAAW,CACT,KAAK,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GACxC,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAE;IAMrE,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,iBAAiB;IAKzB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc;IAgBpD,OAAO,CAAC,wBAAwB;IAiBhC,gBAAgB,CACd,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,GAAG,GACb,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI;CAQlC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,SAAS,SAAS,kBAAkB,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EAC3E,cAAc,GAAG,GAAG,EACpB,kBAAkB,SAChB,cAAc,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC,cAAc,CAAC,EAEjE,KAAK,EAAE,SAAS,EAChB,cAAc,EAAE,kBAAkB,EAClC,aAAa,EAAE,oBAAoB,CACjC,SAAS,EACT,cAAc,EACd,kBAAkB,CACnB,GACA,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAMlE"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPolymorphic.js b/grafast/dataplan-pg/dist/steps/pgPolymorphic.js new file mode 100644 index 0000000000..7609ba2488 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPolymorphic.js @@ -0,0 +1,79 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgPolymorphicStep = void 0; +exports.pgPolymorphic = pgPolymorphic; +const grafast_1 = require("grafast"); +const inspect_js_1 = require("../inspect.js"); +/** + * This class is used for dealing with polymorphism; you feed it a plan + * representing an item, a second plan indicating the type of that item, and a + * PgPolymorphicTypeMap that helps figure out which type the item is and how to + * handle it. + */ +class PgPolymorphicStep extends grafast_1.UnbatchedStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgPolymorphicStep", + }; } + constructor($item, $typeSpecifier, possibleTypes) { + super(); + this.possibleTypes = possibleTypes; + this.isSyncAndSafe = true; + this.itemStepId = this.addDependency($item); + this.typeSpecifierStepId = this.addDependency($typeSpecifier); + this.types = Object.keys(possibleTypes); + this.peerKey = JSON.stringify(this.types); + } + deduplicate(peers) { + return peers.filter((peer) => { + return peer.possibleTypes === this.possibleTypes; + }); + } + itemPlan() { + return this.getDepOptions(this.itemStepId).step; + } + typeSpecifierPlan() { + return this.getDepOptions(this.typeSpecifierStepId) + .step; + } + planForType(type) { + const spec = this.possibleTypes[type.name]; + if (!spec) { + throw new Error(`${this} could resolve to ${type.name}, but can only handle the following types: '${Object.keys(this.possibleTypes).join("', '")}'`); + } + const $typeSpecifier = this.typeSpecifierPlan(); + const $item = this.itemPlan(); + return spec.plan($typeSpecifier, $item); + } + getTypeNameFromSpecifier(specifier) { + const t = this.types.find((t) => this.possibleTypes[t].match(specifier)); + if (!t) { + if (grafast_1.isDev) { + console.error(`Could not find a type that matched the specifier '${(0, inspect_js_1.inspect)(specifier)}'`); + } + throw new grafast_1.SafeError("Could not determine the type to use for this polymorphic value."); + } + return t; + } + unbatchedExecute(_extra, _item, specifier) { + if (specifier) { + const typeName = this.getTypeNameFromSpecifier(specifier); + return (0, grafast_1.polymorphicWrap)(typeName); + } + else { + return null; + } + } +} +exports.PgPolymorphicStep = PgPolymorphicStep; +/** + * This class is used for dealing with polymorphism; you feed it a plan + * representing an item, a second plan indicating the type of that item, and a + * PgPolymorphicTypeMap that helps figure out which type the item is and how to + * handle it. + */ +function pgPolymorphic($item, $typeSpecifier, possibleTypes) { + return new PgPolymorphicStep($item, $typeSpecifier, possibleTypes); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgPolymorphic, "pgPolymorphic"); +//# sourceMappingURL=pgPolymorphic.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgPolymorphic.js.map b/grafast/dataplan-pg/dist/steps/pgPolymorphic.js.map new file mode 100644 index 0000000000..bf61bebf8a --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgPolymorphic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgPolymorphic.js","sourceRoot":"","sources":["../../src/steps/pgPolymorphic.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelect.d.ts b/grafast/dataplan-pg/dist/steps/pgSelect.d.ts new file mode 100644 index 0000000000..54bf578682 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelect.d.ts @@ -0,0 +1,453 @@ +import type { ConnectionCapableStep, ConnectionStep, ExecutionDetails, GrafastResultsList, LambdaStep, Maybe, StepOptimizeOptions } from "grafast"; +import { Step } from "grafast"; +import type { SQL } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgCodecAttributes } from "../codecs.js"; +import type { PgResource, PgResourceParameter } from "../datasource.js"; +import type { GetPgResourceAttributes, GetPgResourceCodec, GetPgResourceRelations, PgCodec, PgGroupSpec, PgOrderSpec, PgQueryBuilder, PgSelectQueryBuilderCallback, PgSQLCallbackOrDirect, PgTypedStep, ReadonlyArrayOrDirect } from "../interfaces.js"; +import { PgLocker } from "../pgLocker.js"; +import { PgClassExpressionStep } from "./pgClassExpression.js"; +import type { PgHavingConditionSpec, PgWhereConditionSpec } from "./pgCondition.js"; +import { PgCondition } from "./pgCondition.js"; +import type { PgCursorDetails } from "./pgCursor.js"; +import type { PgPageInfoStep } from "./pgPageInfo.js"; +import type { PgSelectSinglePlanOptions } from "./pgSelectSingle.js"; +import { PgSelectSingleStep } from "./pgSelectSingle.js"; +import type { PgStmtCommonQueryInfo, PgStmtCompileQueryInfo, PgStmtDeferredPlaceholder, PgStmtDeferredSQL } from "./pgStmt.js"; +import { PgStmtBaseStep } from "./pgStmt.js"; +export type PgSelectParsedCursorStep = LambdaStep; +type PgSelectPlanJoin = { + type: "cross"; + from: SQL; + alias: SQL; + attributeNames?: SQL; + lateral?: boolean; +} | { + type: "inner" | "left" | "right" | "full"; + from: SQL; + alias: SQL; + attributeNames?: SQL; + conditions: SQL[]; + lateral?: boolean; +}; +type PgSelectScopedPlanJoin = PgSQLCallbackOrDirect; +export type PgSelectIdentifierSpec = { + step: Step; + codec: PgCodec; + matches: (alias: SQL) => SQL; +} | { + step: PgTypedStep; + codec?: PgCodec; + matches: (alias: SQL) => SQL; +}; +export type PgSelectArgumentSpec = { + step: Step; + pgCodec: PgCodec; + name?: string; +} | { + step: PgTypedStep; + pgCodec?: never; + name?: string; +}; +export interface PgSelectArgumentDigest { + position?: number; + name?: string; + placeholder: SQL; + step?: never; +} +interface PgSelectArgumentBasics { + position?: number; + name?: string; +} +interface PgSelectArgumentPlaceholder extends PgSelectArgumentBasics { + placeholder: SQL; + step?: never; + depId?: never; +} +export interface PgSelectArgumentRuntimeValue extends PgSelectArgumentBasics { + placeholder?: never; + value: unknown; +} +export type PgSelectMode = "normal" | "aggregate" | "mutation"; +export interface PgSelectOptions = PgResource> { + /** + * Tells us what we're dealing with - data type, columns, where to get it + * from, what it's called, etc. Many of these details can be overridden + * below. + */ + resource: TResource; + /** + * The identifiers to limit the results down to just the row(s) you care + * about. + * + * NOTE: this is required because it's a big footgun to omit it by accident, + * if you truly do not need it (e.g. if you're calling a function with + * limited results or you really want everything) then you can specify it as + * an empty array `[]`. + */ + identifiers: Array; + /** + * Set this true if your query includes any `VOLATILE` function (including + * seemingly innocuous things such as `random()`) otherwise we might only + * call the relevant function once and re-use the result. + */ + forceIdentity?: boolean; + parameters?: readonly PgResourceParameter[]; + /** + * If your `from` (or resource.from if omitted) is a function, the arguments + * to pass to the function. + */ + args?: ReadonlyArray; + /** + * If you want to build the data in a custom way (e.g. calling a function, + * selecting from a view, building a complex query, etc) then you can + * override the `resource.from` here with your own from code. Defaults to + * `resource.from`. + */ + from?: SQL | ((...args: PgSelectArgumentDigest[]) => SQL); + /** + * You should never rely on implicit order - use explicit `ORDER BY` (via + * `$select.orderBy(...)`) instead. However, if you _are_ relying on implicit + * order in your `from` result (e.g. a subquery or function call that has its + * own internal ordering), setting this to `true` will prevent PgSelect from + * inlining some queries (joins) that it thinks might impact the order of + * results. Setting this to `true` does NOT guarantee that you can rely on + * your order being maintained, but it does increase the chances. + */ + hasImplicitOrder?: false; + /** + * If you pass a custom `from` (or otherwise want to aid in debugging), + * passing a custom name can make it easier to follow the SQL/etc that is + * generated. + */ + name?: string; + mode?: PgSelectMode; + /** + * If true and this turns into a join it should be a lateral join. + */ + joinAsLateral?: boolean; +} +interface PgSelectStepResult { + hasMore: boolean; + /** a tuple based on what is selected at runtime */ + items: ReadonlyArray | AsyncIterable; + cursorDetails: PgCursorDetails | undefined; + groupDetails: PgGroupDetails | undefined; + m: Record; +} +export interface PgGroupDetails { + readonly indicies: ReadonlyArray<{ + index: number; + codec: PgCodec; + }>; +} +/** + * This represents selecting from a class-like entity (table, view, etc); i.e. + * it represents `SELECT , FROM `. You can also add + * `JOIN`, `WHERE`, `ORDER BY`, `LIMIT`, `OFFSET`. You cannot add `GROUP BY` + * because that would invalidate the identifiers; and as such you can't use + * `HAVING` or functions that implicitly turn the query into an aggregate. We + * don't allow `UNION`/`INTERSECT`/`EXCEPT`/`FOR UPDATE`/etc at this time, + * purely because it hasn't been sufficiently considered. + */ +export declare class PgSelectStep = PgResource> extends PgStmtBaseStep implements ConnectionCapableStep, PgSelectParsedCursorStep> { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private readonly from; + private readonly hasImplicitOrder; + /** + * This defaults to the name of the resource but you can override it. Aids + * in debugging. + */ + readonly name: string; + /** + * To be used as the table alias, we always use a symbol unless the calling + * code specifically indicates a string to use. + */ + private readonly symbol; + /** + * When SELECTs get merged, symbols also need to be merged. The keys in this + * map are the symbols of PgSelects that don't exist any more, the values are + * symbols of the PgSelects that they were replaced with (which might also not + * exist in future, but we follow the chain so it's fine). + */ + private readonly _symbolSubstitutes; + /** = sql.identifier(this.symbol) */ + readonly alias: SQL; + /** + * The resource from which we are selecting: table, view, etc + */ + readonly resource: TResource; + private relationJoins; + private joins; + private conditions; + private groups; + private havingConditions; + private orders; + private isOrderUnique; + protected firstStepId: number | null; + protected lastStepId: number | null; + protected fetchOneExtra: boolean; + /** When using natural pagination, this index is the lower bound (and should be excluded) */ + protected lowerIndexStepId: number | null; + /** When using natural pagination, this index is the upper bound (and should be excluded) */ + protected upperIndexStepId: number | null; + protected offsetStepId: number | null; + protected beforeStepId: number | null; + protected afterStepId: number | null; + private connectionDepId; + private applyDepIds; + /** + * Set this true if your query includes any `VOLATILE` function (including + * seemingly innocuous things such as `random()`) otherwise we might only + * call the relevant function once and re-use the result. + */ + forceIdentity: boolean; + protected placeholders: Array; + protected deferreds: Array; + private fixedPlaceholderValues; + /** + * If true, we don't need to add any of the security checks from the + * resource; otherwise we must do so. Default false. + */ + private isTrusted; + /** + * If true, we know at most one result can be matched for each identifier, so + * it's safe to do a `LEFT JOIN` without risk of returning duplicates. Default false. + */ + private isUnique; + /** + * If true, we will not attempt to inline this into the parent query. + * Default false. + */ + private isInliningForbidden; + /** + * If true and this becomes a join during optimisation then it should become + * a lateral join; e.g. in the following query, the left join must be + * lateral. + * + * ```sql + * select * + * from foo + * left join lateral ( + * select (foo.col).* + * ) t + * on true + * ``` + */ + private joinAsLateral; + /** + * The list of things we're selecting. + */ + private selects; + /** + * The id for the PostgreSQL context plan. + */ + private contextId; + readonly mode: PgSelectMode; + protected locker: PgLocker; + private _meta; + static clone>(cloneFrom: PgSelectStep, mode?: PgSelectMode): PgSelectStep; + constructor(options: PgSelectOptions); + toStringMeta(): string; + lock(): void; + setInliningForbidden(newInliningForbidden?: boolean): this; + inliningForbidden(): boolean; + setTrusted(newIsTrusted?: boolean): this; + trusted(): boolean; + /** + * Set this true ONLY if there can be at most one match for each of the + * identifiers. If you set this true when this is not the case then you may + * get unexpected results during inlining; if in doubt leave it at the + * default. + */ + setUnique(newUnique?: boolean): this; + unique(): boolean; + /** + * Join to a named relationship and return the alias that can be used in + * SELECT, WHERE and ORDER BY. + */ + singleRelation & string>(relationIdentifier: TRelationName): SQL; + /** + * @experimental Please use `singleRelation` or `manyRelation` instead. + */ + join(spec: PgSelectScopedPlanJoin): void; + getMeta(key: string): import("grafast").AccessStep; + private nullCheckIndex; + /** + * Finalizes this instance and returns a mutable clone; useful for + * connections/etc (e.g. copying `where` conditions but adding more, or + * pagination, or grouping, aggregates, etc) + */ + clone(mode?: PgSelectMode): PgSelectStep; + connectionClone($connection: ConnectionStep, mode?: PgSelectMode): PgSelectStep; + where(rawCondition: PgSQLCallbackOrDirect & string>>): void; + groupBy(group: PgSQLCallbackOrDirect): void; + having(rawCondition: PgSQLCallbackOrDirect & string>>): void; + orderBy(order: PgSQLCallbackOrDirect): void; + setOrderIsUnique(): void; + apply($step: Step>>): void; + protected assertCursorPaginationAllowed(): void; + items(): PgSelectRowsStep; + pageInfo($connectionPlan: ConnectionStep): PgPageInfoStep; + getCursorDetails(): Step; + private needsGroups; + getGroupDetails(): Step; + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + execute(executionDetails: ExecutionDetails): Promise>; + finalize(): void; + deduplicate(peers: PgSelectStep[]): PgSelectStep[]; + private getParentForInlining; + private mergeSelectsWith; + /** + * - Merge placeholders + * - Merge fixedPlaceholders + * - Merge deferreds + * - Merge _symbolSubstitutes + */ + private mergePlaceholdersInto; + optimize({ stream }: StepOptimizeOptions): Step; + /** + * Most likely you want `.single()` instead of this method. + * + * If this plan may only return one record, you can use `.singleAsRecord()` + * to return a plan that resolves to that record (rather than a list of + * records as it does currently). + * + * The main reason to use this instead of `.single()` is if you are + * paginating over a scalar and you truly need a PgSelectSingleStep interface + * e.g. so you can get the `count(*)` aggregate. + * + * Beware: if you call this and the database might actually return more than + * one record then you're potentially in for a Bad Time. + */ + singleAsRecord(options?: PgSelectSinglePlanOptions): PgSelectSingleStep; + /** + * If this plan may only return one record, you can use `.single()` to return + * a plan that resolves to either that record (in the case of composite + * types) or the underlying scalar (in the case of a resource whose codec has + * no attributes). + * + * Beware: if you call this and the database might actually return more than + * one record then you're potentially in for a Bad Time. + */ + single(options?: PgSelectSinglePlanOptions): TResource extends PgResource, any, any, any> ? UAttributes extends PgCodecAttributes ? PgSelectSingleStep : PgClassExpressionStep, TResource> : never; + row($row: Step, options?: PgSelectSinglePlanOptions): PgSelectSingleStep; + /** + * When you return a plan in a situation where GraphQL is expecting a + * GraphQLList, it must implement the `.listItem()` method to return a plan + * for an individual item within this list. Grafast will automatically call + * this (possibly recursively) to pass to the plan resolvers on the children + * of this field. + * + * NOTE: Grafast handles the list indexes for you, so your list item plan + * should process just the single input list item. + * + * IMPORTANT: do not call `.listItem` from user code; it's only intended to + * be called by Grafast. + */ + listItem(itemPlan: Step): TResource extends PgResource, any, any, any> ? UAttributes extends PgCodecAttributes ? PgSelectSingleStep : PgClassExpressionStep, TResource> : never; + [$$toSQL](): SQL; + whereBuilder(): PgCondition; + havingBuilder(): PgCondition; + setMeta(key: string, value: unknown): void; + getMetaRaw(key: string): unknown; + static getStaticInfo>($source: PgSelectStep): StaticInfo; +} +export declare class PgSelectRowsStep = PgResource> extends Step { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + constructor($pgSelect: PgSelectStep); + getClassStep(): PgSelectStep; + listItem(itemPlan: Step): TResource extends PgResource | undefined, PgCodec | undefined, PgCodec | undefined>, boolean>; + } | undefined, any, any, any, any, any>, any, any, any> ? UAttributes extends { + [x: string]: import("../codecs.js").PgCodecAttribute | undefined, PgCodec | undefined, PgCodec | undefined>, boolean>; + } ? PgSelectSingleStep : PgClassExpressionStep, TResource> : never; + deduplicate(_peers: readonly Step[]): readonly Step[]; + execute(executionDetails: ExecutionDetails): readonly any[]; +} +export declare function pgSelect>(options: PgSelectOptions): PgSelectStep; +/** + * Turns a list of records (e.g. from PgSelectSingleStep.record()) back into a PgSelect. + */ +export declare function pgSelectFromRecords>(resource: TResource, records: PgClassExpressionStep, any, any>, TResource> | Step): PgSelectStep; +export declare function sqlFromArgDigests(digests: readonly PgSelectArgumentDigest[]): SQL; +export declare function pgFromExpression($target: { + getPgRoot(): Step & { + placeholder(step: Step, codec: PgCodec): SQL; + deferredSQL($step: Step): SQL; + }; +}, baseFrom: SQL | ((...args: readonly PgSelectArgumentDigest[]) => SQL), inParameters?: readonly PgResourceParameter[] | undefined, specs?: ReadonlyArray): SQL; +declare const $$generationCheck: unique symbol; +export declare function generatePgParameterAnalysis(parameters: readonly PgResourceParameter[]): { + /** DO NOT GENERATE THIS OBJECT YOURSELF! Use generateParameterAnalysis(parameters) */ + [$$generationCheck]: readonly PgResourceParameter | undefined, PgCodec | undefined, PgCodec | undefined>, boolean>; + } | undefined, any, any, PgCodec | undefined, PgCodec | undefined, PgCodec | undefined>>[]; + parameterByName: Record | undefined, PgCodec | undefined, PgCodec | undefined>, boolean>; + } | undefined, any, any, PgCodec | undefined, PgCodec | undefined, PgCodec | undefined>>>; + indexAfterWhichAllArgsAreNamed: number; +}; +export declare function pgFromExpressionRuntime(from: (...args: PgSelectArgumentDigest[]) => SQL, parameters: readonly PgResourceParameter[], digests: ReadonlyArray, parameterAnalysis?: ReturnType): SQL; +export declare function getFragmentAndCodecFromOrder(alias: SQL, order: PgOrderSpec, codecOrCodecs: PgCodec | PgCodec[]): [fragment: SQL, codec: PgCodec, isNullable?: boolean]; +interface PgSelectQueryInfo = PgResource> extends PgStmtCommonQueryInfo, PgStmtCompileQueryInfo { + readonly name: string; + readonly resource: TResource; + readonly mode: PgSelectMode; + /** Are we fetching just one record? */ + readonly isUnique: boolean; + readonly joinAsLateral: boolean; + /** Is the order that was established at planning time unique? */ + readonly isOrderUnique: boolean; + readonly fixedPlaceholderValues: ReadonlyMap; + readonly _symbolSubstitutes: ReadonlyMap; + readonly needsGroups: boolean; + readonly selects: ReadonlyArray; + readonly from: SQL; + readonly joins: ReadonlyArray; + readonly conditions: ReadonlyArray; + readonly orders: ReadonlyArray; + readonly relationJoins: ReadonlyMap, SQL>; + readonly meta: { + readonly [key: string]: any; + }; +} +type CoreInfo> = Readonly, "placeholders" | "deferreds">>; +type StaticKeys = "forceIdentity" | "havingConditions" | "mode" | "hasSideEffects" | "name" | "alias" | "symbol" | "resource" | "groups" | "orders" | "selects" | "fetchOneExtra" | "isOrderUnique" | "isUnique" | "conditions" | "from" | "joins" | "needsCursor" | "needsGroups" | "relationJoins" | "meta" | "placeholderSymbols" | "deferredSymbols" | "fixedPlaceholderValues" | "_symbolSubstitutes" | "joinAsLateral"; +type StaticInfo> = Pick, StaticKeys>; +export interface PgSelectQueryBuilder = PgResource> extends PgQueryBuilder { + /** Instruct to add another order */ + orderBy(spec: PgOrderSpec): void; + /** Inform that the resulting order is now unique */ + setOrderIsUnique(): void; + /** Returns the SQL alias representing the table related to this relation */ + singleRelation & string>(relationIdentifier: TRelationName): SQL; + where(condition: PgWhereConditionSpec & string>): void; + whereBuilder(): PgCondition; + groupBy(group: PgGroupSpec): void; + having(condition: PgHavingConditionSpec & string>): void; + havingBuilder(): PgCondition; + join(spec: PgSelectPlanJoin): void; + selectAndReturnIndex(fragment: SQL): number; +} +export {}; +//# sourceMappingURL=pgSelect.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelect.d.ts.map b/grafast/dataplan-pg/dist/steps/pgSelect.d.ts.map new file mode 100644 index 0000000000..07b090351d --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelect.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgSelect.d.ts","sourceRoot":"","sources":["../../src/steps/pgSelect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,KAAK,EAEL,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAiBL,IAAI,EAIL,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,GAAG,EAAe,MAAM,SAAS,CAAC;AAChD,OAAY,EAAwB,OAAO,EAAe,MAAM,SAAS,CAAC;AAE1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EAEpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,OAAO,EAEP,WAAW,EACX,WAAW,EACX,cAAc,EACd,4BAA4B,EAC5B,qBAAqB,EACrB,WAAW,EACX,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAEV,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,iBAAiB,EAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,cAAc,EACf,MAAM,aAAa,CAAC;AAKrB,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;AAqBxE,KAAK,gBAAgB,GACjB;IACE,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,GAAG,CAAC;IACX,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC1C,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,GAAG,CAAC;IACX,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEN,KAAK,sBAAsB,GAAG,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AAEtE,MAAM,MAAM,sBAAsB,GAC9B;IACE,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;CAC9B,CAAC;AAEN,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,UAAU,2BAA4B,SAAQ,sBAAsB;IAClE,WAAW,EAAE,GAAG,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AASD,MAAM,WAAW,4BAA6B,SAAQ,sBAAsB;IAC1E,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAqBD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,eAAe,CAC9B,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU;IAElE;;;;OAIG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;;;;;OAQG;IACH,WAAW,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAE3C;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,UAAU,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAE5C;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAE3C;;;;;OAKG;IACH,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,sBAAsB,EAAE,KAAK,GAAG,CAAC,CAAC;IAC1D;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC;IAEzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,IAAI,CAAC,EAAE,YAAY,CAAC;IAEpB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CAQzB;AAyCD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3D,aAAa,EAAE,eAAe,GAAG,SAAS,CAAC;IAC3C,YAAY,EAAE,cAAc,GAAG,SAAS,CAAC;IACzC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC,CAAC;CACJ;AAED;;;;;;;;GAQG;AACH,qBAAa,YAAY,CACrB,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAEpE,SAAQ,cAAc,CAAC,kBAAkB,CACzC,YACE,qBAAqB,CACnB,kBAAkB,CAAC,SAAS,CAAC,EAC7B,wBAAwB,CAON;IAEtB,MAAM,CAAC,QAAQ;;;MAGb;IAEF,aAAa,UAAS;IAGtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAE3C;;;OAGG;IACH,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAEhE,oCAAoC;IACpC,SAAgB,KAAK,EAAE,GAAG,CAAC;IAE3B;;OAEG;IACH,SAAgB,QAAQ,EAAE,SAAS,CAAC;IAIpC,OAAO,CAAC,aAAa,CAGjB;IACJ,OAAO,CAAC,KAAK,CAA+B;IAI5C,OAAO,CAAC,UAAU,CAAa;IAI/B,OAAO,CAAC,MAAM,CAA0B;IAIxC,OAAO,CAAC,gBAAgB,CAAa;IAIrC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,aAAa,CAAS;IAI9B,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5C,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,SAAS,CAAC,aAAa,UAAS;IAChC,4FAA4F;IAC5F,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjD,4FAA4F;IAC5F,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAIjD,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAI7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7C,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5C,OAAO,CAAC,eAAe,CAAuB;IAE9C,OAAO,CAAC,WAAW,CAAgB;IAInC;;;;OAIG;IACI,aAAa,EAAE,OAAO,CAAC;IAE9B,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,yBAAyB,CAAC,CAAM;IAC9D,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAM;IACnD,OAAO,CAAC,sBAAsB,CAA0B;IAExD;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,aAAa,CAAU;IAE/B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAkB;IAEjC;;OAEG;IACH,OAAO,CAAC,SAAS,CAAS;IAI1B,SAAgB,IAAI,EAAE,YAAY,CAAC;IAEnC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAsB;IAEtD,OAAO,CAAC,KAAK,CAA4C;IAEzD,MAAM,CAAC,KAAK,CAAC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAChE,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC,EAClC,IAAI,GAAE,YAA6B,GAClC,YAAY,CAAC,SAAS,CAAC;gBAkGd,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC;IA0ExC,YAAY,IAAI,MAAM;IAQtB,IAAI,IAAI,IAAI;IAIZ,oBAAoB,CAAC,oBAAoB,UAAO,GAAG,IAAI;IAKvD,iBAAiB,IAAI,OAAO;IAI5B,UAAU,CAAC,YAAY,UAAO,GAAG,IAAI;IAQrC,OAAO,IAAI,OAAO;IAIzB;;;;;OAKG;IACI,SAAS,CAAC,SAAS,UAAO,GAAG,IAAI;IAQjC,MAAM,IAAI,OAAO;IAIxB;;;OAGG;IACI,cAAc,CACnB,aAAa,SAAS,MAAM,sBAAsB,CAAC,SAAS,CAAC,GAAG,MAAM,EACtE,kBAAkB,EAAE,aAAa,GAAG,GAAG;IA8CzC;;OAEG;IACI,IAAI,CAAC,IAAI,EAAE,sBAAsB;IAIjC,OAAO,CAAC,GAAG,EAAE,MAAM;IAmC1B,OAAO,CAAC,cAAc,CAA4B;IAoBlD;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC;IAQnD,eAAe,CACb,WAAW,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC/C,IAAI,CAAC,EAAE,YAAY,GAClB,YAAY,CAAC,SAAS,CAAC;IAO1B,KAAK,CACH,YAAY,EAAE,qBAAqB,CACjC,oBAAoB,CAAC,MAAM,uBAAuB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CACxE,GACA,IAAI;IA8BP,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI;IAQxD,MAAM,CACJ,YAAY,EAAE,qBAAqB,CACjC,qBAAqB,CAAC,MAAM,uBAAuB,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CACzE,GACA,IAAI;IAmBP,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI;IAKxD,gBAAgB,IAAI,IAAI;IAOxB,KAAK,CACH,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;IASzE,SAAS,CAAC,6BAA6B,IAAI,IAAI;IAQxC,KAAK;IASL,QAAQ,CACb,eAAe,EAAE,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,GAAG,CAAC,GACxE,cAAc,CAAC,IAAI,CAAC;IAMhB,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC;IAKhD,OAAO,CAAC,WAAW,CAAS;IACrB,eAAe,IAAI,IAAI,CAAC,cAAc,CAAC;IAK9C;;;;;;;;;;;OAWG;IACG,OAAO,CACX,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IA4N3C,QAAQ,IAAI,IAAI;IAavB,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE;IAiNlE,OAAO,CAAC,oBAAoB;IA8J5B,OAAO,CAAC,gBAAgB;IAUxB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA4F7B,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,mBAAmB,GAAG,IAAI;IA6I/C;;;;;;;;;;;;;OAaG;IACH,cAAc,CACZ,OAAO,CAAC,EAAE,yBAAyB,GAClC,kBAAkB,CAAC,SAAS,CAAC;IAKhC;;;;;;;;OAQG;IACH,MAAM,CACJ,OAAO,CAAC,EAAE,yBAAyB,GAClC,SAAS,SAAS,UAAU,CAC7B,GAAG,EACH,OAAO,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACxD,GAAG,EACH,GAAG,EACH,GAAG,CACJ,GACG,WAAW,SAAS,iBAAiB,GACnC,kBAAkB,CAAC,SAAS,CAAC,GAC7B,qBAAqB,CACnB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACnD,SAAS,CACV,GACH,KAAK;IAMT,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,yBAAyB;IAInD;;;;;;;;;;;;OAYG;IACH,QAAQ,CACN,QAAQ,EAAE,IAAI,GACb,SAAS,SAAS,UAAU,CAC7B,GAAG,EACH,OAAO,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACxD,GAAG,EACH,GAAG,EACH,GAAG,CACJ,GACG,WAAW,SAAS,iBAAiB,GACnC,kBAAkB,CAAC,SAAS,CAAC,GAC7B,qBAAqB,CACnB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACnD,SAAS,CACV,GACH,KAAK;IAMT,CAAC,OAAO,CAAC;IAGT,YAAY;IAGZ,aAAa;IAGb,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAG1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,MAAM,CAAC,aAAa,CAAC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACxE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,GAC/B,UAAU,CAAC,SAAS,CAAC;CA8BzB;AAED,qBAAa,gBAAgB,CAC3B,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAClE,SAAQ,IAAI;IACZ,MAAM,CAAC,QAAQ;;;MAGb;IAEK,aAAa,UAAS;gBAEjB,SAAS,EAAE,YAAY,CAAC,SAAS,CAAC;IAKvC,YAAY,IAAI,YAAY,CAAC,SAAS,CAAC;IAI9C,QAAQ,CAAC,QAAQ,EAAE,IAAI,wDAtFF,WAAW;;;;;IA0FzB,WAAW,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;IAW1C,OAAO,CAAC,gBAAgB,EAAE,gBAAgB;CAI3C;AAoED,wBAAgB,QAAQ,CAAC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5E,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,GAClC,YAAY,CAAC,SAAS,CAAC,CAEzB;AAGD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAErD,QAAQ,EAAE,SAAS,EACnB,OAAO,EACH,qBAAqB,CACnB,OAAO,CACL,GAAG,EACH,SAAS,EACT,GAAG,EACH,GAAG,EACH,kBAAkB,CAAC,SAAS,CAAC,EAC7B,GAAG,EACH,GAAG,CACJ,EACD,SAAS,CACV,GACD,IAAI,CAAC,GAAG,EAAE,CAAC,GACd,YAAY,CAAC,SAAS,CAAC,CAOzB;AAID,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,sBAAsB,EAAE,GACzC,GAAG,CAWL;AAID,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE;IACP,SAAS,IAAI,IAAI,GAAG;QAClB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC;QAC7C,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;KACpC,CAAC;CACH,EACD,QAAQ,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,SAAS,sBAAsB,EAAE,KAAK,GAAG,CAAC,EACrE,YAAY,GAAE,SAAS,mBAAmB,EAAE,GAAG,SAAqB,EACpE,KAAK,GAAE,aAAa,CAAC,oBAAoB,GAAG,sBAAsB,CAAM,GACvE,GAAG,CAqFL;AAmID,QAAA,MAAM,iBAAiB,eAAqC,CAAC;AAC7D,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,SAAS,mBAAmB,EAAE;IAkBxC,sFAAsF;;;;;;;;EAKzF;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,sBAAsB,EAAE,KAAK,GAAG,EAChD,UAAU,EAAE,SAAS,mBAAmB,EAAE,EAC1C,OAAO,EAAE,aAAa,CACpB,2BAA2B,GAAG,4BAA4B,CAC3D,EACD,iBAAiB,GAAE,UAAU,CAC3B,OAAO,2BAA2B,CACO,OAgF5C;AAID,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,OAAO,GAAG,OAAO,EAAE,GACjC,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CA8BvD;AAwCD,UAAU,iBAAiB,CACzB,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAClE,SAAQ,qBAAqB,EAC3B,sBAAsB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,iEAAiE;IACjE,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,sBAAsB,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAE9B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,WAAW,CACjC,MAAM,sBAAsB,CAAC,SAAS,CAAC,EACvC,GAAG,CACJ,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAChD;AAED,KAAK,QAAQ,CAAC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,QAAQ,CAC7E,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,cAAc,GAAG,WAAW,CAAC,CACjE,CAAC;AA2mBF,KAAK,UAAU,GACX,eAAe,GACf,kBAAkB,GAClB,MAAM,GACN,gBAAgB,GAChB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,eAAe,GACf,eAAe,GACf,UAAU,GACV,YAAY,GACZ,MAAM,GACN,OAAO,GACP,aAAa,GACb,aAAa,GACb,eAAe,GACf,MAAM,GACN,oBAAoB,GACpB,iBAAiB,GACjB,wBAAwB,GACxB,oBAAoB,GACpB,eAAe,CAAC;AAEpB,KAAK,UAAU,CAAC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAC3E,QAAQ,CAAC,SAAS,CAAC,EACnB,UAAU,CACX,CAAC;AAubF,MAAM,WAAW,oBAAoB,CACnC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAClE,SAAQ,cAAc;IACtB,oCAAoC;IACpC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,gBAAgB,IAAI,IAAI,CAAC;IACzB,4EAA4E;IAC5E,cAAc,CACZ,aAAa,SAAS,MAAM,sBAAsB,CAAC,SAAS,CAAC,GAAG,MAAM,EAEtE,kBAAkB,EAAE,aAAa,GAChC,GAAG,CAAC;IACP,KAAK,CACH,SAAS,EAAE,oBAAoB,CAC7B,MAAM,uBAAuB,CAAC,SAAS,CAAC,GAAG,MAAM,CAClD,GACA,IAAI,CAAC;IACR,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,MAAM,CACJ,SAAS,EAAE,qBAAqB,CAC9B,MAAM,uBAAuB,CAAC,SAAS,CAAC,GAAG,MAAM,CAClD,GACA,IAAI,CAAC;IACR,aAAa,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAGnC,IAAI,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAAC;CAC7C"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelect.js b/grafast/dataplan-pg/dist/steps/pgSelect.js new file mode 100644 index 0000000000..40828f023b --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelect.js @@ -0,0 +1,2481 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgSelectRowsStep = exports.PgSelectStep = void 0; +exports.pgSelect = pgSelect; +exports.pgSelectFromRecords = pgSelectFromRecords; +exports.sqlFromArgDigests = sqlFromArgDigests; +exports.pgFromExpression = pgFromExpression; +exports.generatePgParameterAnalysis = generatePgParameterAnalysis; +exports.pgFromExpressionRuntime = pgFromExpressionRuntime; +exports.getFragmentAndCodecFromOrder = getFragmentAndCodecFromOrder; +const tslib_1 = require("tslib"); +const crypto_1 = require("crypto"); +const debug_1 = tslib_1.__importDefault(require("debug")); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importStar(require("pg-sql2")); +const codecs_js_1 = require("../codecs.js"); +const parseArray_js_1 = require("../parseArray.js"); +const pgLocker_js_1 = require("../pgLocker.js"); +const pgClassExpression_js_1 = require("./pgClassExpression.js"); +const pgCondition_js_1 = require("./pgCondition.js"); +const pgPageInfo_js_1 = require("./pgPageInfo.js"); +const pgSelectSingle_js_1 = require("./pgSelectSingle.js"); +const pgStmt_js_1 = require("./pgStmt.js"); +const pgValidateParsedCursor_js_1 = require("./pgValidateParsedCursor.js"); +const ALWAYS_ALLOWED = true; +// Maximum identifier length in Postgres is 63 chars, so trim one off. (We +// could do base64... but meh.) +const hash = (text) => (0, crypto_1.createHash)("sha256").update(text).digest("hex").slice(0, 63); +const debugPlan = (0, debug_1.default)("@dataplan/pg:PgSelectStep:plan"); +// const debugExecute = debugFactory("@dataplan/pg:PgSelectStep:execute"); +const debugPlanVerbose = debugPlan.extend("verbose"); +// const debugExecuteVerbose = debugExecute.extend("verbose"); +const EMPTY_ARRAY = Object.freeze([]); +const NO_ROWS = Object.freeze({ + hasMore: false, + items: [], + cursorDetails: undefined, + groupDetails: undefined, + m: Object.create(null), +}); +function assertSensible(step) { + if (step instanceof PgSelectStep) { + throw new Error("You passed a PgSelectStep as an identifier, perhaps you forgot to add `.record()`?"); + } + if (step instanceof pgSelectSingle_js_1.PgSelectSingleStep) { + throw new Error("You passed a PgSelectSingleStep as an identifier, perhaps you forgot to add `.record()`?"); + } +} +/** + * This represents selecting from a class-like entity (table, view, etc); i.e. + * it represents `SELECT , FROM
`. You can also add + * `JOIN`, `WHERE`, `ORDER BY`, `LIMIT`, `OFFSET`. You cannot add `GROUP BY` + * because that would invalidate the identifiers; and as such you can't use + * `HAVING` or functions that implicitly turn the query into an aggregate. We + * don't allow `UNION`/`INTERSECT`/`EXCEPT`/`FOR UPDATE`/etc at this time, + * purely because it hasn't been sufficiently considered. + */ +class PgSelectStep extends pgStmt_js_1.PgStmtBaseStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgSelectStep", + }; } + static clone(cloneFrom, mode = cloneFrom.mode) { + const cloneFromMatchingMode = cloneFrom?.mode === mode ? cloneFrom : null; + const $clone = new PgSelectStep({ + identifiers: [], //We'll overwrite teh result of this in a moment + args: undefined, // We'll overwrite the result of this in a moment + context: cloneFrom.getDep(cloneFrom.contextId), + resource: cloneFrom.resource, + from: cloneFrom.from, + ...(cloneFrom.hasImplicitOrder === false + ? { hasImplicitOrder: cloneFrom.hasImplicitOrder } + : {}), + name: cloneFrom.name, + mode, + joinAsLateral: cloneFrom.joinAsLateral, + forceIdentity: cloneFrom.forceIdentity, + _internalCloneSymbol: cloneFrom.symbol, + _internalCloneAlias: cloneFrom.alias, + }); + if ($clone.dependencies.length !== 1) { + throw new Error("Should not have any dependencies other than context yet"); + } + cloneFrom.dependencies.forEach((planId, idx) => { + if (idx === 0) + return; + const myIdx = $clone.addDependency({ + ...cloneFrom.getDepOptions(idx), + skipDeduplication: true, + }); + if (myIdx !== idx) { + throw new Error(`Failed to clone ${cloneFrom}; dependency indexes did not match: ${myIdx} !== ${idx}`); + } + }); + $clone.applyDepIds = [...cloneFrom.applyDepIds]; + $clone.isTrusted = cloneFrom.isTrusted; + // TODO: should `isUnique` only be set if mode matches? + $clone.isUnique = cloneFrom.isUnique; + $clone.isInliningForbidden = cloneFrom.isInliningForbidden; + for (const [k, v] of cloneFrom._symbolSubstitutes) { + $clone._symbolSubstitutes.set(k, v); + } + for (const v of cloneFrom.placeholders) { + $clone.placeholders.push(v); + } + for (const v of cloneFrom.deferreds) { + $clone.deferreds.push(v); + } + for (const [k, v] of cloneFrom.fixedPlaceholderValues) { + $clone.fixedPlaceholderValues.set(k, v); + } + for (const [k, v] of cloneFrom.relationJoins) { + $clone.relationJoins.set(k, v); + } + for (const v of cloneFrom.joins) { + $clone.joins.push(v); + } + for (const v of cloneFrom.conditions) { + $clone.conditions.push(v); + } + if (cloneFromMatchingMode) { + for (const v of cloneFromMatchingMode.selects) { + $clone.selects.push(v); + } + for (const v of cloneFromMatchingMode.groups) { + $clone.groups.push(v); + } + for (const v of cloneFromMatchingMode.havingConditions) { + $clone.havingConditions.push(v); + } + for (const v of cloneFromMatchingMode.orders) { + $clone.orders.push(v); + } + $clone.isOrderUnique = cloneFromMatchingMode.isOrderUnique; + $clone.firstStepId = cloneFromMatchingMode.firstStepId; + $clone.lastStepId = cloneFromMatchingMode.lastStepId; + $clone.fetchOneExtra = cloneFromMatchingMode.fetchOneExtra; + $clone.offsetStepId = cloneFromMatchingMode.offsetStepId; + // dependencies were already added, so we can just copy the dependency references + $clone.beforeStepId = cloneFromMatchingMode.beforeStepId; + $clone.afterStepId = cloneFromMatchingMode.afterStepId; + $clone.lowerIndexStepId = cloneFromMatchingMode.lowerIndexStepId; + $clone.upperIndexStepId = cloneFromMatchingMode.upperIndexStepId; + } + return $clone; + } + constructor(options) { + super(); + this.isSyncAndSafe = false; + /** + * When SELECTs get merged, symbols also need to be merged. The keys in this + * map are the symbols of PgSelects that don't exist any more, the values are + * symbols of the PgSelects that they were replaced with (which might also not + * exist in future, but we follow the chain so it's fine). + */ + this._symbolSubstitutes = new Map(); + // JOIN + this.relationJoins = new Map(); + this.joins = []; + // WHERE + this.conditions = []; + // GROUP BY + this.groups = []; + // HAVING + this.havingConditions = []; + // ORDER BY + this.orders = []; + this.isOrderUnique = false; + // LIMIT + this.firstStepId = null; + this.lastStepId = null; + this.fetchOneExtra = false; + /** When using natural pagination, this index is the lower bound (and should be excluded) */ + this.lowerIndexStepId = null; + /** When using natural pagination, this index is the upper bound (and should be excluded) */ + this.upperIndexStepId = null; + // OFFSET + this.offsetStepId = null; + // CURSORS + this.beforeStepId = null; + this.afterStepId = null; + // Connection + this.connectionDepId = null; + this.applyDepIds = []; + this.placeholders = []; + this.deferreds = []; + this.fixedPlaceholderValues = new Map(); + /** + * If true, we don't need to add any of the security checks from the + * resource; otherwise we must do so. Default false. + */ + this.isTrusted = false; + /** + * If true, we know at most one result can be matched for each identifier, so + * it's safe to do a `LEFT JOIN` without risk of returning duplicates. Default false. + */ + this.isUnique = false; + /** + * If true, we will not attempt to inline this into the parent query. + * Default false. + */ + this.isInliningForbidden = false; + /** + * The list of things we're selecting. + */ + this.selects = []; + this.locker = new pgLocker_js_1.PgLocker(this); + this._meta = Object.create(null); + this.nullCheckIndex = undefined; + this.needsGroups = false; + const { resource, parameters = resource.parameters, identifiers, args: inArgs, from: inFrom = null, hasImplicitOrder: inHasImplicitOrder, name, mode, joinAsLateral: inJoinAsLateral = false, forceIdentity: inForceIdentity = false, context: inContext, + // Clone only details + _internalCloneSymbol, _internalCloneAlias, } = options; + this.mode = mode ?? "normal"; + this.hasSideEffects = this.mode === "mutation"; + this.resource = resource; + // Since we're applying this to the original it doesn't make sense to + // also apply it to the clones. + if (_internalCloneSymbol === undefined) { + if (this.mode === "aggregate") { + this.locker.beforeLock("orderBy", () => this.locker.lockParameter("groupBy")); + } + } + this.contextId = this.addDependency(inContext ?? resource.executor.context()); + this.name = name ?? resource.name; + this.symbol = _internalCloneSymbol ?? Symbol(this.name); + this.alias = _internalCloneAlias ?? pg_sql2_1.default.identifier(this.symbol); + this.hasImplicitOrder = inHasImplicitOrder ?? resource.hasImplicitOrder; + this.joinAsLateral = inJoinAsLateral ?? !!this.resource.parameters; + this.forceIdentity = inForceIdentity; + { + if (!identifiers) { + throw new Error("Invalid construction of PgSelectStep"); + } + identifiers.forEach((identifier) => { + if (grafast_1.isDev) { + assertSensible(identifier.step); + } + const { step, matches } = identifier; + const codec = identifier.codec || identifier.step.pgCodec; + const expression = matches(this.alias); + const placeholder = this.placeholder(step, codec); + this.where((0, pg_sql2_1.default) `${expression} = ${placeholder}`); + }); + const ourFrom = inFrom ?? resource.from; + this.from = pgFromExpression(this, ourFrom, parameters, inArgs); + } + this.peerKey = this.resource.name; + debugPlanVerbose(`%s (%s) constructor (%s)`, this, this.name, this.mode); + return this; + } + toStringMeta() { + return (this.name + + (this.fetchOneExtra ? "+1" : "") + + (this.mode === "normal" ? "" : `(${this.mode})`)); + } + lock() { + this.locker.lock(); + } + setInliningForbidden(newInliningForbidden = true) { + this.isInliningForbidden = newInliningForbidden; + return this; + } + inliningForbidden() { + return this.isInliningForbidden; + } + setTrusted(newIsTrusted = true) { + if (this.locker.locked) { + throw new Error(`${this}: cannot toggle trusted once plan is locked`); + } + this.isTrusted = newIsTrusted; + return this; + } + trusted() { + return this.isTrusted; + } + /** + * Set this true ONLY if there can be at most one match for each of the + * identifiers. If you set this true when this is not the case then you may + * get unexpected results during inlining; if in doubt leave it at the + * default. + */ + setUnique(newUnique = true) { + if (this.locker.locked) { + throw new Error(`${this}: cannot toggle unique once plan is locked`); + } + this.isUnique = newUnique; + return this; + } + unique() { + return this.isUnique; + } + /** + * Join to a named relationship and return the alias that can be used in + * SELECT, WHERE and ORDER BY. + */ + singleRelation(relationIdentifier) { + const relation = this.resource.getRelation(relationIdentifier); + if (!relation) { + throw new Error(`${this.resource} does not have a relation named '${String(relationIdentifier)}'`); + } + if (!relation.isUnique) { + throw new Error(`${this.resource} relation '${String(relationIdentifier)}' is not unique so cannot be used with singleRelation`); + } + const { remoteResource, localAttributes, remoteAttributes } = relation; + // Join to this relation if we haven't already + const cachedAlias = this.relationJoins.get(relationIdentifier); + if (cachedAlias) { + return cachedAlias; + } + const alias = pg_sql2_1.default.identifier(Symbol(relationIdentifier)); + if (typeof remoteResource.from === "function") { + throw new Error("Callback sources not currently supported via singleRelation"); + } + this.joins.push({ + type: "left", + from: remoteResource.from, + alias, + conditions: localAttributes.map((col, i) => (0, pg_sql2_1.default) `${this.alias}.${pg_sql2_1.default.identifier(col)} = ${alias}.${pg_sql2_1.default.identifier(remoteAttributes[i])}`), + }); + this.relationJoins.set(relationIdentifier, alias); + return alias; + } + /** + * @experimental Please use `singleRelation` or `manyRelation` instead. + */ + join(spec) { + this.joins.push(this.scopedSQL(spec)); + } + getMeta(key) { + return (0, grafast_1.access)(this, ["m", key]); + } + /** + * Select an SQL fragment, returning the index the result will have. + * + * @internal + */ + selectAndReturnIndex(fragmentOrCb) { + const fragment = this.scopedSQL(fragmentOrCb); + if (!this.isArgumentsFinalized) { + throw new Error("Select added before arguments were finalized"); + } + // NOTE: it's okay to add selections after the plan is "locked" - lock only + // applies to which rows are being selected, not what is being queried + // about the rows. + // Optimisation: if we're already selecting this fragment, return the existing one. + const options = { + symbolSubstitutes: this._symbolSubstitutes, + }; + // PERF: performance of this sucks at planning time + const index = this.selects.findIndex((frag) => pg_sql2_1.default.isEquivalent(frag, fragment, options)); + if (index >= 0) { + return index; + } + return this.selects.push(fragment) - 1; + } + /** @internal */ + getNullCheckIndex() { + // PERF: if this isn't coming from a function _and_ it's not being inlined + // via a left-join or similar then we shouldn't need this and should be + // able to drop it. + if (this.nullCheckIndex !== undefined) { + return this.nullCheckIndex; + } + const nullCheckExpression = this.resource.getNullCheckExpression(this.alias); + if (nullCheckExpression) { + this.nullCheckIndex = this.selectAndReturnIndex(nullCheckExpression); + } + else { + this.nullCheckIndex = null; + } + return this.nullCheckIndex; + } + /** + * Finalizes this instance and returns a mutable clone; useful for + * connections/etc (e.g. copying `where` conditions but adding more, or + * pagination, or grouping, aggregates, etc) + */ + clone(mode) { + // Prevent any changes to our original to help avoid programming + // errors. + this.lock(); + return PgSelectStep.clone(this, mode); + } + connectionClone($connection, mode) { + const $plan = this.clone(mode); + // In case any errors are raised + $plan.connectionDepId = $plan.addDependency($connection); + return $plan; + } + where(rawCondition) { + if (this.locker.locked) { + throw new Error(`${this}: cannot add conditions once plan is locked ('where')`); + } + const condition = this.scopedSQL(rawCondition); + if (pg_sql2_1.default.isSQL(condition)) { + this.conditions.push(condition); + } + else { + switch (condition.type) { + case "attribute": { + this.conditions.push(this.scopedSQL((sql) => condition.callback(sql `${this.alias}.${sql.identifier(condition.attribute)}`))); + break; + } + default: { + const never = condition.type; + console.error("Unsupported condition: ", never); + throw new Error(`Unsupported condition`); + } + } + } + } + groupBy(group) { + this.locker.assertParameterUnlocked("groupBy"); + if (this.mode !== "aggregate") { + throw new grafast_1.SafeError(`Cannot add groupBy to a non-aggregate query`); + } + this.groups.push(this.scopedSQL(group)); + } + having(rawCondition) { + if (this.locker.locked) { + throw new Error(`${this}: cannot add having conditions once plan is locked ('having')`); + } + if (this.mode !== "aggregate") { + throw new grafast_1.SafeError(`Cannot add having to a non-aggregate query`); + } + const condition = this.scopedSQL(rawCondition); + if (pg_sql2_1.default.isSQL(condition)) { + this.havingConditions.push(condition); + } + else { + const never = condition; + console.error("Unsupported condition: ", never); + throw new Error(`Unsupported condition`); + } + } + orderBy(order) { + this.locker.assertParameterUnlocked("orderBy"); + this.orders.push(this.scopedSQL(order)); + } + setOrderIsUnique() { + if (this.locker.locked) { + throw new Error(`${this}: cannot set order unique once plan is locked`); + } + this.isOrderUnique = true; + } + apply($step) { + if ($step instanceof grafast_1.ConstantStep) { + $step.data(this); + } + else { + this.applyDepIds.push(this.addUnaryDependency($step)); + } + } + assertCursorPaginationAllowed() { + if (this.mode === "aggregate") { + throw new grafast_1.SafeError("Cannot use cursor pagination on an aggregate PgSelectStep"); + } + } + items() { + return this.operationPlan.cacheStep(this, "items", "" /* Digest of our arguments */, () => new PgSelectRowsStep(this)); + } + pageInfo($connectionPlan) { + this.assertCursorPaginationAllowed(); + this.lock(); + return (0, pgPageInfo_js_1.pgPageInfo)($connectionPlan); + } + getCursorDetails() { + this.needsCursor = true; + return (0, grafast_1.access)(this, "cursorDetails"); + } + getGroupDetails() { + this.needsGroups = true; + return (0, grafast_1.access)(this, "groupDetails"); + } + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + async execute(executionDetails) { + const { indexMap, count, values, extra: { eventEmitter }, stream, } = executionDetails; + const { meta, text, rawSqlValues, textForDeclare, rawSqlValuesForDeclare, identifierIndex, name, streamInitialCount, queryValues, shouldReverseOrder, first, last, cursorDetails, groupDetails, } = buildTheQuery({ + executionDetails, + // Stuff directly referencing dependency IDs + firstStepId: this.firstStepId, + lastStepId: this.lastStepId, + offsetStepId: this.offsetStepId, + afterStepId: this.afterStepId, + beforeStepId: this.beforeStepId, + applyDepIds: this.applyDepIds, + // Stuff referencing dependency IDs in a nested fashion + placeholders: this.placeholders, + deferreds: this.deferreds, + // Fixed stuff that is local to us (aka "StaticInfo") + ...PgSelectStep.getStaticInfo(this), + }); + if (first === 0 || last === 0) { + return (0, grafast_1.arrayOfLength)(count, NO_ROWS); + } + const contextDep = values[this.contextId]; + if (stream == null) { + const specs = indexMap((i) => { + const context = contextDep.at(i); + return { + // The context is how we'd handle different connections with different claims + context, + queryValues: identifierIndex != null + ? queryValues.map(({ dependencyIndex, codec }) => { + const val = values[dependencyIndex].at(i); + return val == null ? null : codec.toPg(val); + }) + : EMPTY_ARRAY, + }; + }); + const executeMethod = this.operationPlan.operation.operation === "query" + ? "executeWithCache" + : "executeWithoutCache"; + const executionResult = await this.resource[executeMethod](specs, { + text, + rawSqlValues, + identifierIndex, + name, + eventEmitter, + useTransaction: this.mode === "mutation", + }); + // debugExecute("%s; result: %c", this, executionResult); + return executionResult.values.map((allVals) => { + if ((0, grafast_1.isPromiseLike)(allVals)) { + // Must be an error + return allVals; + } + return createSelectResult(allVals, { + first, + last, + fetchOneExtra: this.fetchOneExtra, + shouldReverseOrder, + meta, + cursorDetails, + groupDetails, + }); + }); + } + else { + if (shouldReverseOrder !== false) { + throw new Error("shouldReverseOrder must be false for stream"); + } + if (!rawSqlValuesForDeclare || !textForDeclare) { + throw new Error("declare query must exist for stream"); + } + let specs = null; + if (text) { + specs = indexMap((i) => { + const context = contextDep.at(i); + return { + // The context is how we'd handle different connections with different claims + context, + queryValues: identifierIndex != null + ? queryValues.map(({ dependencyIndex, codec }) => { + const val = values[dependencyIndex].at(i); + return val == null ? null : codec.toPg(val); + }) + : EMPTY_ARRAY, + }; + }); + } + const initialFetchResult = specs + ? (await this.resource.executeWithoutCache(specs, { + text, + rawSqlValues, + identifierIndex, + eventEmitter, + })).values + : null; + const streamSpecs = indexMap((i) => { + const context = contextDep.at(i); + return { + // The context is how we'd handle different connections with different claims + context, + queryValues: identifierIndex != null + ? queryValues.map(({ dependencyIndex, codec }) => { + const val = values[dependencyIndex].at(i); + return val == null ? val : codec.toPg(val); + }) + : EMPTY_ARRAY, + }; + }); + const streams = (await this.resource.executeStream(streamSpecs, { + text: textForDeclare, + rawSqlValues: rawSqlValuesForDeclare, + identifierIndex, + eventEmitter, + })).streams; + return streams.map((iterable, idx) => { + if (!(0, grafast_1.isAsyncIterable)(iterable)) { + // Must be an error + return iterable; + } + if (!initialFetchResult) { + return { + hasMore: false, + items: iterable, + cursorDetails, + groupDetails, + m: meta, + }; + } + // Munge the initialCount records into the streams + const innerIterator = iterable[Symbol.asyncIterator](); + let i = 0; + let done = false; + const l = initialFetchResult[idx].length; + const mergedGenerator = { + async [Symbol.asyncDispose]() { + await this.return(undefined); + }, + next() { + if (done) { + return Promise.resolve({ value: undefined, done }); + } + else if (i < l) { + return Promise.resolve({ + value: initialFetchResult[idx][i++], + done, + }); + } + else if (streamInitialCount != null && l < streamInitialCount) { + done = true; + innerIterator.return?.(); + return Promise.resolve({ value: undefined, done }); + } + else { + return innerIterator.next(); + } + }, + return(value) { + done = true; + return (innerIterator.return?.(value) ?? + Promise.resolve({ value: undefined, done })); + }, + throw(e) { + done = true; + return (innerIterator.throw?.(e) ?? + Promise.resolve({ value: undefined, done })); + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + return { + hasMore: false, + items: mergedGenerator, + cursorDetails, + groupDetails, + m: meta, + }; + }); + } + } + finalize() { + // In case we have any lock actions in future: + this.lock(); + // Now we need to be able to mess with ourself, but be sure to lock again + // at the end. + this.locker.locked = false; + this.locker.locked = true; + super.finalize(); + } + deduplicate(peers) { + if (!this.isTrusted) { + this.resource.applyAuthorizationChecksToPlan(this); + this.isTrusted = true; + } + this.locker.lockAllParameters(); + return peers.filter(($p) => { + if ($p === this) { + return true; + } + const p = $p; + // If SELECT, FROM, JOIN, WHERE, ORDER, GROUP BY, HAVING, LIMIT, OFFSET + // all match with one of our peers then we can replace ourself with one + // of our peers. NOTE: we do _not_ merge SELECTs at this stage because + // that would require mapping, and mapping should not be done during + // deduplicate because it would interfere with optimize. So, instead, + // we try to ensure that as few selects as possible exist in the plan + // at this stage. + // Check FROM matches + if (p.resource !== this.resource) { + return false; + } + // Check mode matches + if (p.mode !== this.mode) { + return false; + } + // Since deduplicate runs before we have children, we do not need to + // check the symbol or alias matches. We do need to factor the different + // symbols into SQL equivalency checks though. + const symbolSubstitutes = new Map(); + const options = { symbolSubstitutes }; + if (typeof this.symbol === "symbol" && typeof p.symbol === "symbol") { + if (this.symbol !== p.symbol) { + symbolSubstitutes.set(this.symbol, p.symbol); + } + else { + // Fine :) + } + } + else if (this.symbol !== p.symbol) { + return false; + } + // Check PLACEHOLDERS match + if (!(0, pg_sql2_1.arraysMatch)(this.placeholders, p.placeholders, (a, b) => { + const equivalent = a.codec === b.codec && a.dependencyIndex === b.dependencyIndex; + if (equivalent) { + if (a.symbol !== b.symbol) { + // Make symbols appear equivalent + symbolSubstitutes.set(a.symbol, b.symbol); + } + } + return equivalent; + })) { + debugPlanVerbose("Refusing to deduplicate %c with %c because the placeholders don't match", this, p); + return false; + } + // Check DEFERREDs match + if (!(0, pg_sql2_1.arraysMatch)(this.deferreds, p.deferreds, (a, b) => { + const equivalent = a.dependencyIndex === b.dependencyIndex; + if (equivalent) { + if (a.symbol !== b.symbol) { + // Make symbols appear equivalent + symbolSubstitutes.set(a.symbol, b.symbol); + } + } + return equivalent; + })) { + debugPlanVerbose("Refusing to deduplicate %c with %c because the deferreds don't match", this, p); + return false; + } + const sqlIsEquivalent = (a, b) => pg_sql2_1.default.isEquivalent(a, b, options); + // Check trusted matches + if (p.trusted !== this.trusted) { + return false; + } + // Check inliningForbidden matches + if (p.inliningForbidden !== this.inliningForbidden) { + return false; + } + // Check FROM + if (!sqlIsEquivalent(p.from, this.from)) { + return false; + } + // Check SELECT matches + if (!(0, pg_sql2_1.arraysMatch)(this.selects, p.selects, sqlIsEquivalent)) { + return false; + } + // Check GROUPs match + if (!(0, pg_sql2_1.arraysMatch)(this.groups, p.groups, (a, b) => sqlIsEquivalent(a.fragment, b.fragment))) { + return false; + } + // Check HAVINGs match + if (!(0, pg_sql2_1.arraysMatch)(this.havingConditions, p.havingConditions, sqlIsEquivalent)) { + return false; + } + // Check ORDERs match + if (!(0, pg_sql2_1.arraysMatch)(this.orders, p.orders, (a, b) => { + if (a.direction !== b.direction) + return false; + if (a.nulls !== b.nulls) + return false; + if (a.attribute != null) { + if (b.attribute !== a.attribute) + return false; + // ENHANCEMENT: really should compare if the result is equivalent? + return a.callback === b.callback; + } + else { + if (b.attribute != null) + return false; + return sqlIsEquivalent(a.fragment, b.fragment); + } + })) { + return false; + } + const depsMatch = (myDepId, theirDepId) => this.maybeGetDep(myDepId) === p.maybeGetDep(theirDepId); + // Check LIMIT, OFFSET and CURSOR matches + if (!depsMatch(this.firstStepId, p.firstStepId) || + !depsMatch(this.lastStepId, p.lastStepId) || + !depsMatch(this.offsetStepId, p.offsetStepId) || + !depsMatch(this.lowerIndexStepId, p.lowerIndexStepId) || + !depsMatch(this.upperIndexStepId, p.upperIndexStepId)) { + return false; + } + // Check JOINs match + if (!(0, pg_sql2_1.arraysMatch)(this.joins, p.joins, (a, b) => joinMatches(a, b, sqlIsEquivalent))) { + debugPlanVerbose("Refusing to deduplicate %c with %c because the joins don't match", this, p); + return false; + } + // Check WHEREs match + if (!(0, pg_sql2_1.arraysMatch)(this.conditions, p.conditions, sqlIsEquivalent)) { + debugPlanVerbose("Refusing to deduplicate %c with %c because the conditions don't match", this, p); + return false; + } + debugPlanVerbose("Found that %c and %c are equivalent!", this, p); + return true; + }); + } + /** @internal */ + deduplicatedWith(replacement) { + if (typeof this.symbol === "symbol" && + typeof replacement.symbol === "symbol") { + if (this.symbol !== replacement.symbol) { + replacement._symbolSubstitutes.set(this.symbol, replacement.symbol); + } + else { + // Fine :) + } + } + if (this.fetchOneExtra) { + replacement.fetchOneExtra = true; + } + if (this.needsCursor) { + replacement.needsCursor = true; + } + } + getParentForInlining() { + /** + * These are the dependencies that are not PgClassExpressionSteps, we just + * need them to be at a higher level than $pgSelect + */ + const otherDeps = []; + /** + * This is the PgSelectStep that we would like to try and inline ourself + * into. If `undefined`, this hasn't been found yet. If `null`, this has + * been explicitly forbidden due to a mismatch of some kind. + */ + let $pgSelect = undefined; + /** + * This is the pgSelectSingle representing a single record from $pgSelect, + * it's used when remapping of keys is required after inlining ourself into + * $pgSelect. + */ + let $pgSelectSingle = undefined; + // Scan through the dependencies to find a suitable ancestor step to merge with + for (let dependencyIndex = 0, l = this.dependencies.length; dependencyIndex < l; dependencyIndex++) { + if (dependencyIndex === this.contextId) { + // We check myContext vs tsContext below; so lets assume it's fine + // for now. + continue; + } + let $dep = this.getDep(dependencyIndex); + if ($dep instanceof PgFromExpressionStep) { + const digest0 = $dep.getDigest(0); + if (digest0?.step && digest0.step instanceof pgClassExpression_js_1.PgClassExpressionStep) { + $dep = digest0.step; + } + } + if ($dep instanceof pgClassExpression_js_1.PgClassExpressionStep) { + const $depPgSelectSingle = $dep.getParentStep(); + if (!($depPgSelectSingle instanceof pgSelectSingle_js_1.PgSelectSingleStep)) { + continue; + } + const $depPgSelect = $depPgSelectSingle.getClassStep(); + if ($depPgSelect === this) { + throw new Error(`Recursion error - record plan ${$dep} is dependent on ${$depPgSelect}, and ${this} is dependent on ${$dep}`); + } + if ($depPgSelect.hasSideEffects) { + // It's a mutation; don't merge + continue; + } + // Don't allow merging across a stream/defer/subscription boundary + if (!(0, grafast_1.stepsAreInSamePhase)($depPgSelect, this)) { + continue; + } + // Don't want to make this a join as it can result in the order being + // messed up + if ($depPgSelect.hasImplicitOrder && + !this.joinAsLateral && + this.isUnique) { + continue; + } + /* + if (!planGroupsOverlap(this, t2)) { + // We're not in the same group (i.e. there's probably a @defer or + // @stream between us) - do not merge. + continue; + } + */ + if ($pgSelect === undefined && $pgSelectSingle === undefined) { + $pgSelectSingle = $depPgSelectSingle; + $pgSelect = $depPgSelect; + } + else if ($depPgSelect !== $pgSelect) { + debugPlanVerbose("Refusing to optimise %c due to dependency %c depending on different class (%c != %c)", this, $dep, $depPgSelect, $pgSelect); + $pgSelect = null; + break; + } + else if ($depPgSelectSingle !== $pgSelectSingle) { + debugPlanVerbose("Refusing to optimise %c due to parent dependency mismatch: %c != %c", this, $depPgSelectSingle, $pgSelectSingle); + $pgSelect = null; + break; + } + } + else { + otherDeps.push($dep); + } + } + // Check the contexts are the same + if ($pgSelect != null && $pgSelectSingle != null) { + const myContext = this.getDep(this.contextId); + const tsContext = $pgSelect.getDep($pgSelect.contextId); + if (myContext !== tsContext) { + debugPlanVerbose("Refusing to optimise %c due to own context dependency %c differing from tables context dependency %c (%c, %c)", this, myContext, tsContext, $pgSelect.dependencies[$pgSelect.contextId], $pgSelect); + $pgSelect = null; + } + } + // Check the dependencies can be moved across to `t` + if ($pgSelect != null && $pgSelectSingle != null) { + for (const dep of otherDeps) { + if ($pgSelect.canAddDependency(dep)) { + // All good; just move the dependency over + } + else { + debugPlanVerbose("Refusing to optimise %c due to dependency %c which cannot be added as a dependency of %c", this, dep, $pgSelect); + $pgSelect = null; + break; + } + } + } + if ($pgSelect != null && $pgSelectSingle != null) { + // Looks feasible. + if ($pgSelect.id === this.id) { + throw new Error(`Something's gone catastrophically wrong - ${this} is trying to merge with itself!`); + } + return { $pgSelect, $pgSelectSingle }; + } + else { + return null; + } + } + mergeSelectsWith(otherPlan) { + const actualKeyByDesiredKey = Object.create(null); + this.selects.forEach((frag, idx) => { + actualKeyByDesiredKey[idx] = otherPlan.selectAndReturnIndex(frag); + }); + return actualKeyByDesiredKey; + } + /** + * - Merge placeholders + * - Merge fixedPlaceholders + * - Merge deferreds + * - Merge _symbolSubstitutes + */ + mergePlaceholdersInto($target) { + for (const placeholder of this.placeholders) { + const { dependencyIndex, symbol, codec, alreadyEncoded } = placeholder; + const dep = this.getDep(dependencyIndex); + /* + * We have dependency `dep`. We're attempting to merge ourself into + * `otherPlan`. We have two situations we need to handle: + * + * 1. `dep` is not dependent on `otherPlan`, in which case we can add + * `dep` as a dependency to `otherPlan` without creating a cycle, or + * 2. `dep` is dependent on `otherPlan` (for example, it might be the + * result of selecting an expression in the `otherPlan`), in which + * case we should turn it into an SQL expression and inline that. + */ + // PERF: we know dep can't depend on otherPlan if + // `isStaticInputStep(dep)` or `dep`'s layerPlan is an ancestor of + // `otherPlan`'s layerPlan. + if ((0, grafast_1.stepAMayDependOnStepB)($target, dep)) { + // Either dep is a static input plan (which isn't dependent on anything + // else) or otherPlan is deeper than dep; either way we can use the dep + // directly within otherPlan. + const newPlanIndex = $target.addDependency(dep); + $target.placeholders.push({ + dependencyIndex: newPlanIndex, + codec, + symbol, + alreadyEncoded, + }); + } + else if (dep instanceof pgClassExpression_js_1.PgClassExpressionStep) { + // Replace with a reference. + $target.fixedPlaceholderValues.set(placeholder.symbol, dep.toSQL()); + } + else { + throw new Error(`Could not merge placeholder from unsupported plan type: ${dep}`); + } + } + for (const [sqlPlaceholder, placeholderValue,] of this.fixedPlaceholderValues.entries()) { + if ($target.fixedPlaceholderValues.has(sqlPlaceholder) && + $target.fixedPlaceholderValues.get(sqlPlaceholder) !== placeholderValue) { + throw new Error(`${$target} already has an identical placeholder with a different value when trying to mergePlaceholdersInto it from ${this}`); + } + $target.fixedPlaceholderValues.set(sqlPlaceholder, placeholderValue); + } + for (const { symbol, dependencyIndex } of this.deferreds) { + const dep = this.getDep(dependencyIndex); + if ((0, grafast_1.stepAMayDependOnStepB)($target, dep)) { + const newPlanIndex = $target.addDependency(dep); + $target.deferreds.push({ + dependencyIndex: newPlanIndex, + symbol, + }); + } + else if (dep instanceof PgFromExpressionStep) { + const newDep = $target.withLayerPlan(() => dep.inlineInto($target)); + const newPlanIndex = $target.addDependency(newDep); + $target.deferreds.push({ + dependencyIndex: newPlanIndex, + symbol, + }); + } + else { + throw new Error(`Could not merge placeholder from unsupported plan type: ${dep}`); + } + } + for (const [a, b] of this._symbolSubstitutes.entries()) { + if (grafast_1.isDev) { + if ($target._symbolSubstitutes.has(a) && + $target._symbolSubstitutes.get(a) !== b) { + throw new Error(`Conflict when setting a substitute whilst merging ${this} into ${$target}; symbol already has a substitute, and it's different.`); + } + } + $target._symbolSubstitutes.set(a, b); + } + } + optimize({ stream }) { + // In case we have any lock actions in future: + this.lock(); + // Inline ourself into our parent if we can. + let parentDetails; + if (!this.isInliningForbidden && + !this.hasSideEffects && + !stream && + !this.joins.some((j) => j.type !== "left") && + (parentDetails = this.getParentForInlining()) !== null && + parentDetails.$pgSelect.mode === "normal") { + const { $pgSelect, $pgSelectSingle } = parentDetails; + if (this.mode === "normal" && + this.isUnique && + this.firstStepId == null && + this.lastStepId == null && + this.offsetStepId == null && + // For uniques these should all pass anyway, but pays to be cautious.. + this.groups.length === 0 && + this.havingConditions.length === 0 && + this.orders.length === 0 && + !this.fetchOneExtra) { + // Allow, do it via left join + debugPlanVerbose("Merging %c into %c (via %c)", this, $pgSelect, $pgSelectSingle); + this.mergePlaceholdersInto($pgSelect); + const identifier = `joinDetailsFor${this.id}`; + $pgSelect.withLayerPlan(() => { + $pgSelect.apply(new PgSelectInlineApplyStep(identifier, false, { + staticInfo: PgSelectStep.getStaticInfo(this), + $first: this.maybeGetDep(this.firstStepId), + $last: this.maybeGetDep(this.lastStepId), + $offset: this.maybeGetDep(this.offsetStepId), + $after: this.maybeGetDep(this.afterStepId), + $before: this.maybeGetDep(this.beforeStepId), + applySteps: this.applyDepIds.map((depId) => this.getDep(depId)), + })); + }); + const $details = $pgSelect.getMeta(identifier); + return (0, grafast_1.lambda)([$details, $pgSelectSingle], pgInlineViaJoinTransform, true); + } + else { + /* + // TODO: this isn't really accurate plus it's expensive to calculate; fix it properly! + // An approximation of "belongs to" is: we're referencing a unique combination of columns on the parent. + const relationshipIsBelongsTo = $pgSelect.resource.uniques.some((u) => + u.attributes.every((remoteColumn) => { + const remoteColumnExpression = sql`${ + $pgSelect.alias + }.${sql.identifier(String(remoteColumn))}`; + return identifierMatchesExpressions.some((e) => + sql.isEquivalent(e, remoteColumnExpression), + ); + }), + ); + */ + const relationshipIsBelongsTo = true; + const allowed = ALWAYS_ALLOWED || + $pgSelectSingle.getAndFreezeIsUnary() || + (!$pgSelect.isUnique && relationshipIsBelongsTo); + if (allowed) { + // Add a nested select expression + const $__item = $pgSelectSingle.getItemStep(); + this.mergePlaceholdersInto($pgSelect); + const identifier = `subqueryDetailsFor${this.id}`; + $pgSelect.withLayerPlan(() => { + $pgSelect.apply(new PgSelectInlineApplyStep(identifier, true, { + staticInfo: PgSelectStep.getStaticInfo(this), + $first: this.maybeGetDep(this.firstStepId), + $last: this.maybeGetDep(this.lastStepId), + $offset: this.maybeGetDep(this.offsetStepId), + $after: this.maybeGetDep(this.afterStepId), + $before: this.maybeGetDep(this.beforeStepId), + applySteps: this.applyDepIds.map((depId) => this.getDep(depId)), + })); + }); + const $details = $pgSelect.getMeta(identifier); + return (0, grafast_1.lambda)([$details, $__item], pgInlineViaSubqueryTransform, true); + } + } + } + // PERF: we should serialize our `SELECT` clauses and then if any are + // identical we should omit the later copies and have them link back to the + // earliest version (resolve this in `execute` via mapping). + // TODO: have connection validate cursor + /* + if (this.connectionDepId === null) { + const $validate = pgValidateParsedCursor( + $parsedCursorPlan, + digest, + orderCount, + beforeOrAfter, + ); + this.addDependency($validate); + } else { + // To make the error be thrown in the right place, we should also add this error to our parent connection + const $connection = this.getDep>( + this.connectionDepId, + ); + $connection.addValidation(() => { + return pgValidateParsedCursor( + $parsedCursorPlan, + digest, + orderCount, + beforeOrAfter, + ); + }); + } + */ + return this; + } + /** + * Most likely you want `.single()` instead of this method. + * + * If this plan may only return one record, you can use `.singleAsRecord()` + * to return a plan that resolves to that record (rather than a list of + * records as it does currently). + * + * The main reason to use this instead of `.single()` is if you are + * paginating over a scalar and you truly need a PgSelectSingleStep interface + * e.g. so you can get the `count(*)` aggregate. + * + * Beware: if you call this and the database might actually return more than + * one record then you're potentially in for a Bad Time. + */ + singleAsRecord(options) { + this.setUnique(true); + return new pgSelectSingle_js_1.PgSelectSingleStep(this, (0, grafast_1.first)(this), options); + } + /** + * If this plan may only return one record, you can use `.single()` to return + * a plan that resolves to either that record (in the case of composite + * types) or the underlying scalar (in the case of a resource whose codec has + * no attributes). + * + * Beware: if you call this and the database might actually return more than + * one record then you're potentially in for a Bad Time. + */ + single(options) { + const $single = this.singleAsRecord(options); + const isScalar = !this.resource.codec.attributes; + return (isScalar ? $single.getSelfNamed() : $single); + } + row($row, options) { + return new pgSelectSingle_js_1.PgSelectSingleStep(this, $row, options); + } + /** + * When you return a plan in a situation where GraphQL is expecting a + * GraphQLList, it must implement the `.listItem()` method to return a plan + * for an individual item within this list. Grafast will automatically call + * this (possibly recursively) to pass to the plan resolvers on the children + * of this field. + * + * NOTE: Grafast handles the list indexes for you, so your list item plan + * should process just the single input list item. + * + * IMPORTANT: do not call `.listItem` from user code; it's only intended to + * be called by Grafast. + */ + listItem(itemPlan) { + const $single = new pgSelectSingle_js_1.PgSelectSingleStep(this, itemPlan); + const isScalar = !this.resource.codec.attributes; + return (isScalar ? $single.getSelfNamed() : $single); + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } + whereBuilder() { + return new pgCondition_js_1.PgCondition(this); + } + havingBuilder() { + return new pgCondition_js_1.PgCondition(this, true); + } + setMeta(key, value) { + this._meta[key] = value; + } + getMetaRaw(key) { + return this._meta[key]; + } + static getStaticInfo($source) { + return { + forceIdentity: $source.forceIdentity, + havingConditions: $source.havingConditions, + mode: $source.mode, + hasSideEffects: $source.hasSideEffects, + name: $source.name, + alias: $source.alias, + symbol: $source.symbol, + resource: $source.resource, + groups: $source.groups, + orders: $source.orders, + selects: $source.selects, + fetchOneExtra: $source.fetchOneExtra, + isOrderUnique: $source.isOrderUnique, + isUnique: $source.isUnique, + conditions: $source.conditions, + from: $source.from, + joins: $source.joins, + needsCursor: $source.needsCursor, + needsGroups: $source.needsGroups, + relationJoins: $source.relationJoins, + meta: $source._meta, + placeholderSymbols: $source.placeholders.map((p) => p.symbol), + deferredSymbols: $source.deferreds.map((p) => p.symbol), + fixedPlaceholderValues: $source.fixedPlaceholderValues, + _symbolSubstitutes: $source._symbolSubstitutes, + joinAsLateral: $source.joinAsLateral, + }; + } +} +exports.PgSelectStep = PgSelectStep; +class PgSelectRowsStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgSelectRowsStep", + }; } + constructor($pgSelect) { + super(); + this.isSyncAndSafe = false; + this.addDependency($pgSelect); + } + getClassStep() { + return this.getDepOptions(0).step; + } + listItem(itemPlan) { + return this.getClassStep().listItem(itemPlan); + } + deduplicate(_peers) { + // We don't have any properties, and dependencies is already checked, so we're the same as our kin. + return _peers; + } + // optimize() { + // const $access = access(this.getClassStep(), "items"); + // $access.isSyncAndSafe = false; + // return $access; + // } + execute(executionDetails) { + const pgSelect = executionDetails.values[0]; + return executionDetails.indexMap((i) => pgSelect.at(i).items); + } +} +exports.PgSelectRowsStep = PgSelectRowsStep; +function joinMatches(j1, j2, sqlIsEquivalent) { + if (j1.type === "cross") { + if (j2.type !== j1.type) { + return false; + } + if (!sqlIsEquivalent(j1.from, j2.from)) { + return false; + } + if (!sqlIsEquivalent(j1.alias, j2.alias)) { + return false; + } + return true; + } + else { + if (j2.type !== j1.type) { + return false; + } + if (!sqlIsEquivalent(j1.from, j2.from)) { + return false; + } + if (!sqlIsEquivalent(j1.alias, j2.alias)) { + return false; + } + if (!(0, pg_sql2_1.arraysMatch)(j1.conditions, j2.conditions, sqlIsEquivalent)) { + return false; + } + return true; + } +} +/** + * Apply a default order in case our default is not unique. + */ +function makeOrderUniqueIfPossible(info) { + // Never re-order aggregates + if (info.mode === "aggregate") + return; + // If we're already uniquely ordered, no need to order + if (info.isOrderUnique) + return; + // No need to order a unique record + if (info.isUnique) + return; + const { alias, resource: { uniques, codec: { attributes }, }, } = info; + const unique = uniques[0]; + // Nothing unique to order by + if (unique == null) + return; + for (const c of unique.attributes) { + info.orders.push({ + fragment: (0, pg_sql2_1.default) `${alias}.${pg_sql2_1.default.identifier(c)}`, + codec: attributes[c].codec, + direction: "ASC", + }); + } + info.isOrderUnique = true; +} +function pgSelect(options) { + return new PgSelectStep(options); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgSelect, "pgSelect"); +/** + * Turns a list of records (e.g. from PgSelectSingleStep.record()) back into a PgSelect. + */ +function pgSelectFromRecords(resource, records) { + return new PgSelectStep({ + resource, + identifiers: [], + from: (records) => (0, pg_sql2_1.default) `unnest(${records.placeholder})`, + args: [{ step: records, pgCodec: (0, codecs_js_1.listOfCodec)(resource.codec) }], + }); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgSelectFromRecords, "pgSelectFromRecords"); +function sqlFromArgDigests(digests) { + const args = digests.map((digest) => { + if (digest.name) { + return (0, pg_sql2_1.default) `${pg_sql2_1.default.identifier(digest.name)} := ${digest.placeholder}`; + } + else { + return digest.placeholder; + } + }); + return digests.length > 1 + ? pg_sql2_1.default.indent(pg_sql2_1.default.join(args, ",\n")) + : pg_sql2_1.default.join(args, ", "); +} +(0, grafast_1.exportAs)("@dataplan/pg", sqlFromArgDigests, "sqlFromArgDigests"); +// Previously: digestsFromArgumentSpecs; now combined +function pgFromExpression($target, baseFrom, inParameters = undefined, specs = []) { + if (typeof baseFrom !== "function") { + return baseFrom; + } + if (specs.length === 0) { + return baseFrom(); + } + if (specs.every((spec) => "placeholder" in spec && spec.placeholder != null)) { + return baseFrom(...specs); + } + const $placeholderable = $target.getPgRoot(); + let parameters; + if (!inParameters) { + const params = []; + for (const spec of specs) { + if (spec.step) { + if (spec.pgCodec) { + params.push({ + name: spec.name ?? null, + codec: spec.pgCodec, + required: false, + }); + } + else { + params.push({ + name: spec.name ?? null, + codec: spec.step.pgCodec, + required: false, + }); + } + } + else { + throw new Error(`Cannot use placeholder steps without passing accurate placeholders`); + } + } + parameters = params; + } + else { + parameters = inParameters; + } + if (specs.length > parameters.length) { + throw new Error(`Attempted to build function-like from expression for ${$placeholderable}, but insufficient parameter definitions (${parameters.length}) were provided for the arguments passed (${specs.length}).`); + } + const digests = []; + for (const spec of specs) { + if (spec.step) { + if (grafast_1.isDev) { + assertSensible(spec.step); + } + const { step, name } = spec; + const codec = "pgCodec" in spec ? spec.pgCodec : spec.step.pgCodec; + if (step.getAndFreezeIsUnary()) { + // It's a unary step; depend on it directly because it allows us to do + // things like not passing parameters to PostgreSQL functions where + // those parameters are optional. (Without this, we'd supply `null` + // to these parameters, which would result in a different behavior.) + digests.push({ + name, + step, + }); + } + else { + const placeholder = $placeholderable.placeholder(step, codec); + digests.push({ + name, + placeholder, + }); + } + } + else { + digests.push(spec); + } + } + return $placeholderable.withLayerPlan(() => $placeholderable.deferredSQL(new PgFromExpressionStep(baseFrom, parameters, digests))); +} +/** @internal */ +class PgFromExpressionStep extends grafast_1.UnbatchedStep { + constructor(from, parameters, digests) { + super(); + this.from = from; + this.parameters = parameters; + this.isSyncAndSafe = true; + if (this.getAndFreezeIsUnary() !== true) { + throw new Error(`PgFromExpressionStep must be unary`); + } + this.parameterAnalysis = generatePgParameterAnalysis(this.parameters); + this.digests = digests.map((digest) => { + if (digest.step) { + const { step, ...rest } = digest; + const depId = this.addDependency(digest.step); + return { ...rest, depId }; + } + else { + return digest; + } + }); + } + /** @internal */ + getDigest(index) { + const digest = this.digests[index]; + if (!digest) + return null; + if (digest.depId != null) { + const { depId, ...rest } = digest; + return { + ...rest, + step: this.getDepOptions(depId).step, + }; + } + else { + return digest; + } + } + /** @internal */ + inlineInto($target) { + return new PgFromExpressionStep(this.from, this.parameters, this.digests.map((d) => { + if (d.depId != null) { + const { depId, ...rest } = d; + const step = this.getDep(depId); + if (step instanceof pgClassExpression_js_1.PgClassExpressionStep) { + const $parent = step.getParentStep(); + if ($parent instanceof pgSelectSingle_js_1.PgSelectSingleStep) { + const $pgSelect = $parent.getClassStep(); + if ($pgSelect === $target) { + const { position, name } = rest; + return { + position, + name, + placeholder: step.expression, + }; + } + } + } + return { + ...rest, + step, + }; + } + else { + return d; + } + })); + } + deduplicate(peers) { + return peers.filter((p) => { + if (p.from !== this.from) { + return false; + } + if (!(0, pg_sql2_1.arraysMatch)(p.parameters, this.parameters, (a, b) => a.name === b.name && + a.codec === b.codec && + a.notNull === b.notNull && + a.required === b.required && + a.extensions === b.extensions)) { + return false; + } + if (!(0, pg_sql2_1.arraysMatch)(p.digests, this.digests, (a, b) => { + return (a.name === b.name && + a.position === b.position && + a.depId === b.depId && + a.placeholder === b.placeholder); + })) { + return false; + } + return true; + }); + } + unbatchedExecute(_extra, ...deps) { + const digests = this.digests.map((d) => d.depId != null ? { ...d, value: deps[d.depId] } : d); + return pgFromExpressionRuntime(this.from, this.parameters, digests, this.parameterAnalysis); + } +} +const $$generationCheck = Symbol("Used parameterAnalysis()"); +function generatePgParameterAnalysis(parameters) { + const parameterByName = Object.create(null); + let indexAfterWhichAllArgsAreNamed = 0; + for (let i = 0, l = parameters.length; i < l; i++) { + const param = parameters[i]; + if (param.name != null) { + parameterByName[param.name] = param; + } + // Note that `name = ''` counts as having no name. + if (!param.name) { + indexAfterWhichAllArgsAreNamed = i + 1; + } + } + return { + /** DO NOT GENERATE THIS OBJECT YOURSELF! Use generateParameterAnalysis(parameters) */ + [$$generationCheck]: parameters, + parameterByName, + indexAfterWhichAllArgsAreNamed, + }; +} +function pgFromExpressionRuntime(from, parameters, digests, parameterAnalysis = generatePgParameterAnalysis(parameters)) { + if (!parameterAnalysis[$$generationCheck]) { + throw new Error(`You must not generate the parameter analysis yourself; use generateParameterAnalysis(parameters)`); + } + if (parameterAnalysis[$$generationCheck] !== parameters) { + throw new Error(`This parameter analysis was produced for a different set of parameters; perhaps you sliced the array?`); + } + const { parameterByName, indexAfterWhichAllArgsAreNamed } = parameterAnalysis; + /** + * If true, we can only use named parameters now. Set this if we skip an + * entry, or if the input has a name that doesn't match the parameter name. + */ + let namedOnly = false; + let argIndex = 0; + const args = []; + for (let digestIndex = 0, digestsCount = digests.length; digestIndex < digestsCount; digestIndex++) { + const digest = digests[digestIndex]; + if (!namedOnly && + // Note that name can be the empty string, we treat that as "no name" + digest.name && + parameters[digestIndex].name !== digest.name) { + namedOnly = true; + } + if (namedOnly && !digest.name) { + throw new Error(`Cannot have unnamed argument after named arguments at index ${digestIndex}`); + } + const parameter = namedOnly + ? parameterByName[digest.name] + : parameters[digestIndex]; + if (!parameter) { + throw new Error(`Could not determine parameter for argument at index ${digestIndex}${digest.name ? ` (${digest.name})` : ""}`); + } + let sqlValue; + if (digest.placeholder) { + // It's a placeholder, always use it + sqlValue = digest.placeholder; + } + else { + const dep = digest.value; + if (dep === undefined && + (namedOnly || + (!parameter.required && + digestIndex >= indexAfterWhichAllArgsAreNamed - 1))) { + namedOnly = true; + continue; + } + sqlValue = (0, codecs_js_1.sqlValueWithCodec)(dep ?? null, parameter.codec); + } + if (namedOnly) { + args.push({ + placeholder: sqlValue, + name: parameter.name, + }); + } + else { + args.push({ + placeholder: sqlValue, + position: argIndex++, + }); + } + } + return from(...args); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgFromExpression, "pgFromExpression"); +function getFragmentAndCodecFromOrder(alias, order, codecOrCodecs) { + if (order.attribute != null) { + const colFrag = (0, pg_sql2_1.default) `${alias}.${pg_sql2_1.default.identifier(order.attribute)}`; + const isArray = Array.isArray(codecOrCodecs); + const col = (isArray ? codecOrCodecs[0] : codecOrCodecs).attributes[order.attribute]; + const colCodec = col.codec; + if (isArray) { + for (const codec of codecOrCodecs) { + if (codec.attributes[order.attribute].codec !== colCodec) { + throw new Error(`Order by attribute '${order.attribute}' not allowed - this attribute has different codecs (${codec.attributes[order.attribute].codec.name} != ${colCodec.name}) in different parents (${codecOrCodecs[0].name} vs ${codec.name})`); + } + } + } + const isNullable = !col.notNull && !colCodec.notNull; + return order.callback + ? order.callback(colFrag, colCodec, isNullable) + : [colFrag, colCodec, isNullable]; + } + else { + return [order.fragment, order.codec, order.nullable]; + } +} +function calculateOrderBySQL(params) { + const { reverse, orders: rawOrders, alias, codec } = params; + const orders = reverse + ? rawOrders.map((o) => ({ + ...o, + direction: o.direction === "ASC" ? "DESC" : "ASC", + nulls: o.nulls === "LAST" + ? "FIRST" + : o.nulls === "FIRST" + ? "LAST" + : o.nulls, + })) + : rawOrders; + return orders.length > 0 + ? (0, pg_sql2_1.default) `\norder by ${pg_sql2_1.default.join(orders.map((o) => { + const [frag] = getFragmentAndCodecFromOrder(alias, o, codec); + return (0, pg_sql2_1.default) `${frag} ${o.direction === "ASC" ? (0, pg_sql2_1.default) `asc` : (0, pg_sql2_1.default) `desc`}${o.nulls === "LAST" + ? (0, pg_sql2_1.default) ` nulls last` + : o.nulls === "FIRST" + ? (0, pg_sql2_1.default) ` nulls first` + : pg_sql2_1.default.blank}`; + }), ", ")}` + : pg_sql2_1.default.blank; +} +function buildTheQueryCore(rawInfo) { + const info = { + ...rawInfo, + // Make mutable: + selects: [...rawInfo.selects], + conditions: [...rawInfo.conditions], + orders: [...rawInfo.orders], + groups: [...rawInfo.groups], + havingConditions: [...rawInfo.havingConditions], + relationJoins: new Map(rawInfo.relationJoins), + joins: [...rawInfo.joins], + meta: { __proto__: null, ...rawInfo.meta }, + // Will be populated by applyConditionFromCursor + cursorLower: null, + cursorUpper: null, + cursorDigest: null, + cursorIndicies: rawInfo.needsCursor ? [] : null, + groupIndicies: rawInfo.needsGroups ? [] : null, + // Will be populated by applyCommonPaginationStuff + first: null, + last: null, + offset: null, + shouldReverseOrder: false, + }; + function selectAndReturnIndex(expression) { + const existingIndex = info.selects.findIndex((s) => pg_sql2_1.default.isEquivalent(s, expression)); + if (existingIndex >= 0) + return existingIndex; + return info.selects.push(expression) - 1; + } + const meta = info.meta; + const queryBuilder = { + alias: info.alias, + [pg_sql2_1.$$toSQL]() { + return info.alias; + }, + selectAndReturnIndex, + join(spec) { + info.joins.push(spec); + }, + setMeta(key, value) { + meta[key] = value; + }, + getMetaRaw(key) { + return meta[key]; + }, + orderBy(spec) { + if (info.mode !== "aggregate") { + info.orders.push(spec); + } + else { + // Throw it away? + // Maybe later we can use it in the aggregates themself - e.g. `array_agg(... order by )` + } + }, + setOrderIsUnique() { + info.isOrderUnique = true; + }, + singleRelation(relationIdentifier) { + // NOTE: this is almost an exact copy of the same method on PgSelectStep, + // except using `info`... We should harmonize them. + const relation = info.resource.getRelation(relationIdentifier); + if (!relation) { + throw new Error(`${info.resource} does not have a relation named '${String(relationIdentifier)}'`); + } + if (!relation.isUnique) { + throw new Error(`${info.resource} relation '${String(relationIdentifier)}' is not unique so cannot be used with singleRelation`); + } + const { remoteResource, localAttributes, remoteAttributes } = relation; + // Join to this relation if we haven't already + const cachedAlias = info.relationJoins.get(relationIdentifier); + if (cachedAlias) { + return cachedAlias; + } + const alias = pg_sql2_1.default.identifier(Symbol(relationIdentifier)); + if (typeof remoteResource.from === "function") { + throw new Error("Callback sources not currently supported via singleRelation"); + } + info.joins.push({ + type: "left", + from: remoteResource.from, + alias, + conditions: localAttributes.map((col, i) => (0, pg_sql2_1.default) `${info.alias}.${pg_sql2_1.default.identifier(col)} = ${alias}.${pg_sql2_1.default.identifier(remoteAttributes[i])}`), + }); + info.relationJoins.set(relationIdentifier, alias); + return alias; + }, + where(condition) { + if (pg_sql2_1.default.isSQL(condition)) { + info.conditions.push(condition); + } + else { + switch (condition.type) { + case "attribute": { + info.conditions.push(condition.callback((0, pg_sql2_1.default) `${info.alias}.${pg_sql2_1.default.identifier(condition.attribute)}`)); + break; + } + default: { + const never = condition.type; + console.error("Unsupported condition: ", never); + throw new Error(`Unsupported condition`); + } + } + } + }, + groupBy(spec) { + info.groups.push(spec); + }, + having(condition) { + if (info.mode !== "aggregate") { + throw new grafast_1.SafeError(`Cannot add having to a non-aggregate query`); + } + if (pg_sql2_1.default.isSQL(condition)) { + info.havingConditions.push(condition); + } + else { + const never = condition; + console.error("Unsupported condition: ", never); + throw new Error(`Unsupported condition`); + } + }, + whereBuilder() { + return new pgCondition_js_1.PgCondition(this); + }, + havingBuilder() { + return new pgCondition_js_1.PgCondition(this, true); + }, + }; + const { count, stream, values } = info.executionDetails; + for (const applyDepId of info.applyDepIds) { + const val = values[applyDepId].unaryValue(); + if (Array.isArray(val)) { + val.forEach((v) => v?.(queryBuilder)); + } + else { + val?.(queryBuilder); + } + } + // beforeLock("orderBy"): Now the runtime orders/etc have been added, mutate `orders` to be unique + makeOrderUniqueIfPossible(info); + // afterLock("orderBy"): Now the runtime orders/etc have been performed, + const after = (0, pgStmt_js_1.getUnary)(values, info.afterStepId); + const before = (0, pgStmt_js_1.getUnary)(values, info.beforeStepId); + if (info.needsCursor || after != null || before != null) { + info.cursorDigest = getOrderByDigest(info); + } + // PERF: only calculate this if needed + const { sql: trueOrderBySQL } = buildOrderBy(info, false); + if (info.cursorIndicies) { + // PERF: calculate cursorDigest here instead? + if (info.orders.length > 0) { + for (const o of info.orders) { + const [frag, codec] = getFragmentAndCodecFromOrder(info.alias, o, info.resource.codec); + info.cursorIndicies.push({ + index: selectAndReturnIndex(codec.castFromPg + ? codec.castFromPg(frag, o.nullable === false) + : (0, pg_sql2_1.default) `${frag}::text`), + codec, + }); + } + } + else { + // No ordering; so use row number + info.cursorIndicies.push({ + index: selectAndReturnIndex((0, pg_sql2_1.default) `(row_number() over (partition by 1))::text`), + codec: codecs_js_1.TYPES.int, + }); + } + } + if (info.groupIndicies) { + if (info.groups.length > 0) { + for (const o of info.groups) { + const { codec, fragment, guaranteedNotNull = false } = o; + info.groupIndicies.push({ + index: selectAndReturnIndex(codec.castFromPg + ? codec.castFromPg(fragment, guaranteedNotNull) + : (0, pg_sql2_1.default) `${fragment}::text`), + codec, + }); + } + } + else { + // No grouping + } + } + // apply conditions from the cursor + applyConditionFromCursor(info, "after", after); + applyConditionFromCursor(info, "before", before); + (0, pgStmt_js_1.applyCommonPaginationStuff)(info); + /**************************************** + * * + * ALL MUTATION NOW COMPLETE * + * * + ****************************************/ + return { + count, + trueOrderBySQL, + info, + stream, + meta, + }; +} +function buildTheQuery(rawInfo) { + const { placeholders, deferreds, fixedPlaceholderValues, _symbolSubstitutes, } = rawInfo; + const { count, trueOrderBySQL, info, stream, meta } = buildTheQueryCore(rawInfo); + const { name, hasSideEffects, forceIdentity, first, last, shouldReverseOrder, cursorDigest, cursorIndicies, groupIndicies, } = info; + const combinedInfo = { + ...info, + // Merge things necessary only for query building back in + placeholders, + deferreds, + fixedPlaceholderValues, + _symbolSubstitutes, + }; + const { queryValues, placeholderValues, identifiersSymbol, identifiersAlias, } = (0, pgStmt_js_1.makeValues)(combinedInfo, name); + // Handle fixed placeholder values + for (const [key, value] of fixedPlaceholderValues) { + placeholderValues.set(key, value); + } + const forceOrder = (stream && info.shouldReverseOrder) || false; + const makeQuery = ({ limit, offset, options, } = {}) => { + if (queryValues.length > 0 || + (count !== 1 && (forceIdentity || hasSideEffects))) { + const extraSelects = []; + const identifierIndexOffset = extraSelects.push((0, pg_sql2_1.default) `${identifiersAlias}.idx`) - 1; + // PERF: try and re-use existing trueOrderBySQL selection? + const rowNumberIndexOffset = forceOrder || limit != null || offset != null + ? extraSelects.push((0, pg_sql2_1.default) `row_number() over (${pg_sql2_1.default.indent(trueOrderBySQL)})`) - 1 + : -1; + const { sql: baseQuery, extraSelectIndexes } = buildQuery(info, { + extraSelects, + forceOrder, + }); + const identifierIndex = extraSelectIndexes[identifierIndexOffset]; + const rowNumberIndex = rowNumberIndexOffset >= 0 + ? extraSelectIndexes[rowNumberIndexOffset] + : null; + const innerWrapper = pg_sql2_1.default.identifier(Symbol("stream_wrapped")); + /* + * This wrapper around the inner query is for @stream: + * + * - stream must be in the correct order, so if we have + * `shouldReverseOrder` then we must reverse the order + * ourselves here; + * - stream can have an `initialCount` - we want to satisfy all + * `initialCount` records from _each identifier group_ before we then + * resolve the remaining records. + * + * NOTE: if neither of the above cases apply then we can skip this, + * even for @stream. + */ + const wrappedInnerQuery = rowNumberIndex != null || + limit != null || + (offset != null && offset > 0) + ? (0, pg_sql2_1.default) `select *\nfrom (${pg_sql2_1.default.indent(baseQuery)}) ${innerWrapper}\norder by ${innerWrapper}.${pg_sql2_1.default.identifier(String(rowNumberIndex))}${limit != null ? (0, pg_sql2_1.default) `\nlimit ${pg_sql2_1.default.literal(limit)}` : pg_sql2_1.default.blank}${offset != null && offset > 0 + ? (0, pg_sql2_1.default) `\noffset ${pg_sql2_1.default.literal(offset)}` + : pg_sql2_1.default.blank}` + : baseQuery; + // PERF: if the query does not have a limit/offset; should we use an + // `inner join` in a flattened query instead of a wrapped query with + // `lateral`? + const wrapperSymbol = Symbol(name + "_result"); + const wrapperAlias = pg_sql2_1.default.identifier(wrapperSymbol); + const { text: lateralText, values: rawSqlValues, [pg_sql2_1.$$symbolToIdentifier]: symbolToIdentifier, } = pg_sql2_1.default.compile((0, pg_sql2_1.default) `lateral (${pg_sql2_1.default.indent(wrappedInnerQuery)}) as ${wrapperAlias}`, options); + const identifiersAliasText = symbolToIdentifier.get(identifiersSymbol); + const wrapperAliasText = symbolToIdentifier.get(wrapperSymbol); + /* + * IMPORTANT: these wrapper queries are necessary so that queries + * that have a limit/offset get the limit/offset applied _per + * identifier group_; that's why this cannot just be another "from" + * clause. + */ + const text = `\ +select ${wrapperAliasText}.* +from (select ids.ordinality - 1 as idx${queryValues.length > 0 + ? `, ${queryValues + .map(({ codec }, idx) => { + return `(ids.value->>${idx})::${pg_sql2_1.default.compile(codec.sqlType).text} as "id${idx}"`; + }) + .join(", ")}` + : ""} from json_array_elements($${rawSqlValues.length + 1}::json) with ordinality as ids) as ${identifiersAliasText}, +${lateralText};`; + return { text, rawSqlValues, identifierIndex }; + } + else if ((limit != null && limit >= 0) || + (offset != null && offset > 0)) { + // ENHANCEMENT: make this nicer; combine with the `if` branch above? + const extraSelects = []; + const rowNumberIndexOffset = forceOrder || limit != null || offset != null + ? extraSelects.push((0, pg_sql2_1.default) `row_number() over (${pg_sql2_1.default.indent(trueOrderBySQL)})`) - 1 + : -1; + const { sql: baseQuery, extraSelectIndexes } = buildQuery(info, { + extraSelects, + }); + const rowNumberIndex = rowNumberIndexOffset >= 0 + ? extraSelectIndexes[rowNumberIndexOffset] + : null; + const innerWrapper = pg_sql2_1.default.identifier(Symbol("stream_wrapped")); + /* + * This wrapper around the inner query is for @stream: + * + * - stream must be in the correct order, so if we have + * `shouldReverseOrder` then we must reverse the order + * ourselves here; + * - stream can have an `initialCount` - we want to satisfy all + * `initialCount` records from _each identifier group_ before we then + * resolve the remaining records. + * + * NOTE: if neither of the above cases apply then we can skip this, + * even for @stream. + */ + const wrappedInnerQuery = rowNumberIndex != null || + limit != null || + (offset != null && offset > 0) + ? (0, pg_sql2_1.default) `select *\nfrom (${pg_sql2_1.default.indent(baseQuery)}) ${innerWrapper}\norder by ${innerWrapper}.${pg_sql2_1.default.identifier(String(rowNumberIndex))}${limit != null ? (0, pg_sql2_1.default) `\nlimit ${pg_sql2_1.default.literal(limit)}` : pg_sql2_1.default.blank}${offset != null && offset > 0 + ? (0, pg_sql2_1.default) `\noffset ${pg_sql2_1.default.literal(offset)}` + : pg_sql2_1.default.blank};` + : (0, pg_sql2_1.default) `${baseQuery};`; + const { text, values: rawSqlValues } = pg_sql2_1.default.compile(wrappedInnerQuery, options); + return { text, rawSqlValues, identifierIndex: null }; + } + else { + const { sql: query } = buildQuery(info, {}); + const { text, values: rawSqlValues } = pg_sql2_1.default.compile((0, pg_sql2_1.default) `${query};`, options); + return { text, rawSqlValues, identifierIndex: null }; + } + }; + const cursorDetails = cursorDigest != null && cursorIndicies != null + ? { digest: cursorDigest, indicies: cursorIndicies } + : undefined; + const groupDetails = groupIndicies + ? { indicies: groupIndicies } + : undefined; + if (stream) { + // PERF: should use the queryForSingle optimization in here too + // When streaming we can't reverse order in JS - we must do it in the DB. + if (stream.initialCount > 0) { + /* + * Here our stream is constructed of two parts - an + * `initialFetchQuery` to satisfy the `initialCount` and then a + * `streamQuery` to build the PostgreSQL cursor for fetching the + * remaining results across all groups. + */ + const { text, rawSqlValues, identifierIndex: initialFetchIdentifierIndex, } = makeQuery({ + limit: stream.initialCount, + options: { placeholderValues }, + }); + const { text: textForDeclare, rawSqlValues: rawSqlValuesForDeclare, identifierIndex: streamIdentifierIndex, } = makeQuery({ + offset: stream.initialCount, + options: { placeholderValues }, + }); + if (initialFetchIdentifierIndex !== streamIdentifierIndex) { + throw new Error(`GrafastInternalError<3760b02e-dfd0-4924-bf62-2e0ef9399605>: expected identifier indexes to match`); + } + const identifierIndex = initialFetchIdentifierIndex; + return { + meta, + text, + rawSqlValues, + textForDeclare, + rawSqlValuesForDeclare, + identifierIndex, + shouldReverseOrder: false, + streamInitialCount: stream.initialCount, + queryValues, + first, + last, + cursorDetails, + groupDetails, + }; + } + else { + /* + * Unlike the above case, here we have an `initialCount` of zero so + * we can skip the `initialFetchQuery` and jump straight to the + * `streamQuery`. + */ + const { text: textForDeclare, rawSqlValues: rawSqlValuesForDeclare, identifierIndex: streamIdentifierIndex, } = makeQuery({ + offset: 0, + options: { + placeholderValues, + }, + }); + return { + meta, + // This is a hack since this is the _only_ place we don't want + // `text`; loosening the types would risk us forgetting in more + // places (and cause us to do excessive type safety checks) so we + // use an explicit empty string to mark this. + text: "", + rawSqlValues: [], + textForDeclare, + rawSqlValuesForDeclare, + identifierIndex: streamIdentifierIndex, + shouldReverseOrder: false, + streamInitialCount: 0, + queryValues, + first, + last, + cursorDetails, + groupDetails, + }; + } + } + else { + const { text, rawSqlValues, identifierIndex } = makeQuery({ + options: { + placeholderValues, + }, + }); + return { + meta, + text, + rawSqlValues, + identifierIndex, + shouldReverseOrder, + name: hash(text), + queryValues, + first, + last, + cursorDetails, + groupDetails, + }; + } +} +class PgSelectInlineApplyStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgSelectInlineApplyStep", + }; } + constructor(identifier, viaSubquery, details) { + super(); + this.identifier = identifier; + this.viaSubquery = viaSubquery; + this.isSyncAndSafe = true; + const { staticInfo, $first, $last, $offset, $after, $before, applySteps } = details; + this.staticInfo = staticInfo; + this.firstStepId = $first ? this.addUnaryDependency($first) : null; + this.lastStepId = $last ? this.addUnaryDependency($last) : null; + this.offsetStepId = $offset ? this.addUnaryDependency($offset) : null; + this.afterStepId = $after ? this.addUnaryDependency($after) : null; + this.beforeStepId = $before ? this.addUnaryDependency($before) : null; + this.applyDepIds = applySteps.map(($apply) => this.addUnaryDependency($apply)); + } + execute(executionDetails) { + if (executionDetails.count !== 1) { + throw new Error(`PgSelectInlineApplyStep must be unary!`); + } + return [ + (queryBuilder) => { + const { parts, info, meta } = buildPartsForInlining({ + executionDetails, + // My own dependencies + firstStepId: this.firstStepId, + lastStepId: this.lastStepId, + offsetStepId: this.offsetStepId, + afterStepId: this.afterStepId, + beforeStepId: this.beforeStepId, + applyDepIds: this.applyDepIds, + // Data that's independent of dependencies + ...this.staticInfo, + }); + const { cursorDigest, cursorIndicies, groupIndicies } = info; + const cursorDetails = cursorDigest != null && cursorIndicies != null + ? { digest: cursorDigest, indicies: cursorIndicies } + : undefined; + const groupDetails = groupIndicies != null ? { indicies: groupIndicies } : undefined; + if (this.viaSubquery) { + const { first, last, fetchOneExtra, meta, shouldReverseOrder } = info; + const { sql: baseQuery } = buildQueryFromParts(parts, { + asArray: true, + }); + const selectIndex = queryBuilder.selectAndReturnIndex( + // 's' for 'subquery' + (0, pg_sql2_1.default) `array(${pg_sql2_1.default.indent(baseQuery)})::text`); + const details = { + cursorDetails, + groupDetails, + shouldReverseOrder, + fetchOneExtra, + selectIndex, + first, + last, + meta, + }; + queryBuilder.setMeta(this.identifier, details); + } + else { + const { whereConditions, joins, selects } = parts; + const { from, alias, resource, joinAsLateral } = this.staticInfo; + const where = buildWhereOrHaving((0, pg_sql2_1.default) `/* WHERE becoming ON */`, whereConditions); + queryBuilder.join({ + type: "left", + from, + alias, + attributeNames: resource.codec.attributes ? pg_sql2_1.default.blank : (0, pg_sql2_1.default) `(v)`, + // Note the WHERE is now part of the JOIN condition (since + // it's a LEFT JOIN). + conditions: where !== pg_sql2_1.default.blank ? [where] : [], + lateral: joinAsLateral, + }); + for (const join of joins) { + queryBuilder.join(join); + } + const selectIndexes = selects.map((s) => queryBuilder.selectAndReturnIndex(s)); + const details = { + selectIndexes, + cursorDetails, + groupDetails, + meta, + }; + queryBuilder.setMeta(this.identifier, details); + } + }, + ]; + } +} +function buildPartsForInlining(rawInfo) { + const coreResult = buildTheQueryCore(rawInfo); + return { + ...coreResult, + parts: buildQueryParts(coreResult.info, {}), + }; +} +function applyConditionFromCursor(info, beforeOrAfter, parsedCursor) { + if (parsedCursor == null) + return; + const { orders, isOrderUnique, alias, resource, cursorDigest } = info; + if (cursorDigest == null) { + throw new Error(`Cursor passed, but could not determine order digest.`); + } + const orderCount = orders.length; + // Cursor validity check + (0, pgValidateParsedCursor_js_1.validateParsedCursor)(parsedCursor, cursorDigest, orderCount, beforeOrAfter); + if (orderCount === 0) { + // Natural pagination `['natural', N]` + const n = parsedCursor[1]; + if (beforeOrAfter === "after") { + info.cursorLower = n; + } + else { + info.cursorUpper = n; + } + return; + } + if (!isOrderUnique) { + // ENHANCEMENT: make this smarter + throw new grafast_1.SafeError(`Can only use '${beforeOrAfter}' cursor when there is a unique defined order.`); + } + const condition = (i = 0) => { + const order = orders[i]; + const [orderFragment, orderCodec, nullable] = getFragmentAndCodecFromOrder(alias, order, resource.codec); + const { nulls, direction } = order; + const sqlValue = (0, pg_sql2_1.default) `${pg_sql2_1.default.value(parsedCursor[i + 1])}::${orderCodec.sqlType}`; + // For the truth-table of this code, have a look at this spreadsheet: + // https://docs.google.com/spreadsheets/d/1m5H-4IRAjhx_Z8v7nd2wMTbmx1dOBof9IroW3WUYE7s/edit?usp=sharing + const gt = (direction === "ASC" && beforeOrAfter === "after") || + (direction === "DESC" && beforeOrAfter === "before"); + const nullsFirst = nulls === "FIRST" + ? true + : nulls === "LAST" + ? false + : // NOTE: PostgreSQL states that by default DESC = NULLS FIRST, + // ASC = NULLS LAST + direction === "DESC"; + // Simple less than or greater than + let fragment = (0, pg_sql2_1.default) `${orderFragment} ${gt ? (0, pg_sql2_1.default) `>` : (0, pg_sql2_1.default) `<`} ${sqlValue}`; + // Nullable, so now handle if one is null but the other isn't + if (nullable) { + const useAIsNullAndBIsNotNull = (nullsFirst && beforeOrAfter === "after") || + (!nullsFirst && beforeOrAfter === "before"); + const oneIsNull = useAIsNullAndBIsNotNull + ? (0, pg_sql2_1.default) `${orderFragment} is null and ${sqlValue} is not null` + : (0, pg_sql2_1.default) `${orderFragment} is not null and ${sqlValue} is null`; + fragment = (0, pg_sql2_1.default) `((${fragment}) or (${oneIsNull}))`; + } + // Finally handle if they're equal - recurse + if (i < orderCount - 1) { + const equals = nullable ? (0, pg_sql2_1.default) `is not distinct from` : (0, pg_sql2_1.default) `=`; + const aEqualsB = (0, pg_sql2_1.default) `${orderFragment} ${equals} ${sqlValue}`; + fragment = (0, pg_sql2_1.default) `(${fragment}) +or ( +${pg_sql2_1.default.indent `${aEqualsB} +and ${pg_sql2_1.default.indent(pg_sql2_1.default.parens(condition(i + 1)))}`} +)`; + } + return fragment; + }; + /* + * We used to allow the cursor to be null or string; but we now _only_ run + * this code when the `evalIs(null) || evalIs(undefined)` returns false. So + * we know that the cursor must exist, so therefore we don't need to add + * this extra condition. + // If the cursor is null then no condition is needed + const cursorIsNullPlaceholder = this.placeholder( + lambda($parsedCursorPlan, (cursor) => cursor == null), + TYPES.boolean + ); + const finalCondition = sql`(${condition()}) or (${cursorIsNullPlaceholder} is true)`; + */ + const finalCondition = condition(); + info.conditions.push(finalCondition); +} +/** + * So we can quickly detect if cursors are invalid we use this digest, + * passing this check does not mean that the cursor is valid but it at least + * catches common user errors. + */ +function getOrderByDigest(info) { + const { placeholderSymbols, deferredSymbols, alias, resource, fixedPlaceholderValues, orders, } = info; + if (orders.length === 0) { + return "natural"; + } + // The security of this hash is unimportant; the main aim is to protect the + // user from themself. If they bypass this, that's their problem (it will + // not introduce a security issue). + const hash = (0, crypto_1.createHash)("sha256"); + hash.update(JSON.stringify(orders.map((o) => { + const [frag] = getFragmentAndCodecFromOrder(alias, o, resource.codec); + const placeholderValues = new Map(fixedPlaceholderValues); + for (let i = 0; i < placeholderSymbols.length; i++) { + const symbol = placeholderSymbols[i]; + placeholderValues.set(symbol, pg_sql2_1.default.identifier(`PLACEHOLDER_${i}`)); + } + for (let i = 0; i < deferredSymbols.length; i++) { + const symbol = deferredSymbols[i]; + placeholderValues.set(symbol, pg_sql2_1.default.identifier(`DEFERRED_${i}`)); + } + return pg_sql2_1.default.compile(frag, { placeholderValues }).text; + }))); + const digest = hash.digest("hex").slice(0, 10); + return digest; +} +function buildQueryParts(info, options = Object.create(null)) { + const { alias, resource, selects: baseSelects, _symbolSubstitutes } = info; + function buildFrom() { + return { + sql: (0, pg_sql2_1.default) `\nfrom ${info.from} as ${alias}${resource.codec.attributes ? pg_sql2_1.default.blank : (0, pg_sql2_1.default) `(v)`}`, + }; + } + function buildGroupBy() { + const groups = info.groups; + return { + sql: groups.length > 0 + ? (0, pg_sql2_1.default) `\ngroup by ${pg_sql2_1.default.join(groups.map((o) => o.fragment), ", ")}` + : pg_sql2_1.default.blank, + }; + } + // NOTE: according to the EdgesToReturn algorithm in the GraphQL Cursor + // Connections Specification first is applied first, then last is applied. + // For us this means that if first is present we set the limit to this and + // then we do the last artificially later. + // https://relay.dev/graphql/connections.htm#EdgesToReturn() + const [limitAndOffsetSQL] = (0, pgStmt_js_1.calculateLimitAndOffsetSQLFromInfo)(info); + function buildLimitAndOffset() { + return { + sql: limitAndOffsetSQL, + }; + } + const { sql: from } = buildFrom(); + const { sql: groupBy } = buildGroupBy(); + const { sql: orderBy } = buildOrderBy(info, options.forceOrder ? false : info.shouldReverseOrder); + const { sql: limitAndOffset } = buildLimitAndOffset(); + const { extraSelects = EMPTY_ARRAY } = options; + const selects = [...baseSelects, ...extraSelects]; + const l = baseSelects.length; + const extraSelectIndexes = extraSelects.map((_, i) => i + l); + return { + selects, + from, + joins: info.joins, + whereConditions: info.conditions, + groupBy, + havingConditions: info.havingConditions, + orderBy, + limitAndOffset, + extraSelectIndexes, + _symbolSubstitutes, + }; +} +function buildQuery(info, options = Object.create(null)) { + return buildQueryFromParts(buildQueryParts(info, options)); +} +function buildQueryFromParts(parts, options = {}) { + const { selects, from, joins, whereConditions, groupBy, havingConditions, orderBy, limitAndOffset, extraSelectIndexes, } = parts; + const select = buildSelect(selects, options.asArray); + const aliases = buildAliases(parts._symbolSubstitutes); + const join = buildJoin(joins); + const where = buildWhereOrHaving((0, pg_sql2_1.default) `where`, whereConditions); + const having = buildWhereOrHaving((0, pg_sql2_1.default) `having`, havingConditions); + const baseQuery = (0, pg_sql2_1.default) `${aliases}${select}${from}${join}${where}${groupBy}${having}${orderBy}${limitAndOffset}`; + return { sql: baseQuery, extraSelectIndexes }; +} +function buildOrderBy(info, reverse) { + const { orders, alias, resource: { codec }, } = info; + return { + sql: calculateOrderBySQL({ + reverse, + orders, + alias, + codec, + }), + }; +} +function buildWhereOrHaving(whereOrHaving, baseConditions) { + const allConditions = baseConditions; + const sqlConditions = pg_sql2_1.default.join(allConditions.map((c) => pg_sql2_1.default.parens(pg_sql2_1.default.indent(c))), " and "); + return allConditions.length === 0 + ? pg_sql2_1.default.blank + : allConditions.length === 1 + ? (0, pg_sql2_1.default) `\n${whereOrHaving} ${sqlConditions}` + : (0, pg_sql2_1.default) `\n${whereOrHaving}\n${pg_sql2_1.default.indent(sqlConditions)}`; +} +function buildJoin(inJoins) { + const joins = inJoins.map((j) => { + const conditions = j.type === "cross" + ? pg_sql2_1.default.blank + : j.conditions.length === 0 + ? pg_sql2_1.default.true + : j.conditions.length === 1 + ? j.conditions[0] + : pg_sql2_1.default.join(j.conditions.map((c) => pg_sql2_1.default.parens(pg_sql2_1.default.indent(c))), " and "); + const joinCondition = j.type !== "cross" + ? (0, pg_sql2_1.default) `\non ${pg_sql2_1.default.parens(pg_sql2_1.default.indentIf(j.conditions.length > 1, conditions))}` + : pg_sql2_1.default.blank; + const join = j.type === "inner" + ? (0, pg_sql2_1.default) `inner join` + : j.type === "left" + ? (0, pg_sql2_1.default) `left outer join` + : j.type === "right" + ? (0, pg_sql2_1.default) `right outer join` + : j.type === "full" + ? (0, pg_sql2_1.default) `full outer join` + : j.type === "cross" + ? (0, pg_sql2_1.default) `cross join` + : pg_sql2_1.default.blank; + return (0, pg_sql2_1.default) `${join}${j.lateral ? (0, pg_sql2_1.default) ` lateral` : pg_sql2_1.default.blank} ${j.from} as ${j.alias}${j.attributeNames ?? pg_sql2_1.default.blank}${joinCondition}`; + }); + return joins.length ? (0, pg_sql2_1.default) `\n${pg_sql2_1.default.join(joins, "\n")}` : pg_sql2_1.default.blank; +} +function buildSelect(selects, asArray = false) { + if (asArray) { + if (selects.length < 1) { + // Cannot accumulate empty arrays + return (0, pg_sql2_1.default) `select array[null]::text[]`; + } + else { + return (0, pg_sql2_1.default) `select array[\n${pg_sql2_1.default.indent(pg_sql2_1.default.join(selects, ",\n"))}\n]::text[]`; + } + } + const fragmentsWithAliases = selects.map((frag, idx) => (0, pg_sql2_1.default) `${frag} as ${pg_sql2_1.default.identifier(String(idx))}`); + const selection = fragmentsWithAliases.length > 0 + ? (0, pg_sql2_1.default) `\n${pg_sql2_1.default.indent(pg_sql2_1.default.join(fragmentsWithAliases, ",\n"))}` + : (0, pg_sql2_1.default) ` /* NOTHING?! */`; + return (0, pg_sql2_1.default) `select${selection}`; +} +function buildAliases(_symbolSubstitutes) { + const sqlAliases = []; + for (const [a, b] of _symbolSubstitutes.entries()) { + sqlAliases.push(pg_sql2_1.default.symbolAlias(a, b)); + } + return pg_sql2_1.default.join(sqlAliases, ""); +} +function createSelectResult(allVals, { first, last, fetchOneExtra, shouldReverseOrder, meta, cursorDetails, groupDetails, }) { + if (allVals == null) { + return allVals; + } + const limit = first ?? last; + const firstAndLast = first != null && last != null && last < first; + const hasMore = fetchOneExtra && limit != null && allVals.length > limit; + const trimFromStart = !shouldReverseOrder && last != null && first == null; + const limitedRows = hasMore + ? trimFromStart + ? allVals.slice(Math.max(0, allVals.length - limit)) + : allVals.slice(0, limit) + : allVals; + const slicedRows = firstAndLast && limitedRows.length > last + ? limitedRows.slice(-last) + : limitedRows; + const orderedRows = shouldReverseOrder + ? (0, grafast_1.reverseArray)(slicedRows) + : slicedRows; + return { + hasMore, + items: orderedRows, + cursorDetails, + groupDetails, + m: meta, + }; +} +function pgInlineViaJoinTransform([details, item]) { + const { meta, selectIndexes, cursorDetails, groupDetails } = details; + const items = []; + if (item != null) { + const newItem = []; + for (let i = 0, l = selectIndexes.length; i < l; i++) { + newItem[i] = item[selectIndexes[i]]; + } + items.push(newItem); + } + return { + hasMore: false, + // We return a list here because our children are going to use a + // `first` plan on us. + // NOTE: we don't need to reverse the list for relay pagination + // because it only contains one entry. + items, + cursorDetails, + groupDetails, + m: meta, + }; +} +function pgInlineViaSubqueryTransform([details, item]) { + const allVals = (0, parseArray_js_1.parseArray)(item[details.selectIndex]); + return createSelectResult(allVals, details); +} +//# sourceMappingURL=pgSelect.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelect.js.map b/grafast/dataplan-pg/dist/steps/pgSelect.js.map new file mode 100644 index 0000000000..c8aa1f93f1 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgSelect.js","sourceRoot":"","sources":["../../src/steps/pgSelect.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts b/grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts new file mode 100644 index 0000000000..27f81a2b2c --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts @@ -0,0 +1,102 @@ +import type { EdgeCapableStep, Step, UnbatchedExecutionExtra } from "grafast"; +import { UnbatchedStep } from "grafast"; +import type { GraphQLObjectType } from "grafast/graphql"; +import type { SQL, SQLable } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgCodecAttribute } from "../codecs.js"; +import type { PgResource } from "../datasource.js"; +import type { GetPgResourceAttributes, GetPgResourceCodec, GetPgResourceRelations, PgCodec, PgQueryRootStep, PgRegistry, PgSQLCallbackOrDirect, PgTypedStep } from "../interfaces.js"; +import type { PgClassExpressionStep } from "./pgClassExpression.js"; +import { PgCursorStep } from "./pgCursor.js"; +import type { PgSelectMode } from "./pgSelect.js"; +import { PgSelectStep } from "./pgSelect.js"; +export interface PgSelectSinglePlanOptions { + fromRelation?: [PgSelectSingleStep, string]; +} +/** + * Represents the single result of a unique PgSelectStep. This might be + * retrieved explicitly by PgSelectStep.single(), or implicitly (via Grafast) + * by PgSelectStep.item(). Since this is the result of a fetch it does not make + * sense to support changing `.where` or similar; however we now add methods + * such as `.get` and `.cursor` which can receive specific properties by + * telling the PgSelectStep to select the relevant expressions. + */ +export declare class PgSelectSingleStep = PgResource> extends UnbatchedStep implements PgTypedStep ? UCodec : never>, EdgeCapableStep, SQLable { + private options; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + readonly pgCodec: GetPgResourceCodec; + readonly itemStepId: number; + readonly mode: PgSelectMode; + private classStepId; + private nullCheckId; + readonly resource: TResource; + private _coalesceToEmptyObject; + private typeStepIndexList; + constructor($class: PgSelectStep, $item: Step, options?: PgSelectSinglePlanOptions); + coalesceToEmptyObject(): void; + toStringMeta(): string; + getClassStep(): PgSelectStep; + /** + * Returns a plan representing a named attribute (e.g. column) from the class + * (e.g. table). + */ + get>(attr: TAttr): PgClassExpressionStep[TAttr] extends PgCodecAttribute ? UCodec : never, TResource>; + private _getInternal; + getMeta(key: string): import("grafast").AccessStep; + /** + * Returns a plan representing the result of an expression. + */ + select(fragment: PgSQLCallbackOrDirect, codec: TExpressionCodec, guaranteedNotNull?: boolean): PgClassExpressionStep; + scopedSQL: (cb: PgSQLCallbackOrDirect) => T; + getPgRoot(): PgQueryRootStep; + /** @deprecated Use .getPgRoot().placeholder() */ + placeholder($step: PgTypedStep): SQL; + /** @deprecated Use .getPgRoot().placeholder() */ + placeholder($step: Step, codec: PgCodec): SQL; + deferredSQL($step: Step): SQL; + private existingSingleRelation; + singleRelation>(relationIdentifier: TRelationName): PgSelectSingleStep[TRelationName]["remoteResource"]>; + manyRelation>(relationIdentifier: TRelationName): PgSelectStep[TRelationName]["remoteResource"]>; + record(): PgClassExpressionStep, TResource>; + /** + * When selecting a connection we need to be able to get the cursor. The + * cursor is built from the values of the `ORDER BY` clause so that we can + * find nodes before/after it. + */ + cursor(): PgCursorStep; + /** + * For compatibility with EdgeCapableStep. + */ + node(): this; + deduplicate(peers: PgSelectSingleStep[]): PgSelectSingleStep[]; + planForType(type: GraphQLObjectType): Step; + /** + * The polymorphism if this is a "regular" (non-aggregate) request over a + * single/relational polymorphic codec; otherwise null. + */ + private singleOrRelationalPolyIfRegular; + private nonNullAttribute; + private nullCheckAttributeIndex; + optimize(): this; + finalize(): void; + handlePolymorphism?: (result: any) => any; + unbatchedExecute(_extra: UnbatchedExecutionExtra, result: string[] | null): unknown[] | null; + [$$toSQL](): SQL; +} +/** + * Given a plan that represents a single record (via + * PgSelectSingleStep.record()) this turns it back into a PgSelectSingleStep + */ +export declare function pgSelectFromRecord, any, any, PgRegistry>>(resource: TResource, $record: PgClassExpressionStep, TResource> | Step<{ + [Attr in keyof TResource["codec"]["attributes"]]: Step; +}>): PgSelectStep; +/** + * Given a plan that represents a single record (via + * PgSelectSingleStep.record()) this turns it back into a PgSelectSingleStep + */ +export declare function pgSelectSingleFromRecord>(resource: TResource, $record: PgClassExpressionStep, TResource>): PgSelectSingleStep; +//# sourceMappingURL=pgSelectSingle.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts.map b/grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts.map new file mode 100644 index 0000000000..9a47f5389a --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelectSingle.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgSelectSingle.d.ts","sourceRoot":"","sources":["../../src/steps/pgSelectSingle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelectSingle.js b/grafast/dataplan-pg/dist/steps/pgSelectSingle.js new file mode 100644 index 0000000000..cbaa39ad4e --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelectSingle.js @@ -0,0 +1,433 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgSelectSingleStep = void 0; +exports.pgSelectFromRecord = pgSelectFromRecord; +exports.pgSelectSingleFromRecord = pgSelectSingleFromRecord; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importStar(require("pg-sql2")); +const codecs_js_1 = require("../codecs.js"); +const utils_js_1 = require("../utils.js"); +const pgClassExpression_js_1 = require("./pgClassExpression.js"); +const pgCursor_js_1 = require("./pgCursor.js"); +const pgSelect_js_1 = require("./pgSelect.js"); +const EMPTY_TUPLE = Object.freeze([]); +// Types that only take a few bytes so adding them to the selection would be +// cheap to do. +const CHEAP_ATTRIBUTE_TYPES = new Set([ + codecs_js_1.TYPES.int2, + codecs_js_1.TYPES.int, + codecs_js_1.TYPES.bigint, + codecs_js_1.TYPES.float, + codecs_js_1.TYPES.float4, + codecs_js_1.TYPES.uuid, + codecs_js_1.TYPES.boolean, + codecs_js_1.TYPES.date, + codecs_js_1.TYPES.timestamp, + codecs_js_1.TYPES.timestamptz, +]); +/** + * Represents the single result of a unique PgSelectStep. This might be + * retrieved explicitly by PgSelectStep.single(), or implicitly (via Grafast) + * by PgSelectStep.item(). Since this is the result of a fetch it does not make + * sense to support changing `.where` or similar; however we now add methods + * such as `.get` and `.cursor` which can receive specific properties by + * telling the PgSelectStep to select the relevant expressions. + */ +class PgSelectSingleStep extends grafast_1.UnbatchedStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgSelectSingleStep", + }; } + constructor($class, $item, options = Object.create(null)) { + super(); + this.options = options; + this.isSyncAndSafe = true; + this.nullCheckId = null; + this._coalesceToEmptyObject = false; + this.typeStepIndexList = null; + this.scopedSQL = (0, utils_js_1.makeScopedSQL)(this); + this.nonNullAttribute = null; + this.nullCheckAttributeIndex = null; + this.itemStepId = this.addDependency($item); + this.resource = $class.resource; + this.pgCodec = this.resource.codec; + this.mode = $class.mode; + this.classStepId = $class.id; + this.peerKey = this.resource.name; + } + coalesceToEmptyObject() { + this._coalesceToEmptyObject = true; + } + toStringMeta() { + return this.resource.name; + } + getClassStep() { + if (this.isOptimized) { + throw new Error(`Cannot ${this}.getClassStep() after we're optimized.`); + } + const plan = this.getStep(this.classStepId); + if (!(plan instanceof pgSelect_js_1.PgSelectStep)) { + throw new Error(`Expected ${this.classStepId} (${plan}) to be a PgSelectStep`); + } + return plan; + } + /** @internal */ + getItemStep() { + const plan = this.getDep(this.itemStepId); + return plan; + } + /** + * Do not rely on this, we're going to refactor it to work a different way at some point. + * + * @internal + */ + getSelfNamed() { + if (this.mode === "aggregate") { + throw new Error("Invalid call to getSelfNamed on aggregate plan"); + } + // Hack because I don't want to duplicate the code. + return this.get(""); + } + /** + * Returns a plan representing a named attribute (e.g. column) from the class + * (e.g. table). + */ + get(attr) { + return this.cacheStep("get", attr, () => this._getInternal(attr)); + } + _getInternal(attr) { + if (this.mode === "aggregate") { + throw new Error("Invalid call to .get() on aggregate plan"); + } + if (!this.resource.codec.attributes && attr !== "") { + throw new Error(`Cannot call ${this}.get() when the resource codec (${this.resource.codec.name}) has no attributes to get.`); + } + const classPlan = this.getClassStep(); + const resourceAttribute = this.resource.codec.attributes?.[attr]; + if (!resourceAttribute && attr !== "") { + throw new Error(`${this.resource} does not define an attribute named '${String(attr)}'`); + } + if (resourceAttribute?.via) { + const { relation, attribute } = this.resource.resolveVia(resourceAttribute.via, attr); + return this.singleRelation(relation).get(attribute); + } + if (resourceAttribute?.identicalVia) { + const { relation, attribute } = this.resource.resolveVia(resourceAttribute.identicalVia, attr); + const $existingPlan = this.existingSingleRelation(relation); + if ($existingPlan) { + // Relation exists already; load it from there for efficiency + return $existingPlan.get(attribute); + } + else { + // Load it from ourself instead + } + } + if (this.options.fromRelation) { + const [$fromPlan, fromRelationName] = this.options.fromRelation; + const matchingAttribute = Object.entries($fromPlan.resource.codec.attributes).find(([name, col]) => { + if (col.identicalVia) { + const { relation, attribute } = $fromPlan.resource.resolveVia(col.identicalVia, name); + if (attribute === attr && relation === fromRelationName) { + return true; + } + } + return false; + }); + if (matchingAttribute) { + return $fromPlan.get(matchingAttribute[0]); + } + } + /* + * Only cast to `::text` during select; we want to use it uncasted in + * conditions/etc. The reasons we cast to ::text include: + * + * - to make return values consistent whether they're direct or in nested + * arrays + * - to make sure that that various PostgreSQL clients we support do not + * mangle the data in unexpected ways - we take responsibility for + * decoding these string values. + */ + const sqlExpr = (0, pgClassExpression_js_1.pgClassExpression)(this, attr === "" + ? this.resource.codec + : this.resource.codec.attributes[attr].codec, resourceAttribute?.notNull); + const colPlan = resourceAttribute + ? resourceAttribute.expression + ? sqlExpr `${pg_sql2_1.default.parens(resourceAttribute.expression(classPlan.alias))}` + : sqlExpr `${classPlan.alias}.${pg_sql2_1.default.identifier(String(attr))}` + : sqlExpr `${classPlan.alias}.v`; /* single attribute */ + if (this.nonNullAttribute == null && + typeof attr === "string" && + attr.length > 0 && + resourceAttribute && + !resourceAttribute.expression && + resourceAttribute.notNull) { + // We know the row is null iff this attribute is null + this.nonNullAttribute = { attribute: resourceAttribute, attr }; + } + return colPlan; + } + getMeta(key) { + return this.getClassStep().getMeta(key); + } + /** + * Returns a plan representing the result of an expression. + */ + select(fragment, codec, guaranteedNotNull) { + const sqlExpr = (0, pgClassExpression_js_1.pgClassExpression)(this, codec, guaranteedNotNull); + return sqlExpr `${this.scopedSQL(fragment)}`; + } + /** + * Advanced method; rather than returning a plan it returns an index. + * Generally useful for PgClassExpressionStep. + * + * @internal + */ + selectAndReturnIndex(fragment) { + return this.getClassStep().selectAndReturnIndex(this.scopedSQL(fragment)); + } + getPgRoot() { + return this.getClassStep(); + } + placeholder($step, overrideCodec) { + return overrideCodec + ? this.getClassStep().placeholder($step, overrideCodec) + : this.getClassStep().placeholder($step); + } + deferredSQL($step) { + return this.getClassStep().deferredSQL($step); + } + existingSingleRelation(relationIdentifier) { + if (this.options.fromRelation) { + const [$fromPlan, fromRelationName] = this.options.fromRelation; + // check to see if we already came via this relationship + const reciprocal = this.resource.getReciprocal($fromPlan.resource.codec, fromRelationName); + if (reciprocal) { + const reciprocalRelationName = reciprocal[0]; + if (reciprocalRelationName === relationIdentifier) { + const reciprocalRelation = reciprocal[1]; + if (reciprocalRelation.isUnique) { + return $fromPlan; + } + } + } + } + return null; + } + singleRelation(relationIdentifier) { + const $existingPlan = this.existingSingleRelation(relationIdentifier); + if ($existingPlan) { + return $existingPlan; + } + const relation = this.resource.getRelation(relationIdentifier); + if (!relation || !relation.isUnique) { + throw new Error(`${String(relationIdentifier)} is not a unique relation on ${this.resource}`); + } + const { remoteResource, remoteAttributes, localAttributes } = relation; + const options = { + fromRelation: [ + this, + relationIdentifier, + ], + }; + return remoteResource.get(remoteAttributes.reduce((memo, remoteAttribute, attributeIndex) => { + memo[remoteAttribute] = this.get(localAttributes[attributeIndex]); + return memo; + }, Object.create(null)), options); + } + manyRelation(relationIdentifier) { + const relation = this.resource.getRelation(relationIdentifier); + if (!relation) { + throw new Error(`${String(relationIdentifier)} is not a relation on ${this.resource}`); + } + const { remoteResource, remoteAttributes, localAttributes } = relation; + return remoteResource.find(remoteAttributes.reduce((memo, remoteAttribute, attributeIndex) => { + memo[remoteAttribute] = this.get(localAttributes[attributeIndex]); + return memo; + }, Object.create(null))); + } + record() { + return (0, pgClassExpression_js_1.pgClassExpression)(this, this.resource.codec, undefined) `${this.getClassStep().alias}`; + } + /** + * When selecting a connection we need to be able to get the cursor. The + * cursor is built from the values of the `ORDER BY` clause so that we can + * find nodes before/after it. + */ + cursor() { + const cursorPlan = new pgCursor_js_1.PgCursorStep(this, this.getClassStep().getCursorDetails()); + return cursorPlan; + } + /** + * For compatibility with EdgeCapableStep. + */ + node() { + return this; + } + deduplicate(peers) { + // We've been careful to not store anything locally so we shouldn't + // need to move anything across to the peer. + return peers.filter((peer) => { + if (peer.resource !== this.resource) { + return false; + } + if (peer.getClassStep() !== this.getClassStep()) { + return false; + } + if (peer.getItemStep() !== this.getItemStep()) { + return false; + } + return true; + }); + } + planForType(type) { + const poly = this.resource.codec.polymorphism; + if (poly?.mode === "single") { + return this; + } + else if (poly?.mode === "relational") { + for (const spec of Object.values(poly.types)) { + if (spec.name === type.name) { + return this.singleRelation(spec.relationName); + } + } + throw new Error(`${this} Could not find matching name for relational polymorphic '${type.name}'`); + } + else { + throw new Error(`${this}: Don't know how to plan this as polymorphic for ${type}`); + } + } + /** + * The polymorphism if this is a "regular" (non-aggregate) request over a + * single/relational polymorphic codec; otherwise null. + */ + singleOrRelationalPolyIfRegular() { + const poly = this.resource.codec.polymorphism; + if (this.mode !== "aggregate" && + (poly?.mode === "single" || poly?.mode === "relational")) { + return poly; + } + else { + return null; + } + } + optimize() { + const poly = this.singleOrRelationalPolyIfRegular(); + if (poly) { + const $class = this.getClassStep(); + this.typeStepIndexList = poly.typeAttributes.map((col) => { + const attr = this.resource.codec.attributes[col]; + const expr = (0, pg_sql2_1.default) `${$class.alias}.${pg_sql2_1.default.identifier(String(col))}`; + return $class.selectAndReturnIndex(attr.codec.castFromPg + ? attr.codec.castFromPg(expr) + : (0, pg_sql2_1.default) `${expr}::text`); + }); + } + else { + this.typeStepIndexList = null; + } + const attributes = this.resource.codec.attributes; + if (attributes && this.getClassStep().mode !== "aggregate") { + // We need to see if this row is null. The cheapest way is to select a + // non-null column, but failing that we invoke the codec's + // nonNullExpression (indirectly). + const getSuitableAttribute = () => { + // We want to find a _cheap_ not-null attribute to select to prove that + // the row is not null. Critically this must be an attribute that we can + // always select (i.e. is not prevented by any column-level select + // privileges). + for (const attr of Object.keys(attributes)) { + const attribute = attributes[attr]; + if (attribute.notNull && + CHEAP_ATTRIBUTE_TYPES.has(attribute.codec) && + !attribute.restrictedAccess) { + return { + attribute, + attr, + }; + } + } + return null; + }; + const nonNullAttribute = this.nonNullAttribute ?? getSuitableAttribute(); + if (nonNullAttribute != null) { + const { attribute: { codec }, attr, } = nonNullAttribute; + const expression = (0, pg_sql2_1.default) `${this}.${pg_sql2_1.default.identifier(attr)}`; + this.nullCheckAttributeIndex = this.getClassStep().selectAndReturnIndex(codec.castFromPg + ? codec.castFromPg(expression) + : (0, pg_sql2_1.default) `${pg_sql2_1.default.parens(expression)}::text`); + } + else { + this.nullCheckId = this.getClassStep().getNullCheckIndex(); + } + } + return this; + } + finalize() { + const poly = this.singleOrRelationalPolyIfRegular(); + if (poly) { + this.handlePolymorphism = (val) => { + if (val == null) + return val; + const typeList = this.typeStepIndexList.map((i) => val[i]); + const key = String(typeList); + const entry = poly.types[key]; + if (entry) { + return (0, grafast_1.polymorphicWrap)(entry.name, val); + } + return null; + }; + } + return super.finalize(); + } + unbatchedExecute(_extra, result) { + if (result == null) { + return this._coalesceToEmptyObject ? EMPTY_TUPLE : null; + } + else if (this.nullCheckAttributeIndex != null) { + const nullIfAttributeNull = result[this.nullCheckAttributeIndex]; + if (nullIfAttributeNull == null) { + return this._coalesceToEmptyObject ? EMPTY_TUPLE : null; + } + } + else if (this.nullCheckId != null) { + const nullIfExpressionNotTrue = result[this.nullCheckId]; + if (nullIfExpressionNotTrue == null || + codecs_js_1.TYPES.boolean.fromPg(nullIfExpressionNotTrue) != true) { + return this._coalesceToEmptyObject ? EMPTY_TUPLE : null; + } + } + return this.handlePolymorphism ? this.handlePolymorphism(result) : result; + } + [pg_sql2_1.$$toSQL]() { + return this.getClassStep().alias; + } +} +exports.PgSelectSingleStep = PgSelectSingleStep; +function fromRecord(record) { + return (0, pg_sql2_1.default) `(select (${record.placeholder}).*)`; +} +/** + * Given a plan that represents a single record (via + * PgSelectSingleStep.record()) this turns it back into a PgSelectSingleStep + */ +function pgSelectFromRecord(resource, $record) { + return new pgSelect_js_1.PgSelectStep({ + resource: resource, + identifiers: [], + from: fromRecord, + args: [{ step: $record, pgCodec: resource.codec }], + joinAsLateral: true, + }); +} +/** + * Given a plan that represents a single record (via + * PgSelectSingleStep.record()) this turns it back into a PgSelectSingleStep + */ +function pgSelectSingleFromRecord(resource, $record) { + // OPTIMIZE: we should be able to optimise this so that `plan.record()` returns the original record again. + return pgSelectFromRecord(resource, $record).single(); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgSelectFromRecord, "pgSelectFromRecord"); +(0, grafast_1.exportAs)("@dataplan/pg", pgSelectSingleFromRecord, "pgSelectSingleFromRecord"); +//# sourceMappingURL=pgSelectSingle.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSelectSingle.js.map b/grafast/dataplan-pg/dist/steps/pgSelectSingle.js.map new file mode 100644 index 0000000000..07f5879ed3 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSelectSingle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgSelectSingle.js","sourceRoot":"","sources":["../../src/steps/pgSelectSingle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts new file mode 100644 index 0000000000..5089e225cf --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts @@ -0,0 +1,28 @@ +import type { ExecutionDetails, GrafastResultsList, PolymorphicData, PolymorphicStep } from "grafast"; +import { Step } from "grafast"; +import type { GraphQLObjectType } from "grafast/graphql"; +import type { PgResource } from "../datasource.js"; +import type { PgSelectSingleStep } from "./pgSelectSingle.js"; +/** + * This polymorphic plan is to support polymorphism from a single PostgreSQL + * table, typically these tables will have a "type" (or similar) attribute that + * details the type of the data in the row. This class accepts a plan that + * resolves to the GraphQLObjectType type name (a string), and a second plan + * that represents a row from this table. + */ +export declare class PgSingleTablePolymorphicStep> extends Step implements PolymorphicStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private typeStepId; + private rowStepId; + constructor($typeName: Step, $row: PgSelectSingleStep); + private rowPlan; + deduplicate(peers: PgSingleTablePolymorphicStep[]): PgSingleTablePolymorphicStep[]; + planForType(_type: GraphQLObjectType): Step; + execute({ indexMap, values, }: ExecutionDetails): GrafastResultsList> | null>; +} +export declare function pgSingleTablePolymorphic>($typeName: Step, $row: PgSelectSingleStep): PgSingleTablePolymorphicStep; +//# sourceMappingURL=pgSingleTablePolymorphic.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts.map b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts.map new file mode 100644 index 0000000000..6386949204 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgSingleTablePolymorphic.d.ts","sourceRoot":"","sources":["../../src/steps/pgSingleTablePolymorphic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,eAAe,EAEhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAA6B,IAAI,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;GAMG;AACH,qBAAa,4BAA4B,CACrC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAEvD,SAAQ,IAAI,CAAC,OAAO,CACpB,YAAW,eAAe;IAE1B,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAGxB,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAC9B,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC;IAOrC,OAAO,CAAC,OAAO;IAIf,WAAW,CACT,KAAK,EAAE,4BAA4B,CAAC,GAAG,CAAC,EAAE,GACzC,4BAA4B,CAAC,SAAS,CAAC,EAAE;IAI5C,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAI3C,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,GACP,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,eAAe,CACtD,MAAM,EACN,aAAa,CAAC,OAAO,EAAE,CAAC,CACzB,GAAG,IAAI,CAAC;CASV;AAED,wBAAgB,wBAAwB,CACtC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAErD,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAC9B,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,GAClC,4BAA4B,CAAC,SAAS,CAAC,CAEzC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js new file mode 100644 index 0000000000..625502a729 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgSingleTablePolymorphicStep = void 0; +exports.pgSingleTablePolymorphic = pgSingleTablePolymorphic; +const grafast_1 = require("grafast"); +/** + * This polymorphic plan is to support polymorphism from a single PostgreSQL + * table, typically these tables will have a "type" (or similar) attribute that + * details the type of the data in the row. This class accepts a plan that + * resolves to the GraphQLObjectType type name (a string), and a second plan + * that represents a row from this table. + */ +class PgSingleTablePolymorphicStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgSingleTablePolymorphicStep", + }; } + constructor($typeName, $row) { + super(); + this.isSyncAndSafe = true; + this.typeStepId = this.addDependency($typeName); + this.rowStepId = this.addDependency($row); + } + rowPlan() { + return this.getDep(this.rowStepId); + } + deduplicate(peers) { + return peers; + } + planForType(_type) { + return this.rowPlan(); + } + execute({ indexMap, values, }) { + const valuesDep = values[this.typeStepId]; + return indexMap((i) => { + const v = valuesDep.at(i); + return v ? (0, grafast_1.polymorphicWrap)(v) : null; + }); + } +} +exports.PgSingleTablePolymorphicStep = PgSingleTablePolymorphicStep; +function pgSingleTablePolymorphic($typeName, $row) { + return new PgSingleTablePolymorphicStep($typeName, $row); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgSingleTablePolymorphic, "pgSingleTablePolymorphic"); +//# sourceMappingURL=pgSingleTablePolymorphic.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js.map b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js.map new file mode 100644 index 0000000000..3e266f8de6 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgSingleTablePolymorphic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgSingleTablePolymorphic.js","sourceRoot":"","sources":["../../src/steps/pgSingleTablePolymorphic.ts"],"names":[],"mappings":";;;AA2EA,4DAOC;AA3ED,qCAA0D;AAM1D;;;;;;GAMG;AACH,MAAa,4BAGX,SAAQ,cAAa;aAGd,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,8BAA8B;KAC3C,AAHc,CAGb;IAMF,YACE,SAA8B,EAC9B,IAAmC;QAEnC,KAAK,EAAE,CAAC;QATV,kBAAa,GAAG,IAAI,CAAC;QAUnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAEO,OAAO;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,WAAW,CACT,KAA0C;QAE1C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,KAAwB;QAClC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;IAED,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,GACW;QAIjB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAEb,CAAC,CAAC,EAAE,EAAE;YACN,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,yBAAe,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;;AApDH,oEAqDC;AAED,SAAgB,wBAAwB,CAGtC,SAA8B,EAC9B,IAAmC;IAEnC,OAAO,IAAI,4BAA4B,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,IAAA,kBAAQ,EAAC,cAAc,EAAE,wBAAwB,EAAE,0BAA0B,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgStmt.d.ts b/grafast/dataplan-pg/dist/steps/pgStmt.d.ts new file mode 100644 index 0000000000..53d0f1900a --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgStmt.d.ts @@ -0,0 +1,154 @@ +import type { __InputStaticLeafStep, ExecutionDetails, Maybe } from "grafast"; +import { Step } from "grafast"; +import { type SQL } from "pg-sql2"; +import type { PgCodec, PgGroupSpec, PgQueryRootStep, PgTypedStep } from "../interfaces.js"; +import type { PgLocker } from "../pgLocker.js"; +import type { PgSelectParsedCursorStep } from "./pgSelect.js"; +export interface QueryValue { + dependencyIndex: number; + codec: PgCodec; + alreadyEncoded: boolean; +} +/** + * Sometimes we want to refer to something that might change later - e.g. we + * might have SQL that specifies a list of explicit values, or it might later + * want to be replaced with a reference to an existing table value (e.g. when a + * query is being inlined). PgStmtDeferred allows for this kind of + * flexibility. It's really important to keep in mind that the same placeholder + * might be used in multiple different SQL queries, and in the different + * queries it might end up with different values - this is particularly + * relevant when using `@stream`/`@defer`, for example. + */ +export type PgStmtDeferredPlaceholder = { + symbol: symbol; + dependencyIndex: number; + codec: PgCodec; + alreadyEncoded: boolean; +}; +export type PgStmtDeferredSQL = { + symbol: symbol; + dependencyIndex: number; +}; +export declare abstract class PgStmtBaseStep extends Step implements PgQueryRootStep { + static $$export: { + moduleName: string; + exportName: string; + }; + protected abstract locker: PgLocker; + /** + * Values used in this plan. + */ + protected abstract placeholders: Array; + protected abstract deferreds: Array; + protected abstract firstStepId: number | null; + protected abstract lastStepId: number | null; + protected abstract fetchOneExtra: boolean; + protected abstract offsetStepId: number | null; + protected abstract beforeStepId: number | null; + protected abstract afterStepId: number | null; + protected needsCursor: boolean; + scopedSQL: (cb: import("../interfaces.js").PgSQLCallbackOrDirect) => T_1; + /** + * If we can't figure out the SQL until runtime, we can pass a step that + * resolves to an SQL fragment. + * + * IMPORTANT: this step must be a "unary" step; i.e. it can only depend on + * request-global dependencies such as variableValues, context, and input + * arguments. + */ + deferredSQL($step: Step): SQL; + placeholder($step: PgTypedStep): SQL; + placeholder($step: Step, codec: PgCodec, alreadyEncoded?: boolean): SQL; + protected makeValues(executionDetails: ExecutionDetails, name: string): { + queryValues: QueryValue[]; + placeholderValues: Map; + identifiersSymbol: symbol; + identifiersAlias: SQL; + handlePlaceholder: (placeholder: PgStmtDeferredPlaceholder) => void; + }; + protected abstract assertCursorPaginationAllowed(): void; + setFirst($first: Step>): this; + setLast($last: Step>): this; + setOffset($offset: Step>): this; + setAfter($parsedCursorPlan: PgSelectParsedCursorStep): void; + setBefore($parsedCursorPlan: PgSelectParsedCursorStep): void; + parseCursor($cursorPlan: __InputStaticLeafStep>): PgSelectParsedCursorStep; + /** + * Someone (probably pageInfo) wants to know if there's more records. To + * determine this we fetch one extra record and then throw it away. + */ + hasMore(): Step; + getPgRoot(): this; +} +export declare function getUnary(values: ExecutionDetails["values"], stepId: number): T; +export declare function getUnary(values: ExecutionDetails["values"], stepId: number | null): T | undefined; +export declare function calculateLimitAndOffsetSQL(params: { + cursorLower: Maybe; + cursorUpper: Maybe; + first: Maybe; + last: Maybe; + offset: Maybe; + fetchOneExtra: boolean; +}): SQL[]; +export interface PgStmtCommonQueryInfo { + readonly symbol: symbol | string; + readonly alias: SQL; + readonly hasSideEffects: boolean; + readonly executionDetails: ExecutionDetails; + readonly placeholderSymbols: ReadonlyArray; + readonly deferredSymbols: ReadonlyArray; + readonly fetchOneExtra: boolean; + readonly forceIdentity: boolean; + readonly needsCursor: boolean; + readonly firstStepId: number | null; + readonly lastStepId: number | null; + readonly offsetStepId: number | null; + readonly beforeStepId: number | null; + readonly afterStepId: number | null; + readonly groups: ReadonlyArray; + readonly havingConditions: ReadonlyArray; + readonly applyDepIds: ReadonlyArray; +} +export interface PgStmtCompileQueryInfo extends PgStmtCommonQueryInfo { + readonly placeholders: ReadonlyArray; + readonly deferreds: ReadonlyArray; +} +export interface MutablePgStmtCommonQueryInfo { + cursorLower: Maybe; + cursorUpper: Maybe; + first: Maybe; + last: Maybe; + shouldReverseOrder: boolean; + offset: Maybe; + cursorDigest: string | null; + readonly cursorIndicies: Array<{ + readonly index: number; + readonly codec: PgCodec; + }> | null; +} +export interface ResolvedPgStmtCommonQueryInfo { + readonly cursorLower: Maybe; + readonly cursorUpper: Maybe; + readonly first: Maybe; + readonly last: Maybe; + readonly shouldReverseOrder: boolean; + readonly offset: Maybe; + readonly cursorDigest: string | null; + readonly cursorIndicies: ReadonlyArray<{ + readonly index: number; + readonly codec: PgCodec; + }> | null; +} +export declare function calculateLimitAndOffsetSQLFromInfo(info: PgStmtCommonQueryInfo & { + readonly cursorLower: Maybe; + readonly cursorUpper: Maybe; +}): SQL[]; +export declare function applyCommonPaginationStuff(info: PgStmtCommonQueryInfo & MutablePgStmtCommonQueryInfo): void; +export declare function makeValues(info: PgStmtCommonQueryInfo & PgStmtCompileQueryInfo, name: string): { + queryValues: QueryValue[]; + placeholderValues: Map; + identifiersSymbol: symbol; + identifiersAlias: SQL; + handlePlaceholder: (placeholder: PgStmtDeferredPlaceholder) => void; +}; +//# sourceMappingURL=pgStmt.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgStmt.d.ts.map b/grafast/dataplan-pg/dist/steps/pgStmt.d.ts.map new file mode 100644 index 0000000000..49bdeea726 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgStmt.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgStmt.d.ts","sourceRoot":"","sources":["../../src/steps/pgStmt.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgStmt.js b/grafast/dataplan-pg/dist/steps/pgStmt.js new file mode 100644 index 0000000000..fd76c1a5aa --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgStmt.js @@ -0,0 +1,389 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgStmtBaseStep = void 0; +exports.getUnary = getUnary; +exports.calculateLimitAndOffsetSQL = calculateLimitAndOffsetSQL; +exports.calculateLimitAndOffsetSQLFromInfo = calculateLimitAndOffsetSQLFromInfo; +exports.applyCommonPaginationStuff = applyCommonPaginationStuff; +exports.makeValues = makeValues; +const grafast_1 = require("grafast"); +const pg_sql2_1 = require("pg-sql2"); +const utils_js_1 = require("../utils.js"); +const UNHANDLED_PLACEHOLDER = (0, pg_sql2_1.sql) `(1/0) /* ERROR! Unhandled placeholder! */`; +const UNHANDLED_DEFERRED = (0, pg_sql2_1.sql) `(1/0) /* ERROR! Unhandled deferred! */`; +class PgStmtBaseStep extends grafast_1.Step { + constructor() { + super(...arguments); + this.needsCursor = false; + this.scopedSQL = (0, utils_js_1.makeScopedSQL)(this); + } + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgStmtBaseStep", + }; } + /** + * If we can't figure out the SQL until runtime, we can pass a step that + * resolves to an SQL fragment. + * + * IMPORTANT: this step must be a "unary" step; i.e. it can only depend on + * request-global dependencies such as variableValues, context, and input + * arguments. + */ + deferredSQL($step) { + const symbol = Symbol(`deferred-${$step.id}`); + const dependencyIndex = this.addUnaryDependency($step); + this.deferreds.push({ symbol, dependencyIndex }); + return pg_sql2_1.sql.placeholder(symbol, UNHANDLED_DEFERRED); + } + placeholder($step, overrideCodec, alreadyEncoded = false) { + if (this.locker.locked) { + throw new Error(`${this}: cannot add placeholders once plan is locked`); + } + if (this.placeholders.length >= 100000) { + throw new Error(`There's already ${this.placeholders.length} placeholders; wanting more suggests there's a bug somewhere`); + } + const codec = overrideCodec ?? ("pgCodec" in $step ? $step.pgCodec : null); + if (!codec) { + console.trace(`${this}.placeholder(${$step}) call, no codec`); + throw new Error(`Step ${$step} does not contain pgCodec information, please pass the codec explicitly to the 'placeholder' method.`); + // throw new Error( + // `Step ${$step} does not contain pgCodec information, please wrap ` + + // `it in \`pgCast\`. E.g. \`pgCast($step, TYPES.boolean)\``, + // ); + } + const $evalledStep = (0, grafast_1.applyTransforms)($step); + const dependencyIndex = this.addDependency($evalledStep); + const symbol = Symbol(`placeholder-${$step.id}`); + this.placeholders.push({ + symbol, + dependencyIndex, + codec, + alreadyEncoded, + }); + // This allows us to replace the SQL that will be compiled, for example + // when we're inlining this into a parent query. + return pg_sql2_1.sql.placeholder(symbol, UNHANDLED_PLACEHOLDER); + } + makeValues(executionDetails, name) { + const { values, count } = executionDetails; + const identifiersSymbol = Symbol(name + "_identifiers"); + const identifiersAlias = pg_sql2_1.sql.identifier(identifiersSymbol); + /** + * Since this is effectively like a DataLoader it processes the data for many + * different resolvers at once. This list of (hopefully scalar) plans is used + * to represent queryValues the query will need such as identifiers for which + * records in the result set should be returned to which GraphQL resolvers, + * parameters for conditions or orders, etc. + */ + const queryValues = []; + const placeholderValues = new Map(); + const handlePlaceholder = (placeholder) => { + const { symbol, dependencyIndex, codec, alreadyEncoded } = placeholder; + const ev = values[dependencyIndex]; + if (!ev.isBatch || count === 1) { + const value = ev.at(0); + const encodedValue = value == null ? null : alreadyEncoded ? value : codec.toPg(value); + placeholderValues.set(symbol, (0, pg_sql2_1.sql) `${pg_sql2_1.sql.value(encodedValue)}::${codec.sqlType}`); + } + else { + // Fine a existing match for this dependency of this type + const existingIndex = queryValues.findIndex((v) => v.dependencyIndex === dependencyIndex && v.codec === codec); + // If none exists, add one to our query values + const idx = existingIndex >= 0 + ? existingIndex + : queryValues.push(placeholder) - 1; + // Finally alias this symbol to a reference to this placeholder + placeholderValues.set(placeholder.symbol, (0, pg_sql2_1.sql) `${identifiersAlias}.${pg_sql2_1.sql.identifier(`id${idx}`)}`); + } + }; + this.placeholders.forEach(handlePlaceholder); + // Handle deferreds + this.deferreds.forEach((placeholder) => { + const { symbol, dependencyIndex } = placeholder; + const fragment = values[dependencyIndex].unaryValue(); + if (!pg_sql2_1.sql.isSQL(fragment)) { + throw new Error(`Deferred SQL must be a valid SQL fragment`); + } + placeholderValues.set(symbol, fragment); + }); + return { + queryValues, + placeholderValues, + identifiersSymbol, + identifiersAlias, + handlePlaceholder, + }; + } + setFirst($first) { + this.locker.assertParameterUnlocked("first"); + this.firstStepId = this.addUnaryDependency($first); + this.locker.lockParameter("first"); + return this; + } + setLast($last) { + this.assertCursorPaginationAllowed(); + this.locker.assertParameterUnlocked("orderBy"); + this.locker.assertParameterUnlocked("last"); + this.lastStepId = this.addUnaryDependency($last); + this.locker.lockParameter("last"); + return this; + } + setOffset($offset) { + this.locker.assertParameterUnlocked("offset"); + this.offsetStepId = this.addUnaryDependency($offset); + this.locker.lockParameter("offset"); + return this; + } + setAfter($parsedCursorPlan) { + this.afterStepId = this.addUnaryDependency($parsedCursorPlan); + } + setBefore($parsedCursorPlan) { + this.beforeStepId = this.addUnaryDependency($parsedCursorPlan); + } + parseCursor($cursorPlan) { + this.assertCursorPaginationAllowed(); + const $parsedCursorPlan = (0, grafast_1.lambda)($cursorPlan, parseCursor); + return $parsedCursorPlan; + } + /** + * Someone (probably pageInfo) wants to know if there's more records. To + * determine this we fetch one extra record and then throw it away. + */ + hasMore() { + this.fetchOneExtra = true; + return (0, grafast_1.access)(this, "hasMore", false); + } + getPgRoot() { + return this; + } +} +exports.PgStmtBaseStep = PgStmtBaseStep; +function parseCursor(cursor) { + if (cursor == null) { + return null; + } + try { + if (typeof cursor !== "string") { + throw new Error("Invalid cursor"); + } + const decoded = JSON.parse(Buffer.from(cursor, "base64").toString("utf8")); + if (!Array.isArray(decoded)) { + throw new Error("Expected array"); + } + return decoded; + } + catch (e) { + throw new grafast_1.SafeError("Invalid cursor, please enter a cursor from a previous request, or null."); + } +} +parseCursor.isSyncAndSafe = true; // Optimization +function getUnary(values, stepId) { + return stepId == null ? undefined : values[stepId].unaryValue(); +} +function calculateLimitAndOffsetSQL(params) { + const { cursorLower, cursorUpper, first, last, offset, fetchOneExtra } = params; + let limitValue; + let offsetValue; + let innerLimitValue; + if (cursorLower != null || cursorUpper != null) { + /* + * When using cursor-base pagination with 'natural' cursors, we are actually + * applying limit/offset under the hood (presumably because we're paginating + * something that has no explicit order, like a function). + * + * If you have: + * - first: 3 + * - after: ['natural', 4] + * + * Then we want `limit 3 offset 4`. + * With `fetchOneExtra` it'd be `limit 4 offset 4`. + * + * For: + * - last: 2 + * - before: ['natural', 6] + * + * We want `limit 2 offset 4` + * With `fetchOneExtra` it'd be `limit 3 offset 3`. + * + * For: + * - last: 2 + * - before: ['natural', 3] + * + * We want `limit 2` + * With `fetchOneExtra` it'd still be `limit 2`. + * + * For: + * - last: 2 + * - before: ['natural', 4] + * + * We want `limit 2 offset 1` + * With `fetchOneExtra` it'd be `limit 3`. + * + * Using `offset` with `after`/`before` is forbidden, so we do not need to + * consider that. + * + * For: + * - after: ['natural', 2] + * - before: ['natural', 6] + * + * We want `limit 4 offset 2` + * With `fetchOneExtra` it'd be `limit 4 offset 2` still. + * + * For: + * - first: 2 + * - after: ['natural', 2] + * - before: ['natural', 6] + * + * We want `limit 2 offset 2` + * With `fetchOneExtra` it'd be `limit 3 offset 2` still. + */ + /** lower bound - exclusive (1-indexed) */ + let lower = 0; + /** upper bound - exclusive (1-indexed) */ + let upper = Infinity; + // Apply 'after', if present + if (cursorLower != null) { + lower = Math.max(0, cursorLower); + } + // Apply 'before', if present + if (cursorUpper != null) { + upper = cursorUpper; + } + // Cannot go beyond these bounds + const maxUpper = upper; + // Apply 'first', if present + if (first != null) { + upper = Math.min(upper, lower + first + 1); + } + // Apply 'last', if present + if (last != null) { + lower = Math.max(0, lower, upper - last - 1); + } + // Apply 'offset', if present + if (offset != null && offset > 0) { + lower = Math.min(lower + offset, maxUpper); + upper = Math.min(upper + offset, maxUpper); + } + // If 'fetch one extra', adjust: + if (fetchOneExtra) { + if (first != null) { + upper = upper + 1; + } + else if (last != null) { + lower = Math.max(0, lower - 1); + } + } + /** lower, but 0-indexed and inclusive */ + const lower0 = lower - 1 + 1; + /** upper, but 0-indexed and inclusive */ + const upper0 = upper - 1 - 1; + // Calculate the final limit/offset + limitValue = isFinite(upper0) ? Math.max(0, upper0 - lower0 + 1) : null; + offsetValue = lower0; + innerLimitValue = limitValue != null ? limitValue + offsetValue : null; + } + else { + limitValue = + first != null + ? first + (fetchOneExtra ? 1 : 0) + : last != null + ? last + (fetchOneExtra ? 1 : 0) + : null; + offsetValue = offset; + innerLimitValue = + first != null || last != null + ? (first ?? last ?? 0) + (offset ?? 0) + (fetchOneExtra ? 1 : 0) + : null; + } + // PERF: consider changing from `${sql.literal(v)}` to + // `${sql.value(v)}::"int4"`. (The advantage being that fewer SQL queries are + // generated, and thus chances of reusing a query are greater.) + const limitSql = limitValue == null ? pg_sql2_1.sql.blank : (0, pg_sql2_1.sql) `\nlimit ${pg_sql2_1.sql.literal(limitValue)}`; + const offsetSql = offsetValue == null || offsetValue === 0 + ? pg_sql2_1.sql.blank + : (0, pg_sql2_1.sql) `\noffset ${pg_sql2_1.sql.literal(offsetValue)}`; + const limitAndOffset = (0, pg_sql2_1.sql) `${limitSql}${offsetSql}`; + const innerLimitSQL = innerLimitValue != null + ? (0, pg_sql2_1.sql) `\nlimit ${pg_sql2_1.sql.literal(innerLimitValue)}` + : pg_sql2_1.sql.blank; + return [limitAndOffset, innerLimitSQL]; +} +function calculateLimitAndOffsetSQLFromInfo(info) { + const { executionDetails: { values }, fetchOneExtra, cursorUpper, cursorLower, } = info; + return calculateLimitAndOffsetSQL({ + first: getUnary(values, info.firstStepId), + last: getUnary(values, info.lastStepId), + offset: getUnary(values, info.offsetStepId), + cursorLower, + cursorUpper, + fetchOneExtra, + }); +} +function applyCommonPaginationStuff(info) { + const { cursorUpper, cursorLower, executionDetails: { values }, } = info; + const first = getUnary(values, info.firstStepId); + const last = getUnary(values, info.lastStepId); + const offset = getUnary(values, info.offsetStepId); + if (offset != null && last != null) { + throw new grafast_1.SafeError("Cannot use 'offset' with 'last'"); + } + info.first = first; + info.last = last; + info.offset = offset; + /** + * If `last` is in use then we reverse the order from the database and then + * re-reverse it in JS-land. + */ + info.shouldReverseOrder = + first == null && last != null && cursorLower == null && cursorUpper == null; +} +function makeValues(info, name) { + const { executionDetails, placeholders, deferreds } = info; + const { values, count } = executionDetails; + const identifiersSymbol = Symbol(name + "_identifiers"); + const identifiersAlias = pg_sql2_1.sql.identifier(identifiersSymbol); + /** + * Since this is effectively like a DataLoader it processes the data for many + * different resolvers at once. This list of (hopefully scalar) plans is used + * to represent queryValues the query will need such as identifiers for which + * records in the result set should be returned to which GraphQL resolvers, + * parameters for conditions or orders, etc. + */ + const queryValues = []; + const placeholderValues = new Map(); + const handlePlaceholder = (placeholder) => { + const { symbol, dependencyIndex, codec, alreadyEncoded } = placeholder; + const ev = values[dependencyIndex]; + if (!ev.isBatch || count === 1) { + const value = ev.at(0); + const encodedValue = value == null ? null : alreadyEncoded ? value : codec.toPg(value); + placeholderValues.set(symbol, (0, pg_sql2_1.sql) `${pg_sql2_1.sql.value(encodedValue)}::${codec.sqlType}`); + } + else { + // Fine a existing match for this dependency of this type + const existingIndex = queryValues.findIndex((v) => v.dependencyIndex === dependencyIndex && v.codec === codec); + // If none exists, add one to our query values + const idx = existingIndex >= 0 ? existingIndex : queryValues.push(placeholder) - 1; + // Finally alias this symbol to a reference to this placeholder + placeholderValues.set(placeholder.symbol, (0, pg_sql2_1.sql) `${identifiersAlias}.${pg_sql2_1.sql.identifier(`id${idx}`)}`); + } + }; + placeholders.forEach(handlePlaceholder); + // Handle deferreds + deferreds.forEach((placeholder) => { + const { symbol, dependencyIndex } = placeholder; + const fragment = values[dependencyIndex].unaryValue(); + if (!pg_sql2_1.sql.isSQL(fragment)) { + throw new Error(`Deferred SQL must be a valid SQL fragment`); + } + placeholderValues.set(symbol, fragment); + }); + return { + queryValues, + placeholderValues, + identifiersSymbol, + identifiersAlias, + handlePlaceholder, + }; +} +//# sourceMappingURL=pgStmt.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgStmt.js.map b/grafast/dataplan-pg/dist/steps/pgStmt.js.map new file mode 100644 index 0000000000..ef3ecd1d0a --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgStmt.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgStmt.js","sourceRoot":"","sources":["../../src/steps/pgStmt.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgTempTable.d.ts b/grafast/dataplan-pg/dist/steps/pgTempTable.d.ts new file mode 100644 index 0000000000..6d9c02dd4d --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgTempTable.d.ts @@ -0,0 +1,20 @@ +import type { SQL } from "pg-sql2"; +import type { PgResource } from "../datasource.js"; +import type { PgClassFilter } from "../filters/pgClassFilter.js"; +import type { PgConditionCapableParent } from "./pgCondition.js"; +import { PgCondition } from "./pgCondition.js"; +export declare class PgTempTable> implements PgConditionCapableParent { + readonly parent: PgClassFilter; + readonly resource: TResource; + static $$export: { + moduleName: string; + exportName: string; + }; + readonly alias: SQL; + readonly conditions: SQL[]; + constructor(parent: PgClassFilter, resource: TResource); + where(condition: SQL): void; + wherePlan(): PgCondition; + fromExpression(): SQL; +} +//# sourceMappingURL=pgTempTable.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgTempTable.d.ts.map b/grafast/dataplan-pg/dist/steps/pgTempTable.d.ts.map new file mode 100644 index 0000000000..99dea2ea17 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgTempTable.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgTempTable.d.ts","sourceRoot":"","sources":["../../src/steps/pgTempTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,qBAAa,WAAW,CAAC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAC5E,YAAW,wBAAwB;aAUjB,MAAM,EAAE,aAAa;aACrB,QAAQ,EAAE,SAAS;IATrC,MAAM,CAAC,QAAQ;;;MAGb;IAEF,SAAgB,KAAK,EAAE,GAAG,CAAC;IAC3B,SAAgB,UAAU,EAAE,GAAG,EAAE,CAAM;gBAErB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,SAAS;IAKrC,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;IAG3B,SAAS;IAIT,cAAc;CAQf"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgTempTable.js b/grafast/dataplan-pg/dist/steps/pgTempTable.js new file mode 100644 index 0000000000..433490dae9 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgTempTable.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgTempTable = void 0; +const pg_sql2_1 = require("pg-sql2"); +const pgCondition_js_1 = require("./pgCondition.js"); +class PgTempTable { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgTempTable", + }; } + constructor(parent, resource) { + this.parent = parent; + this.resource = resource; + this.conditions = []; + this.alias = pg_sql2_1.sql.identifier(Symbol(`${resource.name}_filter`)); + } + where(condition) { + this.conditions.push(condition); + } + wherePlan() { + return new pgCondition_js_1.PgCondition(this); + } + fromExpression() { + const from = this.resource.from; + if (typeof from === "function") { + throw new Error("PgTempTable doesn't support function sources yet."); + } + else { + return from; + } + } +} +exports.PgTempTable = PgTempTable; +//# sourceMappingURL=pgTempTable.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgTempTable.js.map b/grafast/dataplan-pg/dist/steps/pgTempTable.js.map new file mode 100644 index 0000000000..b723f8b283 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgTempTable.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgTempTable.js","sourceRoot":"","sources":["../../src/steps/pgTempTable.ts"],"names":[],"mappings":";;;AACA,qCAA8B;AAK9B,qDAA+C;AAE/C,MAAa,WAAW;aAGf,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,aAAa;KAC1B,AAHc,CAGb;IAIF,YACkB,MAAqB,EACrB,QAAmB;QADnB,WAAM,GAAN,MAAM,CAAe;QACrB,aAAQ,GAAR,QAAQ,CAAW;QAHrB,eAAU,GAAU,EAAE,CAAC;QAKrC,IAAI,CAAC,KAAK,GAAG,aAAG,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,SAAc;QAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IACD,SAAS;QACP,OAAO,IAAI,4BAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,cAAc;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;;AA/BH,kCAgCC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts b/grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts new file mode 100644 index 0000000000..c0b40e75c3 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts @@ -0,0 +1,214 @@ +import type { ConnectionCapableStep, ConnectionStep, EdgeCapableStep, ExecutionDetails, GrafastResultsList, GrafastValuesList, Maybe, PolymorphicStep } from "grafast"; +import { Step } from "grafast"; +import type { GraphQLObjectType } from "grafast/graphql"; +import type { SQL } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgResource, PgResourceUnique } from "../datasource.js"; +import type { PgCodecRefPath, PgGroupSpec } from "../index.js"; +import type { PgCodec, PgQueryBuilder, PgSQLCallbackOrDirect, PgTypedStep, PgUnionAllQueryBuilderCallback, ReadonlyArrayOrDirect } from "../interfaces.js"; +import { PgLocker } from "../pgLocker.js"; +import type { PgClassExpressionStep } from "./pgClassExpression.js"; +import type { PgHavingConditionSpec, PgWhereConditionSpec } from "./pgCondition.js"; +import { PgCondition } from "./pgCondition.js"; +import type { PgCursorDetails } from "./pgCursor.js"; +import { PgCursorStep } from "./pgCursor.js"; +import type { PgPageInfoStep } from "./pgPageInfo.js"; +import type { PgSelectParsedCursorStep } from "./pgSelect.js"; +import type { PgSelectSingleStep } from "./pgSelectSingle.js"; +import type { PgStmtDeferredPlaceholder, PgStmtDeferredSQL } from "./pgStmt.js"; +import { PgStmtBaseStep } from "./pgStmt.js"; +export type PgUnionAllStepConfigAttributes = { + [attributeName in TAttributes]: { + codec: PgCodec; + notNull?: boolean; + }; +}; +export interface PgUnionAllStepMember { + typeName: TTypeNames; + resource: PgResource>, any, any>; + match?: { + [resourceAttributeName: string]: { + step: PgTypedStep; + codec?: never; + } | { + step: Step; + codec: PgCodec; + }; + }; + path?: PgCodecRefPath; +} +export interface PgUnionAllStepConfig { + resourceByTypeName: { + [typeName in TTypeNames]: PgResource; + }; + attributes?: PgUnionAllStepConfigAttributes; + members?: PgUnionAllStepMember[]; + mode?: PgUnionAllMode; + name?: string; + /** + * Set this true if your query includes any `VOLATILE` function (including + * seemingly innocuous things such as `random()`) otherwise we might only + * call the relevant function once and re-use the result. + */ + forceIdentity?: boolean; +} +export interface PgUnionAllStepCondition { + attribute: TAttributes; + callback: (fragment: SQL) => SQL; +} +export interface PgUnionAllStepOrder { + attribute: TAttributes; + direction: "ASC" | "DESC"; +} +export declare class PgUnionAllSingleStep extends Step implements PolymorphicStep, EdgeCapableStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private typeKey; + private pkKey; + private readonly spec; + constructor($parent: PgUnionAllStep, $item: Step); + planForType(objectType: GraphQLObjectType): Step; + /** + * When selecting a connection we need to be able to get the cursor. The + * cursor is built from the values of the `ORDER BY` clause so that we can + * find nodes before/after it. + */ + cursor(): PgCursorStep; + getClassStep(): PgUnionAllStep; + getMeta(key: string): import("grafast").AccessStep; + node(): this; + scopedSQL: (cb: PgSQLCallbackOrDirect) => T; + placeholder($step: PgTypedStep): SQL; + placeholder($step: Step, codec: PgCodec): SQL; + /** + * Returns a plan representing the result of an expression. + */ + expression(expression: SQL, codec: TExpressionCodec, guaranteedNotNull?: boolean): PgClassExpressionStep; + select(fragment: PgSQLCallbackOrDirect, codec: TExpressionCodec, guaranteedNotNull?: boolean): PgClassExpressionStep; + execute({ count, values: [values0], }: ExecutionDetails): GrafastResultsList; +} +export type PgUnionAllMode = "normal" | "aggregate"; +interface PgUnionAllStepResult { + m: Record; + hasMore?: boolean; + /** a tuple based on what is selected at runtime */ + items: ReadonlyArray; + cursorDetails?: PgCursorDetails; +} +/** + * Represents a `UNION ALL` statement, which can have multiple table-like + * resources, but must return a consistent data shape. + */ +export declare class PgUnionAllStep extends PgStmtBaseStep implements ConnectionCapableStep, PgSelectParsedCursorStep> { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + symbol: symbol; + alias: SQL; + private selects; + private executor; + private contextId; + /** + * Values used in this plan. + */ + protected placeholders: Array; + protected deferreds: Array; + private groups; + private havingConditions; + protected firstStepId: number | null; + protected lastStepId: number | null; + protected fetchOneExtra: boolean; + /** When using natural pagination, this index is the lower bound (and should be excluded) */ + protected lowerIndexStepId: number | null; + /** When using natural pagination, this index is the upper bound (and should be excluded) */ + protected upperIndexStepId: number | null; + /** When we calculate the limit/offset, we may be able to determine there cannot be a next page */ + private limitAndOffsetId; + protected offsetStepId: number | null; + protected beforeStepId: number | null; + protected afterStepId: number | null; + private connectionDepId; + readonly mode: PgUnionAllMode; + protected locker: PgLocker; + private memberDigests; + private _limitToTypes; + private applyDepIds; + /** + * Set this true if your query includes any `VOLATILE` function (including + * seemingly innocuous things such as `random()`) otherwise we might only + * call the relevant function once and re-use the result. + */ + forceIdentity: boolean; + static clone(cloneFrom: PgUnionAllStep, mode?: PgUnionAllMode): PgUnionAllStep; + constructor(spec: PgUnionAllStepConfig); + connectionClone($connection: ConnectionStep, mode?: PgUnionAllMode): PgUnionAllStep; + select(key: TAttribute): number; + selectAndReturnIndex(rawFragment: PgSQLCallbackOrDirect): number; + selectPk(): number; + selectExpression(rawExpression: PgSQLCallbackOrDirect, codec: PgCodec): number; + selectType(): number; + getMeta(key: string): import("grafast").AccessStep; + /** + * If this plan may only return one record, you can use `.singleAsRecord()` + * to return a plan that resolves to that record (rather than a list of + * records as it does currently). + * + * Beware: if you call this and the database might actually return more than + * one record then you're potentially in for a Bad Time. + */ + singleAsRecord(): PgUnionAllSingleStep; + single(): PgUnionAllSingleStep; + row($row: Step): PgUnionAllSingleStep; + apply($step: Step>>): void; + items(): PgUnionAllRowsStep; + listItem(itemPlan: Step): any; + pageInfo($connectionPlan: ConnectionStep): PgPageInfoStep; + where(rawWhereSpec: PgSQLCallbackOrDirect>): void; + groupBy(group: PgSQLCallbackOrDirect): void; + having(rawCondition: PgSQLCallbackOrDirect>): void; + orderBy(orderSpec: PgUnionAllStepOrder): void; + setOrderIsUnique(): void; + protected assertCursorPaginationAllowed(): void; + /** @experimental */ + limitToTypes(types: readonly string[]): void; + optimize(): this; + getCursorDetails(): Step; + private typeIdx; + finalize(): void; + execute(executionDetails: ExecutionDetails): Promise>; + [$$toSQL](): SQL; + protected shouldReverseOrderId: number | null; + protected limitAndOffsetSQL: SQL | null; +} +export declare class PgUnionAllRowsStep extends Step { + static $$export: { + moduleName: string; + exportName: string; + }; + constructor($pgUnionAll: PgUnionAllStep); + getClassStep(): PgUnionAllStep; + listItem(itemPlan: Step): any; + deduplicate(_peers: readonly Step[]): readonly Step[]; + optimize(): import("grafast").AccessStep; + execute(executionDetails: ExecutionDetails): readonly any[]; +} +export declare function pgUnionAll(spec: PgUnionAllStepConfig): PgUnionAllStep; +export interface PgUnionAllQueryBuilder extends PgQueryBuilder { + /** Instruct to add another order */ + orderBy(spec: PgUnionAllStepOrder): void; + /** Inform that the resulting order is now unique */ + setOrderIsUnique(): void; + where(whereSpec: PgWhereConditionSpec): void; + whereBuilder(): PgCondition; + having(rawCondition: PgHavingConditionSpec): void; + havingBuilder(): PgCondition; + /** Only return values of the given types */ + limitToTypes(types: readonly string[]): void; +} +export {}; +//# sourceMappingURL=pgUnionAll.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts.map b/grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts.map new file mode 100644 index 0000000000..4609a15cc4 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUnionAll.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgUnionAll.d.ts","sourceRoot":"","sources":["../../src/steps/pgUnionAll.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,EACL,eAAe,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAYL,IAAI,EACL,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,GAAG,EAAe,MAAM,SAAS,CAAC;AAChD,OAAO,EAAwB,OAAO,EAAO,MAAM,SAAS,CAAC;AAI7D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EAAE,cAAc,EAAmB,WAAW,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,KAAK,EACV,OAAO,EAGP,cAAc,EACd,qBAAqB,EACrB,WAAW,EACX,8BAA8B,EAC9B,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAIV,yBAAyB,EACzB,iBAAiB,EAElB,MAAM,aAAa,CAAC;AACrB,OAAO,EAKL,cAAc,EACf,MAAM,aAAa,CAAC;AAmDrB,MAAM,MAAM,8BAA8B,CAAC,WAAW,SAAS,MAAM,IAAI;KACtE,aAAa,IAAI,WAAW,GAAG;QAC9B,KAAK,EAAE,OAAO,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,WAAW,oBAAoB,CAAC,UAAU,SAAS,MAAM;IAC7D,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,EAAE,UAAU,CAClB,GAAG,EACH,GAAG,EACH,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EACpC,GAAG,EACH,GAAG,CACJ,CAAC;IACF,KAAK,CAAC,EAAE;QACN,CAAC,qBAAqB,EAAE,MAAM,GAC1B;YACE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;YACvB,KAAK,CAAC,EAAE,KAAK,CAAC;SACf,GACD;YACE,IAAI,EAAE,IAAI,CAAC;YACX,KAAK,EAAE,OAAO,CAAC;SAChB,CAAC;KACP,CAAC;IACF,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB,CACnC,WAAW,SAAS,MAAM,EAC1B,UAAU,SAAS,MAAM;IAEzB,kBAAkB,EAAE;SACjB,QAAQ,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;KAC9D,CAAC;IACF,UAAU,CAAC,EAAE,8BAA8B,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;IAC7C,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CAMzB;AAED,MAAM,WAAW,uBAAuB,CAAC,WAAW,SAAS,MAAM;IACjE,SAAS,EAAE,WAAW,CAAC;IACvB,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB,CAAC,WAAW,SAAS,MAAM;IAC7D,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B;AAED,qBAAa,oBACX,SAAQ,IACR,YAAW,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC;IAEhD,MAAM,CAAC,QAAQ;;;MAGb;IACK,aAAa,UAAQ;IAC5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuC;gBAChD,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI;IAa1D,WAAW,CAAC,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IA4B1D;;;;OAIG;IACI,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC;IAQ5B,YAAY,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;IAQ9C,OAAO,CAAC,GAAG,EAAE,MAAM;IAInB,IAAI;IAIJ,SAAS,yCAAuB;IAEhC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG;IACzC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG;IAUpD;;OAEG;IACH,UAAU,CAAC,gBAAgB,SAAS,OAAO,EACzC,UAAU,EAAE,GAAG,EACf,KAAK,EAAE,gBAAgB,EACvB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,qBAAqB,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAcxC,MAAM,CAAC,gBAAgB,SAAS,OAAO,EAC5C,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CAAC,EACpC,KAAK,EAAE,gBAAgB,EACvB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,qBAAqB,CAAC,gBAAgB,EAAE,GAAG,CAAC;IAS/C,OAAO,CAAC,EACN,KAAK,EACL,MAAM,EAAE,CAAC,OAAO,CAAC,GAClB,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC;CAqB9C;AAwBD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;AAyCpD,UAAU,oBAAoB;IAC5B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;AAED;;;GAGG;AACH,qBAAa,cAAc,CACvB,WAAW,SAAS,MAAM,GAAG,MAAM,EACnC,UAAU,SAAS,MAAM,GAAG,MAAM,CAEpC,SAAQ,cAAc,CAAC,oBAAoB,CAC3C,YACE,qBAAqB,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,wBAAwB,CAAC;IAE1E,MAAM,CAAC,QAAQ;;;MAGb;IAEK,aAAa,UAAS;IAEtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,GAAG,CAAC;IAElB,OAAO,CAAC,OAAO,CAA2C;IAE1D,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAU;IAQ3B;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,yBAAyB,CAAC,CAAM;IAC9D,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAM;IAInD,OAAO,CAAC,MAAM,CAA0B;IAIxC,OAAO,CAAC,gBAAgB,CAAa;IAIrC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5C,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC3C,SAAS,CAAC,aAAa,UAAS;IAChC,4FAA4F;IAC5F,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjD,4FAA4F;IAC5F,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjD,kGAAkG;IAClG,OAAO,CAAC,gBAAgB,CAAuB;IAI/C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAI7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7C,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5C,OAAO,CAAC,eAAe,CAAuB;IAE9C,SAAgB,IAAI,EAAE,cAAc,CAAC;IAErC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAsB;IAEtD,OAAO,CAAC,aAAa,CAAmD;IACxE,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,WAAW,CAAgB;IAEnC;;;;OAIG;IACI,aAAa,UAAS;IAE7B,MAAM,CAAC,KAAK,CACV,WAAW,SAAS,MAAM,GAAG,MAAM,EACnC,UAAU,SAAS,MAAM,GAAG,MAAM,EAClC,SAAS,EAAE,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,IAAI,iBAAiB;gBA8D/D,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC;IAuH/D,eAAe,CACb,WAAW,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC/C,IAAI,CAAC,EAAE,cAAc,GACpB,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC;IAO1C,MAAM,CAAC,UAAU,SAAS,WAAW,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM;IAqB/D,oBAAoB,CAAC,WAAW,EAAE,qBAAqB,CAAC,GAAG,CAAC,GAAG,MAAM;IAkBrE,QAAQ,IAAI,MAAM;IASlB,gBAAgB,CACd,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,EACzC,KAAK,EAAE,OAAO,GACb,MAAM;IAcT,UAAU,IAAI,MAAM;IASb,OAAO,CAAC,GAAG,EAAE,MAAM;IAI1B;;;;;;;OAOG;IACH,cAAc,IAAI,oBAAoB;IAKtC,MAAM;IAIN,GAAG,CAAC,IAAI,EAAE,IAAI;IAId,KAAK,CACH,KAAK,EAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAKpE,KAAK;IASZ,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAEH,GAAG;IAGhB,QAAQ,CACb,eAAe,EAAE,cAAc,CAAC,GAAG,EAAE,wBAAwB,EAAE,IAAI,EAAE,GAAG,CAAC,GACxE,cAAc,CAAC,IAAI,CAAC;IAIvB,KAAK,CACH,YAAY,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,GACrE,IAAI;IAwBP,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,WAAW,CAAC,GAAG,IAAI;IAQxD,MAAM,CACJ,YAAY,EAAE,qBAAqB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,GACjE,IAAI;IAmBP,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,GAAG,IAAI;IAa1D,gBAAgB;IAIhB,SAAS,CAAC,6BAA6B,IAAI,IAAI;IAQ/C,oBAAoB;IACpB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI;IAQ5C,QAAQ;IA2BD,gBAAgB,IAAI,IAAI,CAAC,eAAe,CAAC;IAKhD,OAAO,CAAC,OAAO,CAAuB;IAEtC,QAAQ;IAWF,OAAO,CACX,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAuHlC,CAAC,OAAO,CAAC;IAKT,SAAS,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrD,SAAS,CAAC,iBAAiB,EAAE,GAAG,GAAG,IAAI,CAAQ;CAChD;AAED,qBAAa,kBAAkB,CAC7B,WAAW,SAAS,MAAM,GAAG,MAAM,EACnC,UAAU,SAAS,MAAM,GAAG,MAAM,CAClC,SAAQ,IAAI;IACZ,MAAM,CAAC,QAAQ;;;MAGb;gBAEU,WAAW,EAAE,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC;IAIzD,YAAY,IAAI,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC;IAI9D,QAAQ,CAAC,QAAQ,EAAE,IAAI;IAIhB,WAAW,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;IAK1C,QAAQ;IAIR,OAAO,CAAC,gBAAgB,EAAE,gBAAgB;CAI3C;AAED,wBAAgB,UAAU,CACxB,WAAW,SAAS,MAAM,EAC1B,UAAU,SAAS,MAAM,EAEzB,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,UAAU,CAAC,GAClD,cAAc,CAAC,WAAW,EAAE,UAAU,CAAC,CAEzC;AA44BD,MAAM,WAAW,sBAAsB,CACrC,WAAW,SAAS,MAAM,GAAG,MAAM,EACnC,WAAW,SAAS,MAAM,GAAG,MAAM,CACnC,SAAQ,cAAc;IACtB,oCAAoC;IACpC,OAAO,CAAC,IAAI,EAAE,mBAAmB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IACtD,oDAAoD;IACpD,gBAAgB,IAAI,IAAI,CAAC;IACzB,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;IAC1D,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,YAAY,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC1D,aAAa,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IACnC,4CAA4C;IAC5C,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAC9C"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUnionAll.js b/grafast/dataplan-pg/dist/steps/pgUnionAll.js new file mode 100644 index 0000000000..501cc920ab --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUnionAll.js @@ -0,0 +1,1310 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgUnionAllRowsStep = exports.PgUnionAllStep = exports.PgUnionAllSingleStep = void 0; +exports.pgUnionAll = pgUnionAll; +const json_1 = require("@dataplan/json"); +const crypto_1 = require("crypto"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = require("pg-sql2"); +const codecs_js_1 = require("../codecs.js"); +const pgLocker_js_1 = require("../pgLocker.js"); +const utils_js_1 = require("../utils.js"); +const pgClassExpression_js_1 = require("./pgClassExpression.js"); +const pgCondition_js_1 = require("./pgCondition.js"); +const pgCursor_js_1 = require("./pgCursor.js"); +const pgPageInfo_js_1 = require("./pgPageInfo.js"); +const pgSelect_js_1 = require("./pgSelect.js"); +const pgStmt_js_1 = require("./pgStmt.js"); +const pgValidateParsedCursor_js_1 = require("./pgValidateParsedCursor.js"); +function isNotNullish(v) { + return v != null; +} +const rowNumberAlias = "n"; +const rowNumberIdent = pg_sql2_1.sql.identifier(rowNumberAlias); +// In future we'll allow mapping columns to different attributes/types +const digestSpecificExpressionFromAttributeName = (digest, name) => { + return pg_sql2_1.sql.identifier(name); +}; +const EMPTY_ARRAY = Object.freeze([]); +const NO_ROWS = Object.freeze({ + m: Object.create(null), + hasMore: false, + items: [], +}); +const hash = (text) => (0, crypto_1.createHash)("sha256").update(text).digest("hex").slice(0, 63); +function add([a, b]) { + return a + b; +} +add.isSyncAndSafe = true; +class PgUnionAllSingleStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgUnionAllSingleStep", + }; } + constructor($parent, $item) { + super(); + this.isSyncAndSafe = true; + this.scopedSQL = (0, utils_js_1.makeScopedSQL)(this); + this.addDependency($item); + this.spec = $parent.spec; + if ($parent.mode === "normal") { + this.typeKey = $parent.selectType(); + this.pkKey = $parent.selectPk(); + } + else { + this.typeKey = null; + this.pkKey = null; + } + } + planForType(objectType) { + if (this.pkKey === null || this.typeKey === null) { + throw new Error(`${this} not polymorphic because parent isn't in normal mode`); + } + const resource = this.spec.resourceByTypeName[objectType.name]; + if (!resource) { + // This type isn't handled; so it should never occur + return (0, grafast_1.constant)(null); + } + const pk = resource.uniques?.find((u) => u.isPrimary === true); + if (!pk) { + throw new Error(`No PK found for ${objectType.name}; this should have been caught earlier?!`); + } + const spec = Object.create(null); + const $parsed = (0, json_1.jsonParse)((0, grafast_1.access)(this, [this.pkKey])); + for (let i = 0, l = pk.attributes.length; i < l; i++) { + const col = pk.attributes[i]; + spec[col] = (0, grafast_1.access)($parsed, [i]); + } + return resource.get(spec); + } + /** + * When selecting a connection we need to be able to get the cursor. The + * cursor is built from the values of the `ORDER BY` clause so that we can + * find nodes before/after it. + */ + cursor() { + const cursorPlan = new pgCursor_js_1.PgCursorStep(this, this.getClassStep().getCursorDetails()); + return cursorPlan; + } + getClassStep() { + // TODO: we should add validation of this! + const $item = this.getDep(0); + const $rows = $item.getDep(0); + const $pgUnionAll = $rows.getDep(0); + return $pgUnionAll; + } + getMeta(key) { + return this.getClassStep().getMeta(key); + } + node() { + return this; + } + placeholder($step, overrideCodec) { + return overrideCodec + ? this.getClassStep().placeholder($step, overrideCodec) + : this.getClassStep().placeholder($step); + } + /** + * Returns a plan representing the result of an expression. + */ + expression(expression, codec, guaranteedNotNull) { + return this.select(expression, codec, guaranteedNotNull); + } + /** + * Advanced method; rather than returning a plan it returns an index. + * Generally useful for PgClassExpressionStep. + * + * @internal + */ + selectAndReturnIndex(fragment) { + return this.getClassStep().selectAndReturnIndex(fragment); + } + select(fragment, codec, guaranteedNotNull) { + const sqlExpr = (0, pgClassExpression_js_1.pgClassExpression)(this, codec, codec.notNull || guaranteedNotNull); + return sqlExpr `${this.scopedSQL(fragment)}`; + } + execute({ count, values: [values0], }) { + if (this.typeKey !== null) { + const typeKey = this.typeKey; + return values0.isBatch + ? values0.entries.map((v) => { + if (v == null) + return null; + const type = v[typeKey]; + return (0, grafast_1.polymorphicWrap)(type, v); + }) + : (0, grafast_1.arrayOfLength)(count, values0.value == null + ? null + : (0, grafast_1.polymorphicWrap)(values0.value[typeKey], values0.value)); + } + else { + return values0.isBatch + ? values0.entries + : (0, grafast_1.arrayOfLength)(count, values0.value); + } + } +} +exports.PgUnionAllSingleStep = PgUnionAllSingleStep; +/** + * Represents a `UNION ALL` statement, which can have multiple table-like + * resources, but must return a consistent data shape. + */ +class PgUnionAllStep extends pgStmt_js_1.PgStmtBaseStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgUnionAllStep", + }; } + static clone(cloneFrom, mode = cloneFrom.mode) { + const cloneFromMatchingMode = cloneFrom?.mode === mode ? cloneFrom : null; + const $clone = new PgUnionAllStep({ + ...cloneFrom.spec, + mode, + members: [], // This will be overwritten later + forceIdentity: cloneFrom.forceIdentity, + _internalCloneSymbol: cloneFrom.symbol, + _internalCloneAlias: cloneFrom.alias, + }); + if ($clone.dependencies.length !== 0) { + throw new Error(`Should not have any dependencies yet: ${$clone.dependencies}`); + } + cloneFrom.dependencies.forEach((planId, idx) => { + const myIdx = $clone.addDependency({ + ...cloneFrom.getDepOptions(idx), + skipDeduplication: true, + }); + if (myIdx !== idx) { + throw new Error(`Failed to clone ${cloneFrom}; dependency indexes did not match: ${myIdx} !== ${idx}`); + } + }); + $clone.applyDepIds = [...cloneFrom.applyDepIds]; + $clone.contextId = cloneFrom.contextId; + $clone.memberDigests = cloneFrom.memberDigests.map(cloneMemberDigest); + if (cloneFrom._limitToTypes) { + $clone._limitToTypes = [...cloneFrom._limitToTypes]; + } + $clone.placeholders = [...cloneFrom.placeholders]; + $clone.deferreds = [...cloneFrom.deferreds]; + $clone.executor = cloneFrom.executor; + $clone.isSyncAndSafe = cloneFrom.isSyncAndSafe; + $clone.alias = cloneFrom.alias; + if (cloneFromMatchingMode) { + $clone.selects = [...cloneFromMatchingMode.selects]; + $clone.groups = [...cloneFromMatchingMode.groups]; + $clone.havingConditions = [...cloneFromMatchingMode.havingConditions]; + $clone.orderSpecs = [...cloneFromMatchingMode.orderSpecs]; + $clone.firstStepId = cloneFromMatchingMode.firstStepId; + $clone.lastStepId = cloneFromMatchingMode.lastStepId; + $clone.fetchOneExtra = cloneFromMatchingMode.fetchOneExtra; + $clone.offsetStepId = cloneFromMatchingMode.offsetStepId; + $clone.beforeStepId = cloneFromMatchingMode.beforeStepId; + $clone.afterStepId = cloneFromMatchingMode.afterStepId; + $clone.lowerIndexStepId = cloneFromMatchingMode.lowerIndexStepId; + $clone.upperIndexStepId = cloneFromMatchingMode.upperIndexStepId; + $clone.limitAndOffsetId = cloneFromMatchingMode.limitAndOffsetId; + } + return $clone; + } + constructor(spec) { + super(); + this.isSyncAndSafe = false; + this.selects = []; + /** @internal */ + this.orderSpecs = []; + /** + * Values used in this plan. + */ + this.placeholders = []; + this.deferreds = []; + // GROUP BY + this.groups = []; + // HAVING + this.havingConditions = []; + // LIMIT + this.firstStepId = null; + this.lastStepId = null; + this.fetchOneExtra = false; + /** When using natural pagination, this index is the lower bound (and should be excluded) */ + this.lowerIndexStepId = null; + /** When using natural pagination, this index is the upper bound (and should be excluded) */ + this.upperIndexStepId = null; + /** When we calculate the limit/offset, we may be able to determine there cannot be a next page */ + this.limitAndOffsetId = null; + // OFFSET + this.offsetStepId = null; + // CURSORS + this.beforeStepId = null; + this.afterStepId = null; + // Connection + this.connectionDepId = null; + this.locker = new pgLocker_js_1.PgLocker(this); + this.memberDigests = []; + this.applyDepIds = []; + /** + * Set this true if your query includes any `VOLATILE` function (including + * seemingly innocuous things such as `random()`) otherwise we might only + * call the relevant function once and re-use the result. + */ + this.forceIdentity = false; + this.typeIdx = null; + // TODO: Delete these both from here and from pgStmt + this.shouldReverseOrderId = null; + this.limitAndOffsetSQL = null; + { + this.mode = spec.mode ?? "normal"; + if (this.mode === "aggregate") { + this.locker.beforeLock("orderBy", () => this.locker.lockParameter("groupBy")); + } + this.spec = spec; + // If the user doesn't specify members, we'll just build membership based + // on the provided resources. + const members = spec.members ?? + Object.entries(spec.resourceByTypeName).map(([typeName, resource]) => ({ + typeName, + resource, + })); + this.symbol = Symbol(spec.name ?? "union"); + this.alias = pg_sql2_1.sql.identifier(this.symbol); + for (const member of members) { + if (!this.executor) { + this.executor = member.resource.executor; + this.contextId = this.addDependency(this.executor.context()); + } + const { path = [] } = member; + const conditions = []; + let currentResource = member.resource; + let currentSymbol = Symbol(currentResource.name); + let currentAlias = pg_sql2_1.sql.identifier(currentSymbol); + if (this.executor !== currentResource.executor) { + throw new Error(`${this}: all resources must currently come from same executor`); + } + if (!pg_sql2_1.sql.isSQL(currentResource.from)) { + throw new Error(`${this}: parameterized resources not yet supported`); + } + if (member.match) { + for (const [attributeName, match] of Object.entries(member.match)) { + conditions.push((0, pg_sql2_1.sql) `${currentAlias}.${pg_sql2_1.sql.identifier(attributeName)} = ${match.codec + ? this.placeholder(match.step, match.codec) + : this.placeholder(match.step)}`); + } + } + let sqlSource = (0, pg_sql2_1.sql) `${currentResource.from} as ${currentAlias}`; + for (const pathEntry of path) { + const relation = currentResource.getRelation(pathEntry.relationName); + const nextResource = relation.remoteResource; + const nextSymbol = Symbol(nextResource.name); + const nextAlias = pg_sql2_1.sql.identifier(nextSymbol); + if (this.executor !== nextResource.executor) { + throw new Error(`${this}: all resources must currently come from same executor`); + } + if (!pg_sql2_1.sql.isSQL(nextResource.from)) { + throw new Error(`${this}: parameterized resources not yet supported`); + } + const nextSqlFrom = nextResource.from; + sqlSource = (0, pg_sql2_1.sql) `${sqlSource} +inner join ${nextSqlFrom} as ${nextAlias} +on (${pg_sql2_1.sql.indent(pg_sql2_1.sql.join(relation.localAttributes.map((localAttribute, i) => (0, pg_sql2_1.sql) `${nextAlias}.${pg_sql2_1.sql.identifier(String(relation.remoteAttributes[i]))} = ${currentAlias}.${pg_sql2_1.sql.identifier(String(localAttribute))}`), "\nand "))})`; + currentResource = nextResource; + currentSymbol = nextSymbol; + currentAlias = nextAlias; + } + this.memberDigests.push({ + member, + finalResource: currentResource, + symbol: currentSymbol, + alias: currentAlias, + conditions, + orders: [], + sqlSource, + }); + } + } + } + connectionClone($connection, mode) { + const $plan = PgUnionAllStep.clone(this, mode); + // In case any errors are raised + $plan.connectionDepId = $plan.addDependency($connection); + return $plan; + } + select(key) { + if (!this.spec.attributes || + !Object.prototype.hasOwnProperty.call(this.spec.attributes, key)) { + throw new Error(`Attribute '${key}' unknown`); + } + const existingIndex = this.selects.findIndex((s) => s.type === "attribute" && s.attribute === key); + if (existingIndex >= 0) { + return existingIndex; + } + const index = this.selects.push({ + type: "attribute", + attribute: key, + }) - 1; + return index; + } + selectAndReturnIndex(rawFragment) { + const fragment = this.scopedSQL(rawFragment); + const existingIndex = this.selects.findIndex((s) => s.type === "outerExpression" && + pg_sql2_1.sql.isEquivalent(s.expression, fragment)); + if (existingIndex >= 0) { + return existingIndex; + } + const index = this.selects.push({ + type: "outerExpression", + expression: fragment, + }) - 1; + return index; + } + selectPk() { + const existingIndex = this.selects.findIndex((s) => s.type === "pk"); + if (existingIndex >= 0) { + return existingIndex; + } + const index = this.selects.push({ type: "pk" }) - 1; + return index; + } + selectExpression(rawExpression, codec) { + const expression = this.scopedSQL(rawExpression); + const existingIndex = this.selects.findIndex((s) => s.type === "expression" && pg_sql2_1.sql.isEquivalent(s.expression, expression)); + if (existingIndex >= 0) { + return existingIndex; + } + const index = this.selects.push({ type: "expression", expression, codec }) - 1; + return index; + } + selectType() { + const existingIndex = this.selects.findIndex((s) => s.type === "type"); + if (existingIndex >= 0) { + return existingIndex; + } + const index = this.selects.push({ type: "type" }) - 1; + return index; + } + getMeta(key) { + return (0, grafast_1.access)(this, ["m", key]); + } + /** + * If this plan may only return one record, you can use `.singleAsRecord()` + * to return a plan that resolves to that record (rather than a list of + * records as it does currently). + * + * Beware: if you call this and the database might actually return more than + * one record then you're potentially in for a Bad Time. + */ + singleAsRecord() { + // this.setUnique(true); + return new PgUnionAllSingleStep(this, (0, grafast_1.first)(this)); + } + single() { + return this.singleAsRecord(); + } + row($row) { + return new PgUnionAllSingleStep(this, $row); + } + apply($step) { + this.applyDepIds.push(this.addUnaryDependency($step)); + } + items() { + return this.operationPlan.cacheStep(this, "items", "" /* Digest of our arguments */, () => new PgUnionAllRowsStep(this)); + } + listItem(itemPlan) { + const $single = new PgUnionAllSingleStep(this, itemPlan); + return $single; + } + pageInfo($connectionPlan) { + return (0, pgPageInfo_js_1.pgPageInfo)($connectionPlan); + } + where(rawWhereSpec) { + if (this.locker.locked) { + throw new Error(`${this}: cannot add conditions once plan is locked ('where')`); + } + const whereSpec = this.scopedSQL(rawWhereSpec); + for (const digest of this.memberDigests) { + const { alias: tableAlias, symbol } = digest; + if (pg_sql2_1.sql.isSQL(whereSpec)) { + // Merge the global where into this sub-where. + digest.conditions.push(pg_sql2_1.sql.replaceSymbol(whereSpec, this.symbol, symbol)); + } + else { + const ident = (0, pg_sql2_1.sql) `${tableAlias}.${digestSpecificExpressionFromAttributeName(digest, whereSpec.attribute)}`; + digest.conditions.push(whereSpec.callback(ident)); + } + } + } + groupBy(group) { + this.locker.assertParameterUnlocked("groupBy"); + if (this.mode !== "aggregate") { + throw new grafast_1.SafeError(`Cannot add groupBy to a non-aggregate query`); + } + this.groups.push(this.scopedSQL(group)); + } + having(rawCondition) { + if (this.locker.locked) { + throw new Error(`${this}: cannot add having conditions once plan is locked ('having')`); + } + if (this.mode !== "aggregate") { + throw new grafast_1.SafeError(`Cannot add having to a non-aggregate query`); + } + const condition = this.scopedSQL(rawCondition); + if (pg_sql2_1.sql.isSQL(condition)) { + this.havingConditions.push(condition); + } + else { + const never = condition; + console.error("Unsupported condition: ", never); + throw new Error(`Unsupported condition`); + } + } + orderBy(orderSpec) { + if (this.mode === "aggregate") { + throw new Error(`${this}: orderBy forbidden in aggregate mode`); + } + if (!this.spec.attributes) { + throw new Error(`${this}: cannot order when there's no shared attributes`); + } + this.locker.assertParameterUnlocked("orderBy"); + this.orderSpecs.push(orderSpec); + } + setOrderIsUnique() { + // TODO: should we do something here to match pgSelect? + } + assertCursorPaginationAllowed() { + if (this.mode === "aggregate") { + throw new Error("Cannot use cursor pagination on an aggregate PgSelectStep"); + } + } + /** @experimental */ + limitToTypes(types) { + if (!this._limitToTypes) { + this._limitToTypes = [...types]; + } + else { + this._limitToTypes = this._limitToTypes.filter((t) => types.includes(t)); + } + } + optimize() { + // TODO: validate the parsed cursor and throw error in connection if it + // fails. I'm not sure, but perhaps we can add this step itself (or a + // derivative thereof) as a dependency of the connection - that way, if + // this step throws (e.g. due to invalid cursor) then so does the + // connection. + /* + const $connection = this.getDep>( + this.connectionDepId, + ); + $connection.addValidation(() => { + return pgValidateParsedCursor( + $parsedCursorPlan, + digest, + orderCount, + beforeOrAfter, + ); + }); + */ + // We must lock here otherwise we might try and create cursor validation + // plans during `finalize` + this.locker.lock(); + return this; + } + getCursorDetails() { + this.needsCursor = true; + return (0, grafast_1.access)(this, "cursorDetails"); + } + // private reverse: boolean | null = null; + finalize() { + // this.locker.lock(); + const normalMode = this.mode === "normal"; + this.typeIdx = normalMode ? this.selectType() : null; + // this.reverse = normalMode ? this.shouldReverseOrder() : null; + super.finalize(); + } + // Be careful if we add streaming - ensure `shouldReverseOrder` is fine. + async execute(executionDetails) { + const { indexMap, values, extra: { eventEmitter }, } = executionDetails; + const { fetchOneExtra } = this; + const { meta, text, rawSqlValues, identifierIndex, shouldReverseOrder, name, queryValues, first, last, cursorDetails, } = buildTheQuery({ + executionDetails, + placeholders: this.placeholders, + placeholderSymbols: this.placeholders.map((p) => p.symbol), + deferreds: this.deferreds, + deferredSymbols: this.deferreds.map((d) => d.symbol), + firstStepId: this.firstStepId, + lastStepId: this.lastStepId, + offsetStepId: this.offsetStepId, + afterStepId: this.afterStepId, + beforeStepId: this.beforeStepId, + forceIdentity: this.forceIdentity, + havingConditions: this.havingConditions, + mode: this.mode, + alias: this.alias, + symbol: this.symbol, + hasSideEffects: this.hasSideEffects, + groups: this.groups, + orderSpecs: this.orderSpecs, + selects: this.selects, + typeIdx: this.typeIdx, + attributes: this.spec.attributes, + memberDigests: this.memberDigests, + limitToTypes: this._limitToTypes, + fetchOneExtra, + needsCursor: this.needsCursor, + applyDepIds: this.applyDepIds, + }); + if (first === 0 || last === 0) { + return indexMap(() => NO_ROWS); + } + const contextDep = values[this.contextId]; + if (contextDep === undefined) { + throw new Error("We have no context dependency?"); + } + const specs = indexMap((i) => { + const context = contextDep.at(i); + return { + // The context is how we'd handle different connections with different claims + context, + queryValues: identifierIndex != null + ? queryValues.map(({ dependencyIndex, codec, alreadyEncoded }) => { + const val = values[dependencyIndex].at(i); + return val == null + ? null + : alreadyEncoded + ? val + : codec.toPg(val); + }) + : EMPTY_ARRAY, + }; + }); + const executeMethod = this.operationPlan.operation.operation === "query" + ? "executeWithCache" + : "executeWithoutCache"; + const executionResult = await this.executor[executeMethod](specs, { + text, + rawSqlValues, + identifierIndex, + name, + eventEmitter, + useTransaction: false, + }); + // debugExecute("%s; result: %c", this, executionResult); + return executionResult.values.map((allVals) => { + if ((0, grafast_1.isPromiseLike)(allVals)) { + // Must be an error! + return allVals; + } + else if (allVals == null) { + return NO_ROWS; + } + const limit = first ?? last; + const firstAndLast = first != null && last != null && last < first; + const hasMore = fetchOneExtra && limit != null && allVals.length > limit; + const trimFromStart = !shouldReverseOrder && last != null && first == null; + const limitedRows = hasMore + ? trimFromStart + ? allVals.slice(Math.max(0, allVals.length - limit)) + : allVals.slice(0, limit) + : allVals; + const slicedRows = firstAndLast && last != null ? limitedRows.slice(-last) : limitedRows; + const orderedRows = shouldReverseOrder + ? (0, grafast_1.reverseArray)(slicedRows) + : slicedRows; + return { + m: meta, + hasMore, + items: orderedRows, + cursorDetails, + }; + }); + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } +} +exports.PgUnionAllStep = PgUnionAllStep; +class PgUnionAllRowsStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgUnionAllRowsStep", + }; } + constructor($pgUnionAll) { + super(); + this.addDependency($pgUnionAll); + } + getClassStep() { + return this.getDepOptions(0).step; + } + listItem(itemPlan) { + return this.getClassStep().listItem(itemPlan); + } + deduplicate(_peers) { + // We don't have any properties, and dependencies is already checked, so we're the same as our kin. + return _peers; + } + optimize() { + return (0, grafast_1.access)(this.getClassStep(), "items"); + } + execute(executionDetails) { + const value = executionDetails.values[0]; + return executionDetails.indexMap((i) => value.at(i).items); + } +} +exports.PgUnionAllRowsStep = PgUnionAllRowsStep; +function pgUnionAll(spec) { + return new PgUnionAllStep(spec); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgUnionAll, "pgUnionAll"); +function buildTheQuery(rawInfo) { + const info = { + ...rawInfo, + // Copy and make mutable + selects: [...rawInfo.selects], + orderSpecs: [...rawInfo.orderSpecs], + orders: [], + isOrderUnique: false, + groups: [...rawInfo.groups], + havingConditions: [...rawInfo.havingConditions], + memberDigests: rawInfo.memberDigests.map(cloneMemberDigest), + limitToTypes: rawInfo.limitToTypes?.slice(), + // Will be populated below + ordersForCursor: undefined, + cursorDigest: null, + cursorIndicies: rawInfo.needsCursor ? [] : null, + // Will be populated by applyConditionFromCursor + cursorLower: null, + cursorUpper: null, + // Will be populated by applyCommonPaginationStuff + first: null, + last: null, + offset: null, + shouldReverseOrder: false, + }; + const { values, count } = info.executionDetails; + function selectAndReturnIndex(expression) { + const existingIndex = info.selects.findIndex((s) => s.type === "outerExpression" && + pg_sql2_1.sql.isEquivalent(s.expression, expression)); + if (existingIndex >= 0) + return existingIndex; + return info.selects.push({ type: "outerExpression", expression }) - 1; + } + function selectAttribute(key) { + const existingIndex = info.selects.findIndex((s) => s.type === "attribute" && s.attribute === key); + if (existingIndex >= 0) { + return existingIndex; + } + const index = info.selects.push({ + type: "attribute", + attribute: key, + }) - 1; + return index; + } + function selectType() { + if (info.typeIdx != null) + return info.typeIdx; + const existingIndex = info.selects.findIndex((s) => s.type === "type"); + if (existingIndex >= 0) + return existingIndex; + info.typeIdx = info.selects.push({ type: "type" }) - 1; + return info.typeIdx; + } + function selectPk() { + const existingIndex = info.selects.findIndex((s) => s.type === "pk"); + if (existingIndex >= 0) + return existingIndex; + return info.selects.push({ type: "pk" }) - 1; + } + const meta = Object.create(null); + const queryBuilder = { + alias: info.alias, + [pg_sql2_1.$$toSQL]() { + return info.alias; + }, + setMeta(key, value) { + meta[key] = value; + }, + getMetaRaw(key) { + return meta[key]; + }, + orderBy(spec) { + if (info.mode !== "aggregate") { + info.orderSpecs.push(spec); + } + }, + setOrderIsUnique() { + info.isOrderUnique = true; + }, + where(whereSpec) { + for (const digest of info.memberDigests) { + const { alias: tableAlias, symbol } = digest; + if (pg_sql2_1.sql.isSQL(whereSpec)) { + // Merge the global where into this sub-where. + digest.conditions.push( + // TODO: do we require that info.symbol is a symbol? + typeof info.symbol === "symbol" + ? pg_sql2_1.sql.replaceSymbol(whereSpec, info.symbol, symbol) + : whereSpec); + } + else { + const ident = (0, pg_sql2_1.sql) `${tableAlias}.${digestSpecificExpressionFromAttributeName(digest, whereSpec.attribute)}`; + digest.conditions.push(whereSpec.callback(ident)); + } + } + }, + having(condition) { + if (info.mode !== "aggregate") { + throw new grafast_1.SafeError(`Cannot add having to a non-aggregate query`); + } + if (pg_sql2_1.sql.isSQL(condition)) { + info.havingConditions.push(condition); + } + else { + const never = condition; + console.error("Unsupported condition: ", never); + throw new Error(`Unsupported condition`); + } + }, + whereBuilder() { + return new pgCondition_js_1.PgCondition(this); + }, + havingBuilder() { + return new pgCondition_js_1.PgCondition(this, true); + }, + limitToTypes(types) { + if (!info.limitToTypes) { + info.limitToTypes = [...types]; + } + else { + info.limitToTypes = info.limitToTypes.filter((t) => types.includes(t)); + } + }, + }; + for (const applyDepId of info.applyDepIds) { + const val = values[applyDepId].unaryValue(); + if (Array.isArray(val)) { + val.forEach((v) => v?.(queryBuilder)); + } + else { + val?.(queryBuilder); + } + } + // Apply type limits + if (info.limitToTypes) { + info.memberDigests = info.memberDigests.filter((d) => info.limitToTypes.includes(d.member.typeName)); + } + // Now turn order specs into orders + if (info.memberDigests.length === 0) { + // We have no implementations, we'll never return anything + return { + meta, + text: `select null;`, + rawSqlValues: [], + identifierIndex: null, + first: 0, + last: 0, + queryValues: [], + cursorDetails: undefined, + shouldReverseOrder: false, + }; + } + for (const orderSpec of info.orderSpecs) { + if (!info.attributes) { + throw new Error(`Cannot order without attributes`); + } + for (const digest of info.memberDigests) { + const { alias: tableAlias } = digest; + const ident = (0, pg_sql2_1.sql) `${tableAlias}.${digestSpecificExpressionFromAttributeName(digest, orderSpec.attribute)}`; + digest.orders.push({ + fragment: ident, + direction: orderSpec.direction, + codec: info.attributes[orderSpec.attribute].codec, + }); + } + const selectedIndex = selectAttribute(orderSpec.attribute); + info.orders.push({ + fragment: pg_sql2_1.sql.identifier(String(selectedIndex)), + direction: orderSpec.direction, + codec: info.attributes[orderSpec.attribute].codec, + }); + if (info.cursorIndicies != null) { + info.cursorIndicies.push({ + index: selectedIndex, + codec: codecs_js_1.TYPES.text, + }); + } + } + if (info.cursorIndicies != null) { + info.cursorIndicies.push({ + index: selectType(), + codec: codecs_js_1.TYPES.text, + }); + info.cursorIndicies.push({ + index: selectPk(), + codec: codecs_js_1.TYPES.text, + }); + } + if (grafast_1.isDev) + Object.freeze(info.orders); + info.ordersForCursor = [ + ...info.orders, + { + fragment: (0, pg_sql2_1.sql) `${info.alias}.${pg_sql2_1.sql.identifier(String(selectType()))}`, + codec: codecs_js_1.TYPES.text, + direction: "ASC", + }, + { + fragment: (0, pg_sql2_1.sql) `${info.alias}.${pg_sql2_1.sql.identifier(String(selectPk()))}`, + codec: codecs_js_1.TYPES.json, + direction: "ASC", + }, + ]; + if (grafast_1.isDev) + Object.freeze(info.ordersForCursor); + // afterLock("orderBy"): Now the runtime orders/etc have been performed, + const after = (0, pgStmt_js_1.getUnary)(values, info.afterStepId); + const before = (0, pgStmt_js_1.getUnary)(values, info.beforeStepId); + if (info.needsCursor || after != null || before != null) { + info.cursorDigest = getOrderByDigest(info); + } + // apply conditions from the cursor + applyConditionFromCursor(info, "after", after); + applyConditionFromCursor(info, "before", before); + (0, pgStmt_js_1.applyCommonPaginationStuff)(info); + if (grafast_1.isDev) { + info.memberDigests.forEach((d) => { + Object.freeze(d.conditions); + Object.freeze(d.orders); + Object.freeze(d); + }); + Object.freeze(info.memberDigests); + // Object.freeze(info.selects); + Object.freeze(info.groups); + Object.freeze(info.havingConditions); + } + /**************************************** + * * + * ALL MUTATION NOW COMPLETE * + * * + ****************************************/ + // Except we still do selectAndReturnIndex() below, and maybe some other stuff? + const { mode, typeIdx, alias, attributes, forceIdentity, memberDigests, selects, orders, groups, havingConditions, hasSideEffects, ordersForCursor, shouldReverseOrder, cursorDigest, cursorIndicies, } = info; + const reverse = mode === "normal" ? shouldReverseOrder : null; + const memberCodecs = memberDigests.map((digest) => digest.finalResource.codec); + const makeQuery = () => { + const tables = []; + const [limitAndOffsetSQL, innerLimitSQL] = (0, pgStmt_js_1.calculateLimitAndOffsetSQLFromInfo)(info); + for (const memberDigest of memberDigests) { + const { sqlSource, alias: tableAlias, conditions, orders, finalResource, } = memberDigest; + const pk = finalResource.uniques?.find((u) => u.isPrimary === true); + if (!pk) { + throw new Error(`No PK for ${memberDigest.member.typeName} resource`); + } + const midSelects = []; + const innerSelects = selects + .map((s, selectIndex) => { + const r = (() => { + switch (s.type) { + case "attribute": { + if (!attributes) { + throw new Error(`Cannot select an attribute when there's no shared attributes`); + } + const attr = attributes[s.attribute]; + return [ + (0, pg_sql2_1.sql) `${tableAlias}.${digestSpecificExpressionFromAttributeName(memberDigest, s.attribute)}`, + attr.codec, + ]; + } + case "type": { + return [pg_sql2_1.sql.literal(memberDigest.member.typeName), codecs_js_1.TYPES.text]; + } + case "pk": { + return [ + (0, pg_sql2_1.sql) `json_build_array(${pg_sql2_1.sql.join(pk.attributes.map((c) => (0, pg_sql2_1.sql) `(${tableAlias}.${pg_sql2_1.sql.identifier(c)})::text`), ",")})`, + codecs_js_1.TYPES.json, + ]; + } + case "expression": { + return [s.expression, s.codec]; + } + case "outerExpression": { + // Only applies on outside + return null; + } + case "order": { + const orderSpec = orders[s.orderIndex]; + const [frag, codec] = (0, pgSelect_js_1.getFragmentAndCodecFromOrder)(alias, orderSpec, memberDigest.finalResource.codec); + return [frag, codec]; + } + default: { + const never = s; + throw new Error(`Couldn't match ${never.type}`); + } + } + })(); + if (!r) { + return r; + } + const [frag, _codec] = r; + const identAlias = String(selectIndex); + const ident = pg_sql2_1.sql.identifier(identAlias); + const fullIdent = (0, pg_sql2_1.sql) `${tableAlias}.${ident}`; + midSelects.push(fullIdent); + return (0, pg_sql2_1.sql) `${frag} as ${ident}`; + }) + .filter(isNotNullish); + midSelects.push(rowNumberIdent); + const ascOrDesc = reverse ? (0, pg_sql2_1.sql) `desc` : (0, pg_sql2_1.sql) `asc`; + const pkOrder = pg_sql2_1.sql.join(pk.attributes.map((c) => (0, pg_sql2_1.sql) `${tableAlias}.${pg_sql2_1.sql.identifier(c)} ${ascOrDesc}`), ",\n"); + const orderBy = (0, pg_sql2_1.sql) `order by +${pg_sql2_1.sql.indent `${orders.length > 0 + ? (0, pg_sql2_1.sql) `${pg_sql2_1.sql.join(orders.map((orderSpec) => { + const [frag] = (0, pgSelect_js_1.getFragmentAndCodecFromOrder)(tableAlias, orderSpec, finalResource.codec); + return (0, pg_sql2_1.sql) `${frag} ${Number(orderSpec.direction === "DESC") ^ Number(reverse) + ? (0, pg_sql2_1.sql) `desc` + : (0, pg_sql2_1.sql) `asc`}`; + }), `,\n`)},\n` + : pg_sql2_1.sql.blank}${pkOrder}`}`; + innerSelects.push((0, pg_sql2_1.sql) `row_number() over (${pg_sql2_1.sql.indent(orderBy)}) as ${rowNumberIdent}`); + // Can't order individual selects in a `union all` so we're using + // subqueries to do so. + const innerQuery = pg_sql2_1.sql.indent ` +select +${pg_sql2_1.sql.indent(pg_sql2_1.sql.join(innerSelects, ",\n"))} +from ${sqlSource} +${conditions.length > 0 + ? (0, pg_sql2_1.sql) `where ${pg_sql2_1.sql.join(conditions, `\nand `)}\n` + : pg_sql2_1.sql.blank}\ +${orderBy}\ +${innerLimitSQL} +`; + // Relies on Postgres maintaining the order of the subquery + const query = pg_sql2_1.sql.indent `\ +select +${pg_sql2_1.sql.indent(pg_sql2_1.sql.join(midSelects, ",\n"))} +from (${innerQuery}) as ${tableAlias}\ +`; + tables.push(query); + } + const outerSelects = selects.map((select, i) => { + if (select.type === "outerExpression") { + return (0, pg_sql2_1.sql) `${select.expression} as ${pg_sql2_1.sql.identifier(String(i))}`; + } + else if (mode === "normal") { + const sqlSrc = (0, pg_sql2_1.sql) `${alias}.${pg_sql2_1.sql.identifier(String(i))}`; + let codec; + let guaranteedNotNull; + switch (select.type) { + case "type": { + codec = codecs_js_1.TYPES.text; + break; + } + case "pk": { + codec = codecs_js_1.TYPES.json; + guaranteedNotNull = true; + break; + } + case "order": { + const order = ordersForCursor[select.orderIndex]; + codec = (0, pgSelect_js_1.getFragmentAndCodecFromOrder)(alias, order, memberCodecs)[1]; + guaranteedNotNull = order.nullable === false; + break; + } + case "attribute": { + const attr = attributes[select.attribute]; + codec = attr.codec; + guaranteedNotNull = attr.notNull; + break; + } + default: { + codec = select.codec; + } + } + return (0, pg_sql2_1.sql) `${codec.castFromPg?.(sqlSrc, guaranteedNotNull || codec.notNull) ?? + (0, pg_sql2_1.sql) `${sqlSrc}::text`} as ${pg_sql2_1.sql.identifier(String(i))}`; + } + else { + // PERF: eradicate this (aggregate mode) without breaking arrayMode + // tuple numbering + return (0, pg_sql2_1.sql) `null as ${pg_sql2_1.sql.identifier(String(i))}`; + } + }); + const unionGroupBy = mode === "aggregate" && groups.length > 0 + ? (0, pg_sql2_1.sql) `group by +${pg_sql2_1.sql.indent(pg_sql2_1.sql.join(groups.map((g) => g.fragment), ",\n"))} +` + : pg_sql2_1.sql.blank; + const unionHaving = mode === "aggregate" && havingConditions.length > 0 + ? (0, pg_sql2_1.sql) `having +${pg_sql2_1.sql.indent(pg_sql2_1.sql.join(havingConditions, ",\n"))} +` + : pg_sql2_1.sql.blank; + const unionOrderBy = mode === "aggregate" + ? pg_sql2_1.sql.blank + : (0, pg_sql2_1.sql) `\ +order by${pg_sql2_1.sql.indent ` +${orders.length + ? (0, pg_sql2_1.sql) `${pg_sql2_1.sql.join(orders.map((o) => { + return (0, pg_sql2_1.sql) `${o.fragment} ${Number(o.direction === "DESC") ^ Number(reverse) + ? (0, pg_sql2_1.sql) `desc` + : (0, pg_sql2_1.sql) `asc`}`; + }), ",\n")},\n` + : pg_sql2_1.sql.blank}\ +${pg_sql2_1.sql.identifier(String(typeIdx))} ${reverse ? (0, pg_sql2_1.sql) `desc` : (0, pg_sql2_1.sql) `asc`}, +${rowNumberIdent} asc\ +`} +`; + // Union must be ordered _before_ applying `::text`/etc transforms to + // select, so we wrap this with another select. + const unionQuery = pg_sql2_1.sql.indent ` +${pg_sql2_1.sql.join(tables, ` +union all +`)} +${unionOrderBy}\ +${limitAndOffsetSQL} +`; + // Adds all the `::text`/etc casting + const innerQuery = (0, pg_sql2_1.sql) `\ +select +${pg_sql2_1.sql.indent(pg_sql2_1.sql.join(outerSelects, ",\n"))} +from (${unionQuery}) ${alias} +${unionGroupBy}\ +${unionHaving}\ +`; + return innerQuery; + }; + const { text, rawSqlValues, identifierIndex, queryValues } = (() => { + const wrapperSymbol = Symbol("union_result"); + const wrapperAlias = pg_sql2_1.sql.identifier(wrapperSymbol); + const { queryValues, placeholderValues, identifiersAlias, identifiersSymbol, } = (0, pgStmt_js_1.makeValues)(info, "union"); + if (queryValues.length > 0 || + (count !== 1 && (forceIdentity || hasSideEffects))) { + const identifierIndex = selectAndReturnIndex((0, pg_sql2_1.sql) `${identifiersAlias}.idx`); + // IMPORTANT: this must come after the `selectExpression` call above. + const innerQuery = makeQuery(); + const { text: lateralText, values: rawSqlValues, [pg_sql2_1.$$symbolToIdentifier]: symbolToIdentifier, } = pg_sql2_1.sql.compile((0, pg_sql2_1.sql) `lateral (${pg_sql2_1.sql.indent(innerQuery)}) as ${wrapperAlias}`, { placeholderValues }); + const identifiersAliasText = symbolToIdentifier.get(identifiersSymbol); + const wrapperAliasText = symbolToIdentifier.get(wrapperSymbol); + /* + * IMPORTANT: these wrapper queries are necessary so that queries + * that have a limit/offset get the limit/offset applied _per + * identifier group_; that's why this cannot just be another "from" + * clause. + */ + const text = `\ +select ${wrapperAliasText}.* +from (select ids.ordinality - 1 as idx${queryValues.length > 0 + ? `, ${queryValues + .map(({ codec }, idx) => { + return `(ids.value->>${idx})::${pg_sql2_1.sql.compile(codec.sqlType).text} as "id${idx}"`; + }) + .join(", ")}` + : ""} from json_array_elements($${rawSqlValues.length + 1}::json) with ordinality as ids) as ${identifiersAliasText}, +${lateralText};`; + return { + text, + rawSqlValues, + identifierIndex, + queryValues, + }; + } + else { + const query = makeQuery(); + const { text, values: rawSqlValues } = pg_sql2_1.sql.compile(query, { + placeholderValues, + }); + return { text, rawSqlValues, identifierIndex: null, queryValues }; + } + })(); + // const shouldReverseOrder = this.shouldReverseOrder(); + // **IMPORTANT**: if streaming we must not reverse order (`shouldReverseOrder` must be `false`) + const cursorDetails = cursorDigest != null && cursorIndicies != null + ? { + digest: cursorDigest, + indicies: cursorIndicies, + } + : undefined; + return { + meta, + text, + rawSqlValues, + identifierIndex, + shouldReverseOrder: info.shouldReverseOrder, + name: hash(text), + queryValues, + first: info.first, + last: info.last, + cursorDetails, + }; +} +function applyConditionFromCursor(info, beforeOrAfter, parsedCursor) { + if (parsedCursor == null) + return; + const { alias, orders, ordersForCursor, memberDigests, cursorDigest } = info; + if (cursorDigest == null) { + throw new Error(`Cursor passed, but could not determine order digest.`); + } + const orderCount = ordersForCursor.length; + // Cursor validity check + (0, pgValidateParsedCursor_js_1.validateParsedCursor)(parsedCursor, cursorDigest, orderCount, beforeOrAfter); + if (orderCount === 0) { + // Natural pagination `['natural', N]` + // This will be used in upperIndex(before)/lowerIndex(after) + const n = parsedCursor[1]; + if (beforeOrAfter === "after") { + info.cursorLower = n; + } + else { + info.cursorUpper = n; + } + return; + } + const identifierPlaceholders = []; + for (let i = 0; i < orderCount; i++) { + const order = orders[i]; + if (i === orderCount - 1) { + // PK (within that polymorphic type) + // TODO: rather than using JSON here and since we now run this at runtime + // rather than plan time, lets expand this to be each individual PK + // column rather than one JSON encoding of the same. + // NOTE: this is a JSON-encoded string containing all the PK values. We + // don't want to parse it and then re-stringify it, so we'll just feed + // it in as text and tell the system it has already been encoded: + identifierPlaceholders[i] = (0, pg_sql2_1.sql) `${pg_sql2_1.sql.value(parsedCursor[i + 1])}::"json"`; + } + else if (i === orderCount - 2) { + // Polymorphic type + identifierPlaceholders[i] = (0, pg_sql2_1.sql) `${pg_sql2_1.sql.value(parsedCursor[i + 1])}::"text"`; + } + else if (memberDigests.length > 0) { + const memberCodecs = memberDigests.map((d) => d.finalResource.codec); + const [, codec] = (0, pgSelect_js_1.getFragmentAndCodecFromOrder)(alias, order, memberCodecs); + identifierPlaceholders[i] = (0, pg_sql2_1.sql) `${pg_sql2_1.sql.value(codec.toPg(parsedCursor[i + 1]))}::${codec.sqlType}`; + } + else { + // No implementations?! + } + } + for (const mutableMemberDigest of memberDigests) { + const { finalResource } = mutableMemberDigest; + const pk = finalResource.uniques?.find((u) => u.isPrimary === true); + if (!pk) { + throw new Error("No primary key; this should have been caught earlier"); + } + const max = orderCount - 1 + pk.attributes.length; + const pkPlaceholder = identifierPlaceholders[orderCount - 1]; + const pkAttributes = finalResource.codec.attributes; + const condition = (i = 0) => { + const order = mutableMemberDigest.orders[i]; + const [orderFragment, sqlValue, direction, nullable = false, nulls = null,] = (() => { + if (i >= orderCount - 1) { + // PK + const pkIndex = i - (orderCount - 1); + const pkCol = pk.attributes[pkIndex]; + return [ + (0, pg_sql2_1.sql) `${mutableMemberDigest.alias}.${pg_sql2_1.sql.identifier(pkCol)}`, + (0, pg_sql2_1.sql) `(${pkPlaceholder}->>${pg_sql2_1.sql.literal(pkIndex)})::${pkAttributes[pkCol].codec.sqlType}`, + "ASC", + false, + ]; + } + else if (i === orderCount - 2) { + // Type + return [ + pg_sql2_1.sql.literal(mutableMemberDigest.member.typeName), + identifierPlaceholders[i], + "ASC", + false, + ]; + } + else { + const [frag, _codec, isNullable] = (0, pgSelect_js_1.getFragmentAndCodecFromOrder)(alias, order, mutableMemberDigest.finalResource.codec); + return [ + frag, + identifierPlaceholders[i], + order.direction, + isNullable, + order.nulls, + ]; + } + })(); + // For the truth-table of this code, have a look at this spreadsheet: + // https://docs.google.com/spreadsheets/d/1m5H-4IRAjhx_Z8v7nd2wMTbmx1dOBof9IroW3WUYE7s/edit?usp=sharing + const gt = (direction === "ASC" && beforeOrAfter === "after") || + (direction === "DESC" && beforeOrAfter === "before"); + const nullsFirst = nulls === "FIRST" + ? true + : nulls === "LAST" + ? false + : // NOTE: PostgreSQL states that by default DESC = NULLS FIRST, + // ASC = NULLS LAST + direction === "DESC"; + // Simple less than or greater than + let fragment = (0, pg_sql2_1.sql) `${orderFragment} ${gt ? (0, pg_sql2_1.sql) `>` : (0, pg_sql2_1.sql) `<`} ${sqlValue}`; + // Nullable, so now handle if one is null but the other isn't + if (nullable) { + const useAIsNullAndBIsNotNull = (nullsFirst && beforeOrAfter === "after") || + (!nullsFirst && beforeOrAfter === "before"); + const oneIsNull = useAIsNullAndBIsNotNull + ? (0, pg_sql2_1.sql) `${orderFragment} is null and ${sqlValue} is not null` + : (0, pg_sql2_1.sql) `${orderFragment} is not null and ${sqlValue} is null`; + fragment = (0, pg_sql2_1.sql) `((${fragment}) or (${oneIsNull}))`; + } + // Finally handle if they're equal - recurse + if (i < max - 1) { + const equals = nullable ? (0, pg_sql2_1.sql) `is not distinct from` : (0, pg_sql2_1.sql) `=`; + const aEqualsB = (0, pg_sql2_1.sql) `${orderFragment} ${equals} ${sqlValue}`; + fragment = (0, pg_sql2_1.sql) `(${fragment}) +or ( +${pg_sql2_1.sql.indent `${aEqualsB} +and ${condition(i + 1)}`} +)`; + } + return pg_sql2_1.sql.parens(pg_sql2_1.sql.indent(fragment)); + }; + const finalCondition = condition(); + mutableMemberDigest.conditions.push(finalCondition); + } +} +function getOrderByDigest(info) { + const { memberDigests, orderSpecs, alias, + // TODO: satisfy placeholders and deferreds before we get this far! + placeholders, deferreds, } = info; + if (memberDigests.length === 0) { + return "natural"; + } + // The security of this hash is unimportant; the main aim is to protect the + // user from themself. If they bypass this, that's their problem (it will + // not introduce a security issue). + const hash = (0, crypto_1.createHash)("sha256"); + const memberCodecs = memberDigests.map((digest) => digest.finalResource.codec); + const tuple = [ + ...orderSpecs.map((o) => { + const [frag] = (0, pgSelect_js_1.getFragmentAndCodecFromOrder)(alias, o, memberCodecs); + const placeholderValues = new Map(); + for (let i = 0; i < placeholders.length; i++) { + const { symbol } = placeholders[i]; + placeholderValues.set(symbol, pg_sql2_1.sql.identifier(`PLACEHOLDER_${i}`)); + } + for (let i = 0; i < deferreds.length; i++) { + const { symbol } = deferreds[i]; + placeholderValues.set(symbol, pg_sql2_1.sql.identifier(`DEFERRED_${i}`)); + } + return pg_sql2_1.sql.compile(frag, { placeholderValues }).text; + }), + "type", + "pk", + ]; + const d = JSON.stringify(tuple); + hash.update(d); + const digest = hash.digest("hex").slice(0, 10); + return digest; +} +function cloneMemberDigest(memberDigest) { + return { + // Unchanging parts + symbol: memberDigest.symbol, + alias: memberDigest.alias, + member: memberDigest.member, + sqlSource: memberDigest.sqlSource, + finalResource: memberDigest.finalResource, + // Mutable parts + orders: [...memberDigest.orders], + conditions: [...memberDigest.conditions], + }; +} +//# sourceMappingURL=pgUnionAll.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUnionAll.js.map b/grafast/dataplan-pg/dist/steps/pgUnionAll.js.map new file mode 100644 index 0000000000..3546788dc6 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUnionAll.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgUnionAll.js","sourceRoot":"","sources":["../../src/steps/pgUnionAll.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts new file mode 100644 index 0000000000..e8126035b3 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts @@ -0,0 +1,101 @@ +import type { ExecutionDetails, GrafastResultsList, Maybe, Setter, SetterCapable } from "grafast"; +import { Step } from "grafast"; +import type { SQL, SQLable } from "pg-sql2"; +import { $$toSQL } from "pg-sql2"; +import type { PgResource } from "../datasource.js"; +import type { GetPgResourceAttributes, GetPgResourceCodec, GetPgResourceUniques, ObjectForResource, PgCodecWithAttributes, PgQueryBuilder, PlanByUniques, ReadonlyArrayOrDirect } from "../interfaces.js"; +import type { PgClassExpressionStep } from "./pgClassExpression.js"; +/** + * Update a single row identified by the 'getBy' argument. + */ +export declare class PgUpdateSingleStep = PgResource> extends Step implements SQLable { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + /** + * Tells us what we're dealing with - data type, columns, where to update it, + * what it's called, etc. + */ + readonly resource: TResource; + /** + * This defaults to the name of the resource but you can override it. Aids + * in debugging. + */ + private readonly name; + /** + * To be used as the table alias, we always use a symbol unless the calling + * code specifically indicates a string to use. + */ + private readonly symbol; + /** = sql.identifier(this.symbol) */ + readonly alias: SQL; + /** + * The attributes and their dependency ids for us to find the record by. + */ + private getBys; + /** + * The attributes and their dependency ids for us to update. + */ + private attributes; + /** + * The id for the PostgreSQL context plan. + */ + private contextId; + /** + * When locked, no more values can be set, no more selects can be added + */ + private locked; + /** + * When finalized, we build the SQL query, queryValues, and note where to feed in + * the relevant queryValues. This saves repeating this work at execution time. + */ + private finalizeResults; + /** + * The list of things we're selecting. + */ + private selects; + private applyDepIds; + constructor(resource: TResource, getBy: PlanByUniques, GetPgResourceUniques>, attributes?: { + [key in keyof GetPgResourceAttributes]?: Step; + }); + toStringMeta(): string | null; + set>(name: TKey, value: Step): void; + /** + * Returns a plan representing a named attribute (e.g. column) from the newly + * updateed row. + */ + get>(attr: TAttr): PgClassExpressionStep[TAttr]["codec"], TResource>; + getMeta(key: string): import("grafast").AccessStep; + record(): PgClassExpressionStep, TResource>; + apply($step: Step>>): void; + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + execute({ indexMap, values, }: ExecutionDetails): Promise>; + finalize(): void; + [$$toSQL](): SQL; +} +/** + * Update a single row identified by the 'getBy' argument. + */ +export declare function pgUpdateSingle>(resource: TResource, getBy: PlanByUniques, GetPgResourceUniques>, attributes?: { + [key in keyof GetPgResourceAttributes]?: Step; +}): PgUpdateSingleStep; +export interface PgUpdateSingleQueryBuilder = PgResource> extends PgQueryBuilder, SetterCapable> { + set>(key: TAttributeName, value: ObjectForResource[TAttributeName]): void; + setBuilder(): Setter, this>; +} +type PgUpdateSingleQueryBuilderCallback = (qb: PgUpdateSingleQueryBuilder) => void; +export {}; +//# sourceMappingURL=pgUpdateSingle.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts.map b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts.map new file mode 100644 index 0000000000..4542ba89dc --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgUpdateSingle.d.ts","sourceRoot":"","sources":["../../src/steps/pgUpdateSingle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,EACL,MAAM,EACN,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAA8C,IAAI,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAe,MAAM,SAAS,CAAC;AACzD,OAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIvC,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,kBAAkB,CAAC;AAErE,OAAO,KAAK,EACV,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EAEjB,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAiBpE;;GAEG;AACH,qBAAa,kBAAkB,CAC3B,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAEpE,SAAQ,IAAI,CAAC,OAAO,EAAE,CACtB,YAAW,OAAO;IAElB,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAS;IAEtB;;;OAGG;IACH,SAAgB,QAAQ,EAAE,SAAS,CAAC;IAEpC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAE9B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,oCAAoC;IACpC,SAAgB,KAAK,EAAE,GAAG,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAIN;IAER;;OAEG;IACH,OAAO,CAAC,UAAU,CAIV;IAER;;OAEG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;IACH,OAAO,CAAC,eAAe,CAA4C;IAEnE;;OAEG;IACH,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO,CAAC,WAAW,CAAgB;gBAGjC,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,aAAa,CAClB,uBAAuB,CAAC,SAAS,CAAC,EAClC,oBAAoB,CAAC,SAAS,CAAC,CAChC,EACD,UAAU,CAAC,EAAE;SACV,GAAG,IAAI,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI;KACzD;IA2DI,YAAY,IAAI,MAAM,GAAG,IAAI;IAMpC,GAAG,CAAC,IAAI,SAAS,MAAM,uBAAuB,CAAC,SAAS,CAAC,EACvD,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,IAAI,GACV,IAAI;IAkBP;;;OAGG;IACH,GAAG,CAAC,KAAK,SAAS,MAAM,uBAAuB,CAAC,SAAS,CAAC,EACxD,IAAI,EAAE,KAAK,GACV,qBAAqB,CACtB,uBAAuB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAClD,SAAS,CACV;IAqCM,OAAO,CAAC,GAAG,EAAE,MAAM;IAInB,MAAM,IAAI,qBAAqB,CACpC,kBAAkB,CAAC,SAAS,CAAC,EAC7B,SAAS,CACV;IA8BD,KAAK,CACH,KAAK,EAAE,IAAI,CACT,qBAAqB,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC,CACjE;IAKH;;;;;;;;;;;OAWG;IACG,OAAO,CAAC,EACZ,QAAQ,EACR,MAAM,GACP,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAyH/C,QAAQ,IAAI,IAAI;IA0DvB,CAAC,OAAO,CAAC;CAGV;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAEhD,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE,aAAa,CAClB,uBAAuB,CAAC,SAAS,CAAC,EAClC,oBAAoB,CAAC,SAAS,CAAC,CAChC,EACD,UAAU,CAAC,EAAE;KACV,GAAG,IAAI,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI;CACzD,GACA,kBAAkB,CAAC,SAAS,CAAC,CAE/B;AAGD,MAAM,WAAW,0BAA0B,CACzC,SAAS,SAAS,UAAU,CAC1B,GAAG,EACH,qBAAqB,EACrB,GAAG,EACH,GAAG,EACH,GAAG,CACJ,GAAG,UAAU,CAAC,GAAG,EAAE,qBAAqB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CACzD,SAAQ,cAAc,EACpB,aAAa,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7C,GAAG,CAAC,cAAc,SAAS,MAAM,iBAAiB,CAAC,SAAS,CAAC,EAC3D,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,GAClD,IAAI,CAAC;IACR,UAAU,IAAI,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;CAC1D;AAED,KAAK,kCAAkC,GAAG,CACxC,EAAE,EAAE,0BAA0B,KAC3B,IAAI,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUpdateSingle.js b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.js new file mode 100644 index 0000000000..6bc191ba05 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.js @@ -0,0 +1,319 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PgUpdateSingleStep = void 0; +exports.pgUpdateSingle = pgUpdateSingle; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importStar(require("pg-sql2")); +const codecs_js_1 = require("../codecs.js"); +const inspect_js_1 = require("../inspect.js"); +const pgClassExpression_js_1 = require("./pgClassExpression.js"); +/** + * Update a single row identified by the 'getBy' argument. + */ +class PgUpdateSingleStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgUpdateSingleStep", + }; } + constructor(resource, getBy, attributes) { + super(); + this.isSyncAndSafe = false; + /** + * The attributes and their dependency ids for us to find the record by. + */ + this.getBys = []; + /** + * The attributes and their dependency ids for us to update. + */ + this.attributes = []; + /** + * When locked, no more values can be set, no more selects can be added + */ + this.locked = false; + /** + * When finalized, we build the SQL query, queryValues, and note where to feed in + * the relevant queryValues. This saves repeating this work at execution time. + */ + this.finalizeResults = null; + /** + * The list of things we're selecting. + */ + this.selects = []; + this.applyDepIds = []; + this.hasSideEffects = true; + this.resource = resource; + this.name = resource.name; + this.symbol = Symbol(this.name); + this.alias = pg_sql2_1.default.identifier(this.symbol); + this.contextId = this.addDependency(this.resource.executor.context()); + const keys = getBy + ? Object.keys(getBy) + : []; + if (!this.resource.uniques.some((uniq) => uniq.attributes.every((key) => keys.includes(key)))) { + throw new Error(`Attempted to build 'PgUpdateSingleStep' with a non-unique getBy keys ('${keys.join("', '")}') - please ensure your 'getBy' spec uniquely identifiers a row (resource = ${this.resource}; supported uniques = ${(0, inspect_js_1.inspect)(this.resource.uniques)}).`); + } + keys.forEach((name) => { + if (grafast_1.isDev) { + if (this.getBys.some((col) => col.name === name)) { + throw new Error(`Attribute '${String(name)}' was specified more than once in ${this}'s getBy spec`); + } + } + const value = getBy[name]; + const depId = this.addDependency(value); + const attribute = this.resource.codec.attributes[name]; + const pgCodec = attribute.codec; + this.getBys.push({ name, depId, pgCodec }); + }); + if (attributes) { + Object.entries(attributes).forEach(([key, value]) => { + if (value) { + this.set(key, value); + } + }); + } + } + toStringMeta() { + return `${this.resource.name}(${this.getBys.map((g) => g.name)};${this.attributes.map((a) => a.name)})`; + } + set(name, value) { + if (this.locked) { + throw new Error("Cannot set after plan is locked."); + } + if (grafast_1.isDev) { + if (this.attributes.some((col) => col.name === name)) { + throw new Error(`Attribute '${String(name)}' was specified more than once in ${this}`); + } + } + const { codec: pgCodec } = this.resource.codec.attributes[name]; + const depId = this.addDependency(value); + this.attributes.push({ name, depId, pgCodec }); + } + /** + * Returns a plan representing a named attribute (e.g. column) from the newly + * updateed row. + */ + get(attr) { + const resourceAttribute = this.resource.codec.attributes[attr]; + if (!resourceAttribute) { + throw new Error(`${this.resource} does not define an attribute named '${String(attr)}'`); + } + if (resourceAttribute?.via) { + throw new Error(`Cannot select a 'via' attribute from PgUpdateSingleStep`); + } + /* + * Only cast to `::text` during select; we want to use it uncasted in + * conditions/etc. The reasons we cast to ::text include: + * + * - to make return values consistent whether they're direct or in nested + * arrays + * - to make sure that that various PostgreSQL clients we support do not + * mangle the data in unexpected ways - we take responsibility for + * decoding these string values. + */ + const sqlExpr = (0, pgClassExpression_js_1.pgClassExpression)(this, resourceAttribute.codec, resourceAttribute.notNull); + const colPlan = resourceAttribute.expression + ? sqlExpr `${pg_sql2_1.default.parens(resourceAttribute.expression(this.alias))}` + : sqlExpr `${this.alias}.${pg_sql2_1.default.identifier(String(attr))}`; + return colPlan; + } + getMeta(key) { + return (0, grafast_1.access)(this, ["m", key]); + } + record() { + return (0, pgClassExpression_js_1.pgClassExpression)(this, this.resource.codec, false) `${this.alias}`; + } + /** + * Advanced method; rather than returning a plan it returns an index. + * Generally useful for PgClassExpressionStep. + * + * @internal + */ + selectAndReturnIndex(fragment) { + // NOTE: it's okay to add selections after the plan is "locked" - lock only + // applies to which rows are being selected, not what is being queried + // about the rows. + // Optimisation: if we're already selecting this fragment, return the existing one. + const index = this.selects.findIndex((frag) => pg_sql2_1.default.isEquivalent(frag, fragment)); + if (index >= 0) { + return index; + } + return this.selects.push(fragment) - 1; + } + apply($step) { + this.applyDepIds.push(this.addUnaryDependency($step)); + } + /** + * `execute` will always run as a root-level query. In future we'll implement a + * `toSQL` method that allows embedding this plan within another SQL plan... + * But that's a problem for later. + * + * This runs the query for every entry in the values, and then returns an + * array of results where each entry in the results relates to the entry in + * the incoming values. + * + * NOTE: we don't know what the values being fed in are, we must feed them to + * the plans stored in this.identifiers to get actual values we can use. + */ + async execute({ indexMap, values, }) { + const { alias, contextId, finalizeResults, resource } = this; + if (!finalizeResults) { + throw new Error("Cannot execute PgSelectStep before finalizing it."); + } + const { table, returning, sqlWhere, queryValueDetailsBySymbol } = finalizeResults; + const contextDep = values[contextId]; + /* + * NOTE: Though we'd like to do bulk updates, there's no way of us + * reliably linking the data back up again given users might have + * triggers manipulating the data so we can't match it back up even using + * the same getBy specs. + * + * Currently it seems that the order returned from `update ... + * from (select ... order by ...) returning ...` is the same order as the + * `order by` was, however this is not guaranteed in the documentation + * and as such cannot be relied upon. Further the pgsql-hackers list + * explicitly declined guaranteeing this behavior: + * + * https://www.postgresql.org/message-id/CAKFQuwbgdJ_xNn0YHWGR0D%2Bv%2B3mHGVqJpG_Ejt96KHoJjs6DkA%40mail.gmail.com + * + * So we have to make do with single updates, alas. + */ + // We must execute each mutation on its own, but we can at least do so in + // parallel. Note we return a list of promises, each may reject or resolve + // without causing the others to reject. + return indexMap(async (i) => { + const context = contextDep.at(i); + const sqlSets = []; + for (const { depId, name, pgCodec } of this.attributes) { + const attVal = values[depId].at(i); + // `null` is kept, `undefined` is skipped + if (attVal !== undefined) { + const sqlIdent = pg_sql2_1.default.identifier(name); + const sqlVal = (0, codecs_js_1.sqlValueWithCodec)(attVal, pgCodec); + sqlSets.push((0, pg_sql2_1.default) `${sqlIdent} = ${sqlVal}`); + } + } + const meta = Object.create(null); + const queryBuilder = { + alias, + [pg_sql2_1.$$toSQL]() { + return alias; + }, + setMeta(key, value) { + meta[key] = value; + }, + getMetaRaw(key) { + return meta[key]; + }, + set(name, attVal) { + const pgCodec = resource.codec.attributes[name]?.codec; + if (!pgCodec) { + throw new Error(`Attribute ${name} not recognized on ${resource}`); + } + const sqlIdent = pg_sql2_1.default.identifier(name); + const sqlVal = (0, codecs_js_1.sqlValueWithCodec)(attVal, pgCodec); + sqlSets.push((0, pg_sql2_1.default) `${sqlIdent} = ${sqlVal}`); + }, + setBuilder() { + return (0, grafast_1.setter)(this); + }, + }; + for (const applyDepId of this.applyDepIds) { + const val = values[applyDepId].unaryValue(); + if (Array.isArray(val)) { + val.forEach((v) => v?.(queryBuilder)); + } + else { + val?.(queryBuilder); + } + } + if (sqlSets.length === 0) { + // No attributes to update?! This isn't allowed. + throw new grafast_1.SafeError("Attempted to update a record, but no new values were specified."); + } + const query = (0, pg_sql2_1.default) `update ${table} set ${pg_sql2_1.default.join(sqlSets, ", ")} where ${sqlWhere}${returning};`; + const { text, values: rawSqlValues } = pg_sql2_1.default.compile(query); + const sqlValues = queryValueDetailsBySymbol.size + ? rawSqlValues.map((v) => { + if (typeof v === "symbol") { + const details = queryValueDetailsBySymbol.get(v); + if (!details) { + throw new Error(`Saw unexpected symbol '${(0, inspect_js_1.inspect)(v)}'`); + } + const val = values[details.depId].at(i); + return val == null ? null : details.processor(val); + } + else { + return v; + } + }) + : rawSqlValues; + const { rows, rowCount } = await this.resource.executeMutation({ + context, + text, + values: sqlValues, + }); + if (rowCount === 0) { + // TODO: should we throw? + return null; + } + return { + __proto__: null, + m: meta, + t: rows[0] ?? [], + }; + }); + } + finalize() { + if (!this.isFinalized) { + this.locked = true; + const resourceSource = this.resource.from; + if (!pg_sql2_1.default.isSQL(resourceSource)) { + throw new Error(`Error in ${this}: can only update into resources defined as SQL, however ${this.resource} has ${(0, inspect_js_1.inspect)(this.resource.from)}`); + } + const table = (0, pg_sql2_1.default) `${resourceSource} as ${this.alias}`; + const fragmentsWithAliases = this.selects.map((frag, idx) => (0, pg_sql2_1.default) `${frag} as ${pg_sql2_1.default.identifier(String(idx))}`); + const returning = fragmentsWithAliases.length > 0 + ? (0, pg_sql2_1.default) ` returning\n${pg_sql2_1.default.indent(pg_sql2_1.default.join(fragmentsWithAliases, ",\n"))}` + : pg_sql2_1.default.blank; + const getByAttributesCount = this.getBys.length; + if (getByAttributesCount === 0) { + // No attributes specified to find the row?! This is forbidden. + throw new grafast_1.SafeError("Attempted to update a record, but no information on uniquely determining the record was specified."); + } + const queryValueDetailsBySymbol = new Map(); + const sqlWhereClauses = []; + for (let i = 0; i < getByAttributesCount; i++) { + const { name, depId, pgCodec } = this.getBys[i]; + const symbol = Symbol(name); + sqlWhereClauses[i] = pg_sql2_1.default.parens((0, pg_sql2_1.default) `${pg_sql2_1.default.identifier(this.symbol, name)} = ${pg_sql2_1.default.value( + // THIS IS A DELIBERATE HACK - we will be replacing this symbol with + // a value before executing the query. + symbol)}::${pgCodec.sqlType}`); + queryValueDetailsBySymbol.set(symbol, { + depId, + processor: pgCodec.toPg, + }); + } + this.finalizeResults = { + table, + returning, + sqlWhere: pg_sql2_1.default.parens(pg_sql2_1.default.join(sqlWhereClauses, " and ")), + queryValueDetailsBySymbol, + }; + } + super.finalize(); + } + [pg_sql2_1.$$toSQL]() { + return this.alias; + } +} +exports.PgUpdateSingleStep = PgUpdateSingleStep; +/** + * Update a single row identified by the 'getBy' argument. + */ +function pgUpdateSingle(resource, getBy, attributes) { + return new PgUpdateSingleStep(resource, getBy, attributes); +} +(0, grafast_1.exportAs)("@dataplan/pg", pgUpdateSingle, "pgUpdateSingle"); +//# sourceMappingURL=pgUpdateSingle.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgUpdateSingle.js.map b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.js.map new file mode 100644 index 0000000000..dd1fd5e93b --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgUpdateSingle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgUpdateSingle.js","sourceRoot":"","sources":["../../src/steps/pgUpdateSingle.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts new file mode 100644 index 0000000000..2c1c52e0ad --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts @@ -0,0 +1,7 @@ +import type { ExecutableStep, Maybe } from "grafast"; +/** + * Validates the given cursor matches the given details. + */ +export declare const pgValidateParsedCursor: ($parsedCursorPlan: ExecutableStep, digest: string, orderCount: number, beforeOrAfter: "before" | "after") => PgValidateParsedCursorStep; +export declare function validateParsedCursor(decoded: Maybe, digest: string, orderCount: number, beforeOrAfter: "before" | "after"): undefined; +//# sourceMappingURL=pgValidateParsedCursor.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts.map b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts.map new file mode 100644 index 0000000000..0974f9c0e8 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pgValidateParsedCursor.d.ts","sourceRoot":"","sources":["../../src/steps/pgValidateParsedCursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,KAAK,EAAE,MAAM,SAAS,CAAC;AAsDrE;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,mBAAmB,cAAc,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,EACxD,QAAQ,MAAM,EACd,YAAY,MAAM,EAClB,eAAe,QAAQ,GAAG,OAAO,+BAOhC,CAAC;AAEJ,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,EAC9B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,QAAQ,GAAG,OAAO,aA+BlC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js new file mode 100644 index 0000000000..dd58ded5d7 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js @@ -0,0 +1,71 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.pgValidateParsedCursor = exports.PgValidateParsedCursorStep = void 0; +exports.validateParsedCursor = validateParsedCursor; +const grafast_1 = require("grafast"); +/** + * Lightweight plan to validate cursor. We couldn't do this with a lambda + * because we want it to be optimised away, and for that we need to implement + * the deduplicate method. + * + * @internal + */ +class PgValidateParsedCursorStep extends grafast_1.UnbatchedStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "PgValidateParsedCursorStep", + }; } + constructor($parsedCursorPlan, digest, orderCount, beforeOrAfter) { + super(); + this.digest = digest; + this.orderCount = orderCount; + this.beforeOrAfter = beforeOrAfter; + this.isSyncAndSafe = true; + this.addDependency($parsedCursorPlan); + if (this.getAndFreezeIsUnary() !== true) { + throw new Error(`PgValidateParsedCursorStep must be unary, you should only use it with input variables`); + } + } + deduplicate(plans) { + return plans.filter((plan) => plan.digest === this.digest && + plan.orderCount === this.orderCount && + plan.beforeOrAfter === this.beforeOrAfter); + } + unbatchedExecute(_info, parsedCursor) { + return validateParsedCursor(parsedCursor, this.digest, this.orderCount, this.beforeOrAfter); + } +} +exports.PgValidateParsedCursorStep = PgValidateParsedCursorStep; +/** + * Validates the given cursor matches the given details. + */ +const pgValidateParsedCursor = ($parsedCursorPlan, digest, orderCount, beforeOrAfter) => new PgValidateParsedCursorStep($parsedCursorPlan, digest, orderCount, beforeOrAfter); +exports.pgValidateParsedCursor = pgValidateParsedCursor; +function validateParsedCursor(decoded, digest, orderCount, beforeOrAfter) { + if (!decoded) { + return undefined; + } + try { + const [cursorDigest, ...cursorParts] = decoded; + if (!cursorDigest || cursorDigest !== digest) { + throw new Error(`Invalid cursor digest - '${cursorDigest}' !== '${digest}'`); + } + if (cursorDigest === "natural") { + if (cursorParts.length !== 1 || typeof cursorParts[0] !== "number") { + throw new Error(`Invalid 'natural' cursor value - ${cursorParts}`); + } + } + else if (cursorParts.length !== orderCount) { + throw new Error(`Invalid cursor length - ${cursorParts.length} !== ${orderCount}`); + } + return undefined; + } + catch (e) { + if (grafast_1.isDev) { + console.error("Invalid cursor:"); + console.error(e); + } + throw new grafast_1.SafeError(`Invalid '${beforeOrAfter}' cursor - a cursor is only valid within a specific ordering, if you change the order then you'll need different cursors.`); + } +} +//# sourceMappingURL=pgValidateParsedCursor.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js.map b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js.map new file mode 100644 index 0000000000..f7a1cb9b5b --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/pgValidateParsedCursor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"pgValidateParsedCursor.js","sourceRoot":"","sources":["../../src/steps/pgValidateParsedCursor.ts"],"names":[],"mappings":";;;AAsEA,oDAmCC;AAxGD,qCAA0D;AAE1D;;;;;;GAMG;AACH,MAAa,0BAA2B,SAAQ,uBAAwB;aAC/D,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,4BAA4B;KACzC,AAHc,CAGb;IAIF,YACE,iBAAwD,EAChD,MAAc,EACd,UAAkB,EAClB,aAAiC;QAEzC,KAAK,EAAE,CAAC;QAJA,WAAM,GAAN,MAAM,CAAQ;QACd,eAAU,GAAV,UAAU,CAAQ;QAClB,kBAAa,GAAb,aAAa,CAAoB;QAN3C,kBAAa,GAAG,IAAI,CAAC;QASnB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,WAAW,CACT,KAAmC;QAEnC,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAC3B,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;YACnC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,aAAa,CAC5C,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,KAAqB,EAAE,YAAmC;QACzE,OAAO,oBAAoB,CACzB,YAAY,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,CACnB,CAAC;IACJ,CAAC;;AAzCH,gEA0CC;AAED;;GAEG;AACI,MAAM,sBAAsB,GAAG,CACpC,iBAAwD,EACxD,MAAc,EACd,UAAkB,EAClB,aAAiC,EACjC,EAAE,CACF,IAAI,0BAA0B,CAC5B,iBAAiB,EACjB,MAAM,EACN,UAAU,EACV,aAAa,CACd,CAAC;AAXS,QAAA,sBAAsB,0BAW/B;AAEJ,SAAgB,oBAAoB,CAClC,OAA8B,EAC9B,MAAc,EACd,UAAkB,EAClB,aAAiC;IAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,CAAC,YAAY,EAAE,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC;QAC/C,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,4BAA4B,YAAY,UAAU,MAAM,GAAG,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,2BAA2B,WAAW,CAAC,MAAM,QAAQ,UAAU,EAAE,CAClE,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,eAAK,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,mBAAS,CACjB,YAAY,aAAa,2HAA2H,CACrJ,CAAC;IACJ,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/toPg.d.ts b/grafast/dataplan-pg/dist/steps/toPg.d.ts new file mode 100644 index 0000000000..bc50575081 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/toPg.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=toPg.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/toPg.d.ts.map b/grafast/dataplan-pg/dist/steps/toPg.d.ts.map new file mode 100644 index 0000000000..98ab0fdc75 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/toPg.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"toPg.d.ts","sourceRoot":"","sources":["../../src/steps/toPg.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/toPg.js b/grafast/dataplan-pg/dist/steps/toPg.js new file mode 100644 index 0000000000..6d33e868c4 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/toPg.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ToPgStep = void 0; +exports.toPg = toPg; +const grafast_1 = require("grafast"); +/** + * Converts the given value to the representation suitable for feeding into the + * PostgreSQL driver. + * + * @remarks This would have been a lambda, but we want to be able to deduplicate it. + * + * @internal + */ +class ToPgStep extends grafast_1.UnbatchedStep { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "ToPgStep", + }; } + constructor($value, codec) { + super(); + this.codec = codec; + this.isSyncAndSafe = true; + this.addDependency($value); + this.peerKey = codec.name; + } + deduplicate(peers) { + return peers.filter((peer) => peer.codec === this.codec); + } + unbatchedExecute(_extra, v) { + return v == null ? null : this.codec.toPg(v); + } +} +exports.ToPgStep = ToPgStep; +/** + * Converts the given value to the representation suitable for feeding into the + * PostgreSQL driver. + * + * @internal + */ +function toPg($value, codec) { + return new ToPgStep($value, codec); +} +//# sourceMappingURL=toPg.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/toPg.js.map b/grafast/dataplan-pg/dist/steps/toPg.js.map new file mode 100644 index 0000000000..2415bc7f67 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/toPg.js.map @@ -0,0 +1 @@ +{"version":3,"file":"toPg.js","sourceRoot":"","sources":["../../src/steps/toPg.ts"],"names":[],"mappings":";;;AA0CA,oBAEC;AA3CD,qCAAwC;AAIxC;;;;;;;GAOG;AACH,MAAa,QAAS,SAAQ,uBAAkB;aACvC,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,UAAU;KACvB,AAHc,CAGb;IAEF,YACE,MAAsB,EACd,KAAc;QAEtB,KAAK,EAAE,CAAC;QAFA,UAAK,GAAL,KAAK,CAAS;QAHxB,kBAAa,GAAG,IAAI,CAAC;QAMnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5B,CAAC;IACD,WAAW,CAAC,KAAiB;QAC3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,gBAAgB,CAAC,MAA+B,EAAE,CAAM;QACtD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;;AApBH,4BAqBC;AAED;;;;;GAKG;AACH,SAAgB,IAAI,CAAC,MAAsB,EAAE,KAAc;IACzD,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/withPgClient.d.ts b/grafast/dataplan-pg/dist/steps/withPgClient.d.ts new file mode 100644 index 0000000000..39d9dfbb83 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/withPgClient.d.ts @@ -0,0 +1,41 @@ +import type { ExecutionDetails, GrafastResultsList } from "grafast"; +import { Step } from "grafast"; +import type { PgClient, PgExecutor, WithPgClient } from "../executor"; +export type WithPgClientStepCallback = (client: TPgClient, data: TData) => Promise; +/** + * Runs the given `callback` against the given `executor` using any plan data + * from `$data` (which can be `constant(null)` if you don't need it). Typically + * useful for running custom transactions. + */ +export declare class WithPgClientStep extends Step { + private callback; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + /** + * Tells us what we're dealing with - data type, columns, where to insert it, + * what it's called, etc. + */ + readonly executor: PgExecutor; + /** + * The id for the PostgreSQL context plan. + */ + private contextId; + /** + * The id for the data plan. + */ + private dataId; + constructor(executor: PgExecutor, $data: Step, callback: WithPgClientStepCallback); + execute({ indexMap, values, }: ExecutionDetails<[ + { + pgSettings: any; + withPgClient: WithPgClient; + }, + TData + ]>): GrafastResultsList; +} +export declare function withPgClient(executor: PgExecutor, $data: Step | (TData extends null | undefined ? null | undefined : never), callback: WithPgClientStepCallback): WithPgClientStep; +export declare function withPgClientTransaction(executor: PgExecutor, $data: Step | (TData extends null | undefined ? null | undefined : never), callback: WithPgClientStepCallback): WithPgClientStep; +//# sourceMappingURL=withPgClient.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/withPgClient.d.ts.map b/grafast/dataplan-pg/dist/steps/withPgClient.d.ts.map new file mode 100644 index 0000000000..17fb77a2a2 --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/withPgClient.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"withPgClient.d.ts","sourceRoot":"","sources":["../../src/steps/withPgClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAY,IAAI,EAAE,MAAM,SAAS,CAAC;AAEzC,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,MAAM,wBAAwB,CAClC,KAAK,EACL,OAAO,EACP,SAAS,SAAS,QAAQ,GAAG,QAAQ,IACnC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEzD;;;;GAIG;AACH,qBAAa,gBAAgB,CAC3B,KAAK,GAAG,GAAG,EACX,OAAO,GAAG,GAAG,EACb,SAAS,SAAS,QAAQ,GAAG,QAAQ,CACrC,SAAQ,IAAI,CAAC,OAAO,CAAC;IA2BnB,OAAO,CAAC,QAAQ;IA1BlB,MAAM,CAAC,QAAQ;;;MAGb;IAEF,aAAa,UAAS;IAEtB;;;OAGG;IACH,SAAgB,QAAQ,EAAE,UAAU,CAAC;IAErC;;OAEG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAS;gBAGrB,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EACV,QAAQ,EAAE,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;IASvE,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,GACP,EAAE,gBAAgB,CACjB;QAAC;YAAE,UAAU,EAAE,GAAG,CAAC;YAAC,YAAY,EAAE,YAAY,CAAC,SAAS,CAAC,CAAA;SAAE;QAAE,KAAK;KAAC,CACpE,GAAG,kBAAkB,CAAC,OAAO,CAAC;CAUhC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EACL,OAAO,EACP,SAAS,SAAS,QAAQ,GAAG,QAAQ,EAErC,QAAQ,EAAE,UAAU,EACpB,KAAK,EACD,IAAI,CAAC,KAAK,CAAC,GACX,CAAC,KAAK,SAAS,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,EAC/D,QAAQ,EAAE,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,+CAO9D;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EACL,OAAO,EACP,SAAS,SAAS,QAAQ,GAAG,QAAQ,EAErC,QAAQ,EAAE,UAAU,EACpB,KAAK,EACD,IAAI,CAAC,KAAK,CAAC,GACX,CAAC,KAAK,SAAS,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,EAC/D,QAAQ,EAAE,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,+CAQ9D"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/withPgClient.js b/grafast/dataplan-pg/dist/steps/withPgClient.js new file mode 100644 index 0000000000..3943d1600f --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/withPgClient.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WithPgClientStep = void 0; +exports.withPgClient = withPgClient; +exports.withPgClientTransaction = withPgClientTransaction; +const grafast_1 = require("grafast"); +/** + * Runs the given `callback` against the given `executor` using any plan data + * from `$data` (which can be `constant(null)` if you don't need it). Typically + * useful for running custom transactions. + */ +class WithPgClientStep extends grafast_1.Step { + static { this.$$export = { + moduleName: "@dataplan/pg", + exportName: "WithPgClientStep", + }; } + constructor(executor, $data, callback) { + super(); + this.callback = callback; + this.isSyncAndSafe = false; + this.hasSideEffects = true; + this.executor = executor; + this.contextId = this.addDependency(this.executor.context()); + this.dataId = this.addDependency($data); + } + execute({ indexMap, values, }) { + const contextDep = values[this.contextId]; + const dataDep = values[this.dataId]; + return indexMap((i) => { + const context = contextDep.at(i); + const data = dataDep.at(i); + const { withPgClient, pgSettings } = context; + return withPgClient(pgSettings, (client) => this.callback(client, data)); + }); + } +} +exports.WithPgClientStep = WithPgClientStep; +function withPgClient(executor, $data, callback) { + return new WithPgClientStep(executor, $data ?? (0, grafast_1.constant)($data), callback); +} +function withPgClientTransaction(executor, $data, callback) { + return withPgClient(executor, $data ?? (0, grafast_1.constant)($data), (client, data) => client.withTransaction((txClient) => callback(txClient, data))); +} +//# sourceMappingURL=withPgClient.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/steps/withPgClient.js.map b/grafast/dataplan-pg/dist/steps/withPgClient.js.map new file mode 100644 index 0000000000..5d40440aaa --- /dev/null +++ b/grafast/dataplan-pg/dist/steps/withPgClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"withPgClient.js","sourceRoot":"","sources":["../../src/steps/withPgClient.ts"],"names":[],"mappings":";;;AAyEA,oCAgBC;AAED,0DAiBC;AA3GD,qCAAyC;AAUzC;;;;GAIG;AACH,MAAa,gBAIX,SAAQ,cAAa;aACd,aAAQ,GAAG;QAChB,UAAU,EAAE,cAAc;QAC1B,UAAU,EAAE,kBAAkB;KAC/B,AAHc,CAGb;IAoBF,YACE,QAAoB,EACpB,KAAkB,EACV,QAA6D;QAErE,KAAK,EAAE,CAAC;QAFA,aAAQ,GAAR,QAAQ,CAAqD;QArBvE,kBAAa,GAAG,KAAK,CAAC;QAwBpB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,GAGP;QACC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAc,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAW,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAC7C,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;;AAtDH,4CAuDC;AAED,SAAgB,YAAY,CAK1B,QAAoB,EACpB,KAE+D,EAC/D,QAA6D;IAE7D,OAAO,IAAI,gBAAgB,CACzB,QAAQ,EACR,KAAK,IAAI,IAAA,kBAAQ,EAAC,KAAc,CAAC,EACjC,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,SAAgB,uBAAuB,CAKrC,QAAoB,EACpB,KAE+D,EAC/D,QAA6D;IAE7D,OAAO,YAAY,CACjB,QAAQ,EACR,KAAK,IAAI,IAAA,kBAAQ,EAAC,KAAc,CAAC,EACjC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CACf,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CACjE,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/utils.d.ts b/grafast/dataplan-pg/dist/utils.d.ts new file mode 100644 index 0000000000..adf9e30028 --- /dev/null +++ b/grafast/dataplan-pg/dist/utils.d.ts @@ -0,0 +1,9 @@ +import { ExecutableStep } from "grafast"; +import type { SQL } from "pg-sql2"; +import type { PgResource } from "./datasource.js"; +import type { PgClassSingleStep, PgSQLCallbackOrDirect } from "./interfaces.js"; +export declare function assertPgClassSingleStep>(step: ExecutableStep | PgClassSingleStep): asserts step is PgClassSingleStep; +export declare function makeScopedSQL(that: TThis): (cb: PgSQLCallbackOrDirect) => T; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/utils.d.ts.map b/grafast/dataplan-pg/dist/utils.d.ts.map new file mode 100644 index 0000000000..68ccd7ecef --- /dev/null +++ b/grafast/dataplan-pg/dist/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,GAAG,EAAe,MAAM,SAAS,CAAC;AAGhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EACV,iBAAiB,EAGjB,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AAMzB,wBAAgB,uBAAuB,CACrC,SAAS,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAErD,IAAI,EAAE,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,GAClD,OAAO,CAAC,IAAI,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAa9C;AAED,wBAAgB,aAAa,CAAC,KAAK,SAAS;IAAE,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAAA;CAAE,EAC1E,IAAI,EAAE,KAAK,GACV,CAAC,CAAC,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAgBxC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/utils.js b/grafast/dataplan-pg/dist/utils.js new file mode 100644 index 0000000000..451c0e6c40 --- /dev/null +++ b/grafast/dataplan-pg/dist/utils.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.assertPgClassSingleStep = assertPgClassSingleStep; +exports.makeScopedSQL = makeScopedSQL; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const pg_sql2_1 = tslib_1.__importDefault(require("pg-sql2")); +const pgDeleteSingle_js_1 = require("./steps/pgDeleteSingle.js"); +const pgInsertSingle_js_1 = require("./steps/pgInsertSingle.js"); +const pgSelectSingle_js_1 = require("./steps/pgSelectSingle.js"); +const pgUpdateSingle_js_1 = require("./steps/pgUpdateSingle.js"); +function assertPgClassSingleStep(step) { + if (!(step instanceof pgSelectSingle_js_1.PgSelectSingleStep || + step instanceof pgInsertSingle_js_1.PgInsertSingleStep || + step instanceof pgUpdateSingle_js_1.PgUpdateSingleStep || + step instanceof pgDeleteSingle_js_1.PgDeleteSingleStep)) { + throw new Error(`Expected a PgSelectSingleStep, PgInsertSingleStep, PgUpdateSingleStep or PgDeleteSingleStep, however we received '${step}'.`); + } +} +function makeScopedSQL(that) { + const sqlTransformer = (sql, value) => { + if (value instanceof grafast_1.ExecutableStep && "pgCodec" in value) { + if (value.pgCodec) { + return that.placeholder(value); + } + else { + throw new Error(`${value} has invalid value for pgCodec`); + } + } + else { + return value; + } + }; + return (cb) => typeof cb === "function" + ? pg_sql2_1.default.withTransformer(sqlTransformer, cb) + : cb; +} +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/utils.js.map b/grafast/dataplan-pg/dist/utils.js.map new file mode 100644 index 0000000000..0ad47e97ee --- /dev/null +++ b/grafast/dataplan-pg/dist/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;AAiBA,0DAiBC;AAED,sCAkBC;;AAtDD,qCAAyC;AAEzC,8DAA0B;AAU1B,iEAA+D;AAC/D,iEAA+D;AAC/D,iEAA+D;AAC/D,iEAA+D;AAE/D,SAAgB,uBAAuB,CAGrC,IAAmD;IAEnD,IACE,CAAC,CACC,IAAI,YAAY,sCAAkB;QAClC,IAAI,YAAY,sCAAkB;QAClC,IAAI,YAAY,sCAAkB;QAClC,IAAI,YAAY,sCAAkB,CACnC,EACD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qHAAqH,IAAI,IAAI,CAC9H,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAC3B,IAAW;IAEX,MAAM,cAAc,GAAsC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACvE,IAAI,KAAK,YAAY,wBAAc,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;YAC1D,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,gCAAgC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAI,EAA4B,EAAE,EAAE,CACzC,OAAO,EAAE,KAAK,UAAU;QACtB,CAAC,CAAC,iBAAG,CAAC,eAAe,CAAC,cAAc,EAAE,EAAsB,CAAC;QAC7D,CAAC,CAAC,EAAE,CAAC;AACX,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/version.d.ts b/grafast/dataplan-pg/dist/version.d.ts new file mode 100644 index 0000000000..184126b4d5 --- /dev/null +++ b/grafast/dataplan-pg/dist/version.d.ts @@ -0,0 +1,2 @@ +export declare const version = "0.0.1-beta.32"; +//# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/version.d.ts.map b/grafast/dataplan-pg/dist/version.d.ts.map new file mode 100644 index 0000000000..1f99446fca --- /dev/null +++ b/grafast/dataplan-pg/dist/version.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,kBAAkB,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/version.js b/grafast/dataplan-pg/dist/version.js new file mode 100644 index 0000000000..6bcd71f6be --- /dev/null +++ b/grafast/dataplan-pg/dist/version.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.version = void 0; +// This file is autogenerated by /scripts/postversion.mjs +exports.version = "0.0.1-beta.32"; +//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/grafast/dataplan-pg/dist/version.js.map b/grafast/dataplan-pg/dist/version.js.map new file mode 100644 index 0000000000..5170c4e6f8 --- /dev/null +++ b/grafast/dataplan-pg/dist/version.js.map @@ -0,0 +1 @@ +{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AAC5C,QAAA,OAAO,GAAG,eAAe,CAAC"} \ No newline at end of file diff --git a/grafast/dataplan-pg/tsconfig.tsbuildinfo b/grafast/dataplan-pg/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..2d1b3f89f4 --- /dev/null +++ b/grafast/dataplan-pg/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../grafast/dist/therecanbeonlyone.d.ts","../../utils/lru/dist/index.d.ts","../../utils/graphile-config/dist/interfaces.d.ts","../../utils/graphile-config/dist/functionality.d.ts","../../utils/graphile-config/dist/hooks.d.ts","../../utils/graphile-config/dist/middleware.d.ts","../../utils/graphile-config/dist/resolvepresets.d.ts","../../utils/graphile-config/dist/index.d.ts","../../node_modules/graphql/version.d.ts","../../node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/graphql/language/source.d.ts","../../node_modules/graphql/jsutils/path.d.ts","../../node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/graphql/language/kinds.d.ts","../../node_modules/graphql/language/tokenkind.d.ts","../../node_modules/graphql/language/ast.d.ts","../../node_modules/graphql/language/location.d.ts","../../node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/graphql/language/directivelocation.d.ts","../../node_modules/graphql/type/directives.d.ts","../../node_modules/graphql/type/schema.d.ts","../../node_modules/graphql/type/definition.d.ts","../../node_modules/graphql/execution/execute.d.ts","../../node_modules/graphql/graphql.d.ts","../../node_modules/graphql/type/scalars.d.ts","../../node_modules/graphql/type/introspection.d.ts","../../node_modules/graphql/type/validate.d.ts","../../node_modules/graphql/type/assertname.d.ts","../../node_modules/graphql/type/index.d.ts","../../node_modules/graphql/language/printlocation.d.ts","../../node_modules/graphql/language/lexer.d.ts","../../node_modules/graphql/language/parser.d.ts","../../node_modules/graphql/language/printer.d.ts","../../node_modules/graphql/language/visitor.d.ts","../../node_modules/graphql/language/predicates.d.ts","../../node_modules/graphql/language/index.d.ts","../../node_modules/graphql/execution/subscribe.d.ts","../../node_modules/graphql/execution/values.d.ts","../../node_modules/graphql/execution/index.d.ts","../../node_modules/graphql/subscription/index.d.ts","../../node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/graphql/validation/validate.d.ts","../../node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/graphql/validation/rules/deferstreamdirectiveonrootfieldrule.d.ts","../../node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/graphql/validation/rules/streamdirectiveonlistfieldrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/graphql/validation/index.d.ts","../../node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/graphql/error/locatederror.d.ts","../../node_modules/graphql/error/index.d.ts","../../node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/graphql/utilities/printschema.d.ts","../../node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/graphql/utilities/concatast.d.ts","../../node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/graphql/utilities/index.d.ts","../../node_modules/graphql/index.d.ts","../../node_modules/eventemitter3/index.d.ts","../grafast/dist/constraints.d.ts","../grafast/dist/bucket.d.ts","../grafast/dist/steps/__item.d.ts","../grafast/dist/steps/__flag.d.ts","../grafast/dist/steps/access.d.ts","../grafast/dist/steps/__value.d.ts","../grafast/dist/steps/listtransform.d.ts","../grafast/dist/steps/connection.d.ts","../grafast/dist/steps/constant.d.ts","../grafast/dist/steps/each.d.ts","../grafast/dist/steps/error.d.ts","../grafast/dist/steps/filter.d.ts","../grafast/dist/steps/first.d.ts","../grafast/dist/steps/groupby.d.ts","../grafast/dist/multistep.d.ts","../grafast/dist/steps/lambda.d.ts","../grafast/dist/steps/last.d.ts","../grafast/dist/steps/list.d.ts","../grafast/dist/steps/listen.d.ts","../grafast/dist/steps/node.d.ts","../grafast/dist/steps/partitionbyindex.d.ts","../grafast/dist/steps/remapkeys.d.ts","../grafast/dist/steps/reverse.d.ts","../grafast/dist/steps/applyinput.d.ts","../grafast/dist/steps/setter.d.ts","../grafast/dist/steps/sideeffect.d.ts","../grafast/dist/steps/__inputlist.d.ts","../grafast/dist/steps/__inputobject.d.ts","../grafast/dist/steps/__inputstaticleaf.d.ts","../grafast/dist/steps/__trackedvalue.d.ts","../grafast/dist/steps/applytransforms.d.ts","../grafast/dist/steps/bakedinput.d.ts","../grafast/dist/steps/condition.d.ts","../grafast/dist/steps/graphqlresolver.d.ts","../grafast/dist/steps/load.d.ts","../grafast/dist/steps/polymorphicbranch.d.ts","../grafast/dist/steps/proxy.d.ts","../grafast/dist/steps/index.d.ts","../grafast/dist/graphqlcollectfields.d.ts","../grafast/dist/engine/executeoutputplan.d.ts","../grafast/dist/engine/outputplan.d.ts","../grafast/dist/engine/operationplan.d.ts","../grafast/dist/step.d.ts","../grafast/dist/engine/layerplan.d.ts","../grafast/dist/error.d.ts","../grafast/dist/steps/__inputdefault.d.ts","../grafast/dist/steps/__inputdynamicscalar.d.ts","../grafast/dist/deferred.d.ts","../grafast/dist/utils.d.ts","../grafast/dist/planjsoninterfaces.d.ts","../grafast/dist/interfaces.d.ts","../grafast/dist/steps/object.d.ts","../grafast/dist/exportas.d.ts","../grafast/dist/grafastprint.d.ts","../grafast/dist/makegrafastschema.d.ts","../grafast/dist/dev.d.ts","../grafast/dist/engine/lib/defaultplanresolver.d.ts","../grafast/dist/engine/lib/withgloballayerplan.d.ts","../grafast/dist/execute.d.ts","../grafast/dist/grafastgraphql.d.ts","../grafast/dist/middleware.d.ts","../grafast/dist/operationplan-input.d.ts","../grafast/dist/polymorphic.d.ts","../grafast/dist/stringifypayload.d.ts","../grafast/dist/stripansi.d.ts","../grafast/dist/subscribe.d.ts","../../node_modules/iterall/index.d.ts","../grafast/dist/args.d.ts","../grafast/dist/version.d.ts","../grafast/dist/index.d.ts","../../utils/pg-sql2/dist/therecanbeonlyone.d.ts","../../utils/pg-sql2/dist/version.d.ts","../../utils/pg-sql2/dist/index.d.ts","../../node_modules/postgres-range/index.d.ts","./src/codecutils/box.ts","./src/codecutils/point.ts","./src/codecutils/circle.ts","./src/codecutils/hstore.ts","./src/codecutils/interval.ts","./src/codecutils/line.ts","./src/codecutils/lseg.ts","./src/codecutils/path.ts","./src/codecutils/polygon.ts","./src/codecutils/index.ts","../../node_modules/chalk/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","./src/formatsqlfordebugging.ts","./src/inspect.ts","./src/executor.ts","./src/filters/pgbooleanfilter.ts","./src/steps/pgcondition.ts","./src/filters/pgclassfilter.ts","./src/steps/pgtemptable.ts","./src/filters/pgmanyfilter.ts","./src/filters/pgorfilter.ts","./src/steps/pginsertsingle.ts","../grafast/fwd/graphql/index.d.ts","../dataplan-json/dist/steps/jsonparse.d.ts","../dataplan-json/dist/index.d.ts","./src/parsearray.ts","./src/steps/pgvalidateparsedcursor.ts","./src/steps/pgselect.ts","./src/steps/pgpageinfo.ts","./src/steps/pgunionall.ts","./src/steps/pgcursor.ts","./src/steps/pgselectsingle.ts","./src/steps/pgupdatesingle.ts","./src/utils.ts","./src/steps/pgstmt.ts","./src/pglocker.ts","./src/pgservices.ts","./src/version.ts","./src/plugins/pgcontextplugin.ts","./src/steps/pgpolymorphic.ts","./src/steps/pgsingletablepolymorphic.ts","./src/steps/topg.ts","./src/steps/withpgclient.ts","./src/index.ts","./src/steps/pgdeletesingle.ts","./src/steps/pgclassexpression.ts","./src/datasource.ts","./src/interfaces.ts","./src/codecs.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/events/index.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/file.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/filereader.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/assert/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/pg/node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/index.d.ts","./src/adaptors/pg.ts","./src/examples/exampleschema.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/codemirror/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/cookies/node_modules/@types/express/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-axis/index.d.ts","../../node_modules/@types/d3-brush/index.d.ts","../../node_modules/@types/d3-chord/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@types/d3-contour/index.d.ts","../../node_modules/@types/d3-delaunay/index.d.ts","../../node_modules/@types/d3-dispatch/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-dsv/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-fetch/index.d.ts","../../node_modules/@types/d3-force/index.d.ts","../../node_modules/@types/d3-format/index.d.ts","../../node_modules/@types/d3-geo/index.d.ts","../../node_modules/@types/d3-hierarchy/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-polygon/index.d.ts","../../node_modules/@types/d3-quadtree/index.d.ts","../../node_modules/@types/d3-random/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-scale-chromatic/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-time-format/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/d3/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/interpret/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/jsonwebtoken/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","../../node_modules/@types/koa-bodyparser/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/ajv/node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/@types/license-checker-webpack-plugin/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@iconify/types/types.d.ts","../../node_modules/@iconify/utils/lib/customisations/defaults.d.ts","../../node_modules/@iconify/utils/lib/customisations/merge.d.ts","../../node_modules/@iconify/utils/lib/customisations/bool.d.ts","../../node_modules/@iconify/utils/lib/customisations/flip.d.ts","../../node_modules/@iconify/utils/lib/customisations/rotate.d.ts","../../node_modules/@iconify/utils/lib/icon/name.d.ts","../../node_modules/@iconify/utils/lib/icon/defaults.d.ts","../../node_modules/@iconify/utils/lib/icon/merge.d.ts","../../node_modules/@iconify/utils/lib/icon/transformations.d.ts","../../node_modules/@iconify/utils/lib/svg/viewbox.d.ts","../../node_modules/@iconify/utils/lib/icon/square.d.ts","../../node_modules/@iconify/utils/lib/icon-set/tree.d.ts","../../node_modules/@iconify/utils/lib/icon-set/parse.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","../../node_modules/@iconify/utils/lib/icon-set/expand.d.ts","../../node_modules/@iconify/utils/lib/icon-set/minify.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","../../node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","../../node_modules/@iconify/utils/lib/svg/build.d.ts","../../node_modules/@iconify/utils/lib/svg/defs.d.ts","../../node_modules/@iconify/utils/lib/svg/id.d.ts","../../node_modules/@iconify/utils/lib/svg/size.d.ts","../../node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","../../node_modules/@iconify/utils/lib/svg/trim.d.ts","../../node_modules/@iconify/utils/lib/svg/pretty.d.ts","../../node_modules/@iconify/utils/lib/svg/html.d.ts","../../node_modules/@iconify/utils/lib/svg/url.d.ts","../../node_modules/@iconify/utils/lib/svg/inner-html.d.ts","../../node_modules/@iconify/utils/lib/svg/parse.d.ts","../../node_modules/@iconify/utils/lib/colors/types.d.ts","../../node_modules/@iconify/utils/lib/colors/keywords.d.ts","../../node_modules/@iconify/utils/lib/colors/index.d.ts","../../node_modules/@iconify/utils/lib/css/types.d.ts","../../node_modules/@iconify/utils/lib/css/icon.d.ts","../../node_modules/@iconify/utils/lib/css/icons.d.ts","../../node_modules/@antfu/utils/dist/index.d.mts","../../node_modules/@iconify/utils/lib/loader/types.d.ts","../../node_modules/@iconify/utils/lib/loader/utils.d.ts","../../node_modules/@iconify/utils/lib/loader/custom.d.ts","../../node_modules/@iconify/utils/lib/loader/modern.d.ts","../../node_modules/@iconify/utils/lib/loader/loader.d.ts","../../node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","../../node_modules/@iconify/utils/lib/emoji/convert.d.ts","../../node_modules/@iconify/utils/lib/emoji/format.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","../../node_modules/@iconify/utils/lib/emoji/data.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/components.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/name.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","../../node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","../../node_modules/@iconify/utils/lib/emoji/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","../../node_modules/@iconify/utils/lib/misc/strings.d.ts","../../node_modules/@iconify/utils/lib/misc/objects.d.ts","../../node_modules/@iconify/utils/lib/misc/title.d.ts","../../node_modules/@iconify/utils/lib/index.d.ts","../../node_modules/mermaid/dist/rendering-util/icons.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/dompurify/dist/purify.es.d.mts","../../node_modules/mermaid/dist/config.type.d.ts","../../node_modules/type-fest/source/basic.d.ts","../../node_modules/type-fest/source/except.d.ts","../../node_modules/type-fest/source/mutable.d.ts","../../node_modules/type-fest/source/merge.d.ts","../../node_modules/type-fest/source/merge-exclusive.d.ts","../../node_modules/type-fest/source/require-at-least-one.d.ts","../../node_modules/type-fest/source/require-exactly-one.d.ts","../../node_modules/type-fest/source/partial-deep.d.ts","../../node_modules/type-fest/source/readonly-deep.d.ts","../../node_modules/type-fest/source/literal-union.d.ts","../../node_modules/type-fest/source/promisable.d.ts","../../node_modules/type-fest/source/opaque.d.ts","../../node_modules/type-fest/source/set-optional.d.ts","../../node_modules/type-fest/source/set-required.d.ts","../../node_modules/type-fest/source/value-of.d.ts","../../node_modules/type-fest/source/promise-value.d.ts","../../node_modules/type-fest/source/async-return-type.d.ts","../../node_modules/type-fest/source/conditional-keys.d.ts","../../node_modules/type-fest/source/conditional-except.d.ts","../../node_modules/type-fest/source/conditional-pick.d.ts","../../node_modules/type-fest/source/union-to-intersection.d.ts","../../node_modules/type-fest/source/stringified.d.ts","../../node_modules/type-fest/source/fixed-length-array.d.ts","../../node_modules/type-fest/source/iterable-element.d.ts","../../node_modules/type-fest/source/entry.d.ts","../../node_modules/type-fest/source/entries.d.ts","../../node_modules/type-fest/source/set-return-type.d.ts","../../node_modules/type-fest/source/asyncify.d.ts","../../node_modules/type-fest/source/package-json.d.ts","../../node_modules/type-fest/source/tsconfig-json.d.ts","../../node_modules/type-fest/base.d.ts","../../node_modules/type-fest/source/utilities.d.ts","../../node_modules/type-fest/ts41/camel-case.d.ts","../../node_modules/type-fest/ts41/delimiter-case.d.ts","../../node_modules/type-fest/ts41/kebab-case.d.ts","../../node_modules/type-fest/ts41/pascal-case.d.ts","../../node_modules/type-fest/ts41/snake-case.d.ts","../../node_modules/type-fest/ts41/index.d.ts","../../node_modules/mermaid/dist/types.d.ts","../../node_modules/mermaid/dist/utils.d.ts","../../node_modules/mermaid/dist/diagram.d.ts","../../node_modules/mermaid/dist/diagram-api/types.d.ts","../../node_modules/mermaid/dist/diagram-api/detecttype.d.ts","../../node_modules/mermaid/dist/errors.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","../../node_modules/mermaid/dist/rendering-util/types.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","../../node_modules/dagre-d3-es/src/graphlib/graph.d.ts","../../node_modules/dagre-d3-es/src/graphlib/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/render.d.ts","../../node_modules/dagre-d3-es/src/index.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","../../node_modules/mermaid/dist/logger.d.ts","../../node_modules/mermaid/dist/internals.d.ts","../../node_modules/mermaid/dist/mermaidapi.d.ts","../../node_modules/mermaid/dist/rendering-util/render.d.ts","../../node_modules/mermaid/dist/mermaid.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/mock-fs/lib/item.d.ts","../../node_modules/@types/mock-fs/lib/file.d.ts","../../node_modules/@types/mock-fs/lib/directory.d.ts","../../node_modules/@types/mock-fs/lib/symlink.d.ts","../../node_modules/@types/mock-fs/lib/filesystem.d.ts","../../node_modules/@types/mock-fs/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/nodemon/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/pluralize/index.d.ts","../../node_modules/prettier/doc.d.ts","../../node_modules/prettier/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/ps-tree/index.d.ts","../../node_modules/ts-toolbelt/out/index.d.ts","../../node_modules/@types/ramda/tools.d.ts","../../node_modules/@types/ramda/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/minipass/dist/commonjs/index.d.ts","../../node_modules/lru-cache/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/path-scurry/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts","../../node_modules/glob/dist/commonjs/pattern.d.ts","../../node_modules/glob/dist/commonjs/processor.d.ts","../../node_modules/glob/dist/commonjs/walker.d.ts","../../node_modules/glob/dist/commonjs/ignore.d.ts","../../node_modules/glob/dist/commonjs/glob.d.ts","../../node_modules/glob/dist/commonjs/has-magic.d.ts","../../node_modules/glob/dist/commonjs/index.d.ts","../../node_modules/rimraf/dist/commonjs/opt-arg.d.ts","../../node_modules/rimraf/dist/commonjs/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/source-list-map/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/tapable/index.d.ts","../../node_modules/@types/tern/lib/tern/index.d.ts","../../node_modules/@types/tern/lib/infer/index.d.ts","../../node_modules/@types/tern/index.d.ts","../../node_modules/source-map/source-map.d.ts","../../node_modules/@types/uglify-js/index.d.ts","../../node_modules/anymatch/index.d.ts","../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../node_modules/@types/webpack-sources/lib/source.d.ts","../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../node_modules/@types/webpack-sources/lib/index.d.ts","../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../node_modules/@types/webpack-sources/index.d.ts","../../node_modules/@types/webpack/index.d.ts","../../node_modules/@types/webpack-bundle-analyzer/index.d.ts","../../node_modules/@types/websocket/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../../../node_modules/@types/color-name/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/global.d.ts"],"fileIdsList":[[320,364],[289,320,364],[260,320,364],[79,81,190,260,280,302,313,320,364,420,421],[79,260,263,264,274,279,280,291,313,320,364,408],[79,260,320,364],[79,260,266,320,364],[79,265,266,267,268,269,270,271,272,273,320,364],[79,320,364],[79,260,263,275,279,280,293,297,311,313,314,320,364],[79,260,263,288,290,293,294,295,305,308,309,312,313,314,320,364,369,377,421],[79,81,260,263,275,277,278,279,320,364],[79,260,263,313,320,364],[79,260,263,282,309,320,364],[79,260,263,283,284,312,320,364],[79,275,320,364],[79,260,274,280,281,282,283,284,285,286,287,292,293,294,295,296,297,298,299,301,302,303,304,305,306,307,308,310,311,312,313,314,320,364],[79,260,263,280,287,293,295,297,298,310,312,314,320,364,408],[79,260,300,320,364],[79,280,320,364],[79,260,302,303,313,320,364],[79,260,263,287,295,297,298,310,312,313,320,364],[79,260,263,320,364],[79,260,295,297,309,320,364],[79,260,263,279,309,311,313,314,320,364],[79,260,263,279,311,312,313,314,320,364],[79,260,293,295,296,297,320,364],[79,260,279,288,297,311,320,364],[79,260,263,277,280,282,291,292,294,296,297,300,301,311,312,313,314,320,364,369],[79,260,263,288,293,296,299,311,312,313,314,320,364],[79,260,288,297,312,320,364],[79,260,263,293,299,301,313,320,364],[79,263,282,283,312,320,364],[79,260,263,280,282,288,290,292,293,294,296,297,299,300,301,309,311,312,313,314,320,364,369],[79,260,313,320,364],[79,260,280,320,364],[79,260,263,287,297,298,310,312,313,320,364],[189,239,241,260,320,364],[192,231,320,364],[192,227,232,233,320,364],[227,233,241,320,364],[234,260,320,364],[189,191,229,231,234,239,241,260,320,364],[81,189,192,227,230,233,234,239,241,260,320,364],[241,320,364],[92,189,239,241,260,320,364],[192,320,364],[189,228,239,260,320,364],[80,81,87,189,205,227,228,232,233,235,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,320,364],[87,93,189,190,191,214,227,228,232,233,234,235,236,237,239,240,260,320,364],[189,227,233,239,241,260,320,364],[87,320,364],[227,233,320,364],[189,227,232,233,239,241,260,320,364],[189,228,232,234,239,241,260,320,364],[193,227,233,241,320,364],[220,227,233,241,320,364],[189,199,227,233,239,241,260,320,364],[189,199,227,233,239,260,320,364],[227,233,241,260,320,364],[189,191,194,195,196,227,233,239,241,260,320,364],[195,227,233,260,320,364],[194,227,233,241,320,364],[189,227,228,233,239,241,260,320,364],[197,227,233,241,320,364],[193,197,198,227,233,320,364],[198,227,233,241,320,364],[189,227,233,239,260,320,364],[197,198,227,233,320,364],[193,194,195,196,197,198,199,200,201,202,203,204,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,242,260,320,364],[205,227,233,241,320,364],[194,199,227,233,241,320,364],[193,198,227,233,241,260,320,364],[194,205,227,233,241,260,320,364],[189,206,227,233,239,241,260,320,364],[199,227,233,241,320,364],[214,260,320,364],[92,189,239,260,320,364],[189,227,232,233,238,239,241,260,320,364],[189,239,260,320,364],[320,364,484],[320,364,680],[320,364,648,683],[320,364,648],[320,364,648,649],[320,364,705],[320,364,695,697],[320,364,695,697,698,699,700,701],[320,364,695,697,698],[320,364,695,697,698,699],[320,364,695,697,698,699,700],[320,364,648,655],[320,364,648,658],[320,364,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709],[320,364,648,649,686,687],[320,364,648,649,686],[320,364,648,649,658],[320,364,648,649,658,669],[320,364,571],[320,364,379,414],[320,364,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482],[320,364,426],[320,364,426,430],[320,364,424,426,428],[320,364,424,426],[320,364,426,432],[320,364,425,426],[320,364,437],[320,364,426,443,444,445],[320,364,426,447],[320,364,426,448,449,450,451,452,453,454,455,456,457,458,459,460],[320,364,426,429],[320,364,426,428],[320,364,426,437],[320,364,484,485,486,487,488],[320,364,484,486],[320,364,379,414,490],[320,364,370,414],[320,364,407,414,499],[320,364,379,414,490,504,505],[320,364,491,499,503],[320,364,508,536],[320,364,507,513],[320,364,518],[320,364,513],[320,364,512],[320,364,530],[320,364,526],[320,364,508,525,536],[320,364,507,508,509,510,511,512,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537],[276,320,364],[320,364,540,544],[320,364,540,541,543],[320,364,544],[320,364,539,540,541],[320,364,376,379,414,496,497,498],[320,364,491,497,499,503,546],[320,364,377,414,548,549],[320,364,376,377,414,551],[320,364,377,414],[320,364,554],[320,364,556,562],[320,364,557,558,559,560,561],[320,364,562],[320,364,376,379,381,384,396,407,414],[320,364,414],[320,364,567],[320,364,568],[320,364,573,576],[320,364,377,407,414],[276,320,364,369,414],[320,364,376,414],[320,364,581],[320,363,364,376,379,380,384,391,407,414,423,501,502,505,506,564,580],[320,364,632],[320,364,634,636,637,638,639,640,641,642,643,644,645,646],[320,364,634,635,637,638,639,640,641,642,643,644,645,646],[320,364,635,636,637,638,639,640,641,642,643,644,645,646],[320,364,634,635,636,638,639,640,641,642,643,644,645,646],[320,364,634,635,636,637,639,640,641,642,643,644,645,646],[320,364,634,635,636,637,638,640,641,642,643,644,645,646],[320,364,634,635,636,637,638,639,641,642,643,644,645,646],[320,364,634,635,636,637,638,639,640,642,643,644,645,646],[320,364,634,635,636,637,638,639,640,641,643,644,645,646],[320,364,634,635,636,637,638,639,640,641,642,644,645,646],[320,364,634,635,636,637,638,639,640,641,642,643,645,646],[320,364,634,635,636,637,638,639,640,641,642,643,644,646],[320,364,634,635,636,637,638,639,640,641,642,643,644,645],[320,364,842,843,844,845],[320,364,841],[320,364,414,841],[320,364,841,842,843,844],[320,361,364],[320,363,364],[364],[320,364,369,399],[320,364,365,370,376,377,384,396,407],[320,364,365,366,376,384],[315,316,317,320,364],[320,364,367,408],[320,364,368,369,377,385],[320,364,369,396,404],[320,364,370,372,376,384],[320,363,364,371],[320,364,372,373],[320,364,376],[320,364,374,376],[320,363,364,376],[320,364,376,377,378,396,407],[320,364,376,377,378,392,396,399],[320,359,364,412],[320,364,372,376,379,384,396,407],[320,364,376,377,379,380,384,396,404,407],[320,364,379,381,396,404,407],[318,319,320,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413],[320,364,376,382],[320,364,383,407,412],[320,364,372,376,384,396],[320,331,335,364,407],[320,331,364,396,407],[320,326,364],[320,328,331,364,404,407],[320,364,384,404],[320,326,364,414],[320,328,331,364,384,407],[320,323,324,327,330,364,376,396,407],[320,331,338,364],[320,323,329,364],[320,331,352,353,364],[320,327,331,364,399,407,414],[320,352,364,414],[320,325,326,364,414],[320,331,364],[320,325,326,327,328,329,330,331,332,333,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,353,354,355,356,357,358,364],[320,331,346,364],[320,331,338,339,364],[320,329,331,339,340,364],[320,330,364],[320,323,326,331,364],[320,331,335,339,340,364],[320,335,364],[320,329,331,334,364,407],[320,323,328,331,338,364],[320,364,396],[320,326,331,352,364,412,414],[320,364,385],[320,364,386],[320,363,364,387],[320,361,362,363,364,365,366,367,368,369,370,371,372,373,374,376,377,378,379,380,381,382,383,384,385,386,387,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413],[320,364,390],[320,364,391],[320,364,376,392,393],[320,364,392,394,408,410],[320,364,376,396,397,399],[320,364,398,399],[320,364,396,397],[320,364,399],[320,364,400],[320,361,364,396],[320,364,376,402,403],[320,364,402,403],[320,364,369,384,396,404],[320,364,405],[320,364,384,406],[320,364,379,391,407],[320,364,369,408],[320,364,396,409],[320,364,383,410],[320,364,411],[320,364,369,376,378,387,396,407,410,412],[320,364,396,413],[320,364,376,396,404,414,415,416,419,420,421],[320,364,857,858],[320,364,857],[320,364,862],[320,364,562,865,866],[320,364,861,963],[320,364,861,964],[320,364,562,865],[320,364,861,864],[320,364,855,860,861],[320,364,379,396,414],[320,364,396,414],[320,364,890,929],[320,364,890,914,929],[320,364,929],[320,364,890],[320,364,890,915,929],[320,364,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928],[320,364,915,929],[320,364,377,396,414,495],[320,364,377,504],[320,364,379,414,496,502],[320,364,936,937],[320,364,540,936],[320,364,540,937],[320,364,712],[320,364,939],[320,364,379,384,414,632],[320,364,414,943,944,945,946,947,948,949,950,951,952,953],[320,364,942,943,952],[320,364,943,952],[320,364,933,942,943,952],[320,364,942,943,944,945,946,947,948,949,950,951,953],[320,364,943],[320,364,369,942,952],[320,364,369,414,631,939,940,941,954],[320,364,376,379,381,384,407,414],[320,364,376,379,381,384,396,404,407,413,414],[320,364,960],[320,364,587,588,592,619,620,622,623,624,626,627],[320,364,585,586],[320,364,585],[320,364,587,627],[320,364,587,588,624,625,627],[320,364,627],[320,364,584,627,628],[320,364,587,588,626,627],[320,364,587,588,590,591,626,627],[320,364,587,588,589,626,627],[320,364,587,588,592,619,620,621,622,623,626,627],[320,364,584,587,588,592,624,626],[320,364,592,627],[320,364,594,595,596,597,598,599,600,601,602,603,627],[320,364,617,627],[320,364,593,604,612,613,614,615,616,618],[320,364,597,627],[320,364,605,606,607,608,609,610,611,627],[320,364,825,826,827,828,829],[320,364,823],[320,364,824,830,831],[320,364,713],[320,364,570,575],[320,364,873,875,879,880,883],[320,364,884],[320,364,875,879,882],[320,364,873,875,879,882,883,884,885],[320,364,879],[320,364,875,879,880,882],[320,364,873,875,880,881,883],[320,364,876,877,878],[320,364,377,386,414,873,874],[89,90,96,97,320,364],[98,164,165,320,364],[89,96,98,320,364],[90,98,320,364],[89,91,92,93,96,98,101,102,320,364],[91,103,117,118,320,364],[89,96,101,102,103,320,364],[89,93,96,98,100,101,102,320,364],[89,90,101,102,103,320,364],[88,104,109,116,119,120,163,166,188,320,364],[89,320,364],[90,94,95,320,364],[90,94,95,96,97,99,110,111,112,113,114,115,320,364],[90,95,96,320,364],[90,320,364],[89,90,95,96,98,111,320,364],[96,320,364],[90,96,97,320,364],[94,96,320,364],[103,117,320,364],[89,91,92,93,96,101,320,364],[89,96,99,102,320,364],[91,100,101,102,105,106,107,108,320,364],[102,320,364],[89,93,96,98,100,102,320,364],[98,101,320,364],[98,320,364],[89,96,102,320,364],[90,96,101,112,320,364],[101,167,320,364],[98,102,320,364],[96,101,320,364],[101,320,364],[89,99,320,364],[89,96,320,364],[96,101,102,320,364],[121,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,320,364],[101,102,320,364],[93,96,320,364],[89,96,100,101,102,114,320,364],[89,93,96,102,320,364],[89,93,96,320,364],[122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,320,364],[114,122,320,364],[122,320,364],[89,96,98,101,121,122,320,364],[89,96,98,100,101,102,114,121,320,364],[320,364,573],[275,320,364,574],[320,364,714],[320,364,715,757],[320,364,538,715,753,756],[320,364,755,757],[320,364,508,536,715,754,755,761,833,834],[320,364,711,715,754,755,756,757,758,759,761,835,836,837],[320,364,715,754,756,757],[320,364,648,710],[320,364,757,761,835],[320,364,761],[320,364,508,536,754,761,822,832,838],[320,364,754,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821],[320,364,508,536,754,761],[320,364,715,760,822],[320,364,715],[320,364,508,536,538,715,754],[320,364,376,400,414],[320,364,414,416,417,418],[320,364,396,414,416],[320,364,852],[320,364,572],[320,364,887],[320,364,377,886],[320,364,629],[320,364,541,583,628],[320,364,541,629],[320,364,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745],[320,364,731],[320,364,731,742],[320,364,717,733],[320,364,733],[320,364,740],[320,364,716],[320,364,717],[320,364,725],[320,364,747],[320,364,746,748,749,750,751,752],[320,364,749],[320,364,748],[320,364,379,384,404,407,410,540,545,583,629,630,631],[82,320,364],[82,83,320,364],[82,83,84,85,86,320,364],[261,262,320,364]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8c2f60c3192f66fe9e5e7a7a941534583cdff4f5a059fad30b1b863a547f388a","impliedFormat":1},{"version":"27b4308d9e3db258a09b8b7bd92677320d654f5fc089abbbcb1fd2f70b14c909","impliedFormat":1},{"version":"d1d7e7d247badcbc50cf0bd6b1096dc7ab3cd36b31e9803b3c0acbbfacc493d2","impliedFormat":1},{"version":"6c2a2e7e8500f70a127dbb259d99c0f3951394df7c46a69eb2569f0e8c14665e","impliedFormat":1},{"version":"924e12558578f341179bb878e75cfd9aa648254f5ac6cf228832fae40a52c067","impliedFormat":1},{"version":"3f7705b6434455ff25ac2d336388564173179a4aed8cd0d1b1ea235f0fd3de23","impliedFormat":1},{"version":"b5f6aef5039b1b98a67bf3a3ed52f8693a56be698da9e4a41e2d67b0751ee005","affectsGlobalScope":true,"impliedFormat":1},{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"f473be7c909dbd10c40f013e70da40f24648b2abb01025436fe0a0eecd0e83be","impliedFormat":1},{"version":"c98583f02275727ead0256c97298c15fb77a1c1e473b03c3b61291c63c66d385","impliedFormat":1},{"version":"9a7904e39add402d71343ac8de5303e990d9abb1fc703c64991c655b718267a5","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"f671901909a26ae633328d6d899992193ca9ea718e6315f2c3d46f39c437f02c","impliedFormat":1},{"version":"7920b8aa27a7b6a90bf9f5dc21eedac7f38ca8717ebe70495ab616eb52b3247b","impliedFormat":1},{"version":"485fb40ef0ae61e1f8f5f494a2aa4a69df73dc860b5c94ef8fc8dc42679fdb26","impliedFormat":1},{"version":"1f53ae308869bfb894735576727f3dca47d0405ba7fee4f076a701b449ce6f94","impliedFormat":1},{"version":"84bdeff726a44cad4c07230ccdd2b777e53608d081eb8b27f6d28540ac22a915","impliedFormat":1},{"version":"1950e4d79983ccc330513fb28324280bbd138fc69e2739353008ae5a75f976e6","impliedFormat":1},{"version":"2e9b3ece2914738d48a674dc4d677a6cef576ef045356961120a7915735e13f4","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"3c8c852d93800512dc47f4554efe94789bd81733947e2066a916ba70fe6992fd","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"5a2ae43daf9d478f37780e3ae08089a46347e395812c7c4526684878e34b1401","impliedFormat":1},{"version":"d60984fcae46158649bf553c1a649428ced1dfaa789086a7fb79a819536b0023","impliedFormat":1},{"version":"ff90925b7aef60c568d491966f90f37cfe4eb126a590e68a33c017b9be483f84","impliedFormat":1},{"version":"cbd12dce7f4a3542b0f00690efcf1211e50ad87bd78cedbf7beb60acb27d20a0","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"6b6fdab709d30fbedb090e783a610662e60b4922843f42ef801e3073a23392ee","impliedFormat":1},{"version":"65b2a90560049039460015abe63b8fa7f205bb78796a8de48a3661cfe7e07e28","impliedFormat":1},{"version":"1b6173159974df8ff78f3b01b8b89449053c1912c2ec715a2dc664d8d93a54c1","impliedFormat":1},{"version":"2b4b6a59d7d1020b65f9c878850b1aa2ae8eceb26025224d6bee2c5d7883d815","impliedFormat":1},{"version":"d45acd2463649e59b4dafb4ee051426783c6a13a72c21fac94265676f7fc01d8","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"7ef6d45ce6f0ee16a0441063ca89cebfbe4c00647132f5fe31bbe5420e20843b","impliedFormat":1},{"version":"11c2481df1d73d5d667ce282d1ec9fbcedee39f0a0382fd591cf6434b21f05d0","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"ac7eec65e925055052e4c3d88a303457150e7ddf8f02256a674315335b95af70","impliedFormat":1},{"version":"bb61172ecd43ac71849821f49ef6afa6515230386b253817c380873bdc49da50","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"1b3a76621e54583d0f1a9fcde6b7aa7642283412b103744f7b2a5c3c19108959","impliedFormat":1},{"version":"6f0f5830c13abe710e1e7e97bed1ae039f3a9fc8b5ce2a076141eaf0c854fee6","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"3307e5b71a5eea118476097fde4580e60c20b187e945f42d7eb69a8dbbe7e09a","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"0a08db8f792dd2b329dfb09bb2c7805298d03888608acd9eb554a8ad820e1079","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"490725ebec9ddfc97663887989ff1a49323b7cce7293970732ef962cffed3699","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"cf3f331aad22bfead8f79aae52f022f25bf9ce25185cfc87f3c4a59c060a699e","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"da129261494c4094bf55c761ba5f0ae4d5426d83ed5e312bc7f8600727bb8a05","impliedFormat":1},{"version":"cd2f8f7d90d8d283bb4b91b57406bf793df731d39bc2c119e3fa514a057d21f8","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"1930700210612b5324055fd9d335f4f2a7bb3f1b1433e1adadd7bdc5ee50272f","impliedFormat":1},{"version":"b998db2d97135f8958613fd1d795fc58a17b8fcc452288eaec13e8c8d870d1ac","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"2d8df720a088cfdc1253782b120f400cbe0d4516bb06e98c88ae7c2af1447653","impliedFormat":1},{"version":"99acda6ceb0b1e5a754aa8e7af740702e50ab515561be3d987392f04d0f7078e","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"806f43175b88c9a2ef89448cef56bc95c4df32a27be99748c517e5ca076919e8","impliedFormat":1},{"version":"5832c4ed86047766c1d4cfe2aa5780e3ab5d8d842d12664d0f71faf78c80dd7e","impliedFormat":1},{"version":"a43d21378510cf4ed5aad29f64f3d0fc6e0a30bb2bb81af0ea776b239a77d068","impliedFormat":1},{"version":"60c4cb259d73efe80ca3854715efdf93710a8b11a560a7f9741d6638280b4a80","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"faa402775a4c220279f9c26074a0010f10a7f0293c506ffd0857ea45e8ba7733","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"08b603e3737ff32a685eefca3e7f21324b8b868f3322416cef759f8a54d234ef","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"14d8af44e19148423a5a0817544a229e3ba324e1cd814c1d7b4ca2690baf434c","impliedFormat":1},{"version":"91122fba45414382787d7cffbd90298118a2970f8f12d91cff302f3a482f01e1","impliedFormat":1},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"b6ac3e813f3bc41717619291caf2fbc75ee84b4f5bd3abd3e48885831ebdaf96","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"691e623f6b017a026baf823394aa6d74efabfe877b799c539e085e3f82247cd8","impliedFormat":1},{"version":"a4808116b12ab27b11b3800dbc2b64dd122d4748d48a111957b87b52fd3cda2d","impliedFormat":1},{"version":"2501feb6d0a73d980a9b8e5e03c7e15053788a7fbae6d55cf93df3b0e06dbedb","impliedFormat":1},{"version":"dc9412bbe64fc748d330f3e574c0440753daefc81cc74791198a0223f2114b5a","impliedFormat":1},{"version":"bbd9e6f68bf6e418bd44d7991a4860b1d386a30b798d1be773931ac7bd1e657a","impliedFormat":1},{"version":"f7ff9fd2db48fbabaf6516a4c3515b07325baf4c7a35766a7bc1ce72a1bb9b83","impliedFormat":1},{"version":"e383a277c8c485ffafdeea2bd0d28036bd8d1be4b2d6099a7b27ecc4419fe8d4","impliedFormat":1},{"version":"66a1d3c8e68134692c9784cfcd8ca275d8e24ace1bc01c432c5a2cc27ef27701","impliedFormat":1},{"version":"18b79e1c4ef00056857db2070ed947e32dae63dbbaefadee3cb6e8f21d5193d2","impliedFormat":1},{"version":"cbce9fb00ac5676380dafebfd7e5ce1561f17dfbe6356597d6e5d9b6b9bd5fe2","impliedFormat":1},{"version":"ae042e01074576c186a734888cd420dcf9eccf57053c9d7de5326cc235b7d3ac","impliedFormat":1},{"version":"040c519477a40f166f9d3d1f1e792761de759c5301466833b74d119957c794b3","impliedFormat":1},{"version":"d5a20d626aa5d02f7732d87050b9f3589627f36e4b4d01fe171d2cb9a958b21c","impliedFormat":1},{"version":"d36fb912245b9e1c7a4ac59cffe51d83546d2b03f52e2b3b9fff969d01257800","impliedFormat":1},{"version":"70ecd65df736dcf74d8304cd3767a863b7fab2bfa04a73c039c995cfd88489dc","impliedFormat":1},{"version":"53960fc36042dc4aef356c0273674bb0e7f65059720fb42ac36d29a8d2e3cbf1","impliedFormat":1},{"version":"8c607552166070130883b20fb7da9c7b7006e065239c2075f47e3349f3664c66","impliedFormat":1},{"version":"d3878648b6e0c7f8ca809b4a03d8d13ddccdde282c6c84aa1faf59f0780a888c","impliedFormat":1},{"version":"c1a24626823048792dc4440975646629ae984fa3354cd2f09270834d90fd997d","impliedFormat":1},{"version":"696e8b13ed6b15e0395fa6438f43e1363e09204f080640c6cb5437323f9ed8fb","impliedFormat":1},{"version":"a5d6fe2a52c03c4f5edb8c1ef06ccfc777ae377d0f0dbd7df3b066b0f9cec946","impliedFormat":1},{"version":"34b4698d4b6ccfb2b1e3e034d4463ecf490a6c700d229685f7b5b08ccc150393","impliedFormat":1},{"version":"f19baa96f4a8c3b23453401f7864ef337ebd2533dca12c042155cbd526341f29","impliedFormat":1},{"version":"a1604f4912418542596cf7598f199be7f276b7ad715416c59603d048894733e4","impliedFormat":1},{"version":"11b0c060c13dcf6fd09d60d9870f4921492a4d3c1b39a33f9d93f22f1dfb7c3b","impliedFormat":1},{"version":"a59bdaea7395061b93e12c89996770f196ada0f3e9197e2343763c65d0588dd8","impliedFormat":1},{"version":"9ffe848f345f1ac8c2fa2f4706c38840fe2beb455e19c5dce756e0ad09776235","impliedFormat":1},{"version":"013c10b8066b319a9dc033db24f0467737406810561d0c55d8bab3c8212788bb","impliedFormat":1},{"version":"b424df9fec80812448f7b2977e3220d5a2eb88e6c8e8b675c282f4eb1f4b8834","impliedFormat":1},{"version":"d66670300c6ad07603217e119240d129d327ee2cb4e05cdfc86f7f01e36a42ea","impliedFormat":1},{"version":"3dbba617428a6892f0e7a3c16d960738db464eb8df6724df7d95e7a4f116f110","impliedFormat":1},{"version":"3d7926e64b370e31cd4080bb432adb9e92fe096e31bee0685ee49d75cd317120","impliedFormat":1},{"version":"5862b0752f1eeef4061683d1311ebec322696c9ccd497e14b9d0c97545b317b6","impliedFormat":1},{"version":"c9829971663604cc72b30018b901c7cd97483587953e8a9535616ae04c808867","impliedFormat":1},{"version":"b0b73baeadd229c956da12d8b08f9c464b15e653d6dc5838bea41c733de7fe00","impliedFormat":1},{"version":"88ad86557665308c7957b0aeefbba159d9c99ed57e1d9a696cb4b068ea30f68d","impliedFormat":1},{"version":"8ce9716f8368167c631c4240de8cb2b5997c1c2ad9d885609079ec4c30877139","impliedFormat":1},{"version":"35595df80753dbc2b21a04ddb000835b32f0b9ad56ea259d4e6e9ee674debef4","impliedFormat":1},{"version":"efc5e846a8dcc7aeb97cdf4d6e529079e4ab45ac3cd39ab38ca96599bbcf232f","impliedFormat":1},{"version":"730450f8a576f827f2044ff9e3f0f7130e605b79087552c11ac5d92fda9a7e1d","impliedFormat":1},{"version":"9a62c9484c14c0cb33dbcdcc11e405821ee668e714799f7a125b840eeb8e89ef","impliedFormat":1},{"version":"1fb8ecfdc58a9071337c56072dd9b3c78c7d2f76730a1be8d27224ca083227a5","impliedFormat":1},{"version":"3bb99d9565690ee166e65b90817eb27c7c942b0efa84609bf2fcf0a8cc9405b8","impliedFormat":1},{"version":"c742fe995845140002d0baa8785af21a3bab8527b5584cdb0b407a226107f585","impliedFormat":1},{"version":"ffa065aa3455b257438ce8c9768c5e0f80ea3820094ee8a1120fb4437cc3e7a4","impliedFormat":1},{"version":"c325aac67ed6a692a807c9396d513ce37ed8f56c8d8ca7bf4ea76d4cd09e7c20","impliedFormat":1},{"version":"9d39a014e37dc53a1dafdb2ef5099417bd00174b815ac7e390414372b30a14bd","impliedFormat":1},{"version":"86a07b0fb1f46d39132ef555b215e7db97e906596697469df465c310646d3528","impliedFormat":1},{"version":"0e198c29a6251d421945c8d803c593eeaa2e92de8d8aee6412a2911195055162","impliedFormat":1},{"version":"f7df54c02497181cc6e63d6eada933f477a18b3a72776a0a77e63de603439061","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"a6292eb5c4a48e71b5f49c4ca89b9aa76108a93b7ac98c656a8f1dfc5a614bd7","impliedFormat":1},{"version":"7a9121b2912c6821f2783964444cac3050e17b3b75512965e0a32e66b414d592","impliedFormat":1},{"version":"9e8cb3ec89db85e85513bb89adbe63b8acccad3fffe11d6d8df01c865c77fb5a","impliedFormat":1},{"version":"f3dd8466af3baf161e0d203a1a28c7bbf9f863679c3b0e659371b1835b40f193","impliedFormat":1},{"version":"e8f141e5548179b835f699a1026f79ea581eeac1a4e57f5f22dcd0b4a772cbbc","impliedFormat":1},{"version":"2ef7e3af3848886c22ace971e69966b203eb67b2d1787d5e44c99519c09892aa","impliedFormat":1},{"version":"ddad846edb02abe8e625649c4a5dd64be1bde5d7631302d1fa4d45d14ed8b51f","impliedFormat":1},{"version":"a119ad4d2a84d13a333dbfa30e43bfccf4a0dc040c732d676adab436626f25ee","impliedFormat":1},{"version":"a7e006e3243d9746d204b7addb1f034e5deb4a0d157d8c85ecada87a86f222ff","impliedFormat":1},{"version":"fda09dd5bb69c3fdf9ae579b4b9f5a7db565223896f50aed99760821c1517bbc","impliedFormat":1},{"version":"261a9e319315e52f88b1cb347db2ce4277ea7a6eb6fccd90c289b119353d5b78","impliedFormat":1},{"version":"4871318522f755858f7edb640a4c3ea1614ff99be9d69340f5a51ce82fd809df","impliedFormat":1},{"version":"5208acbce57501f3d5dd58f4956d43734b3a007b8b86578c935785ec72408e04","impliedFormat":1},{"version":"41449e5c8ad2b4ad46497762cb72ec680457e35e03b658842f257a79da3d694c","impliedFormat":1},{"version":"2e567bb91461de2ab714bfd4261ce4f58c389cd3dba268958fdaef6cf20f7e3c","impliedFormat":1},{"version":"7c296bb31e778cea0fd700a14fbe683b665db7115f09700d8416cf24b83cdfcc","impliedFormat":1},{"version":"0b3109399eb9e01963064b099613e2f79810b0771aef56b628c4e6651f35440e","affectsGlobalScope":true,"impliedFormat":1},{"version":"516f341210dea50c84646ee54f7d0cfee42efc76756b45dd46b09c34758e786b","impliedFormat":1},{"version":"4ffd67840b9c111b0147391cec4e17634adacbcaa7ab66aabbf19819583b8786","impliedFormat":1},{"version":"aa7540691d60e42d4d7f082fad0fb3dc4e50592fc91b8e2f01688c31c40364b6","impliedFormat":1},{"version":"5c53ec3e7d027ebc6bd54189cd2b511406797ab2b7b31a2cd54b1ecf1636719f","impliedFormat":1},{"version":"89aa93a24c68a1049f93c14ae53c06ee1fcc4d095f56273a58504485984d4c8e","signature":"dd10e13f8460b7843b1dd45f6d6cd8610805b34c1e309e212d623fc7e71b3a20","impliedFormat":1},{"version":"917df542ae9bf3f46e3be95bfd8ce2b8ee4ea86cfbc138982c84d2428cc76811","signature":"3fd0e3f06216c76348ea8873b9447b486a3dbd12528c007c59a34436bc840f71","impliedFormat":1},{"version":"7ceedc648c231752bd4785cc4569ab36ca0de68ecc057101c2597c2191b85ce9","signature":"6e2666d8a71db78d13e8c7a9af3de6b3d7ec7943f720beb3c82c559a62260cf9","impliedFormat":1},{"version":"51b5a17eb69785b5c76799851b51e9379d79e1e51531b7b7e0de9b3bd67ec87d","signature":"e1fdc2be6f8bce5802d26b1f7c9207fd334a930c6b65832cdfc5fc0596cd5c1a","impliedFormat":1},{"version":"b83be930f50207a461697f2657861c8e7336bfa3c815135fc4de21b6a2218474","signature":"190d71370381a8153240ba29f2596c8f79c8da8d89304e6a6825fc6d6ff213ea","impliedFormat":1},{"version":"9dde38c72e30c1e297412a33590d4119d0a06f41f7638bba9d2c3d111209311d","signature":"93af727a1d56a8e799165d99c5ca24627d77fa26b30c70f8f3ed0df37623a3f9","impliedFormat":1},{"version":"a3251dc357f1e93a0f9c51150fcbf373b126c48e3defa751b30e4e1946bda67e","signature":"0c0ca987db3ac1227cc075ffe8e07d829975cfb41f77ad8ed692a7382598eade","impliedFormat":1},{"version":"0a1ee1a493f46c277aa6897447daae27cef198bb6f0221b342699183085fd4b1","signature":"088f1fdd19db3be3a6bcbd8d09c3a0a2f6f2ae59d8520f4f0ad7da8fa9383fa9","impliedFormat":1},{"version":"514bb405e32eda484e15acb7cb36203c80384ce70edd9829a78369288e229781","signature":"a4badbe9c95ce7712450285ee98f34a9d2c72240096eee7d683b405b91c6b639","impliedFormat":1},{"version":"033f859cfefa0ac474c26b5eb0a497dfb9d6d11e32d5e922ad86e6ae17229ada","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"1555fe4a827e768b46b14e19823399cd10d357196d1bf757db224c08c9af2f6b","signature":"e7ed94ee951c2ccc38fa87f7400d3b9d6ab739c924cb211cb216d1331e5af7a6","impliedFormat":1},{"version":"595ec9cfd45edf272e35bb1a723a2bc0161aa699f2d2fa08bc3bb62a7107c7b6","signature":"d751081230981b36b832737b9a64081b67b29a778905a388d2aa9091e6fc3629","impliedFormat":1},{"version":"d657b615a3caae3c28254fe3dd3ce7f2758e0c2a2eba7983a797993163ea52d2","signature":"958bcb3ff5cf43a1b07ff81e76a89876cb1af79839f8a086ab2a4319770c0d92","impliedFormat":1},{"version":"c0a227eefa6f3ed83831ea0187f9a0152b240b5ce1f667897282f8acd0d4df1d","signature":"0e09d07ddd69a4b558e89f89cd0ed0f401fd62be5509990191fa0a29f2204d70","impliedFormat":1},{"version":"3a711eb68d51315896bbb26dc048f9a60ead1b20a67acb73d09fd06c64183a17","signature":"ac5a2b48e429edade182c4e19e35fc9c7afba95e15c078b8d37d458d82c6d241","impliedFormat":1},{"version":"2201c32f8dedd037c89d5c2a0fe7fbe8db4a589db3303fa0c0a6c568c1e94e24","signature":"1b9a4dc7f32dee424a1fa47750aed7f9e99b09dfa75d0b75ae49160c8bbcd519","impliedFormat":1},{"version":"c90eee9adbef710ec95be8007446069783afd02d5f7bc4d225c2aac52d7b3f4c","signature":"f688ca2343e82e9ba3674234e637bc544e1156c096bd1fbe05db709aae8068d5","impliedFormat":1},{"version":"2af0fd749f1dcfcc3c2358e83c8e03992ca10c98d5ae422b981e179da8acd6fc","signature":"29cef6f9233836d7a0442e7ce29a793ee2a72d492d45043fa8a51d16a3adb055","impliedFormat":1},{"version":"bf2b9073b8ea6418066ea4367a1dbc31296699c0cd02d6c7dba770e7411426cd","signature":"52e82648cc5768685ad19c908d4a89933aaff00ab46877829309bfb9a10b384b","impliedFormat":1},{"version":"4e418a28f638271b142c6a889cef250ca54852d6a11a7e9e2ca7c2ae382d334d","signature":"64d81faf35b6a4ccb4ab25f9e12f1797c60bed4407ce5d8c96c956653be3cf72","impliedFormat":1},{"version":"00c167f32444b220a604a8308f4466cb83b1e3de66ccffdcdefb65a49c26f161","impliedFormat":1},{"version":"a300b3d1fd727ce517240746c0d70c6f620a5bb97ae06b84f92c32acb8458949","impliedFormat":1},{"version":"fa2bec09f892e9cbb2b86167134b987c2008d0e5654123bb0d533037b0982cd4","impliedFormat":1},{"version":"6de62634fda519f5ad38c4731fdf0b9c7ab01de0abbc18ce8661dcba9e26c7bc","signature":"de97b49044946e0aa214d7995a3586ea9b177c6abb0de3b3b29afdb6124e71d2","impliedFormat":1},{"version":"cd487c1f81cfa691ba766099c2be0320dec8ab69e547fe7df399c739ae92c58b","signature":"ff29c4cf0469f5dd7d3eac9b467f81822928819ba78e639b13e6c78105c749e5","impliedFormat":1},{"version":"3bd506102fa10d85899e5f6e93aeeef8983fb6d19d805ab32eadd194c308d5ac","signature":"4659c220fb2f447f5b2f7a2890211f76c7d15b19713fa95aeee1373b1b147273","impliedFormat":1},{"version":"6f7d109872ba5c9017b0e4a935530dfc98196bb8d20dc20d2be6796eaebac367","signature":"68377f04568ea6488e2be3a854ac6f71e0158644e1941f3fe262d1fb06b2cec3","impliedFormat":1},{"version":"8f7375844c17d83905b23ac6bb9fbb872959b039b7adb56af829719ba74722ac","signature":"88b54688a5eda5e2ad9e99c0662c95151093caddec114791ac24b82188aa6746","impliedFormat":1},{"version":"99d6809456a01c9c7f377556f733b37313220a7cfb5ab1dfdef406f4b02587c8","signature":"29b804c93ed84d6157ca548eed3101a087eb55e5ca955efd8e1b7c038d099f25","impliedFormat":1},{"version":"9fc2a2bfaf1f4a524f28a2b27ae013bb67e9e62b4aafc63a4c5c848f02f9f503","signature":"6b97cdb90865a8f80c0b028dd91de05896e7eb8df037b3c83c8cd802be5291d5","impliedFormat":1},{"version":"2dd20c6256788772edce1ceca1f1ab1a7edf2ff688563aae2cbfcc10b7e17da5","signature":"d0bf945d8100fea4749732c5ec05cc52a2bd180f4916c5c8c47381dd7474098c","impliedFormat":1},{"version":"bd6b6a1e6e7827722bdab701e2cfbd4e1c687f667f293b107b0884d1042a6aaf","signature":"46b70b5bd03cf1825abc765ec2a7f0929376750e585daeaaf2f8b90868f0e765","impliedFormat":1},{"version":"cda6ef6edd54325ae0314c730c909ffaeb6b1deb6c4c9997cf9b54654adc71cb","signature":"7f1fd092746175f884edc0ec18daca9c904c67830ae865454456a28cbeaadcdc","impliedFormat":1},{"version":"d2f701839547af5ab6a8fbb71a33ce708a4b1e546cb86d5f2518ec3c48182382","signature":"493949712102eb0e9f2ce218477df8e6a95b4bc82f10cf3c645e3385f38e3eda","impliedFormat":1},{"version":"72a2d9a769cead8cd22f3c0a52d9f06f6b06058a32ebb97296ac717b33e85eb2","signature":"54052d53a08df28c7fd71955fc7953ade19b0ab882c1cb106527002c3ad3bbab","impliedFormat":1},{"version":"23f2b48802b1511061c6a350fb761eabd08baf5b3d45e9d047d6621cda42daa0","signature":"23afa72921e474c1d2fa3f7df310cfc84f9b89287b6b0eb9026628b25cc12f85","impliedFormat":1},{"version":"c757a3ef7a37ae2bab4d8c2f13676564e374c8ccb22039fe346bcd98d92b7a95","signature":"4e2735f31dfd30eba8a1e2fb19a065d460d1a7649374f68545a769aca229a341","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea064f4b0c3662d7b35e4a311d64d477d486190c753135bb0018dc3082b906a6","signature":"ec0d421fa486ed96b1f70a84c7eb5019e4c2e2d00d9ecbdbc1c3fadcaf0f419b","impliedFormat":1},{"version":"2019780f0054f6c8322cb7cb345fd2e3e2f26ab7e2119f23707d98125c178b3e","signature":"b86985b96dc8877652e6708f86f50a49293380d17b2a56430542317fed6cd0a1","impliedFormat":1},{"version":"c717dab4e621c113c3ef2e8accf0121b2217860081b8c0b8f5b751fdc0879454","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"ad7ac8425cba35a71e470a36f847b9918600e4337cdfa296a1a61d8784789026","signature":"d27a2d113d5051cb297b91ab5026a714196d343c58bd3392371eac361d4760c5","impliedFormat":1},{"version":"b626ab00c800a70894dbafc5494c282b0b867e53dec7aa19b4b6a0dd118f9030","signature":"7f0466f8eded73b2a801307f761744bceb5f5f3690d24effa64af8ae8e85a5bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb4ebe8c1a5f372f45afba4c64e6957f257cb850d9e268c4329a91fae7818da3","signature":"63d5e71e01b06135f70038c4870884ea1ddc213e9f0a3b6ab2f39524ecb155ed","impliedFormat":1},{"version":"5bdf3b820e609fa7298e53a6f95a95008b1a61f387acf68a83724a8224e3d345","signature":"8026db154f04a9fa97599d327ae5e1481f4468238e8380437e382827c275dbb8","impliedFormat":1},{"version":"aaa5bd027797615fde56eb76415c5f0ab1f69a9f78b993d132845781e4e6a413","signature":"5a351530ecc309ffa33ae34ab65b43db7aaf89477a466559d3ec4f280b7cd2f2","impliedFormat":1},{"version":"8685dd092d9ddf5002af0de99aa4e427a8dc92272f06b88e49a384db82479a51","signature":"0fa269c73ba7136c928893f0456f79f45f879133bb2b4294bc03c53d9a0fb0ec","impliedFormat":1},{"version":"2265960cba050c012ec1f020e61d6dd8d638f1ddd513cc8c7f5c3c564dd0e73b","signature":"388d98e84155f138e926f8a8ed53a9917b3885fc369efec3720ba24ad0d5e0c7","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"400db42c3a46984118bff14260d60cec580057dc1ab4c2d7310beb643e4f5935","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a37b8d00d03f0381d2db2fe31b0571dc9d7cc0f4b87ca103cc3cd2277690ba0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"afbe82d2b4857d674686255c44c8590dfe0b40927713876f875fdf4960473441","impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"c21e3729094ed9ecdcb97724ce5b20625bb9ac3b9146d681cafa97d667c12bb5","impliedFormat":1},{"version":"4bad2f2148a072f31924e78190a5afe365c8c147d38c1fceaded3455352ba34f","signature":"8520d238e767c8f03f72c8c8ae8fddddf884c1eb638159d49b0680a2c374eb99","affectsGlobalScope":true,"impliedFormat":1},{"version":"4956593d98af8850e5b07a0fce7e86c5a278cfc09c2fcf7116169a91c7886e5d","signature":"fccd6b364b9d996aa561b684d794c881ca7be37ad5b6dc2b31f043254760e12f","impliedFormat":1},{"version":"87f287f296f3ff07dbd14ea7853c2400d995dccd7bd83206196d6c0974774e96","impliedFormat":1},{"version":"78ef0198c323d0f7b16f993ada3459f0e7e20567e7f56fe0c5ee78f31cb0840c","impliedFormat":1},{"version":"01dea450d742aa55ce9b8ab8877bbda8eb73bf88609e440cc34f6f59f35080db","impliedFormat":1},{"version":"5ec614ed82e045de15417a47e2568be5310d43d4764ee43d295ea38caafbfd17","impliedFormat":1},{"version":"b788ef070e70003842cbd03c3e04f87d46b67a47b71e9e7d8713fd8c58c5f5ec","impliedFormat":1},{"version":"583d365dc19f813f1e2767771e844c7c4ea9ab1a01e85e0119f2e083488379c2","impliedFormat":1},{"version":"b82fc3869c625b828dd3feac4b5ebf335ed007d586dc16176602db73bc4e7c65","impliedFormat":1},{"version":"05e30605274c26f405c411eebed776fa2102418c05beec885e5c9bd0fa716f32","impliedFormat":1},{"version":"58c7f7820dc027a539b0437be7e1f8bdf663f91fbc9e861d80bb9368a38d4a94","impliedFormat":1},{"version":"d67d6b779d0dece9450d7a4170d3ee58ea7fcae0af2ab5e1d0ad711474b4f7f5","impliedFormat":1},{"version":"1066c11177d085898185548e1b38ed15fcea50061508f7c313ab8bec35d46b95","impliedFormat":1},{"version":"bbc49fd9dc6ee162ba3d270c834398e0c1d44e657ac4edfa55ac837902b7e0da","impliedFormat":1},{"version":"6993f360de4984b6743764fad3b88246d5dc6cfa45567783fc23833ad4e50c13","impliedFormat":1},{"version":"f11eb1fb4e569b293a7cae9e7cdae57e13efc12b0e4510e927868c93ec055e82","impliedFormat":1},{"version":"715682cddbefe50e27e5e7896acf4af0ffc48f9e18f64b0a0c2f8041e3ea869b","impliedFormat":1},{"version":"6d2f5a67bfe2034aa77b38f10977a57e762fd64e53c14372bcc5f1d3175ca322","impliedFormat":1},{"version":"4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","impliedFormat":1},{"version":"33859aa36b264dd91bef77c279a5a0d259c6b63684d0c6ad538e515c69a489ec","impliedFormat":1},{"version":"33fa69f400b34c83e541dd5f4474f1c6fb2788614a1790c6c7b346b5c7eaa7dd","impliedFormat":1},{"version":"be213d7cbc3e5982b22df412cf223c2ac9d841c75014eae4c263761cd9d5e4c0","impliedFormat":1},{"version":"66451f9540fdf68a5fd93898257ccd7428cf7e49029f2e71b8ce70c8d927b87a","impliedFormat":1},{"version":"8a051690018330af516fd9ea42b460d603f0839f44d3946ebb4b551fe3bc7703","impliedFormat":1},{"version":"301fb04ef91ae1340bec1ebc3acdd223861c887a4a1127303d8eef7638b2d893","impliedFormat":1},{"version":"06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","impliedFormat":1},{"version":"fc26991e51514bfc82e0f20c25132268b1d41e8928552dbaed7cc6f3d08fc3ac","impliedFormat":1},{"version":"5d82bb58dec5014c02aaeb3da465d34f4b7d5c724afea07559e3dfca6d8da5bc","impliedFormat":1},{"version":"44448f58f4d731dc28a02b5987ab6f20b9f77ad407dcf57b68c853fe52195cd7","impliedFormat":1},{"version":"b2818e8d05d6e6ad0f1899abf90a70309240a15153ea4b8d5e0c151e117b7338","impliedFormat":1},{"version":"1c708c15bb96473ce8ec2a946bd024ecded341169a0b84846931f979172244ba","impliedFormat":1},{"version":"ed0f5e1f45dc7c3f40356e0a855e8594aa57c125a5d8dfeef118e0a3024f98ff","impliedFormat":1},{"version":"dc187f457333356ddc1ab8ec7833cd836f85e0bbcade61290dc55116244867cb","impliedFormat":1},{"version":"25525e173de74143042e824eaa786fa18c6b19e9dafb64da71a5faacc5bd2a5c","impliedFormat":1},{"version":"7a3d649f2de01db4b316cf4a0ce5d96832ee83641f1dc84d3e9981accf29c3a1","impliedFormat":1},{"version":"26e4260ee185d4af23484d8c11ef422807fb8f51d33aa68d83fab72eb568f228","impliedFormat":1},{"version":"c4d52d78e3fb4f66735d81663e351cf56037270ed7d00a9b787e35c1fc7183ce","impliedFormat":1},{"version":"864a5505d0e9db2e1837dce8d8aae8b7eeaa5450754d8a1967bf2843124cc262","impliedFormat":1},{"version":"2d045f00292ac7a14ead30d1f83269f1f0ad3e75d1f8e5a245ab87159523cf98","impliedFormat":1},{"version":"54bcb32ab0c7c72b61becd622499a0ae1c309af381801a30878667e21cba85bb","impliedFormat":1},{"version":"20666518864143f162a9a43249db66ca1d142e445e2d363d5650a524a399b992","impliedFormat":1},{"version":"28439c9ebd31185ae3353dd8524115eaf595375cd94ca157eefcf1280920436a","impliedFormat":1},{"version":"84344d56f84577d4ac1d0d59749bb2fde14c0fb460d0bfb04e57c023748c48a6","impliedFormat":1},{"version":"89bcaf21b0531640604ca9e0796f54a6e1b4e2d43c07422ffa1e3d2e1bb0e456","impliedFormat":1},{"version":"66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","impliedFormat":1},{"version":"35a0eac48984d20f6da39947cf81cd71e0818feefc03dcb28b4ac7b87a636cfd","impliedFormat":1},{"version":"f6c226d8222108b3485eb0745e8b0ee48b0b901952660db20e983741e8852654","impliedFormat":1},{"version":"93c3b758c4dc64ea499c9416b1ed0e69725133644b299b86c5435e375d823c75","impliedFormat":1},{"version":"4e85f443714cff4858fdaffed31052492fdd03ff7883b22ed938fc0e34b48093","impliedFormat":1},{"version":"0146912d3cad82e53f779a0b7663f181824bba60e32715adb0e9bd02c560b8c6","impliedFormat":1},{"version":"70754650d1eba1fc96a4ed9bbbc8458b341b41063fe79f8fa828db7059696712","impliedFormat":1},{"version":"220783c7ca903c6ce296b210fae5d7e5c5cc1942c5a469b23d537f0fbd37eb18","impliedFormat":1},{"version":"0974c67cf3e2d539d0046c84a5e816e235b81c8516b242ece2ed1bdbb5dbd3d6","impliedFormat":1},{"version":"b4186237e7787a397b6c5ae64e155e70ac2a43fdd13ff24dfb6c1e3d2f930570","impliedFormat":1},{"version":"2647784fffa95a08af418c179b7b75cf1d20c3d32ed71418f0a13259bf505c54","impliedFormat":1},{"version":"0480102d1a385b96c05316b10de45c3958512bb9e834dbecbbde9cc9c0b22db3","impliedFormat":1},{"version":"eea44cfed69c9b38cc6366bd149a5cfa186776ca2a9fb87a3746e33b7e4f5e74","impliedFormat":1},{"version":"7f375e5ef1deb2c2357cba319b51a8872063d093cab750675ac2eb1cef77bee9","impliedFormat":1},{"version":"b7f06aec971823244f909996a30ef2bbeae69a31c40b0b208d0dfd86a8c16d4f","impliedFormat":1},{"version":"0421510c9570dfae34b3911e1691f606811818df00354df7abd028cee454979f","impliedFormat":1},{"version":"1517236728263863a79500653cc15ceb286f048907b3dba3141a482ca6946bd7","impliedFormat":1},{"version":"7c7b418e467a88a714b4c6dac321923b933f82875f063f48abf952021a2c2df1","impliedFormat":1},{"version":"33120063a7e106818ce109be9238569edca74d4e8530f853bd30d298d1375fd8","impliedFormat":1},{"version":"8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4584e95c63371b5d507749924d94e324c7e041f964975a92e7c8a1abc840328","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"0504070e7eaba788f5d0d5926782ed177f1db01cee28363c488fae94950c0bbc","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"6847334317c1bc1e6fc4b679b0095bbd2b6ee3b85fe3f26fc26bac462f68ef5e","impliedFormat":1},{"version":"2224f3072e3cc07906eeed5c71746779511fba2dd224addc5489bcdb489bdee5","impliedFormat":1},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"7f15c8d21ca2c062f4760ff3408e1e0ec235bad2ca4e2842d1da7fc76bb0b12f","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","impliedFormat":1},{"version":"fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"fbf802b3a028f5eb22ad406ee5fc7c368f0acfd3a2a6d0f805120766f5717ec8","impliedFormat":1},{"version":"63786b6f821dee19eb898afb385bd58f1846e6cba593a35edcf9631ace09ba25","impliedFormat":1},{"version":"ff954afaefd9bd5fad03678cae63fd23e0aaaf4d311b27bfb35e1d6d83833997","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"818e7c86776c67f49dbd781d445e13297b59aa7262e54b065b1332d7dcc6f59a","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"7e8d3f08435ad2cefe67f58182618bfc9a0a29db08cf2544b94cbcae754a9bd9","impliedFormat":1},{"version":"8cf9b9045a614f883b623c2f1a631ec6a93321747e933330b2eec0ee47164a34","impliedFormat":1},{"version":"cee62e64fc4bdfb3798ab8e21486fadd2027ce4128349989acc63905366f91c5","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"c68eb17ea7b2ff7f8bcfe1a9e82b8210c3112820d9e74b56b0fbecaab5ce8866","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"ee736931bcb117efdd2118795ccfa4b2d0beb8fec426f91ae448e51b03510707","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"9068fb04d9df0cb5de85ced5c4d70a935096c4cb289ab76b038e0a2496c92503","impliedFormat":1},{"version":"1f2bcc8836f72a2ff7a6804dc5379e9b73bf94a51d8e60c43cf5b874b5f4f6ff","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"100985057cdd198e32b471b9c92a39080e5e50720b2cb290d04ddf40fbe71c84","impliedFormat":99},{"version":"333d9b9067c0213cd7b275d1d78bab0577ba31ef7a63306ab65a74e83a546a65","impliedFormat":99},{"version":"85566a0b81339b43e063f5cd8cc49a9b9bc177bc5ad3ffd5e4874700040ec11e","impliedFormat":99},{"version":"c2688779f6804c3bc6dfa33d05a810464c684a74f92aee6b0f0d4bcd7dbeed6d","impliedFormat":99},{"version":"16331f489efb6af7d06037074020644d9175f70a7a6466d926f63e74af5a77d8","impliedFormat":99},{"version":"2b2b8b64b39f152439ecb9f04b3d6c1d88d35c75bf14a4eb98f1cc791f092366","impliedFormat":99},{"version":"395548b309c8fe9ffadd8b1055898fffa29bd28ea1f8079f33e48a65601589e2","impliedFormat":99},{"version":"e38871affeac7cf4dd4cc3a55714ff38d55f137c30788d30e454a6e3058f36bc","impliedFormat":99},{"version":"783a0f8fb88d659272c1ac541719e32235881815705b44fb63b6af579885ea75","impliedFormat":99},{"version":"6a60957e322c4c060ddf3073130cbcbcbc5e639e21cd2279df43184bfa8cb9a3","impliedFormat":99},{"version":"5b353617eeb8a37c7a9497ebaeacc027bd7487eec10ffbebca41dcdc2634af70","impliedFormat":99},{"version":"cedbd20d98f3fd7c1fa00742292ab5b13c3fec266ae41b90c47b716ef06cd983","impliedFormat":99},{"version":"9713bcf79cd728919262a2a543484a5f9bd24a15cfec1cee096d9d17a9f5524d","impliedFormat":99},{"version":"35fb129972553f809a7045f3cb952c2598299548018a23238304c020cb16945f","impliedFormat":99},{"version":"855b0379a6b6e96eda055cff16da442b4a7a4548101848b9ae48bce22879569e","impliedFormat":99},{"version":"ea2ac8d236dddbce748dbaffcaa1bfcadae6fbcae1fd0a67e17d5e35d5e38dfc","impliedFormat":99},{"version":"a7750935d6a1cbd259861b5acf1c912f9d3b10efd8602f61fc858f04f261595d","impliedFormat":99},{"version":"e0aa3276d014f3c798dd3101af8c8545b56d79665a7a982b4cf6fe28551a3b56","impliedFormat":99},{"version":"ea744987345eb5ae036495b0185e95eeb7d2d999b0ef80265f79434e83863e9e","impliedFormat":99},{"version":"c3bc54ba21655aaf1db5bb97c42f56bbfe5a3a3c40e3884ef3ba2cdaa9f34c1f","impliedFormat":99},{"version":"705917c38d2e92347b5e57c1c6007da46f1005874ef2257cc8dfff59cba4710f","impliedFormat":99},{"version":"40925b4938b527a6267b1fe56a2e97cc52ea9d73eec90ea8e05df773a182101e","impliedFormat":99},{"version":"2930156137f4885c3ad168804c557edfc9bb88ae0e1df487f4adcdc771286ad7","impliedFormat":99},{"version":"b63e990c632eeee9375c2c43bbd5cdcb23418b79edcb57afa53edf4dd597b33c","impliedFormat":99},{"version":"721dcf072e75b71b5ab7a0bbbd6578f908c36a0bfaefa1454d3e43938bde67a5","impliedFormat":99},{"version":"5704f5ee2642dd0b810bb07ce6e4e51319ed4d6db78747ff54675e72c3fede06","impliedFormat":99},{"version":"da2be38a98356fdd540580a68338df2d2450ec071b1cb5bdbfe8e52075ddde9e","impliedFormat":99},{"version":"3af0bb87094d80e20b0d451626eef1e2da701891c41998ac0a6a6c91cff86f74","impliedFormat":99},{"version":"30a211e9de0dd587f8c690f9ed9378c15c79bcbe762dd85a61c548e5058c3fd6","impliedFormat":99},{"version":"a7cda498cd929d2f958ce49abbaef1abf999ec40884a04cd28ff34317d844e54","impliedFormat":99},{"version":"e48b510f40f29a89d9dbe19a9fca96d7f02b721aec6754fd5c242f9893d06508","impliedFormat":99},{"version":"30d88e2e7c4ca1cdfeb37cf05a2d7a351c68b14ac472e6238401ecb7b75686ea","impliedFormat":99},{"version":"03b34718c02b6225c2f7d7c374cb701ab04461a5cfa66d150531c9f31e39da49","impliedFormat":99},{"version":"7dfe7da785eafad3e3d0cc66545e97f1acf934ebe5b2ec8f4a34341a9ca76ed4","impliedFormat":99},{"version":"8c7829855345152b7b3c196e82147153115d5b568ff97be0e40d161e8d9d2f51","impliedFormat":99},{"version":"f30a36ff98b099ea8c635146dfdd1d810bc14ec303acb653ca938445047b0e41","impliedFormat":99},{"version":"07fa63aca536ca8d8d8c6a56eabcf77f746609921fe23d780a69e2c0a2a65701","impliedFormat":99},{"version":"c8fe48c4437d4ead0a841128d179f8bb99e0e38f9ccb80ca6be14833e30bc129","impliedFormat":99},{"version":"5eac3facc9f59e960c00f41502b34a908776cfba6d7e1a5a4ead5030682b7434","impliedFormat":99},{"version":"d44f8de16b9c6ef4ebd88d4162bc24942bee9975f88162a8962bb572e62dc5df","impliedFormat":99},{"version":"0251c18e8c863bf5ef510043644299aceab6debf3d87aab8c8cfded5aef7d6af","impliedFormat":99},{"version":"292f7dc6b4be74f148f5e5b57b9e8a7f515d7d4f6183d3f9162e127e50959ba9","impliedFormat":99},{"version":"c1608d867d6ddda5c0f4736cf4959e2b2c6bcda660c4c72f7feb36b3998df2bb","impliedFormat":99},{"version":"02d77b0d27ecb78e28d3a376c6cdce05fabcf58f2fd01c102f031d8e375191da","impliedFormat":99},{"version":"daef84b3b89e60054fab1abaafe38eda673f88abdedc3920015d61f1cc5358b8","impliedFormat":99},{"version":"f3318054dc392b6661785263095ed8f1555f0d8f3ce534c8c2de8895b4ec7bd3","impliedFormat":99},{"version":"6c3aa7e0c4eb4d8d7fc24df037980369e70a28f9237cae77511b4cfc6a1b74d0","impliedFormat":99},{"version":"ecc7e0840690cc4b9a2587a4f550b292c35d36150c6c108803bbdfc3bead5b91","impliedFormat":99},{"version":"e11a23b343084cdec24d718fc64369dc8b6dece71314b41d4b5938f2a568834d","impliedFormat":99},{"version":"ce678766176812e8eda3f4925304d4159d806f50fa8a93a72da56e95dae8bbc8","impliedFormat":99},{"version":"bb21d35a36dc1db80a2cf29383bb7304919708cde205bbe246ec47176336e255","impliedFormat":99},{"version":"df657f732e32af7c7550da93e66dfdfa142fc1282b4a392ec78fc9aefbd6fdd0","impliedFormat":99},{"version":"b20ef0766a8a578e5c542aafaa8c53b7e2b0e32a5522f9cf18bc021a81d54dd7","impliedFormat":99},{"version":"9ea0cd8a367cab9b1c632740d1bd998f8c4dbbbda4505f47bebd38a46afbaaa6","impliedFormat":99},{"version":"97980bb49a7e4b15df6f988f914070c831a39426cd9a29a6f7a9af82f397b28c","impliedFormat":99},{"version":"3ddf05b5259b9a0e2b1da1559585655202670e1f78396b4d4efccea0195a41b4","impliedFormat":99},{"version":"1e99c59aadb1af6d090976ade8280ea37208e8f064f79e9a18231fe5b7232890","impliedFormat":99},{"version":"c7ee77eec320d6312899cd8c16484c82b98385e175c57ff00d49cc5a2c291e0d","impliedFormat":99},{"version":"b38d9a4927465a8a5d1ae84e00d323bedfc7f5e77f4bc360078c6f283b964acb","impliedFormat":99},{"version":"27d6b338ff280dc86ff167217c29d7e71b52bd25a3c3b8eb1f5a56c887571d00","impliedFormat":99},{"version":"da60046c4cc6b018869ea8fc71a7b7bf5591d9f5d90ee52c4a614ecc69ff3433","impliedFormat":99},{"version":"8bee1fe0b3dd1b324f08189d81e55f9952007ce2304df07a15568b821b7e524f","impliedFormat":99},{"version":"a3dd2d53781729214a67f4b91d9a65d5310c1bbdcd0595789a5152a493cded91","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e20fc6cca2cf901917bc09c88bf9ee380383717ed990900aa99962ff9e3f786","impliedFormat":99},{"version":"7410b87e621ce92f484a13dfbe72069a6470fb72cc418df865f31b601193595c","impliedFormat":99},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"c96ac2cf9b266d5606f79d99191e3e2c2bede081f60aab6377d16b1e73841429","impliedFormat":99},{"version":"30a4dd54f1f39dee17bafcc0fb9a877932d607d8f24d3f1ac7f8998cf07f2649","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"ccb5f2cdd46a60b0aa3b43aeeac9f0d499640f589806f2486f35ff8a9565784b","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"5e8c09adb8be1b932100a9374cb0f8def9dda6a16a973e91c2322983ed669dd9","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"cc89688d19046618e7f88ea7c25ff04560d939902bf49e60bd38fb4662e38b5b","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"fc67adfb454cf82752ab00e969d14a95fa762f55c34e25327dc77174b0d5f742","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"bc79bd6403aa643e99c8e6733d5a8c7bf214e4528e79c882e77e9e441049e45e","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"8fa1dc3b4a2f43c688f6f4cf1721e1d26d641ef322c14adac867ecfa41aa2109","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"2d9ad35b54c1413e9ee0e74945cd5c8a99516c1fbbd0a12f673c75073436a931","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"23e028cc298226d1f8e87d57950673b3a19b91f23538ee9287d52e77540af8cf","impliedFormat":99},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1},{"version":"b95f2a78de34a873c6dd76dc538b7a5fec77da6a0e0e7efc7aa58f58ddfce270","impliedFormat":1},{"version":"1231f32d791b0fcc13e0c836543b34e83dea6e0b494ee35194a66a50dd25427e","impliedFormat":1},{"version":"66880e558be5ee57d23c12ffd0a90bf07840e088f8fa9b608fadeaf45af78969","impliedFormat":1},{"version":"058186f212307a621cd51160e2124c26208649600b4f0a27835f1d1caae81e65","impliedFormat":1},{"version":"c2bfeeadb18ba18386d7549a69c2049e57f31758b71343543a5c27919197b0fa","impliedFormat":1},{"version":"63b0be497f88d815c410b76985b798132d6c470199f2f31e1390a48480619758","impliedFormat":1},{"version":"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","impliedFormat":1},{"version":"95a31f8eea43d175dfeda85accc45bddce5678acae4e22e2f683b48e0e0188de","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26","impliedFormat":1},{"version":"5adf3c3c7204b3614dbc585681a33ef598c68df387298859f9a2521cfb449437","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"bbf7c864f1ffbacf54b524d028b6a77da9f0be0b8fff5c088e3185ee50496762","impliedFormat":1},{"version":"9df147746b0cbd11d022b564e6fdd43ac79b643dc579d2123317ee01cc4f0d70","impliedFormat":1},{"version":"fa244c20411dd53d853ce4b85e7146860be364946da477dad721e66301097460","impliedFormat":1},{"version":"fab2754e047c7818a8eb650cc2194aef4388193acdc4606eb601cb60923f7798","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"b2546f0fbeae6ef5e232c04100e1d8c49d36d1fff8e4755f663a3e3f06e7f2d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","impliedFormat":1},{"version":"041597c12abeaa2ef07766775955fc87cfc65c43e0fe86c836071bea787e967c","impliedFormat":1},{"version":"0838507efff4f479c6f603ec812810ddfe14ab32abf8f4a8def140be970fe439","impliedFormat":1},{"version":"f67c92f5cb2bf5a9929ee73216f08749db4f22b04a18e5205ed6e75ca48e9feb","impliedFormat":1},{"version":"7212c2d58855b8df35275180e97903a4b6093d4fbaefea863d8d028da63938c6","impliedFormat":1},{"version":"de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","impliedFormat":1},{"version":"1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","impliedFormat":1},{"version":"854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","impliedFormat":1},{"version":"dd9faff42b456b5f03b85d8fbd64838eb92f6f7b03b36322cbc59c005b7033d3","impliedFormat":1},{"version":"6ff702721d87c0ba8e7f8950e7b0a3b009dfd912fab3997e0b63fab8d83919c3","impliedFormat":1},{"version":"9dce9fc12e9a79d1135699d525aa6b44b71a45e32e3fa0cf331060b980b16317","impliedFormat":1},{"version":"586b2fd8a7d582329658aaceec22f8a5399e05013deb49bcfde28f95f093c8ee","impliedFormat":1},{"version":"dedc0ab5f7babe4aef870618cd2d4bc43dc67d1584ee43b68fc6e05554ef8f34","impliedFormat":1},{"version":"ef1f3eadd7bed282de45bafd7c2c00105cf1db93e22f6cd763bec8a9c2cf6df1","impliedFormat":1},{"version":"3d8885d13f76ff35b7860039e83c936ff37553849707c2fd1d580d193a52be5b","impliedFormat":1},{"version":"b75188f1d06bba9e266aad819df75b51ed1fcc19ac0750dc6a55a8eb1b7c2134","impliedFormat":1},{"version":"d8272401aa994ed8a60f71067acbcc9a73d847be6badf1b9397a8ce965af6318","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1087c6c9066684d3e72a8fcc5445f34e85572792bc16f5aab01208bcbbbe64be","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"eb27bc1c8d46234252298d3d7252c8459667daa0953b974f9d2c581c46703b2a","impliedFormat":1},{"version":"1b096ca6b209d1fed9ce68edd110ff6de8bec4fab2689d2adc481ffc1b1dc20b","impliedFormat":1},{"version":"9c02f12da30d30dd5f5ccaeedfb9b925ed4e5114059e9be6ed2ecf87a492fd16","impliedFormat":1},{"version":"8c8f8e816a38f1a0cc2dd3813d3bede2d773df36e72f4cb55d9daabd22016925","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"f86d0150d5abc55bf5bb479beacc34a7e9d4ab4e3014315fb74626baf1558857","impliedFormat":1},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"d77523951427fca92c7fdcaafb776bfb5d76cb0dfd8a7b18f38710332386ad6d","impliedFormat":1},{"version":"d9dcda644a9ecb57df163cbeaaca093c696335a53f47b5dbbf7cf0671b76e2eb","impliedFormat":1},{"version":"2d4d871246a21c785aec2a5b745ad79cdc877de3866f586887c8c74ddec97b8d","impliedFormat":1},{"version":"0cfa403fc15d0fda3214c3d8b75a42abcfa60c07e739de908e57d1f76220b7f9","impliedFormat":1},{"version":"d99cef4ae065cde21bd536998282a9882d8fb36a902725f03d71c3a9e3a24aa4","impliedFormat":1},{"version":"f3d4606a83fbdeedeeecd982ac35945bc02d50499cc65c72d71a143afa7e7334","impliedFormat":1},{"version":"bc919e8ad895c43568f8125523ab0f91810d5208afcc5bff2ba4713dffda0d97","impliedFormat":1},{"version":"6771b9c4bb2253e2a51c5ef7155419558289b885857e275ff61f90a979049cc3","impliedFormat":1},{"version":"6a1fb700b666a19112cddb4ab24e671c83ce40f6bfe64d1e7cb59c88263d0ec2","impliedFormat":1},{"version":"cc060af11b9bc0ed723d1200951bdc3255ff189475183a1f9ed06fd9c57206a6","impliedFormat":1},{"version":"a0aa9907949f7688394904c4d16b93c8d3154a9eda70ab096e0cfb37ef48e9b1","impliedFormat":1},{"version":"816dd83b87f2f1986f4c9072d38262ae96ee6589fab8a9ebc3b8d8f30263b8d3","impliedFormat":1},{"version":"5512a0ca56d3a21dd2843b62c939ff885d8853e55524bada67d1e393649e4bd6","impliedFormat":1},{"version":"3cd6ea92f13a0bf3c120ac271bc0ba57bf4cc3078e010150887c657f78b41959","impliedFormat":1},{"version":"4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","impliedFormat":1},{"version":"d9a256f69f3956993e65efd88336644be8f8dd36d149e859c14704ef6c6c0eec","impliedFormat":1},{"version":"d18f13c33148de7f0b1241734cb10dfe4c1e9505acad51ee48c3f4c1bd09e0dd","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","impliedFormat":1}],"root":[[265,274],[278,287],[291,314],421,422],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationDir":"./dist","declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"stripInternal":true,"target":9,"useDefineForClassFields":false,"useUnknownInCatchVariables":false},"referencedMap":[[962,1],[321,1],[290,2],[289,3],[421,4],[314,5],[265,6],[267,7],[268,6],[274,8],[269,9],[270,6],[271,6],[272,7],[266,6],[273,7],[312,10],[422,11],[280,12],[281,13],[283,14],[285,15],[286,13],[278,16],[309,17],[279,9],[313,18],[291,9],[301,19],[302,20],[304,21],[311,22],[282,23],[296,24],[310,25],[287,26],[294,27],[305,28],[293,29],[297,30],[306,31],[300,32],[284,33],[295,34],[298,26],[292,6],[307,35],[308,36],[299,37],[303,9],[258,38],[192,1],[191,1],[238,1],[246,1],[230,39],[234,40],[247,41],[248,42],[232,43],[231,44],[235,45],[249,46],[243,1],[250,46],[244,47],[229,48],[260,49],[241,50],[245,51],[251,52],[205,53],[252,54],[240,45],[253,45],[233,55],[194,56],[236,57],[237,51],[217,51],[218,58],[219,59],[193,60],[220,61],[196,62],[195,63],[214,64],[221,53],[222,51],[223,41],[198,65],[199,41],[200,66],[201,41],[202,66],[203,67],[224,68],[204,69],[228,70],[206,71],[207,67],[208,72],[209,56],[197,73],[225,74],[210,75],[242,76],[211,69],[226,68],[227,41],[212,41],[213,41],[215,77],[216,71],[254,45],[255,1],[256,78],[80,1],[239,79],[259,1],[288,80],[686,1],[486,81],[484,1],[648,1],[682,82],[681,82],[680,1],[684,83],[685,83],[683,1],[651,1],[649,84],[652,85],[650,85],[653,1],[692,1],[693,1],[697,1],[694,1],[704,84],[703,1],[705,1],[706,86],[698,87],[702,88],[699,89],[695,1],[700,90],[701,91],[696,1],[668,84],[664,84],[667,84],[666,84],[665,84],[661,84],[660,84],[663,84],[662,84],[655,84],[656,92],[654,1],[659,93],[657,84],[710,94],[689,95],[691,95],[690,95],[687,96],[688,95],[708,1],[707,1],[709,1],[669,97],[670,1],[673,1],[676,1],[671,1],[678,1],[679,98],[675,1],[672,1],[674,1],[677,1],[658,1],[570,1],[572,99],[571,1],[423,100],[388,1],[424,1],[425,1],[426,1],[483,101],[427,102],[472,103],[429,104],[428,105],[430,102],[431,102],[433,106],[432,102],[434,107],[435,107],[436,102],[438,108],[439,102],[440,108],[441,102],[443,102],[444,102],[445,102],[446,109],[442,102],[447,1],[448,110],[449,110],[450,110],[451,110],[452,110],[461,111],[453,110],[454,110],[455,110],[456,110],[458,110],[457,110],[459,110],[460,110],[462,102],[463,102],[437,102],[464,108],[466,112],[465,102],[467,102],[468,102],[469,113],[471,102],[470,102],[473,102],[475,102],[476,114],[474,102],[477,102],[478,102],[479,102],[480,102],[481,102],[482,102],[489,115],[485,81],[487,116],[488,81],[491,117],[492,118],[493,1],[494,1],[500,119],[490,100],[501,1],[506,120],[504,121],[507,1],[509,122],[510,122],[511,1],[512,1],[514,123],[515,1],[516,1],[517,122],[518,1],[519,1],[520,124],[521,1],[522,1],[523,125],[524,1],[525,126],[526,1],[527,1],[528,1],[529,1],[532,1],[531,127],[508,1],[533,128],[534,1],[530,1],[535,1],[536,122],[537,129],[538,130],[277,131],[545,132],[544,133],[543,134],[539,1],[542,135],[540,1],[499,136],[547,137],[546,136],[550,138],[513,1],[552,139],[553,140],[555,141],[557,142],[558,142],[559,142],[556,1],[562,143],[560,144],[561,144],[563,1],[564,1],[502,1],[565,145],[566,146],[567,1],[568,147],[569,148],[577,149],[541,1],[548,150],[549,1],[578,151],[505,1],[579,152],[582,153],[580,153],[581,154],[633,155],[635,156],[636,157],[634,158],[637,159],[638,160],[639,161],[640,162],[641,163],[642,164],[643,165],[644,166],[645,167],[646,168],[647,141],[495,1],[551,1],[839,1],[840,1],[846,169],[843,170],[842,171],[845,172],[841,1],[844,170],[276,1],[847,146],[361,173],[362,173],[363,174],[320,175],[364,176],[365,177],[366,178],[315,1],[318,179],[316,1],[317,1],[367,180],[368,181],[369,182],[370,183],[371,184],[372,185],[373,185],[375,186],[374,187],[376,188],[377,189],[378,190],[360,191],[319,1],[379,192],[380,193],[381,194],[414,195],[382,196],[383,197],[384,198],[338,199],[348,200],[337,199],[358,201],[329,202],[328,203],[357,146],[351,204],[356,205],[331,206],[345,207],[330,208],[354,209],[326,210],[325,146],[355,211],[327,212],[332,213],[333,1],[336,213],[323,1],[359,214],[349,215],[340,216],[341,217],[343,218],[339,219],[342,220],[352,146],[334,221],[335,222],[344,223],[324,224],[347,215],[346,213],[350,1],[353,225],[385,226],[386,227],[387,228],[389,229],[390,230],[391,231],[392,232],[393,232],[394,233],[395,1],[396,234],[398,235],[397,236],[399,237],[400,238],[401,239],[402,240],[403,241],[404,242],[405,243],[406,244],[407,245],[408,246],[409,247],[410,248],[411,249],[412,250],[413,251],[848,146],[849,1],[850,1],[420,252],[415,1],[851,1],[854,1],[855,1],[856,1],[497,1],[859,253],[858,254],[498,1],[863,255],[868,256],[867,257],[870,256],[869,258],[866,259],[864,1],[865,260],[860,1],[862,261],[871,262],[872,1],[889,263],[914,264],[915,265],[890,266],[893,266],[912,264],[913,264],[903,264],[902,267],[900,264],[895,264],[908,264],[906,264],[910,264],[894,264],[907,264],[911,264],[896,264],[897,264],[909,264],[891,264],[898,264],[899,264],[901,264],[905,264],[916,268],[904,264],[892,264],[929,269],[928,1],[923,268],[925,270],[924,268],[917,268],[918,268],[920,268],[922,268],[926,270],[927,270],[919,270],[921,270],[496,271],[931,272],[930,121],[503,273],[932,100],[933,1],[934,1],[935,1],[938,274],[937,275],[936,276],[713,277],[712,1],[940,278],[554,1],[956,279],[954,280],[953,281],[944,282],[945,283],[952,284],[946,283],[947,282],[948,282],[949,282],[950,285],[943,286],[951,281],[942,1],[955,287],[957,288],[958,1],[959,289],[960,1],[961,290],[628,291],[585,1],[587,292],[586,293],[591,294],[626,295],[623,296],[625,297],[588,296],[589,298],[593,298],[592,299],[590,300],[624,301],[622,296],[627,302],[620,1],[621,1],[594,303],[599,296],[601,296],[596,296],[597,303],[603,296],[604,304],[595,296],[600,296],[602,296],[598,296],[618,305],[617,296],[619,306],[613,296],[615,296],[614,296],[610,296],[616,307],[611,296],[612,308],[605,296],[606,296],[607,296],[608,296],[609,296],[584,1],[941,1],[322,1],[275,1],[861,1],[830,309],[826,1],[827,1],[825,1],[828,1],[829,1],[831,1],[823,1],[824,310],[832,311],[714,312],[190,1],[576,313],[884,314],[885,315],[883,316],[886,317],[880,318],[881,319],[882,320],[876,318],[877,318],[879,321],[878,318],[875,322],[98,323],[166,324],[165,325],[164,326],[103,327],[119,328],[117,329],[118,330],[104,331],[189,332],[89,1],[93,1],[91,333],[92,1],[96,334],[99,1],[116,335],[94,1],[111,336],[97,337],[112,338],[115,339],[113,339],[110,340],[90,1],[95,1],[114,341],[120,342],[108,1],[102,343],[100,344],[109,345],[106,346],[105,346],[101,347],[107,348],[185,349],[179,350],[172,351],[171,352],[180,353],[181,339],[173,354],[186,355],[167,356],[168,357],[169,358],[188,359],[170,352],[174,355],[175,360],[182,361],[183,337],[184,360],[187,339],[176,358],[121,362],[177,363],[178,364],[163,365],[161,366],[162,366],[125,366],[126,366],[127,366],[128,366],[129,366],[130,366],[131,366],[132,366],[133,366],[153,366],[134,366],[135,366],[136,366],[137,366],[138,366],[139,366],[160,366],[140,366],[141,366],[142,366],[143,366],[158,366],[144,366],[159,366],[145,366],[156,366],[157,366],[146,366],[147,366],[148,366],[154,366],[155,366],[149,366],[150,366],[151,366],[152,366],[124,367],[123,368],[122,369],[88,1],[257,1],[574,370],[575,371],[874,1],[715,372],[758,373],[757,374],[756,375],[759,1],[835,376],[834,1],[838,377],[836,378],[711,379],[837,380],[760,381],[833,382],[822,383],[762,384],[763,384],[764,384],[765,384],[766,384],[819,384],[767,384],[768,384],[769,384],[770,384],[771,384],[772,384],[773,384],[774,384],[818,384],[775,384],[776,384],[777,384],[778,384],[779,384],[780,384],[781,384],[782,384],[783,384],[784,384],[785,384],[786,384],[821,384],[787,384],[788,384],[789,384],[790,384],[791,384],[792,384],[793,384],[794,384],[795,384],[796,384],[797,384],[798,384],[820,384],[799,384],[800,384],[801,384],[802,384],[803,384],[804,384],[805,384],[806,384],[807,384],[808,384],[809,384],[810,384],[811,384],[812,384],[813,384],[814,384],[815,384],[816,384],[817,384],[761,385],[754,386],[755,387],[873,388],[419,389],[416,146],[418,390],[417,1],[264,1],[852,1],[853,391],[573,392],[888,393],[887,394],[630,395],[629,396],[583,397],[939,1],[631,1],[857,254],[79,1],[746,398],[732,399],[743,400],[716,1],[734,401],[733,1],[735,402],[741,403],[740,1],[717,1],[738,1],[739,1],[725,404],[720,1],[719,405],[718,1],[727,1],[744,406],[723,404],[726,1],[731,1],[724,404],[721,405],[722,1],[728,405],[729,405],[742,1],[737,1],[745,1],[736,1],[747,1],[730,1],[748,407],[749,407],[753,408],[750,409],[751,410],[752,409],[77,1],[78,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[8,1],[52,1],[49,1],[50,1],[51,1],[53,1],[9,1],[54,1],[55,1],[56,1],[58,1],[57,1],[59,1],[60,1],[10,1],[61,1],[62,1],[63,1],[11,1],[64,1],[65,1],[66,1],[67,1],[68,1],[1,1],[69,1],[70,1],[12,1],[74,1],[72,1],[76,1],[71,1],[75,1],[73,1],[632,411],[83,412],[84,413],[87,414],[82,1],[85,412],[86,412],[81,1],[263,415],[261,1],[262,1]],"latestChangedDtsFile":"./dist/examples/exampleSchema.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/grafast/grafast/dist/args.d.ts b/grafast/grafast/dist/args.d.ts new file mode 100644 index 0000000000..045e17179a --- /dev/null +++ b/grafast/grafast/dist/args.d.ts @@ -0,0 +1,6 @@ +import type { ExecutionArgs } from "graphql"; +import type { GrafastExecutionArgs, PromiseOrDirect } from "./interfaces.js"; +/** @deprecated Pass `resolvedPreset` and `requestContext` via args directly */ +export declare function hookArgs(rawArgs: ExecutionArgs, resolvedPreset: GraphileConfig.ResolvedPreset, ctx: Partial): PromiseOrDirect; +export declare function hookArgs(rawArgs: GrafastExecutionArgs): PromiseOrDirect; +//# sourceMappingURL=args.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/args.d.ts.map b/grafast/grafast/dist/args.d.ts.map new file mode 100644 index 0000000000..e9b8d9770d --- /dev/null +++ b/grafast/grafast/dist/args.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,OAAO,KAAK,EACV,oBAAoB,EAEpB,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAQzB,+EAA+E;AAC/E,wBAAgB,QAAQ,CACtB,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,cAAc,CAAC,cAAc,EAC7C,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GACnC,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC1C,wBAAgB,QAAQ,CACtB,OAAO,EAAE,oBAAoB,GAC5B,eAAe,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/args.js b/grafast/grafast/dist/args.js new file mode 100644 index 0000000000..18581c094c --- /dev/null +++ b/grafast/grafast/dist/args.js @@ -0,0 +1,77 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.hookArgs = hookArgs; +const interfaces_js_1 = require("./interfaces.js"); +const middleware_js_1 = require("./middleware.js"); +const utils_js_1 = require("./utils.js"); +const EMPTY_OBJECT = Object.freeze(Object.create(null)); +const $$writeTest = Symbol("grafastWriteTest"); +/** + * Applies Graphile Config hooks to your GraphQL request, e.g. to + * populate context or similar. + * + * @experimental + */ +function hookArgs(rawArgs, legacyResolvedPreset, legacyCtx) { + if (legacyResolvedPreset !== undefined) { + rawArgs.resolvedPreset = legacyResolvedPreset; + } + if (legacyCtx !== undefined) { + rawArgs.requestContext = rawArgs.requestContext ?? legacyCtx; + } + const { middleware: rawMiddleware, resolvedPreset, contextValue: rawContextValue, } = rawArgs; + try { + rawContextValue[$$writeTest] = true; + } + catch (e) { + // Make context mutable + rawArgs.contextValue = Object.assign(Object.create(null), rawContextValue); + } + const middleware = rawMiddleware === undefined && resolvedPreset != null + ? (0, middleware_js_1.getGrafastMiddleware)(resolvedPreset) + : (rawMiddleware ?? null); + if (rawMiddleware === undefined) { + rawArgs.middleware = middleware; + } + const args = rawArgs; + // Assert that args haven't already been hooked + if (args[interfaces_js_1.$$hooked]) { + throw new Error("Must not call hookArgs twice!"); + } + args[interfaces_js_1.$$hooked] = true; + if (middleware != null) { + return middleware.run("prepareArgs", { args }, finalizeWithEvent); + } + else { + return finalize(args); + } +} +function finalize(args) { + const userContext = args.resolvedPreset?.grafast?.context; + const contextValue = args.contextValue; + if (typeof userContext === "function") { + const result = userContext(args.requestContext ?? EMPTY_OBJECT, args); + if ((0, utils_js_1.isPromiseLike)(result)) { + // Deliberately shadowed 'result' + return result.then((result) => { + Object.assign(contextValue, result); + return args; + }); + } + else { + Object.assign(contextValue, result); + return args; + } + } + else if (typeof userContext === "object" && userContext !== null) { + Object.assign(contextValue, userContext); + return args; + } + else { + return args; + } +} +function finalizeWithEvent(event) { + return finalize(event.args); +} +//# sourceMappingURL=args.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/args.js.map b/grafast/grafast/dist/args.js.map new file mode 100644 index 0000000000..41612576d0 --- /dev/null +++ b/grafast/grafast/dist/args.js.map @@ -0,0 +1 @@ +{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/assert.d.ts b/grafast/grafast/dist/assert.d.ts new file mode 100644 index 0000000000..c0425ce5b9 --- /dev/null +++ b/grafast/grafast/dist/assert.d.ts @@ -0,0 +1,5 @@ +/** Equivalent to `assert.ok(...)` */ +export declare function ok(val: any, message: string): asserts val; +/** Equivalent to `assert.strictEqual(...)` */ +export declare function strictEqual(actual: any, expected: T, message: string): asserts actual is T; +//# sourceMappingURL=assert.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/assert.d.ts.map b/grafast/grafast/dist/assert.d.ts.map new file mode 100644 index 0000000000..b74c470cfa --- /dev/null +++ b/grafast/grafast/dist/assert.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":"AAOA,qCAAqC;AACrC,wBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAIzD;AAED,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,CAAC,EAC3B,MAAM,EAAE,GAAG,EACX,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,IAAI,CAAC,CAIrB"} \ No newline at end of file diff --git a/grafast/grafast/dist/assert.js b/grafast/grafast/dist/assert.js new file mode 100644 index 0000000000..8da82ed1fb --- /dev/null +++ b/grafast/grafast/dist/assert.js @@ -0,0 +1,23 @@ +"use strict"; +/* + * Due to the following Jest issue, GraphQL's `instanceof Error` test + * cannot pass for Node assertions. So we have to define our own. + * + * https://github.com/facebook/jest/issues/2549 + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ok = ok; +exports.strictEqual = strictEqual; +/** Equivalent to `assert.ok(...)` */ +function ok(val, message) { + if (!val) { + throw new Error(message); + } +} +/** Equivalent to `assert.strictEqual(...)` */ +function strictEqual(actual, expected, message) { + if (actual !== expected) { + throw new Error(message + ` (${actual} !== ${expected})`); + } +} +//# sourceMappingURL=assert.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/assert.js.map b/grafast/grafast/dist/assert.js.map new file mode 100644 index 0000000000..511920426d --- /dev/null +++ b/grafast/grafast/dist/assert.js.map @@ -0,0 +1 @@ +{"version":3,"file":"assert.js","sourceRoot":"","sources":["../src/assert.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAGH,gBAIC;AAGD,kCAQC;AAhBD,qCAAqC;AACrC,SAAgB,EAAE,CAAC,GAAQ,EAAE,OAAe;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,8CAA8C;AAC9C,SAAgB,WAAW,CACzB,MAAW,EACX,QAAW,EACX,OAAe;IAEf,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,OAAO,GAAG,KAAK,MAAM,QAAQ,QAAQ,GAAG,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/bucket.d.ts b/grafast/grafast/dist/bucket.d.ts new file mode 100644 index 0000000000..d207480cc4 --- /dev/null +++ b/grafast/grafast/dist/bucket.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=bucket.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/bucket.d.ts.map b/grafast/grafast/dist/bucket.d.ts.map new file mode 100644 index 0000000000..958bfc3f9a --- /dev/null +++ b/grafast/grafast/dist/bucket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../src/bucket.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/grafast/dist/bucket.js b/grafast/grafast/dist/bucket.js new file mode 100644 index 0000000000..dd81ee6257 --- /dev/null +++ b/grafast/grafast/dist/bucket.js @@ -0,0 +1,4 @@ +"use strict"; +// import type { GraphQLScalarType } from "graphql"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=bucket.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/bucket.js.map b/grafast/grafast/dist/bucket.js.map new file mode 100644 index 0000000000..cefa2700be --- /dev/null +++ b/grafast/grafast/dist/bucket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bucket.js","sourceRoot":"","sources":["../src/bucket.ts"],"names":[],"mappings":";AAAA,oDAAoD"} \ No newline at end of file diff --git a/grafast/grafast/dist/config.d.ts b/grafast/grafast/dist/config.d.ts new file mode 100644 index 0000000000..94d3c20bca --- /dev/null +++ b/grafast/grafast/dist/config.d.ts @@ -0,0 +1,2 @@ +export declare const NULL_PRESET: GraphileConfig.ResolvedPreset; +//# sourceMappingURL=config.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/config.d.ts.map b/grafast/grafast/dist/config.d.ts.map new file mode 100644 index 0000000000..f7e163b493 --- /dev/null +++ b/grafast/grafast/dist/config.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,EAAE,cAAc,CAAC,cAExC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/config.js b/grafast/grafast/dist/config.js new file mode 100644 index 0000000000..e9f223ee63 --- /dev/null +++ b/grafast/grafast/dist/config.js @@ -0,0 +1,5 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NULL_PRESET = void 0; +exports.NULL_PRESET = Object.freeze(Object.create(null)); +//# sourceMappingURL=config.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/config.js.map b/grafast/grafast/dist/config.js.map new file mode 100644 index 0000000000..d417104fe8 --- /dev/null +++ b/grafast/grafast/dist/config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAkC,MAAM,CAAC,MAAM,CACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CACpB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/constraints.d.ts b/grafast/grafast/dist/constraints.d.ts new file mode 100644 index 0000000000..bf7b2d69c9 --- /dev/null +++ b/grafast/grafast/dist/constraints.d.ts @@ -0,0 +1,75 @@ +/** + * Asserts that a value strictly matches. + */ +interface ValueConstraint { + type: "value"; + path: (string | number)[]; + value: unknown; +} +/** + * Asserts that `(value === expectedValue)` is always equal to `pass`. + */ +interface EqualityConstraint { + type: "equal"; + path: (string | number)[]; + expectedValue: unknown; + pass: boolean; +} +/** + * Asserts that the property at the given path exists. + * + * Let `tail` be the last entry in `path`, and `rest` be the rest of `path`. + * The value at path `rest` must be an object, and that object must have an + * attribute `tail` which is not `undefined`. + */ +interface ExistsConstraint { + type: "exists"; + path: (string | number)[]; + exists: boolean; +} +/** + * If `keys` is null: asserts that there is no value at the given + * path. + * + * Otherwise: asserts that the value at the given path has the exact same keys. + */ +interface KeysConstraint { + type: "keys"; + path: (string | number)[]; + /** + * If this is null it implies that the object did not exist. + */ + keys: ReadonlyArray | null; +} +/** + * If `expectedLength` is null: asserts that there is no value at the given + * path. + * + * Otherwise: asserts that the value at the given path is an array containing + * `expectedLength` entries. + */ +interface LengthConstraint { + type: "length"; + path: (string | number)[]; + /** + * If this is null it implies that the array did not exist. + */ + expectedLength: number | null; +} +/** + * Checks if the object at the given path matches the `isEmpty` property + * (implying no keys). Objects are empty if and only if they exist and have no + * keys. + */ +interface IsEmptyConstraint { + type: "isEmpty"; + path: (string | number)[]; + isEmpty: boolean; +} +export type Constraint = ValueConstraint | EqualityConstraint | ExistsConstraint | LengthConstraint | IsEmptyConstraint | KeysConstraint; +/** + * Implements the `MatchesConstraints` algorithm. + */ +export declare function matchesConstraints(constraints: Constraint[], object: unknown): boolean; +export {}; +//# sourceMappingURL=constraints.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/constraints.d.ts.map b/grafast/grafast/dist/constraints.d.ts.map new file mode 100644 index 0000000000..1ea0125bda --- /dev/null +++ b/grafast/grafast/dist/constraints.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,UAAU,eAAe;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,kBAAkB;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;;;;;GAMG;AACH,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;GAMG;AACH,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;;;GAIG;AACH,UAAU,iBAAiB;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,CAAC;AAuGnB;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,UAAU,EAAE,EACzB,MAAM,EAAE,OAAO,GACd,OAAO,CAST"} \ No newline at end of file diff --git a/grafast/grafast/dist/constraints.js b/grafast/grafast/dist/constraints.js new file mode 100644 index 0000000000..ce5b516f62 --- /dev/null +++ b/grafast/grafast/dist/constraints.js @@ -0,0 +1,110 @@ +"use strict"; +// PERF: optimise constraint matching, e.g. by collapsing redundant constraints +// and then compiling (JIT-style) remaining constraints into a function using +// tamedevil +Object.defineProperty(exports, "__esModule", { value: true }); +exports.matchesConstraints = matchesConstraints; +function valueAtPath(object, path) { + let value = object; + for (let i = 0, l = path.length; i < l; i++) { + const key = path[i]; + const expectArray = typeof key === "number"; + const isArray = Array.isArray(value); + if (expectArray !== isArray) { + return undefined; + } + else { + if (value == null) { + return undefined; + } + value = value[key]; + if (typeof value === "undefined") { + return undefined; + } + } + } + return value; +} +/** + * Implements the `MatchesConstraint` algorithm. + */ +function matchesConstraint(constraint, object) { + const value = valueAtPath(object, constraint.path); + switch (constraint.type) { + case "length": { + const actualLength = Array.isArray(value) ? value.length : null; + return actualLength === constraint.expectedLength; + } + case "exists": { + return (value !== undefined) === constraint.exists; + } + case "equal": { + return (value === constraint.expectedValue) === constraint.pass; + } + case "value": { + return value === constraint.value; + } + case "isEmpty": { + const isEmpty = typeof value === "object" && + value !== null && + Object.keys(value).length === 0; + return isEmpty === constraint.isEmpty; + } + case "keys": { + const { keys: expectedKeys } = constraint; + if (expectedKeys === null) { + return value == null || typeof value !== "object"; + } + else if (value == null || typeof value !== "object") { + return false; + } + else { + // keys are always in order of the gql type; see coerceInputValue and __InputObjectStep ctor + const valueKeys = Object.keys(value); + const valueKeyCount = valueKeys.length; + const expectedKeyCount = expectedKeys.length; + // Optimization: early bail + if (valueKeyCount < expectedKeyCount) { + return false; + } + /** + * This is `i` but adjusted so that `undefined` doesn't increment it. + * Should match index in `expectedKeys`. + */ + let definedRawKeyCount = 0; + for (let i = 0; i < valueKeyCount; i++) { + const valueKey = valueKeys[i]; + if (value[valueKey] !== undefined) { + if (valueKey !== expectedKeys[definedRawKeyCount]) { + return false; + } + definedRawKeyCount++; + } + } + // Make sure there aren't any additional expected keys + if (definedRawKeyCount !== expectedKeyCount) { + return false; + } + return true; + } + } + default: { + const never = constraint; + throw new Error(`Unsupported constraint type '${never.type}'`); + } + } +} +/** + * Implements the `MatchesConstraints` algorithm. + */ +function matchesConstraints(constraints, object) { + // In my testing, verbose loops are still about 20% faster than for...of + for (let i = 0, l = constraints.length; i < l; i++) { + const constraint = constraints[i]; + if (!matchesConstraint(constraint, object)) { + return false; + } + } + return true; +} +//# sourceMappingURL=constraints.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/constraints.js.map b/grafast/grafast/dist/constraints.js.map new file mode 100644 index 0000000000..ed058ad0aa --- /dev/null +++ b/grafast/grafast/dist/constraints.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constraints.js","sourceRoot":"","sources":["../src/constraints.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/deferred.d.ts b/grafast/grafast/dist/deferred.d.ts new file mode 100644 index 0000000000..795aafed51 --- /dev/null +++ b/grafast/grafast/dist/deferred.d.ts @@ -0,0 +1,13 @@ +/** + * A promise that can be `.resolve()`-ed or `.reject()`-ed at a later time. + */ +export interface Deferred extends PromiseLike { + resolve: (input: T | PromiseLike) => void; + reject: (error: Error) => void; +} +/** + * Returns a promise that can be `.resolve()`-ed or `.reject()`-ed at a later + * time. + */ +export declare function defer(): Deferred; +//# sourceMappingURL=deferred.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/deferred.d.ts.map b/grafast/grafast/dist/deferred.d.ts.map new file mode 100644 index 0000000000..79458dfaf5 --- /dev/null +++ b/grafast/grafast/dist/deferred.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"deferred.d.ts","sourceRoot":"","sources":["../src/deferred.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAID;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAgB7C"} \ No newline at end of file diff --git a/grafast/grafast/dist/deferred.js b/grafast/grafast/dist/deferred.js new file mode 100644 index 0000000000..40292dd7c2 --- /dev/null +++ b/grafast/grafast/dist/deferred.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defer = defer; +function NOOP() { } +/** + * Returns a promise that can be `.resolve()`-ed or `.reject()`-ed at a later + * time. + */ +function defer() { + let resolve; + let reject; + const promise = new Promise((_resolve, _reject) => { + resolve = _resolve; + reject = _reject; + }); + promise.resolve = resolve; + promise.reject = reject; + // PERF: this is to avoid unhandledPromiseRejection errors; generally + // deferred errors are handled at a later time (or can be safely ignored if + // another error wins). Maybe there's a better way? + promise.then(null, NOOP); + return promise; +} +//# sourceMappingURL=deferred.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/deferred.js.map b/grafast/grafast/dist/deferred.js.map new file mode 100644 index 0000000000..1e40bdda72 --- /dev/null +++ b/grafast/grafast/dist/deferred.js.map @@ -0,0 +1 @@ +{"version":3,"file":"deferred.js","sourceRoot":"","sources":["../src/deferred.ts"],"names":[],"mappings":";;AAcA,sBAgBC;AAtBD,SAAS,IAAI,KAAI,CAAC;AAElB;;;GAGG;AACH,SAAgB,KAAK;IACnB,IAAI,OAA6C,CAAC;IAClD,IAAI,MAA+B,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,QAAQ,EAAE,OAAO,EAAQ,EAAE;QACzD,OAAO,GAAG,QAAQ,CAAC;QACnB,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC,CAA2B,CAAC;IAC7B,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAExB,qEAAqE;IACrE,2EAA2E;IAC3E,mDAAmD;IACnD,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEzB,OAAO,OAAO,CAAC;AACjB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/dev.d.ts b/grafast/grafast/dist/dev.d.ts new file mode 100644 index 0000000000..bab0b16dc3 --- /dev/null +++ b/grafast/grafast/dist/dev.d.ts @@ -0,0 +1,3 @@ +export declare const isTest: boolean; +export declare function noop(): void; +//# sourceMappingURL=dev.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/dev.d.ts.map b/grafast/grafast/dist/dev.d.ts.map new file mode 100644 index 0000000000..cb0c2aadfc --- /dev/null +++ b/grafast/grafast/dist/dev.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,MAAM,SAAkB,CAAC;AACtC,wBAAgB,IAAI,IAAI,IAAI,CAAG"} \ No newline at end of file diff --git a/grafast/grafast/dist/dev.js b/grafast/grafast/dist/dev.js new file mode 100644 index 0000000000..b504b01215 --- /dev/null +++ b/grafast/grafast/dist/dev.js @@ -0,0 +1,25 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isTest = exports.isDev = void 0; +exports.noop = noop; +/** + * @internal + */ +const graphileEnv = typeof process !== "undefined" ? process.env.GRAPHILE_ENV : undefined; +const nodeEnv = typeof process !== "undefined" ? process.env.NODE_ENV : undefined; +const mode = graphileEnv !== undefined ? graphileEnv : nodeEnv; +/** + * @internal + */ +exports.isDev = mode === "development" || mode === "test"; +exports.isTest = mode === "test"; +function noop() { } +if (typeof process !== "undefined" && + typeof graphileEnv === "undefined" && + typeof nodeEnv === "undefined") { + console.warn(`The GRAPHILE_ENV environmental variable is not set; Grafast will run in production mode. In your development environments, it's recommended that you set \`GRAPHILE_ENV=development\` to opt in to additional checks that will provide guidance and help you to catch issues in your code earlier, and other changes such as formatting to improve your development experience.`); +} +else if (exports.isDev && !exports.isTest && typeof graphileEnv === "undefined") { + console.warn(`Grafast is running in development mode due to \`NODE_ENV=${nodeEnv}\`; this is recommended for development environments (and strongly discouraged in production), but will impact on performance - in particular, planning will be significantly more expensive. To remove this warning, make this explicit with \`GRAPHILE_ENV=development\` envvar.`); +} +//# sourceMappingURL=dev.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/dev.js.map b/grafast/grafast/dist/dev.js.map new file mode 100644 index 0000000000..f84125f744 --- /dev/null +++ b/grafast/grafast/dist/dev.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":";;;AAaA,oBAA+B;AAb/B;;GAEG;AACH,MAAM,WAAW,GACf,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;AACxE,MAAM,OAAO,GACX,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,MAAM,IAAI,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;AAC/D;;GAEG;AACU,QAAA,KAAK,GAAG,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,MAAM,CAAC;AAClD,QAAA,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;AACtC,SAAgB,IAAI,KAAU,CAAC;AAE/B,IACE,OAAO,OAAO,KAAK,WAAW;IAC9B,OAAO,WAAW,KAAK,WAAW;IAClC,OAAO,OAAO,KAAK,WAAW,EAC9B,CAAC;IACD,OAAO,CAAC,IAAI,CACV,iXAAiX,CAClX,CAAC;AACJ,CAAC;KAAM,IAAI,aAAK,IAAI,CAAC,cAAM,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;IAClE,OAAO,CAAC,IAAI,CACV,4DAA4D,OAAO,oRAAoR,CACxV,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/LayerPlan.d.ts b/grafast/grafast/dist/engine/LayerPlan.d.ts new file mode 100644 index 0000000000..d17ece1d60 --- /dev/null +++ b/grafast/grafast/dist/engine/LayerPlan.d.ts @@ -0,0 +1,125 @@ +import type { Bucket } from "../bucket.js"; +import type { Step } from "../step"; +import type { OperationPlan } from "./OperationPlan"; +/** Non-branching, non-deferred */ +export interface LayerPlanReasonRoot { + type: "root"; +} +/** Non-branching, non-deferred */ +export interface LayerPlanReasonNullableField { + type: "nullableBoundary"; + /** + * Can be used such that the same LayerPlan can be used for two selection + * sets for the same parent plan. In this case an additional output plan + * would be added to the LayerPlan. + * + * Also needed for execution (see `executeBucket`). + */ + parentStep: Step; +} +export interface LayerPlanReasonListItemStream { + initialCountStepId?: number; + ifStepId?: number; + labelStepId?: number; +} +/** Non-branching, non-deferred */ +export interface LayerPlanReasonListItem { + type: "listItem"; + /** + * Can be used such that the same LayerPlan can be used for two lists for + * the same parent plan. In this case an additional output plan would be + * added to the LayerPlan. + * + * Also needed for execution (see `executeBucket`). + */ + parentStep: Step; + /** + * If this listItem is to be streamed, the configuration for that streaming. + */ + stream?: LayerPlanReasonListItemStream; +} +/** Non-branching, deferred */ +export interface LayerPlanReasonSubscription { + type: "subscription"; +} +/** Non-branching, deferred */ +export interface LayerPlanReasonMutationField { + type: "mutationField"; + mutationIndex: number; +} +/** Non-branching, deferred */ +export interface LayerPlanReasonDefer { + type: "defer"; + label?: string; +} +/** Branching, non-deferred */ +export interface LayerPlanReasonPolymorphic { + type: "polymorphic"; + typeNames: string[]; + /** + * Needed for execution (see `executeBucket`). + */ + parentStep: Step; + polymorphicPaths: Set; +} +/** Non-branching, non-deferred */ +export interface LayerPlanReasonSubroutine { + type: "subroutine"; + parentStep: Step; +} +export declare function isBranchingLayerPlan(layerPlan: LayerPlan): boolean; +export declare function isDeferredLayerPlan(layerPlan: LayerPlan): boolean; +export declare function isPolymorphicLayerPlan(layerPlan: LayerPlan): boolean; +export type LayerPlanReason = LayerPlanReasonRoot | LayerPlanReasonNullableField | LayerPlanReasonListItem | LayerPlanReasonSubscription | LayerPlanReasonMutationField | LayerPlanReasonDefer | LayerPlanReasonPolymorphic | LayerPlanReasonSubroutine; +export type HasParent = A extends any ? A extends { + parentStep: Step; +} ? A : never : never; +export type LayerPlanReasonsWithParentStep = HasParent; +/** + * A LayerPlan represents (via "reason") either the root (root), when something + * happens at a later time (mutationField, defer), when plurality changes + * (list, stream, subscription, polymorphic), or when a subprocess needs to be + * computed (subroutine). + * + * Layer plans belong to an operation plan. + * + * Every layer plan (except for the root layer plan) has exactly one parent + * layer plan. + * + * Every layer plan is caused by a parent step. + * + * The LayerPlan of a step influences: + * + * 1. how steps are deduplicated + * 2. the order in which the steps are executed + * 3. where the result of executing the step is stored + * 4. when the step execution cache is allowed to be GC'd + * + * NOTE: `__ListTransformStep`'s effectively have a temporary bucket inside + * them (built on the `__Item`) that's thrown away once the transform is + * complete. + * + */ +export declare class LayerPlan { + readonly operationPlan: OperationPlan; + parentLayerPlan: LayerPlan | null; + readonly reason: TReason; + id: number; + /** How "deep" this layer plan is (how many ancestors it has). The root layer plan has a depth of 0. */ + depth: number; + /** The depth at which a "defer boundary" occurs (OperationPlan.getPeers cannot pass a defer boundary), or 0. */ + deferBoundaryDepth: number; + /** + * An optimization for OperationPlan.getPeers; this tracks the steps in this + * layer plan, grouped by their step class. + */ + stepsByConstructor: Map>; + constructor(operationPlan: OperationPlan, parentLayerPlan: LayerPlan | null, reason: TReason); + toString(): string; + print(depth?: number): string; + _hasSetRootStep: boolean; + setRootStep($root: Step): void; + finalize(): void; + newBucket(parentBucket: Bucket): Bucket | null; +} +//# sourceMappingURL=LayerPlan.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/LayerPlan.d.ts.map b/grafast/grafast/dist/engine/LayerPlan.d.ts.map new file mode 100644 index 0000000000..3c50853948 --- /dev/null +++ b/grafast/grafast/dist/engine/LayerPlan.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerPlan.d.ts","sourceRoot":"","sources":["../../src/engine/LayerPlan.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/LayerPlan.js b/grafast/grafast/dist/engine/LayerPlan.js new file mode 100644 index 0000000000..0c21d438d6 --- /dev/null +++ b/grafast/grafast/dist/engine/LayerPlan.js @@ -0,0 +1,654 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LayerPlan = void 0; +exports.isBranchingLayerPlan = isBranchingLayerPlan; +exports.isDeferredLayerPlan = isDeferredLayerPlan; +exports.isPolymorphicLayerPlan = isPolymorphicLayerPlan; +const tslib_1 = require("tslib"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const tamedevil_1 = tslib_1.__importDefault(require("tamedevil")); +const assert = tslib_1.__importStar(require("../assert.js")); +const inspect_js_1 = require("../inspect.js"); +const interfaces_js_1 = require("../interfaces.js"); +const polymorphic_js_1 = require("../polymorphic.js"); +const executeBucket_js_1 = require("./executeBucket.js"); +function isBranchingLayerPlan(layerPlan) { + return layerPlan.reason.type === "polymorphic"; +} +function isDeferredLayerPlan(layerPlan) { + const t = layerPlan.reason.type; + return ((t === "listItem" && layerPlan.reason.stream != null) || + t === "subscription" || + t === "mutationField" || + t === "defer"); +} +function isPolymorphicLayerPlan(layerPlan) { + const t = layerPlan.reason.type; + return t === "polymorphic"; +} +/** + * A LayerPlan represents (via "reason") either the root (root), when something + * happens at a later time (mutationField, defer), when plurality changes + * (list, stream, subscription, polymorphic), or when a subprocess needs to be + * computed (subroutine). + * + * Layer plans belong to an operation plan. + * + * Every layer plan (except for the root layer plan) has exactly one parent + * layer plan. + * + * Every layer plan is caused by a parent step. + * + * The LayerPlan of a step influences: + * + * 1. how steps are deduplicated + * 2. the order in which the steps are executed + * 3. where the result of executing the step is stored + * 4. when the step execution cache is allowed to be GC'd + * + * NOTE: `__ListTransformStep`'s effectively have a temporary bucket inside + * them (built on the `__Item`) that's thrown away once the transform is + * complete. + * + */ +class LayerPlan { + constructor(operationPlan, parentLayerPlan, reason) { + this.operationPlan = operationPlan; + this.parentLayerPlan = parentLayerPlan; + this.reason = reason; + /** + * Every layer plan has a "root step" that shapes the value the layer + * returns. Note that this step may be dependent on other steps included in + * the LayerPlan, or could be provided externally. + * + * The root step is different for different layer step reasons: + * + * - root: the `operationPlan.rootValue` + * - listItem: the `__ItemStep` + * - subscription: also the `__ItemStep` + * - mutationField: the result plan of the mutation field + * - defer: the parent layer's rootStep (defer always results in an object, unless an error occurs) + * - polymorphic: the plan for the particular type + * - subroutine: the result (returned) plan of the subroutine + * + * @internal + */ + this.rootStep = null; + /** + * Which steps the results for which are available in a parent bucket need to + * be "copied across" to this bucket because steps in this bucket still + * reference them? + * + * @internal + */ + this.copyStepIds = []; + /** @internal */ + this.children = []; + /** @internal */ + this.steps = []; + /** @internal */ + this.pendingSteps = []; + /** + * This goes along with `parentStep` in the reason, except it applies to all + * layer plan types and we figure it out automatically from the parent layer + * plan. If this step has an error at a given index, then it should be + * treated as if the parentStep had an error at that same index. + * + * @internal + */ + this.parentSideEffectStep = null; + /** + * This tracks the latest seen side effect at the current point in planning + * (such that created steps take this to be their implicitSideEffectStep). + * This isn't used once planning is complete. + * + * @internal + */ + this.latestSideEffectStep = null; + /** + * Describes the order in which the steps within this LayerPlan are executed. + * + * Special attention must be paid to steps that have side effects. + * + * @internal + */ + this.phases = []; + this._hasSetRootStep = false; + // This layer plan is dependent on the latest side effect. Note that when + // we set a `rootStep` later, if the root step is dependent on this step + // (directly or indirectly) we will clear this property. + this.parentSideEffectStep = parentLayerPlan?.latestSideEffectStep ?? null; + // There has yet to be any side effects created in this layer. + this.latestSideEffectStep = null; + this.stepsByConstructor = new Map(); + if (parentLayerPlan !== null) { + this.depth = parentLayerPlan.depth + 1; + this.ancestry = [...parentLayerPlan.ancestry, this]; + if (isDeferredLayerPlan(this)) { + this.deferBoundaryDepth = this.depth; + } + else { + this.deferBoundaryDepth = parentLayerPlan.deferBoundaryDepth; + } + } + else { + this.depth = 0; + this.ancestry = [this]; + this.deferBoundaryDepth = 0; + } + this.id = operationPlan.addLayerPlan(this); + if (!parentLayerPlan) { + assert.strictEqual(this.id, 0, "All but the first LayerPlan must have a parent"); + } + else { + assert.ok(reason.type != "root", "Non-root LayerPlan must have a parentStep"); + parentLayerPlan.children.push(this); + } + } + toString() { + let chain = ""; + // eslint-disable-next-line @typescript-eslint/no-this-alias + let current = this; + while ((current = current.parentLayerPlan)) { + chain = chain + `∈${current.id}`; + } + const reasonExtra = this.reason.type === "polymorphic" + ? `{${this.reason.typeNames.join(",")}}` + : ""; + const deps = this.copyStepIds.length > 0 ? `/${this.copyStepIds}` : ""; + return `LayerPlan<${this.id}${chain}${this.parentSideEffectStep ? `^${this.parentSideEffectStep.id}` : ""}?${this.reason.type}${reasonExtra}!${this.rootStep?.id ?? "x"}${deps}>`; + } + print(depth = 0) { + const output = [`${" ".repeat(depth * 2)}${this}`]; + for (const child of this.children) { + output.push(child.print(depth + 1)); + } + return output.join("\n"); + } + setRootStep($root) { + if (this._hasSetRootStep) { + throw new Error(`Set root step on ${this} more than once`); + } + this._hasSetRootStep = true; + this.operationPlan.stepTracker.setLayerPlanRootStep(this, $root); + // NOTE: we may clear `this.parentSideEffectStep` based on the `$root` step + // having an explicit dependency on `this.parentSideEffectStep`; but that + // will be done as part of `OperationPlan::finalizeLayerPlans()` because + // steps aren't assigned `implicitSideEffectStep`s until that point. + } + /** @internal Use plan.getStep(id) instead. */ + getStep(id, requestingStep) { + return this.operationPlan.getStep(id, requestingStep); + } + /** @internal */ + _addStep(step) { + return this.operationPlan._addStep(step); + } + finalize() { + if ( + // this.reason.type === "nullableBoundary" || + this.reason.type === "listItem") { + const u = this.copyStepIds.length; + const signature = `${this.reason.type[0]}_${u}`; + withNewBucketFactory(signature, u, this.reason.type, (fn) => { + this.newBucket = fn(this.copyStepIds); + }); + } + } + newBucket(parentBucket) { + const { copyStepIds } = this; + const store = new Map(); + const polymorphicPathList = this.reason.type === "mutationField" + ? parentBucket.polymorphicPathList + : []; + const iterators = this.reason.type === "mutationField" ? parentBucket.iterators : []; + const map = new Map(); + const $parentSideEffect = this.parentSideEffectStep; + let parentSideEffectValue; + if ($parentSideEffect) { + parentSideEffectValue = parentBucket.store.get($parentSideEffect.id); + } + else { + parentSideEffectValue = null; + } + let size = 0; + switch (this.reason.type) { + case "nullableBoundary": { + if (this.rootStep == null) { + throw new Error("GrafastInternalError: nullableStepStore layer plan has no rootStepId"); + } + const itemStepId = this.rootStep.id; + // PERF: if parent bucket has no nulls/errors in `itemStepId` + // then we can just copy everything wholesale rather than building + // new arrays and looping. + const hasNoNullsOrErrors = false; + if (this.rootStep._isUnary) { + const fieldValue = parentBucket.store.get(itemStepId); + const forbiddenFlags = fieldValue._entryFlags & interfaces_js_1.FORBIDDEN_BY_NULLABLE_BOUNDARY_FLAGS; + if (forbiddenFlags) { + size = 0; + } + else { + store.set(itemStepId, fieldValue); + for (const stepId of copyStepIds) { + store.set(stepId, parentBucket.store.get(stepId)); + } + const parentBucketSize = parentBucket.size; + for (let originalIndex = 0; originalIndex < parentBucketSize; originalIndex++) { + if (parentSideEffectValue === null || + !(parentSideEffectValue._flagsAt(originalIndex) & interfaces_js_1.FLAG_ERROR)) { + const newIndex = size++; + map.set(originalIndex, newIndex); + polymorphicPathList[newIndex] = + parentBucket.polymorphicPathList[originalIndex]; + iterators[newIndex] = parentBucket.iterators[originalIndex]; + } + } + } + } + else if (hasNoNullsOrErrors) { + const nullableStepStore = parentBucket.store.get(itemStepId); + if (!nullableStepStore) { + throw new Error(`GrafastInternalError<017dc8bf-1db1-4983-a41e-e69c6652e4c7>: could not find entry '${itemStepId}' (${parentBucket.layerPlan.operationPlan.dangerouslyGetStep(itemStepId)}) in store for ${parentBucket.layerPlan}`); + } + store.set(itemStepId, nullableStepStore); + for (const stepId of copyStepIds) { + store.set(stepId, parentBucket.store.get(stepId)); + } + for (let originalIndex = 0; originalIndex < parentBucket.size; originalIndex++) { + const newIndex = size++; + map.set(originalIndex, newIndex); + polymorphicPathList[newIndex] = + parentBucket.polymorphicPathList[originalIndex]; + iterators[newIndex] = parentBucket.iterators[originalIndex]; + } + } + else { + const itemStepIdList = []; + store.set(itemStepId, (0, executeBucket_js_1.batchExecutionValue)(itemStepIdList)); + for (const stepId of copyStepIds) { + const ev = parentBucket.store.get(stepId); + if (ev.isBatch) { + // Prepare store with an empty list for each copyPlanId + store.set(stepId, (0, executeBucket_js_1.batchExecutionValue)([])); + } + else { + store.set(stepId, ev); + } + } + const nullableStepStore = parentBucket.store.get(itemStepId); + if (!nullableStepStore) { + throw new Error(`GrafastInternalError<017dc8bf-1db1-4983-a41e-e69c6652e4c7>: could not find entry '${itemStepId}' (${parentBucket.layerPlan.operationPlan.dangerouslyGetStep(itemStepId)}) in store for ${parentBucket.layerPlan}`); + } + // We'll typically be creating fewer nullableBoundary bucket entries + // than we have parent bucket entries (because we exclude nulls), so + // we must "multiply up" (down) the store entries. + for (let originalIndex = 0; originalIndex < parentBucket.size; originalIndex++) { + if ((parentSideEffectValue === null || + !(parentSideEffectValue._flagsAt(originalIndex) & interfaces_js_1.FLAG_ERROR)) && + !(nullableStepStore._flagsAt(originalIndex) & interfaces_js_1.FLAG_NULL)) { + const newIndex = size++; + map.set(originalIndex, newIndex); + const fieldValue = nullableStepStore.at(originalIndex); + itemStepIdList[newIndex] = fieldValue; + polymorphicPathList[newIndex] = + parentBucket.polymorphicPathList[originalIndex]; + iterators[newIndex] = parentBucket.iterators[originalIndex]; + for (const stepId of copyStepIds) { + const ev = store.get(stepId); + if (ev.isBatch) { + const orig = parentBucket.store.get(stepId); + ev._copyResult(newIndex, orig, originalIndex); + } + } + } + } + } + break; + } + case "listItem": { + const listStepId = this.reason.parentStep.id; + const listStepStore = parentBucket.store.get(listStepId); + if (!listStepStore) { + throw new Error(`GrafastInternalError<314865b0-f7e8-4e81-b966-56e5a0de562e>: could not find entry '${listStepId}' (${parentBucket.layerPlan.operationPlan.dangerouslyGetStep(listStepId)}) in store for layerPlan ${parentBucket.layerPlan}`); + } + if (this.rootStep == null) { + throw new Error("GrafastInternalError: listItem layer plan has no rootStepId"); + } + const itemStepId = this.rootStep.id; + // Item steps are **NOT** unary + if (this.rootStep._isUnary) { + throw new Error("listItem layer plan can't have a unary root step!"); + } + const ev = (0, executeBucket_js_1.batchExecutionValue)([]); + store.set(itemStepId, ev); + for (const stepId of copyStepIds) { + // Deliberate shadowing + const ev = parentBucket.store.get(stepId); + if (ev.isBatch) { + // Prepare store with an empty list for each copyPlanId + store.set(stepId, (0, executeBucket_js_1.batchExecutionValue)([])); + } + else { + store.set(stepId, ev); + } + } + // We'll typically be creating more listItem bucket entries than we + // have parent buckets, so we must "multiply up" the store entries. + for (let originalIndex = 0; originalIndex < parentBucket.size; originalIndex++) { + const list = listStepStore.at(originalIndex); + if ((parentSideEffectValue === null || + !(parentSideEffectValue._flagsAt(originalIndex) & interfaces_js_1.FLAG_ERROR)) && + Array.isArray(list)) { + const newIndexes = []; + map.set(originalIndex, newIndexes); + for (let j = 0, l = list.length; j < l; j++) { + const newIndex = size++; + newIndexes.push(newIndex); + ev.entries[newIndex] = list[j]; + // TODO: are these the right flags? + ev._flags[newIndex] = list[j] == null ? interfaces_js_1.FLAG_NULL : interfaces_js_1.NO_FLAGS; + polymorphicPathList[newIndex] = + parentBucket.polymorphicPathList[originalIndex]; + iterators[newIndex] = parentBucket.iterators[originalIndex]; + for (const stepId of copyStepIds) { + const ev = store.get(stepId); + if (ev.isBatch) { + const orig = parentBucket.store.get(stepId); + ev._copyResult(newIndex, orig, originalIndex); + } + } + } + } + } + break; + } + case "mutationField": { + // This is a 1-to-1 map, so we can mostly just copy from parent bucket + size = parentBucket.size; + for (let i = 0; i < parentBucket.size; i++) { + map.set(i, i); + } + for (const stepId of copyStepIds) { + store.set(stepId, parentBucket.store.get(stepId)); + } + break; + } + case "polymorphic": { + const polymorphicPlanId = this.reason.parentStep.id; + const polymorphicPlanStore = parentBucket.store.get(polymorphicPlanId); + if (!polymorphicPlanStore) { + throw new Error(`GrafastInternalError: Entry for '${parentBucket.layerPlan.operationPlan.dangerouslyGetStep(polymorphicPlanId)}' not found in bucket for '${parentBucket.layerPlan}'`); + } + // We're only copying over the entries that match this type (note: + // they may end up being null, but that's okay) + const targetTypeNames = this.reason.typeNames; + for (const stepId of copyStepIds) { + const ev = parentBucket.store.get(stepId); + if (!ev) { + throw new Error(`GrafastInternalError<548f0d84-4556-4189-8655-fb16aa3345a6>: new bucket for ${this} wants to copy ${this.operationPlan.dangerouslyGetStep(stepId)}, but bucket for ${parentBucket.layerPlan} doesn't contain that plan`); + } + if (ev.isBatch) { + store.set(stepId, (0, executeBucket_js_1.batchExecutionValue)([])); + } + else { + store.set(stepId, ev); + } + } + for (let originalIndex = 0; originalIndex < parentBucket.size; originalIndex++) { + const flags = polymorphicPlanStore._flagsAt(originalIndex); + if (flags & (interfaces_js_1.FLAG_ERROR | interfaces_js_1.FLAG_INHIBITED | interfaces_js_1.FLAG_NULL)) { + continue; + } + if (parentSideEffectValue !== null && + parentSideEffectValue._flagsAt(originalIndex) & interfaces_js_1.FLAG_ERROR) { + continue; + } + const value = polymorphicPlanStore.at(originalIndex); + const typeName = (0, polymorphic_js_1.resolveType)(value); + if (!targetTypeNames.includes(typeName)) { + continue; + } + const newIndex = size++; + map.set(originalIndex, newIndex); + // PERF: might be faster if we look this up as a constant rather than using concatenation here + const newPolymorphicPath = (parentBucket.polymorphicPathList[originalIndex] ?? "") + + ">" + + typeName; + polymorphicPathList[newIndex] = newPolymorphicPath; + iterators[newIndex] = parentBucket.iterators[originalIndex]; + for (const planId of copyStepIds) { + const ev = store.get(planId); + if (ev.isBatch) { + const orig = parentBucket.store.get(planId); + ev._copyResult(newIndex, orig, originalIndex); + } + } + } + break; + } + case "subscription": + case "defer": { + // TODO + throw new Error("TODO"); + } + case "subroutine": { + throw new Error("Subroutines are experimental and must currently handle their own bucket creation"); + } + case "root": { + throw new Error( + // *confused emoji* + "GrafastInternalError<05fb7069-81b5-43f7-ae71-f62547d2c2b7>: root cannot be not the root (...)"); + } + default: { + const never = this.reason; + throw new Error(`GrafastInternalError<8162e6c2-3d66-4d67-ba03-5310a4f9a6d4>: unhandled reason '${(0, inspect_js_1.inspect)(never)}'`); + } + } + if (size > 0) { + // Reference + const childBucket = (0, executeBucket_js_1.newBucket)({ + layerPlan: this, + size, + store, + // PERF: not necessarily, if we don't copy the errors, we don't have the errors. + flagUnion: parentBucket.flagUnion, + polymorphicPathList, + iterators, + }, parentBucket.metaByMetaKey); + parentBucket.children[this.id] = { + bucket: childBucket, + map, + }; + return childBucket; + } + else { + return null; + } + } +} +exports.LayerPlan = LayerPlan; +const makeNewBucketCache = new lru_1.default({ + maxLength: 1000, +}); +const makingNewBucketCallbacks = new Map(); +const te_parentBucketDotPolymorphicPathList = (0, tamedevil_1.default) `parentBucket.polymorphicPathList`; +const te_parentBucketDotIterators = (0, tamedevil_1.default) `parentBucket.iterators`; +const te_emptyArray = (0, tamedevil_1.default) `[]`; +const ref_newBucket = tamedevil_1.default.ref(executeBucket_js_1.newBucket, "newBucket"); +const ref_batchExecutionValue = tamedevil_1.default.ref(executeBucket_js_1.batchExecutionValue, "batchExecutionValue"); +function makeNewBucketExpression(signature, reasonType, inner) { + const expr = (0, tamedevil_1.default) `\ +(function ${tamedevil_1.default.identifier(`newBucket_${signature}`)}(parentBucket) { + const store = new Map(); + const polymorphicPathList = ${reasonType === "mutationField" + ? te_parentBucketDotPolymorphicPathList + : te_emptyArray}; + const iterators = ${reasonType === "mutationField" ? te_parentBucketDotIterators : te_emptyArray}; + const map = new Map(); + let size = 0; + +${inner} + + if (size > 0) { + // Reference + const childBucket = ${ref_newBucket}({ + layerPlan: this, + size, + store, + // PERF: not necessarily, if we don't copy the errors, we don't have the errors. + flagUnion: parentBucket.flagUnion, + polymorphicPathList, + iterators, + }, parentBucket.metaByMetaKey); + // PERF: set ourselves in more places so that we never have to call 'getChildBucketAndIndex'. + parentBucket.children[this.id] = { bucket: childBucket, map }; + + return childBucket; + } else { + return null; + } +})`; + // te.debug(expr); + return expr; +} +function newBucketFactoryInnerExpression(signature, copyCount, reasonType) { + if (reasonType === "nullableBoundary") { + if (Math.random() < 2) { + throw new Error("This code no longer works since we added unary steps."); + } + // PERF: if parent bucket has no nulls/errors in itemStepId + // then we can just copy everything wholesale rather than building + // new arrays and looping. + const blocks = []; + const copyBlocks = []; + for (let i = 0; i < copyCount; i++) { + const te_source = tamedevil_1.default.identifier(`source${i}`); + const te_target = tamedevil_1.default.identifier(`target${i}`); + const te_i = tamedevil_1.default.lit(i); + blocks.push((0, tamedevil_1.default) `\ + const ${te_source} = parentBucket.store.get(copyStepIds[${te_i}]); + const ${te_target} = ${te_source}.isBatch ? ${ref_batchExecutionValue}([]) : ${te_source}; + store.set(copyStepIds[${te_i}], ${te_target}); +`); + copyBlocks.push((0, tamedevil_1.default) `\ + if(${te_target}.isBatch) { + ${te_target}.entries[newIndex] = ${te_source}.at(originalIndex); + } +`); + } + return makeNewBucketExpression(signature, reasonType, (0, tamedevil_1.default) `\ + const itemStepId = this.rootStep.id; + const nullableStepStore = parentBucket.store.get(itemStepId); + + const itemStepIdList = []; + store.set(itemStepId, ${ref_batchExecutionValue}(itemStepIdList)); + + // Prepare store with an empty list for each copyPlanId +${tamedevil_1.default.join(blocks, "")} + + // We'll typically be creating fewer nullableBoundary bucket entries + // than we have parent bucket entries (because we exclude nulls), so + // we must "multiply up" (down) the store entries. + for ( + let originalIndex = 0; + originalIndex < parentBucket.size; + originalIndex++ + ) { + const fieldValue = nullableStepStore.at(originalIndex); + if (fieldValue != null) { + const newIndex = size++; + map.set(originalIndex, newIndex); + itemStepIdList[newIndex] = fieldValue; + + polymorphicPathList[newIndex] = parentBucket.polymorphicPathList[originalIndex]; + iterators[newIndex] = parentBucket.iterators[originalIndex]; +${tamedevil_1.default.join(copyBlocks, "")} + } + } +`); + } + else if (reasonType === "listItem") { + const blocks = []; + const copyBlocks = []; + for (let i = 0; i < copyCount; i++) { + const te_source = tamedevil_1.default.identifier(`source${i}`); + const te_target = tamedevil_1.default.identifier(`target${i}`); + const te_i = tamedevil_1.default.lit(i); + blocks.push((0, tamedevil_1.default) `\ + const ${te_source} = parentBucket.store.get(copyStepIds[${te_i}]); + const ${te_target} = ${te_source}.isBatch ? ${ref_batchExecutionValue}([]) : ${te_source}; + store.set(copyStepIds[${te_i}], ${te_target}); + `); + copyBlocks.push((0, tamedevil_1.default) `\ + if (${te_target}.isBatch) { + ${te_target}.entries[newIndex] = ${te_source}.at(originalIndex); + } + `); + } + return makeNewBucketExpression(signature, reasonType, (0, tamedevil_1.default) `\ + const listStepId = this.reason.parentStep.id; + const listStepStore = parentBucket.store.get(listStepId); + + const itemStepIdList = []; + store.set(this.rootStep.id, ${ref_batchExecutionValue}(itemStepIdList)); + + // Prepare store with an empty list for each copyPlanId + ${tamedevil_1.default.join(blocks, "")} + + // We'll typically be creating more listItem bucket entries than we + // have parent buckets, so we must "multiply up" the store entries. + for ( + let originalIndex = 0; + originalIndex < parentBucket.size; + originalIndex++ + ) { + const list = listStepStore.at(originalIndex); + if (Array.isArray(list)) { + const newIndexes = []; + map.set(originalIndex, newIndexes); + for (let j = 0, l = list.length; j < l; j++) { + const newIndex = size++; + newIndexes.push(newIndex); + itemStepIdList[newIndex] = list[j]; + + polymorphicPathList[newIndex] = parentBucket.polymorphicPathList[originalIndex]; + iterators[newIndex] = parentBucket.iterators[originalIndex]; + ${tamedevil_1.default.join(copyBlocks, "")} + } + } + } + +`); + } + else { + const never = reasonType; + return never; + } +} +function withNewBucketFactory(signature, copyCount, reasonType, callback) { + const fn = makeNewBucketCache.get(signature); + if (fn !== undefined) { + return callback(fn); + } + const building = makingNewBucketCallbacks.get(signature); + if (building !== undefined) { + building.push(callback); + return; + } + const callbacks = [callback]; + makingNewBucketCallbacks.set(signature, callbacks); + const executorExpression = newBucketFactoryInnerExpression(signature, copyCount, reasonType); + const factoryExpression = (0, tamedevil_1.default) `\ +function ${tamedevil_1.default.identifier(`layerPlanNewBucketFactory_${signature}`)}(copyStepIds) { + return ${executorExpression}; +}`; + tamedevil_1.default.runInBatch(factoryExpression, (factory) => { + makeNewBucketCache.set(signature, factory); + makingNewBucketCallbacks.delete(signature); + for (const callback of callbacks) { + callback(factory); + } + }); +} +//# sourceMappingURL=LayerPlan.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/LayerPlan.js.map b/grafast/grafast/dist/engine/LayerPlan.js.map new file mode 100644 index 0000000000..879f410c07 --- /dev/null +++ b/grafast/grafast/dist/engine/LayerPlan.js.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerPlan.js","sourceRoot":"","sources":["../../src/engine/LayerPlan.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OperationPlan.d.ts b/grafast/grafast/dist/engine/OperationPlan.d.ts new file mode 100644 index 0000000000..cd1822a7b4 --- /dev/null +++ b/grafast/grafast/dist/engine/OperationPlan.d.ts @@ -0,0 +1,208 @@ +import type { FragmentDefinitionNode, GraphQLFieldMap, GraphQLObjectType, GraphQLSchema, GraphQLUnionType, OperationDefinitionNode } from "graphql"; +import type { Constraint } from "../constraints.js"; +import type { SelectionSetDigest } from "../graphqlCollectFields.js"; +import type { GrafastPlanJSON } from "../index.js"; +import { Step } from "../index.js"; +import { $$timeout, $$ts } from "../interfaces.js"; +import type { LayerPlanReasonSubroutine } from "./LayerPlan.js"; +import { LayerPlan } from "./LayerPlan.js"; +import { OutputPlan } from "./OutputPlan.js"; +export declare const POLYMORPHIC_ROOT_PATH: null; +export declare const POLYMORPHIC_ROOT_PATHS: ReadonlySet | null; +/** Beware: the list of phases may change over time... @experimental */ +export type OperationPlanPhase = "init" | "plan" | "validate" | "optimize" | "finalize" | "ready"; +export interface MetaByMetaKey { + [metaKey: string | number | symbol]: Record; +} +export declare class OperationPlan { + readonly schema: GraphQLSchema; + readonly operation: OperationDefinitionNode; + readonly fragments: { + [fragmentName: string]: FragmentDefinitionNode; + }; + readonly variableValues: { + [key: string]: any; + }; + readonly context: { + [key: string]: any; + }; + readonly rootValue: any; + private readonly planningTimeout; + readonly [$$timeout]: undefined; + readonly [$$ts]: undefined; + readonly queryType: GraphQLObjectType; + readonly mutationType: GraphQLObjectType | null; + readonly subscriptionType: GraphQLObjectType | null; + readonly unionsContainingObjectType: { + [objectTypeName: string]: ReadonlyArray; + }; + private operationType; + /** + * What state is the OpPlan in? + * + * 1. init + * 2. plan + * 3. validate + * 5. optimize + * 6. finalize + * 7. ready + * + * Once in 'ready' state we can execute the plan. + */ + phase: OperationPlanPhase; + /** + * Gets updated as we work our way through the plan, useful for making errors more helpful. + */ + loc: string[] | null; + /** + * If true, then this operation doesn't use (custom) resolvers. + */ + pure: boolean; + private startTime; + private previousLap; + private laps; + private optimizeMeta; + private scalarPlanInfo; + constructor(schema: GraphQLSchema, operation: OperationDefinitionNode, fragments: { + [fragmentName: string]: FragmentDefinitionNode; + }, variableValuesConstraints: Constraint[], variableValues: { + [key: string]: any; + }, contextConstraints: Constraint[], context: { + [key: string]: any; + }, rootValueConstraints: Constraint[], rootValue: any, planningTimeout: number | null); + private lap; + private checkTimeout; + private planOperation; + /** + * Plans a GraphQL query operation. + */ + private planQuery; + /** + * Implements the `PlanOpPlanMutation` algorithm. + */ + private planMutation; + /** + * Implements the `PlanOpPlanSubscription` algorithm. + */ + private planSubscription; + /** + * Gets the item plan for a given parent list plan - this ensures we only + * create one item plan per parent plan. + */ + private itemStepForListStep; + processGroupedFieldSet(outputPlan: OutputPlan, path: readonly string[], polymorphicPath: string | null, polymorphicPaths: ReadonlySet | null, parentStep: Step, objectType: GraphQLObjectType, objectTypeFields: GraphQLFieldMap, isMutation: boolean, groupedFieldSet: SelectionSetDigest): void; + /** + * + * @param outputPlan - The output plan that this selection set is being added to + * @param path - The path within the outputPlan that we're adding stuff (only for root/object OutputPlans) + * @param parentStep - The step that represents the selection set root + * @param objectType - The object type that this selection set is being evaluated for (note polymorphic selection should already have been handled by this point) + * @param selections - The GraphQL selections (fields, fragment spreads, inline fragments) to evaluate + * @param isMutation - If true this selection set should be executed serially rather than in parallel (each field gets its own LayerPlan) + */ + private planSelectionSet; + private internalDependency; + private planIntoOutputPlan; + private polymorphicLayerPlanByPathByLayerPlan; + private getPolymorphicLayerPlan; + private planField; + /** + * A replacement for GraphQL's + * `CoerceArgumentValues` that factors in tracked variables. + * + * @see https://spec.graphql.org/draft/#CoerceArgumentValues() + */ + private getTrackedArguments; + /** + * Sets up tracking for the given value (variableValues, context, rootValue). + */ + private track; + /** + * Checks that no step has a property on it whose value is another step. It + * should addDependency instead. + */ + private validateSteps; + private replaceStep; + private processStep; + /** + * Peers are steps of the same type (but not the same step!) that are in + * compatible layers and have the same dependencies. Peers must not have side + * effects. A step is not its own peer. + */ + private getPeers; + private isImmoveable; + /** + * Attempts to hoist the step into a higher layerPlan to maximize + * deduplication. + */ + private hoistStep; + /** + * Attempts to push the step into the lowest layerPlan to minimize the need + * for copying between layer plans. + */ + private pushDown; + private _deduplicateInnerLogic; + private deduplicateStep; + private deduplicateStepsProcess; + /** + * Gives us a chance to replace nearly-duplicate plans with other existing + * plans (and adding the necessary transforms); this means that by the time + * we come to optimize the plan tree should already be simpler. For example + * if you have two plans at the same level that both request row data from + * the same database table with the same identifiers, `WHERE`, `LIMIT`, + * `OFFSET` and `ORDER BY`, but different `SELECT`s we could merge the two + * plans together by replacing the latter with the former and having the + * former SELECT additional fields, then transform the results back to what + * our child plans would be expecting. + */ + private deduplicateSteps; + private hoistAndDeduplicate; + private hoistSteps; + private pushDownSteps; + /** + * Calls the 'optimize' method on a plan, which may cause the plan to + * communicate with its (deep) dependencies, and even to replace itself with + * a different plan. + */ + private optimizeStep; + /** + * Note that we work through dependents first so we can make sure that we + * know all our dependent's needs before we optimise ourself. + */ + private optimizeSteps; + private inlineSteps; + /** Finalizes each step */ + private finalizeSteps; + private finalizeLayerPlans; + /** Optimizes each output plan */ + private optimizeOutputPlans; + /** Finalizes each output plan */ + private finalizeOutputPlans; + private walkOutputPlans; + generatePlanJSON(): GrafastPlanJSON; + finishSubroutine(subroutineStep: Step, layerPlan: LayerPlan): void; + getStepsByMetaKey(metaKey: string | number | symbol): Step[]; + getStepsByStepClass(klass: { + new (...args: any[]): TClass; + }): TClass[]; + private _cacheStepStoreByLayerPlanAndActionKey; + /** + * Cache a generated step by a given identifier (cacheKey) such that we don't + * need to regenerate it on future calls, significantly reducing the load on + * deduplication later. + * + * Note: automatically extends the cached step into other (relevant) + * polymorphic paths; if this shouldn't be the case then don't use cacheStep + * and instead rely on deduplication as usual. + * + * @experimental + */ + cacheStep(ownerStep: Step, actionKey: string, cacheKey: symbol | string | number | boolean | null | undefined, cb: () => T): T; + /** + * Clears the cache, typically due to side effects having taken place. Called + * from setting hasSideEffects on an ExecutableStep, among other places. + */ + resetCache(): void; + withRootLayerPlan(cb: () => T): T; +} +//# sourceMappingURL=OperationPlan.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OperationPlan.d.ts.map b/grafast/grafast/dist/engine/OperationPlan.d.ts.map new file mode 100644 index 0000000000..0844e3bb4d --- /dev/null +++ b/grafast/grafast/dist/engine/OperationPlan.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OperationPlan.d.ts","sourceRoot":"","sources":["../../src/engine/OperationPlan.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OperationPlan.js b/grafast/grafast/dist/engine/OperationPlan.js new file mode 100644 index 0000000000..a09743324e --- /dev/null +++ b/grafast/grafast/dist/engine/OperationPlan.js @@ -0,0 +1,2857 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OperationPlan = exports.POLYMORPHIC_ROOT_PATHS = exports.POLYMORPHIC_ROOT_PATH = void 0; +const tslib_1 = require("tslib"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const graphql = tslib_1.__importStar(require("graphql")); +const tamedevil_1 = tslib_1.__importDefault(require("tamedevil")); +const assert = tslib_1.__importStar(require("../assert.js")); +const graphqlCollectFields_js_1 = require("../graphqlCollectFields.js"); +const graphqlMergeSelectionSets_js_1 = require("../graphqlMergeSelectionSets.js"); +const index_js_1 = require("../index.js"); +const input_js_1 = require("../input.js"); +const inspect_js_1 = require("../inspect.js"); +const interfaces_js_1 = require("../interfaces.js"); +const operationPlan_input_js_1 = require("../operationPlan-input.js"); +const step_js_1 = require("../step.js"); +const connection_js_1 = require("../steps/connection.js"); +const constant_js_1 = require("../steps/constant.js"); +const graphqlResolver_js_1 = require("../steps/graphqlResolver.js"); +const timeSource_js_1 = require("../timeSource.js"); +const utils_js_1 = require("../utils.js"); +const LayerPlan_js_1 = require("./LayerPlan.js"); +const defaultPlanResolver_js_1 = require("./lib/defaultPlanResolver.js"); +const withGlobalLayerPlan_js_1 = require("./lib/withGlobalLayerPlan.js"); +const lock_js_1 = require("./lock.js"); +const OutputPlan_js_1 = require("./OutputPlan.js"); +const StepTracker_js_1 = require("./StepTracker.js"); +const atpe = typeof process !== "undefined" && process.env.ALWAYS_THROW_PLANNING_ERRORS; +const ALWAYS_THROW_PLANNING_ERRORS = atpe === "1"; +const THROW_PLANNING_ERRORS_ON_SIDE_EFFECTS = atpe === "2"; +/** + * Returns true for steps that the system populates automatically without executing. + */ +function isPrepopulatedStep(step) { + return step instanceof index_js_1.__ItemStep || step instanceof index_js_1.__ValueStep; +} +if (atpe && + atpe !== "0" && + !(ALWAYS_THROW_PLANNING_ERRORS || THROW_PLANNING_ERRORS_ON_SIDE_EFFECTS)) { + throw new Error(`Invalid value for envvar 'ALWAYS_THROW_PLANNING_ERRORS' - expected '1' or '2', but received '${atpe}'`); +} +// Work around TypeScript CommonJS `graphql_1.isListType` unoptimal access. +const { assertObjectType, defaultFieldResolver, getNamedType, getNullableType, isEnumType, isInterfaceType, isListType, isNonNullType, isObjectType, isScalarType, isUnionType, } = graphql; +/** + * This value allows the first few plans to take more time whilst the JIT warms + * up - planning can easily go from 400ms down to 80ms after just a few + * executions thanks to V8's JIT. + */ +let planningTimeoutWarmupMultiplier = 5; +const EMPTY_ARRAY = Object.freeze([]); +exports.POLYMORPHIC_ROOT_PATH = null; +exports.POLYMORPHIC_ROOT_PATHS = null; +Object.freeze(exports.POLYMORPHIC_ROOT_PATHS); +/** How many times will we try re-optimizing before giving up */ +const MAX_OPTIMIZATION_LOOPS = 10; +const REASON_ROOT = Object.freeze({ type: "root" }); +const OUTPUT_PLAN_TYPE_NULL = Object.freeze({ mode: "null" }); +const OUTPUT_PLAN_TYPE_ARRAY = Object.freeze({ mode: "array" }); +const newValueStepCallback = (isImmutable) => new index_js_1.__ValueStep(isImmutable); +const NO_ARGS = { + get() { + throw new Error(`This field doesn't have any arguments`); + }, +}; +class OperationPlan { + constructor(schema, operation, fragments, variableValuesConstraints, variableValues, contextConstraints, context, rootValueConstraints, rootValue, planningTimeout) { + this.schema = schema; + this.operation = operation; + this.fragments = fragments; + this.variableValues = variableValues; + this.context = context; + this.rootValue = rootValue; + this.planningTimeout = planningTimeout; + /** + * What state is the OpPlan in? + * + * 1. init + * 2. plan + * 3. validate + * 5. optimize + * 6. finalize + * 7. ready + * + * Once in 'ready' state we can execute the plan. + */ + this.phase = "init"; + /** + * Gets updated as we work our way through the plan, useful for making errors more helpful. + */ + this.loc = index_js_1.isDev + ? [] + : null /* forbid loc in production */; + /** @internal */ + this.stepTracker = new StepTracker_js_1.StepTracker(this); + /** + * @internal + */ + this.itemStepIdByListStepId = Object.create(null); + /** + * If true, then this operation doesn't use (custom) resolvers. + */ + this.pure = true; + this.startTime = timeSource_js_1.timeSource.now(); + this.previousLap = this.startTime; + this.laps = []; + this.optimizeMeta = new Map(); + /** @internal */ + this.valueNodeToStaticValueCache = new Map(); + /** @internal Use plan.getStep(id) instead. */ + this.getStep = index_js_1.isDev + ? (id, requestingStep) => { + if (!["plan", "validate", "optimize"].includes(this.phase)) { + throw new Error(`Getting a step during the '${this.phase}' phase is forbidden - please do so before or during the optimize phase.`); + } + // Check that requestingStep is allowed to get steps + if (requestingStep.isOptimized && + (this.phase !== "optimize" || + !requestingStep.allowMultipleOptimizations)) { + throw new Error(`Optimized step ${requestingStep} is not permitted to request other steps (requested '${id}')`); + } + const step = this.stepTracker.getStepById(id); + if (step == null) { + throw new Error(`Programming error: step with id '${id}' no longer exists (attempted access from ${requestingStep}). Most likely this means that ${requestingStep} has an illegal reference to this step, you should only maintain references to steps via dependencies.`); + } + return step[interfaces_js_1.$$proxy] ?? step; + } + : (id, _requestingStep) => { + const step = this.stepTracker.getStepById(id); + return step[interfaces_js_1.$$proxy] ?? step; + }; + this.polymorphicLayerPlanByPathByLayerPlan = new Map(); + this._cacheStepStoreByLayerPlanAndActionKey = Object.create(null); + this.variableValuesConstraints = variableValuesConstraints; + this.contextConstraints = contextConstraints; + this.rootValueConstraints = rootValueConstraints; + this.scalarPlanInfo = { schema: this.schema }; + const queryType = schema.getQueryType(); + assert.ok(queryType, "Schema must have a query type"); + this.queryType = queryType; + this.mutationType = schema.getMutationType() ?? null; + this.subscriptionType = schema.getSubscriptionType() ?? null; + const allTypes = Object.values(schema.getTypeMap()); + const allUnions = []; + const allObjectTypes = []; + this.unionsContainingObjectType = Object.create(null); + for (const type of allTypes) { + if (isUnionType(type)) { + allUnions.push(type); + const members = type.getTypes(); + for (const memberType of members) { + if (!this.unionsContainingObjectType[memberType.name]) { + this.unionsContainingObjectType[memberType.name] = [type]; + } + else { + this.unionsContainingObjectType[memberType.name].push(type); + } + } + } + else if (isObjectType(type)) { + allObjectTypes.push(type); + if (!this.unionsContainingObjectType[type.name]) { + this.unionsContainingObjectType[type.name] = []; + } + } + } + this.operationType = operation.operation; + this.phase = "plan"; + this.rootLayerPlan = new LayerPlan_js_1.LayerPlan(this, null, REASON_ROOT); + // Set up the shared steps for variables, context and rootValue + [this.variableValuesStep, this.trackedVariableValuesStep] = this.track(variableValues, this.variableValuesConstraints, this.operation.variableDefinitions); + [this.contextStep, this.trackedContextStep] = this.track(context, this.contextConstraints); + [this.rootValueStep, this.trackedRootValueStep] = this.track(rootValue, this.rootValueConstraints); + // this.rootLayerPlan.parentStep = this.trackedRootValueStep; + this.deduplicateSteps(); + this.lap("init"); + // Plan the operation + this.planOperation(); + this.checkTimeout(); + this.lap("planOperation"); + // Now perform hoisting (and repeat deduplication) + this.hoistSteps(); + this.checkTimeout(); + this.lap("hoistSteps", "planOperation"); + if (index_js_1.isDev) { + this.phase = "validate"; + this.resetCache(); + // Helpfully check steps don't do forbidden things. + this.validateSteps(); + this.lap("validateSteps"); + } + this.phase = "optimize"; + this.resetCache(); + // Get rid of temporary steps before `optimize` triggers side-effects. + // (Critical due to steps that may have been discarded due to field errors + // or similar.) + this.stepTracker.treeShakeSteps(); + this.checkTimeout(); + this.lap("treeShakeSteps", "optimize"); + // Replace/inline/optimise steps + tamedevil_1.default.batch(() => { + this.optimizeSteps(); + }); + this.checkTimeout(); + this.lap("optimizeSteps"); + this.inlineSteps(); + this.checkTimeout(); + this.lap("inlineSteps"); + this.phase = "finalize"; + this.resetCache(); + this.stepTracker.finalizeSteps(); + // Get rid of steps that are no longer needed after optimising outputPlans + // (we shouldn't see any new steps or dependencies after here) + this.stepTracker.treeShakeSteps(); + this.checkTimeout(); + this.lap("treeShakeSteps", "finalize"); + // Now shove steps as deep down as they can go (opposite of hoist) + this.pushDownSteps(); + this.checkTimeout(); + this.lap("pushDownSteps"); + // Plans are expected to execute later; they may take steps here to prepare + // themselves (e.g. compiling SQL queries ahead of time). + tamedevil_1.default.batch(() => { + this.finalizeSteps(); + }); + this.lap("finalizeSteps"); + // Replace access plans with direct access, etc (must come after finalizeSteps) + tamedevil_1.default.batch(() => { + this.optimizeOutputPlans(); + }); + this.checkTimeout(); + this.lap("optimizeOutputPlans"); + // AccessSteps may have been removed + this.stepTracker.treeShakeSteps(); + this.checkTimeout(); + this.lap("treeShakeSteps", "optimizeOutputPlans"); + this.stepTracker.finalizeOutputPlans(); + tamedevil_1.default.batch(() => { + this.finalizeLayerPlans(); + }); + this.lap("finalizeLayerPlans"); + tamedevil_1.default.batch(() => { + this.finalizeOutputPlans(); + }); + this.lap("finalizeOutputPlans"); + this.phase = "ready"; + this.resetCache(); + // this.walkFinalizedPlans(); + // this.preparePrefetches(); + const allMetaKeys = new Set(); + for (const step of this.stepTracker.activeSteps) { + if (step.metaKey !== undefined) { + allMetaKeys.add(step.metaKey); + } + } + const allMetaKeysList = [...allMetaKeys]; + this.makeMetaByMetaKey = makeMetaByMetaKeysFactory(allMetaKeysList); + this.lap("ready"); + const elapsed = timeSource_js_1.timeSource.now() - this.startTime; + /* + console.log(`Planning took ${elapsed.toFixed(1)}ms`); + const entries: Array<{ process: string; duration: string }> = []; + for (const lap of this.laps) { + const elapsed = lap.elapsed; + entries.push({ + process: `${lap.category}${ + lap.subcategory ? `[${lap.subcategory}]` : `` + }`, + duration: `${elapsed.toFixed(1)}ms`, + }); + } + console.table(entries); + */ + // Allow this to be garbage collected + this.optimizeMeta = null; + context?.grafastMetricsEmitter?.emit("plan", { + elapsed, + laps: this.laps, + }); + if (planningTimeoutWarmupMultiplier > 1) { + planningTimeoutWarmupMultiplier = Math.max(1, planningTimeoutWarmupMultiplier - 0.5); + } + } + lap(category, subcategory) { + const now = timeSource_js_1.timeSource.now(); + const elapsed = now - this.previousLap; + this.previousLap = now; + this.laps.push({ category, subcategory, elapsed }); + } + checkTimeout() { + if (this.planningTimeout === null) + return; + const now = timeSource_js_1.timeSource.now(); + const elapsed = now - this.startTime; + if (elapsed > this.planningTimeout * planningTimeoutWarmupMultiplier) { + throw new index_js_1.SafeError("Operation took too long to plan and was aborted. Please simplify the request and try again.", { + [interfaces_js_1.$$timeout]: this.planningTimeout, + [interfaces_js_1.$$ts]: now, + }); + } + } + /** + * Called by the LayerPlan's constructor when it wants to get a new id to use. + * + * @internal + */ + addLayerPlan(layerPlan) { + return this.stepTracker.addLayerPlan(layerPlan); + } + /** + * Adds a plan to the known steps and returns the number to use as the plan + * id. ONLY to be used from Step, user code should never call this directly. + * + * @internal + */ + _addStep(plan) { + if (!["plan", "validate", "optimize"].includes(this.phase)) { + throw new Error(`Creating a plan during the '${this.phase}' phase is forbidden.`); + } + return this.stepTracker.addStep(plan); + } + /** + * Get a plan without specifying who requested it; this disables all the + * caller checks. Only intended to be called from internal code. + * + * @internal + */ + dangerouslyGetStep(id) { + return this.stepTracker.getStepById(id); + } + planOperation() { + try { + switch (this.operationType) { + case "query": { + this.planQuery(); + break; + } + case "mutation": { + this.planMutation(); + break; + } + case "subscription": { + this.planSubscription(); + break; + } + default: { + const never = this.operationType; + throw new index_js_1.SafeError(`Unsupported operation type '${never}'.`); + } + } + } + catch (e) { + // LOGGING: raise this somewhere critical + if (this.loc != null) { + console.error(`Error occurred during query planning (at ${this.loc.join(" > ")}): \n${e.stack || e}`); + } + else { + console.error(`Error occurred during query planning: \n${e.stack || e}`); + } + throw new Error(`Query planning error: ${e.message}`, { cause: e }); + } + } + /** + * Plans a GraphQL query operation. + */ + planQuery() { + if (this.loc !== null) + this.loc.push("planQuery()"); + const rootType = this.queryType; + if (!rootType) { + throw new index_js_1.SafeError("No query type found in schema"); + } + const locationDetails = { + node: this.operation.selectionSet.selections, + parentTypeName: null, + // WHAT SHOULD fieldName be here?! + fieldName: null, + }; + const outputPlan = new OutputPlan_js_1.OutputPlan(this.rootLayerPlan, this.rootValueStep, { + mode: "root", + typeName: this.queryType.name, + }, locationDetails); + this.rootOutputPlan = outputPlan; + this.planSelectionSet(outputPlan, [], exports.POLYMORPHIC_ROOT_PATH, exports.POLYMORPHIC_ROOT_PATHS, this.trackedRootValueStep, rootType, this.operation.selectionSet.selections, true); + if (this.loc !== null) + this.loc.pop(); + } + /** + * Implements the `PlanOpPlanMutation` algorithm. + */ + planMutation() { + if (this.loc !== null) + this.loc.push("planMutation()"); + const rootType = this.mutationType; + if (!rootType) { + throw new index_js_1.SafeError("No mutation type found in schema"); + } + this.deduplicateSteps(); + const locationDetails = { + node: this.operation.selectionSet.selections, + parentTypeName: null, + // WHAT SHOULD fieldName be here?! + fieldName: null, + }; + const outputPlan = new OutputPlan_js_1.OutputPlan(this.rootLayerPlan, this.rootValueStep, { + mode: "root", + typeName: rootType.name, + }, locationDetails); + this.rootOutputPlan = outputPlan; + this.planSelectionSet(outputPlan, [], exports.POLYMORPHIC_ROOT_PATH, exports.POLYMORPHIC_ROOT_PATHS, this.trackedRootValueStep, rootType, this.operation.selectionSet.selections, true, true); + if (this.loc !== null) + this.loc.pop(); + } + /** + * Implements the `PlanOpPlanSubscription` algorithm. + */ + planSubscription() { + if (this.loc !== null) + this.loc.push("planSubscription"); + const rootType = this.subscriptionType; + if (!rootType) { + throw new index_js_1.SafeError("No subscription type found in schema"); + } + const selectionSet = this.operation.selectionSet; + const groupedFieldSet = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.rootLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, graphqlCollectFields_js_1.graphqlCollectFields, null, this, this.trackedRootValueStep.id, rootType, selectionSet.selections, (0, graphqlCollectFields_js_1.newSelectionSetDigest)(false)); + if (groupedFieldSet.deferred !== undefined) { + throw new index_js_1.SafeError("@defer forbidden on subscription root selection set"); + } + let firstKey = undefined; + for (const key of groupedFieldSet.fields.keys()) { + if (firstKey !== undefined) { + throw new index_js_1.SafeError("subscriptions may only have one top-level field"); + } + firstKey = key; + } + assert.ok(firstKey != null, "selection set cannot be empty"); + const fields = groupedFieldSet.fields.get(firstKey); + if (!fields) { + throw new index_js_1.SafeError("Consistency error."); + } + // All grouped fields are equivalent, as mandated by GraphQL validation rules. Thus we can take the first one. + const field = fields[0]; + const fieldName = field.name.value; // Unaffected by alias. + const rootTypeFields = rootType.getFields(); + const fieldSpec = rootTypeFields[fieldName]; + const rawSubscriptionPlanResolver = fieldSpec.extensions?.grafast?.subscribePlan; + const path = [field.alias?.value ?? fieldName]; + const locationDetails = { + parentTypeName: rootType.name, + fieldName, + node: this.operation.selectionSet.selections, + }; + const subscriptionPlanResolver = rawSubscriptionPlanResolver; + const fieldArgsSpec = fieldSpec.args; + const trackedArguments = fieldArgsSpec.length > 0 + ? (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.rootLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, this.getTrackedArguments, this, fieldArgsSpec, field) + : NO_ARGS; + if (subscriptionPlanResolver !== undefined) { + // PERF: optimize this + const { haltTree, step: subscribeStep } = this.planField(rootType.name, fieldName, this.rootLayerPlan, path, exports.POLYMORPHIC_ROOT_PATHS, subscriptionPlanResolver, "subscribePlan", this.trackedRootValueStep, fieldSpec, trackedArguments, true); + if (haltTree) { + throw new index_js_1.SafeError("Failed to setup subscription"); + } + this.rootLayerPlan.setRootStep(subscribeStep); + const subscriptionEventLayerPlan = new LayerPlan_js_1.LayerPlan(this, this.rootLayerPlan, { + type: "subscription", + }); + const $__item = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(subscriptionEventLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, () => new index_js_1.__ItemStep(subscribeStep)); + subscriptionEventLayerPlan.setRootStep($__item); + let streamItemPlan = (0, utils_js_1.hasItemPlan)(subscribeStep) + ? (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(subscriptionEventLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, subscribeStep.itemPlan, subscribeStep, $__item) + : $__item; + // WE MUST RE-FETCH STEPS AFTER DEDUPLICATION! + this.deduplicateSteps(); + streamItemPlan = this.stepTracker.getStepById(streamItemPlan.id); + const outputPlan = new OutputPlan_js_1.OutputPlan(subscriptionEventLayerPlan, this.rootValueStep, { mode: "root", typeName: rootType.name }, locationDetails); + this.rootOutputPlan = outputPlan; + this.planSelectionSet(outputPlan, [], exports.POLYMORPHIC_ROOT_PATH, exports.POLYMORPHIC_ROOT_PATHS, streamItemPlan, rootType, selectionSet.selections, false); + } + else { + const subscribeStep = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.rootLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, () => { + const $args = (0, index_js_1.object)(field.arguments?.reduce((memo, arg) => { + memo[arg.name.value] = trackedArguments.get(arg.name.value); + return memo; + }, Object.create(null)) ?? Object.create(null)); + const rawResolver = fieldSpec.resolve; + const rawSubscriber = fieldSpec.subscribe; + return (0, graphqlResolver_js_1.graphqlResolver)(rawResolver, rawSubscriber, this.trackedRootValueStep, $args, { + fieldName, + fieldNodes: fields, + fragments: this.fragments, + operation: this.operation, + parentType: this.subscriptionType, + returnType: fieldSpec.type, + schema: this.schema, + // @ts-ignore + path: { + typename: this.subscriptionType.name, + key: fieldName, + prev: undefined, + }, + }); + }); + subscribeStep._stepOptions.stream = {}; + subscribeStep._stepOptions.walkIterable = true; + this.rootLayerPlan.setRootStep(subscribeStep); + const subscriptionEventLayerPlan = new LayerPlan_js_1.LayerPlan(this, this.rootLayerPlan, { + type: "subscription", + }); + const $__item = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(subscriptionEventLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, () => new index_js_1.__ItemStep(subscribeStep)); + subscriptionEventLayerPlan.setRootStep($__item); + let streamItemPlan = (0, utils_js_1.hasItemPlan)(subscribeStep) + ? (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(subscriptionEventLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, subscribeStep.itemPlan, subscribeStep, $__item) + : $__item; + // WE MUST RE-FETCH STEPS AFTER DEDUPLICATION! + this.deduplicateSteps(); + streamItemPlan = this.stepTracker.getStepById(streamItemPlan.id); + const outputPlan = new OutputPlan_js_1.OutputPlan(subscriptionEventLayerPlan, this.rootValueStep, { mode: "root", typeName: rootType.name }, locationDetails); + this.rootOutputPlan = outputPlan; + this.planSelectionSet(outputPlan, [], exports.POLYMORPHIC_ROOT_PATH, exports.POLYMORPHIC_ROOT_PATHS, streamItemPlan, rootType, selectionSet.selections, true); + } + if (this.loc !== null) + this.loc.pop(); + } + /** + * Gets the item plan for a given parent list plan - this ensures we only + * create one item plan per parent plan. + */ + itemStepForListStep(parentLayerPlan, listStep, depth, stream) { + const itemStepId = this.itemStepIdByListStepId[listStep.id]; + if (itemStepId !== undefined) { + return this.stepTracker.getStepById(itemStepId); + } + // Create a new LayerPlan for this list item + const layerPlan = new LayerPlan_js_1.LayerPlan(this, parentLayerPlan, { + type: "listItem", + parentStep: listStep, + stream, + }); + const itemPlan = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(layerPlan, listStep.polymorphicPaths, () => new index_js_1.__ItemStep(listStep, depth)); + layerPlan.setRootStep(itemPlan); + this.itemStepIdByListStepId[listStep.id] = itemPlan.id; + return itemPlan; + } + processGroupedFieldSet( + // Deliberately shadows + outputPlan, path, polymorphicPath, polymorphicPaths, parentStep, objectType, objectTypeFields, isMutation, groupedFieldSet) { + // `__typename` shouldn't bump the mutation index since it has no side effects. + let mutationIndex = -1; + const $sideEffect = outputPlan.layerPlan.latestSideEffectStep; + for (const [responseKey, fieldNodes] of groupedFieldSet.fields.entries()) { + let resolverEmulation = groupedFieldSet.resolverEmulation; + try { + // All grouped fields are equivalent, as mandated by GraphQL validation rules. Thus we can take the first one. + const field = fieldNodes[0]; + const fieldName = field.name.value; + const locationDetails = { + parentTypeName: objectType.name, + fieldName, + node: fieldNodes, + }; + // explicit matches are the fastest: https://jsben.ch/ajZNf + if (fieldName === "__typename") { + outputPlan.addChild(objectType, responseKey, { + type: "__typename", + locationDetails, + }); + continue; + } + else if (fieldName === "__schema" || fieldName === "__type") { + const variableNames = (0, utils_js_1.findVariableNamesUsed)(this, field); + outputPlan.addChild(objectType, responseKey, { + type: "outputPlan", + isNonNull: fieldName === "__schema", + outputPlan: new OutputPlan_js_1.OutputPlan(outputPlan.layerPlan, this.rootValueStep, { + mode: "introspection", + field, + variableNames, + // PERF: if variableNames.length === 0 we should be able to optimize this! + introspectionCacheByVariableValues: new lru_1.default({ + maxLength: 3, + }), + }, locationDetails), + locationDetails, + }); + continue; + } + const objectField = objectTypeFields[fieldName]; + if (!objectField) { + // Field does not exist; this should have been caught by validation + // but the spec says to just skip it. + continue; + } + const fieldType = objectField.type; + const rawPlanResolver = objectField.extensions?.grafast?.plan; + if (rawPlanResolver) { + resolverEmulation = false; + (0, utils_js_1.assertNotAsync)(rawPlanResolver, `${objectType.name}.${fieldName}.plan`); + } + const namedReturnType = getNamedType(fieldType); + const resolvedResolver = objectField.resolve; + const subscriber = objectField.subscribe; + const usesDefaultResolver = resolvedResolver == null || resolvedResolver === defaultFieldResolver; + const isPolymorphic = isUnionType(namedReturnType) || isInterfaceType(namedReturnType); + // We should use a resolver if: + // 1. they give us a non-default resolver + // 2. we're emulating resolvers AND the field is polymorphic + const resolver = resolvedResolver && !usesDefaultResolver + ? resolvedResolver + : resolverEmulation && isPolymorphic + ? defaultFieldResolver + : null; + // Apply a default plan to fields that do not have a plan nor a resolver. + const planResolver = rawPlanResolver ?? (resolver ? undefined : defaultPlanResolver_js_1.defaultPlanResolver); + /* + * When considering resolvers on fields, there's three booleans to + * consider: + * + * - typeIsPlanned: Does the type the field is defined on expect a plan? + * - NOTE: the root types (Query, Mutation, Subscription) implicitly + * expect the "root plan" + * - fieldHasPlan: Does the field define a `plan()` method? + * - resultIsPlanned: Does the named type that the field returns (the + * "named field type") expect a plan? + * - NOTE: only object types, unions and interfaces may expect plans; + * but not all of them do. + * - NOTE: a union/interface expects a plan iff ANY of its object + * types expect plans + * - NOTE: if ANY object type in an interface/union expects a plan + * then ALL object types within the interface/union must expect + * plans. + * - NOTE: scalars and enums never expect a plan. + * + * These booleans impact: + * + * - Whether there must be a `plan()` declaration and what the "parent" + * argument is to the same + * - If typeIsPlanned: + * - Assert: `fieldHasPlan` must be true + * - Pass through the parent plan + * - Else, if resultIsPlanned: + * - Assert: `fieldHasPlan` must be true + * - Pass through a `__ValueStep` representing the parent value. + * - Else, if fieldHasPlan: + * - Pass through a `__ValueStep` representing the parent value. + * - Else + * - No action necessary. + * - If the field may define `resolve()` and what the "parent" argument + * is to the same + * - If resultIsPlanned + * - Assert: there must not be a `resolve()` + * - Grafast provides pure resolver. + * - Else if fieldHasPlan (which may be implied by typeIsPlanned + * above) + * - If `resolve()` is not set: + * - grafast will return the value from the plan directly + * - Otherwise: + * - Grafast will wrap this resolver and will call `resolve()` (or + * default resolver) with the plan result. IMPORTANT: you may + * want to use an `ObjectStep` so that the parent object is of + * the expected shape; e.g. your plan might return + * `object({username: $username})` for a `User.username` field. + * - Else + * - Leave `resolve()` untouched - do not even wrap it. + * - (Failing that, use a __ValueStep and return the result + * directly.) + */ + if (resolver !== null) { + this.pure = false; + if (!rawPlanResolver) { + resolverEmulation = true; + } + } + const resultIsPlanned = (0, utils_js_1.isTypePlanned)(this.schema, namedReturnType); + const fieldHasPlan = !!planResolver; + if (resultIsPlanned && + !fieldHasPlan && + !objectType.extensions?.grafast?.assertStep) { + throw new Error(`Field ${objectType.name}.${fieldName} returns a ${namedReturnType.name} which expects a plan to be available; however this field has no plan() method to produce such a plan; please add 'extensions.grafast.plan' to this field.`); + } + if (resultIsPlanned && resolver) { + throw new Error(`Field ${objectType.name}.${fieldName} returns a ${namedReturnType.name} which expects a plan to be available; this means that ${objectType.name}.${fieldName} is forbidden from defining a GraphQL resolver.`); + } + let step; + let haltTree = false; + const fieldLayerPlan = isMutation + ? new LayerPlan_js_1.LayerPlan(this, outputPlan.layerPlan, { + type: "mutationField", + mutationIndex: ++mutationIndex, + }) + : outputPlan.layerPlan; + const objectFieldArgs = objectField.args; + const trackedArguments = objectFieldArgs.length > 0 + ? (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.rootLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, this.getTrackedArguments, this, objectFieldArgs, field) + : NO_ARGS; + const fieldPath = [...path, responseKey]; + let streamDetails = null; + const isList = isListType(getNullableType(fieldType)); + if (isList) { + // read the @stream directive, if present + // TODO: Check SameStreamDirective still exists in @stream spec at release. + /* + * `SameStreamDirective` + * (https://github.com/graphql/graphql-spec/blob/26fd78c4a89a79552dcc0c7e0140a975ce654400/spec/Section%205%20--%20Validation.md#L450-L458) + * ensures that every field that has `@stream` must have the same + * `@stream` arguments; so we can just check the first node in the + * merged set to see our stream options. NOTE: if this changes before + * release then we may need to find the stream with the largest + * `initialCount` to figure what to do; something like: + * + * const streamDirective = firstField.directives?.filter( + * (d) => d.name.value === "stream", + * ).sort( + * (a, z) => getArg(z, 'initialCount', 0) - getArg(a, 'initialCount', 0) + * )[0] + */ + for (const n of fieldNodes) { + const streamDirective = n.directives?.find((d) => d.name.value === "stream"); + if (streamDirective === undefined) { + // Undo any previous stream details; the non-@stream wins. + streamDetails = null; + break; + } + else if (streamDetails !== null) { + // Validation promises the values are the same + continue; + } + else { + // Create streamDetails + streamDetails = this.withRootLayerPlan(() => ({ + initialCount: this.internalDependency((0, utils_js_1.directiveArgument)(this, streamDirective, "initialCount", graphql.Kind.INT) ?? (0, constant_js_1.constant)(0)), + if: this.internalDependency((0, utils_js_1.directiveArgument)(this, streamDirective, "if", graphql.Kind.BOOLEAN) ?? (0, constant_js_1.constant)(true)), + label: this.internalDependency((0, utils_js_1.directiveArgument)(this, streamDirective, "label", graphql.Kind.STRING) ?? (0, constant_js_1.constant)(undefined)), + })); + } + } + } + if (typeof planResolver === "function") { + ({ step, haltTree } = this.planField(objectType.name, fieldName, fieldLayerPlan, fieldPath, polymorphicPaths, planResolver, "plan", parentStep, objectField, trackedArguments, isList ? (streamDetails ?? false) : null)); + } + else { + // No plan resolver (or plan resolver fallback) so there must be a + // `resolve` method, so we'll feed the full parent step into the + // resolver. + assert.ok(resolver !== null, "GraphileInternalError<81652257-617a-4d1a-8306-903d0e3d2ddf>: The field has no resolver, so planResolver should exist (either as the field.plan or as the default plan resolver)."); + // ENHANCEMENT: should we do `step = parentStep.object()` (i.e. + // `$pgSelectSingle.record()`) or similar for "opaque" steps to become + // suitable for consumption by resolvers? + // Maybe `parentStep.forResolver()` or `parentStep.hydrate()` or `parentStep.toFullObject()`? + step = parentStep; + } + if (resolver !== null) { + step = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(fieldLayerPlan, polymorphicPaths, () => { + const $args = (0, index_js_1.object)(field.arguments?.reduce((memo, arg) => { + memo[arg.name.value] = trackedArguments.get(arg.name.value); + return memo; + }, Object.create(null)) ?? Object.create(null)); + return (0, graphqlResolver_js_1.graphqlResolver)(resolver, subscriber, step, $args, { + fieldName, + fieldNodes, + fragments: this.fragments, + operation: this.operation, + parentType: objectType, + returnType: fieldType, + schema: this.schema, + }); + }); + } + // May have changed due to deduplicate + step = this.stepTracker.getStepById(step.id); + if (haltTree) { + const isNonNull = isNonNullType(fieldType); + outputPlan.addChild(objectType, responseKey, { + type: "outputPlan", + outputPlan: new OutputPlan_js_1.OutputPlan(fieldLayerPlan, step, OUTPUT_PLAN_TYPE_NULL, locationDetails), + isNonNull, + locationDetails, + }); + } + else { + this.planIntoOutputPlan(outputPlan, fieldLayerPlan, fieldPath, polymorphicPath, polymorphicPaths, + // If one field has a selection set, they all have a selection set (guaranteed by validation). + field.selectionSet != null + ? fieldNodes.flatMap((n) => n.selectionSet.selections) + : undefined, objectType, responseKey, fieldType, step, locationDetails, resolverEmulation, 0, streamDetails); + } + } + finally { + outputPlan.layerPlan.latestSideEffectStep = $sideEffect; + } + } + if (groupedFieldSet.deferred !== undefined) { + for (const deferred of groupedFieldSet.deferred) { + const deferredLayerPlan = new LayerPlan_js_1.LayerPlan(this, outputPlan.layerPlan, { + type: "defer", + label: deferred.label, + }); + const deferredOutputPlan = new OutputPlan_js_1.OutputPlan(deferredLayerPlan, outputPlan.rootStep, { + mode: "object", + deferLabel: deferred.label, + typeName: objectType.name, + }, + // LOGGING: the location details should be tweaked to reference this + // fragment + outputPlan.locationDetails); + const $sideEffect = deferredOutputPlan.layerPlan.latestSideEffectStep; + try { + outputPlan.deferredOutputPlans.push(deferredOutputPlan); + this.processGroupedFieldSet(deferredOutputPlan, path, polymorphicPath, polymorphicPaths, parentStep, objectType, objectTypeFields, isMutation, deferred); + } + finally { + deferredOutputPlan.layerPlan.latestSideEffectStep = $sideEffect; + } + } + } + } + /** + * + * @param outputPlan - The output plan that this selection set is being added to + * @param path - The path within the outputPlan that we're adding stuff (only for root/object OutputPlans) + * @param parentStep - The step that represents the selection set root + * @param objectType - The object type that this selection set is being evaluated for (note polymorphic selection should already have been handled by this point) + * @param selections - The GraphQL selections (fields, fragment spreads, inline fragments) to evaluate + * @param isMutation - If true this selection set should be executed serially rather than in parallel (each field gets its own LayerPlan) + */ + planSelectionSet(outputPlan, path, polymorphicPath, polymorphicPaths, parentStep, objectType, selections, resolverEmulation, isMutation = false) { + if (this.loc !== null) { + this.loc.push(`planSelectionSet(${objectType.name} @ ${outputPlan.layerPlan.id} @ ${path.join(".")} @ ${polymorphicPath ?? ""})`); + } + if (index_js_1.isDev) { + assertObjectType(objectType); + } + const groupedFieldSet = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(outputPlan.layerPlan, polymorphicPaths, graphqlCollectFields_js_1.graphqlCollectFields, null, this, parentStep.id, objectType, selections, (0, graphqlCollectFields_js_1.newSelectionSetDigest)(resolverEmulation), isMutation); + const objectTypeFields = objectType.getFields(); + this.processGroupedFieldSet(outputPlan, path, polymorphicPath, polymorphicPaths, parentStep, objectType, objectTypeFields, isMutation, groupedFieldSet); + if (this.loc !== null) + this.loc.pop(); + } + internalDependency($step) { + this.stepTracker.internalDependencies.add($step); + return $step; + } + // Similar to the old 'planFieldReturnType' + planIntoOutputPlan(parentOutputPlan, + // Typically this is parentOutputPlan.layerPlan; but in the case of mutationFields it isn't. + parentLayerPlan, + // This is the LAYER-RELATIVE path, not the absolute path! It resets! + path, polymorphicPath, polymorphicPaths, selections, parentObjectType, responseKey, fieldType, $step, locationDetails, resolverEmulation, listDepth, streamDetails) { + const nullableFieldType = getNullableType(fieldType); + const isNonNull = nullableFieldType !== fieldType; + if (isListType(nullableFieldType)) { + const $list = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(parentLayerPlan, polymorphicPaths, connection_js_1.itemsOrStep, null, $step); + if ($list !== $step) { + $list._stepOptions.stream = $step._stepOptions.stream; + } + $list._stepOptions.walkIterable = true; + const listOutputPlan = new OutputPlan_js_1.OutputPlan(parentLayerPlan, $list, OUTPUT_PLAN_TYPE_ARRAY, locationDetails); + parentOutputPlan.addChild(parentObjectType, responseKey, { + type: "outputPlan", + outputPlan: listOutputPlan, + isNonNull, + locationDetails, + }); + const stream = streamDetails + ? { + // These are already marked as internal dependencies + initialCountStepId: streamDetails.initialCount.id, + ifStepId: streamDetails.if.id, + labelStepId: streamDetails.label.id, + } + : undefined; + let $__item = this.itemStepForListStep(parentLayerPlan, $list, listDepth, stream); + const $sideEffect = $__item.layerPlan.latestSideEffectStep; + try { + let $item; + if ((0, step_js_1.isListCapableStep)($list)) { + $item = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)($__item.layerPlan, $__item.polymorphicPaths, $list.listItem, $list, $__item); + this.deduplicateSteps(); + // Refetch steps following deduplicate + $__item = this.stepTracker.getStepById($__item.id); + $item = this.stepTracker.getStepById($item.id); + } + else { + $item = $__item; + } + this.planIntoOutputPlan(listOutputPlan, $item.layerPlan, path, polymorphicPath, polymorphicPaths, selections, null, null, nullableFieldType.ofType, $item, locationDetails, resolverEmulation, listDepth + 1, null); + } + finally { + $__item.layerPlan.latestSideEffectStep = $sideEffect; + } + } + else if (isScalarType(nullableFieldType)) { + const scalarPlanResolver = nullableFieldType.extensions?.grafast?.plan; + const fnDescription = `${nullableFieldType.name}.plan`; + (0, utils_js_1.assertNotAsync)(scalarPlanResolver, fnDescription); + const $sideEffect = parentLayerPlan.latestSideEffectStep; + try { + const $leaf = typeof scalarPlanResolver === "function" + ? (0, utils_js_1.assertNotPromise)((0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(parentLayerPlan, polymorphicPaths, scalarPlanResolver, null, $step, this.scalarPlanInfo), scalarPlanResolver, fnDescription) + : $step; + parentOutputPlan.addChild(parentObjectType, responseKey, { + type: "outputPlan", + isNonNull, + outputPlan: new OutputPlan_js_1.OutputPlan(parentLayerPlan, $leaf, { + mode: "leaf", + // stepId: $leaf.id, + graphqlType: nullableFieldType, + }, locationDetails), + locationDetails, + }); + } + finally { + parentLayerPlan.latestSideEffectStep = $sideEffect; + } + } + else if (isEnumType(nullableFieldType)) { + const $sideEffect = parentLayerPlan.latestSideEffectStep; + try { + parentOutputPlan.addChild(parentObjectType, responseKey, { + type: "outputPlan", + isNonNull, + outputPlan: new OutputPlan_js_1.OutputPlan(parentLayerPlan, $step, { + mode: "leaf", + graphqlType: nullableFieldType, + }, locationDetails), + locationDetails, + }); + } + finally { + parentLayerPlan.latestSideEffectStep = $sideEffect; + } + } + else if (isObjectType(nullableFieldType)) { + if (index_js_1.isDev) { + // Check that the plan we're dealing with is the one the user declared + /** Either an assertion function or a step class */ + const stepAssertion = nullableFieldType.extensions?.grafast?.assertStep; + if (stepAssertion != null) { + try { + if (stepAssertion === index_js_1.Step || + stepAssertion.prototype instanceof index_js_1.Step) { + if (!($step instanceof stepAssertion)) { + throw new Error(`Step mis-match: expected ${stepAssertion.name}, but instead found ${$step.constructor.name} (${$step})`); + } + } + else { + stepAssertion($step); + } + } + catch (e) { + throw new Error(`The step returned by '${path.join(".")}${"[]".repeat(listDepth)}' is not compatible with the GraphQL object type '${nullableFieldType.name}': ${e.message}`, { cause: e }); + } + } + if (!selections) { + throw new Error(`GrafastInternalError<7fe4f7d1-01d2-4f1e-add6-5aa6936938c9>: no selections on a GraphQLObjectType?!`); + } + } + let objectLayerPlan; + if (isNonNull || + (parentLayerPlan.reason.type === "nullableBoundary" && + parentLayerPlan.rootStep === $step)) { + objectLayerPlan = parentLayerPlan; + } + else { + // Find existing match + const match = parentLayerPlan.children.find((clp) => clp.reason.type === "nullableBoundary" && + clp.reason.parentStep === $step); + if (match !== undefined) { + objectLayerPlan = match; + } + else { + objectLayerPlan = new LayerPlan_js_1.LayerPlan(this, parentLayerPlan, { + type: "nullableBoundary", + parentStep: $step, + }); + objectLayerPlan.setRootStep($step); + } + } + const $sideEffect = objectLayerPlan.latestSideEffectStep; + try { + const objectOutputPlan = new OutputPlan_js_1.OutputPlan(objectLayerPlan, $step, { + mode: "object", + deferLabel: undefined, + typeName: nullableFieldType.name, + }, locationDetails); + parentOutputPlan.addChild(parentObjectType, responseKey, { + type: "outputPlan", + outputPlan: objectOutputPlan, + isNonNull, + locationDetails, + }); + this.planSelectionSet(objectOutputPlan, path, polymorphicPath, polymorphicPaths, $step, nullableFieldType, selections, resolverEmulation); + } + finally { + objectLayerPlan.latestSideEffectStep = $sideEffect; + } + } + else { + // Polymorphic + const isUnion = isUnionType(nullableFieldType); + const isInterface = isInterfaceType(nullableFieldType); + if (!(isUnion || isInterface)) { + throw new Error(`GrafastInternalError: Wasn't expecting ${nullableFieldType}`); + } + assert.ok(selections, "GrafastInternalError: A polymorphic type with no selections is invalid"); + /* + * Planning for polymorphic types is somewhat more complicated than for + * other types. + * + * First, we figure out the list of `possibleTypes` based on the + * union/interface and any other constraints that we know. NOTE: we can't + * discount a type just because it doesn't have any fragments that apply + * to it - instead we must still plan an empty selection set (or one just + * using `{__typename}`), and we need to know it exists for that. See + * https://github.com/graphql/graphql-spec/issues/951#issuecomment-1140957685 + */ + const allPossibleObjectTypes = isUnion + ? nullableFieldType.getTypes() + : this.schema.getImplementations(nullableFieldType).objects; + if (allPossibleObjectTypes.length === 0) { + /* If there are no implementations, simply stop via a null output plan */ + const nullOutputPlan = new OutputPlan_js_1.OutputPlan(parentLayerPlan, $step, OUTPUT_PLAN_TYPE_NULL, locationDetails); + parentOutputPlan.addChild(parentObjectType, responseKey, { + type: "outputPlan", + outputPlan: nullOutputPlan, + isNonNull, + locationDetails, + }); + } + else { + /* + * Next, we ensure we're dealing with a polymorphic step. + */ + if (!(0, step_js_1.isPolymorphicStep)($step)) { + throw new Error(`${$step} is not a polymorphic capable step, it must have a planForType method`); + } + /* + * An output plan for it (knows how to branch the different object + * output plans). + */ + const polymorphicOutputPlan = new OutputPlan_js_1.OutputPlan(parentLayerPlan, $step, { + mode: "polymorphic", + deferLabel: undefined, + typeNames: allPossibleObjectTypes.map((t) => t.name), + }, locationDetails); + parentOutputPlan.addChild(parentObjectType, responseKey, { + type: "outputPlan", + outputPlan: polymorphicOutputPlan, + isNonNull, + locationDetails, + }); + /* + * Now a polymorphic layer plan for all the plans to live in + */ + const polymorphicLayerPlan = this.getPolymorphicLayerPlan(parentLayerPlan, path, $step, allPossibleObjectTypes); + /* + * Now we need to loop through each type and plan it. + */ + const polyBase = polymorphicPath ?? ""; + const $oldStep = $step; + for (const type of allPossibleObjectTypes) { + const $sideEffect = polymorphicLayerPlan.latestSideEffectStep; + try { + /* TODO: this $oldStep / $step dance turned out to be necessary + * because `$step` was being replaced in the following query against + * the graphilecrystaltest `polymorpic` schema; but I'm not sure this is the + * right behavior - shouldn't deduplication have been temporarily + * disabled during this? + * + * ```graphql + * { + * allSingleTableItems { + * nodes { + * id + * type + * singleTableItemsByParentIdList { + * id + * position + * } + * } + * } + * } + * ``` + */ + const $step = this.stepTracker.getStepById($oldStep.id); + // Bit of a hack, but saves passing it around through all the arguments + const newPolymorphicPath = `${polyBase}>${type.name}`; + polymorphicLayerPlan.reason.polymorphicPaths.add(newPolymorphicPath); + const newPolymorphicPaths = new Set(); + newPolymorphicPaths.add(newPolymorphicPath); + const $root = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(polymorphicLayerPlan, newPolymorphicPaths, $step.planForType, $step, type); + const objectOutputPlan = new OutputPlan_js_1.OutputPlan(polymorphicLayerPlan, $root, { + mode: "object", + deferLabel: undefined, + typeName: type.name, + }, locationDetails); + // find all selections compatible with `type` + const fieldNodes = (0, graphqlMergeSelectionSets_js_1.fieldSelectionsForType)(this, type, selections); + this.planSelectionSet(objectOutputPlan, path, newPolymorphicPath, newPolymorphicPaths, $root, type, fieldNodes, false); + polymorphicOutputPlan.addChild(type, null, { + type: "outputPlan", + isNonNull, + outputPlan: objectOutputPlan, + locationDetails, + }); + } + finally { + polymorphicLayerPlan.latestSideEffectStep = $sideEffect; + } + } + } + } + } + getPolymorphicLayerPlan(parentLayerPlan, path, $step, allPossibleObjectTypes) { + // OPTIMIZE: I added the $step.id to pathString to fix a planning issue; but maybe we can do this without branching? + // https://github.com/benjie/crystal/issues/109 + const pathString = `${path.join("|")}!${$step.id}`; + const polymorphicLayerPlanByPath = this.polymorphicLayerPlanByPathByLayerPlan.get(parentLayerPlan) ?? + new Map(); + if (polymorphicLayerPlanByPath.size === 0) { + this.polymorphicLayerPlanByPathByLayerPlan.set(parentLayerPlan, polymorphicLayerPlanByPath); + } + const prev = polymorphicLayerPlanByPath.get(pathString); + if (prev !== undefined) { + // NOTE: this is typically hit when you have a polymorphic field inside + // another polymorphic field - in these cases rather than having the + // polymorphism multiply out, we can aim for fewer polymorphic buckets + // keeping the plan simpler (and more efficient). + const { stepId, layerPlan } = prev; + const stepByStepId = this.stepTracker.getStepById(stepId); + const stepBy$stepId = this.stepTracker.getStepById($step.id); + if (stepByStepId !== stepBy$stepId) { + throw new Error(`GrafastInternalError: unexpected inconsistency when determining the polymorphic LayerPlan to use (pathString = ${pathString}, ${stepByStepId} (${stepId}) != ${stepBy$stepId} (${$step.id}))`); + } + for (const t of allPossibleObjectTypes) { + if (!layerPlan.reason.typeNames.includes(t.name)) { + // Since we're re-using an existing LayerPlan, we should be careful to + // ensure none of the previous assumptions have been broken. + layerPlan.reason.typeNames.push(t.name); + } + } + return layerPlan; + } + else { + const layerPlan = new LayerPlan_js_1.LayerPlan(this, parentLayerPlan, { + type: "polymorphic", + typeNames: allPossibleObjectTypes.map((t) => t.name), + parentStep: $step, + polymorphicPaths: new Set(), + }); + polymorphicLayerPlanByPath.set(pathString, { + stepId: $step.id, + layerPlan, + }); + return layerPlan; + } + } + planField(typeName, fieldName, layerPlan, path, polymorphicPaths, planResolver, applyAfterMode, rawParentStep, field, trackedArguments, + // If 'true' this is a subscription rather than a stream + // If 'false' this is a list but it will never stream + // If 'null' this is neither subscribe field nor list field + // Otherwise, it's a list field that has the `@stream` directive applied + streamDetails, deduplicate = true) { + const coordinate = `${typeName}.${fieldName}`; + // The step may have been de-duped whilst sibling steps were planned + // PERF: this should be handled in the parent? + const parentStep = this.stepTracker.getStepById(rawParentStep.id); + const previousStepCount = this.stepTracker.stepCount; + const previousSideEffectStep = layerPlan.latestSideEffectStep; + if (this.loc !== null) + this.loc.push(`planField(${path.join(".")})`); + try { + let step = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(layerPlan, polymorphicPaths, operationPlan_input_js_1.withFieldArgsForArguments, null, this, trackedArguments, field, parentStep, applyAfterMode, coordinate, (fieldArgs) => planResolver(parentStep, fieldArgs, { + fieldName, + field, + schema: this.schema, + })); + let haltTree = false; + if (step === null || (step instanceof constant_js_1.ConstantStep && step.isNull())) { + // Constantly null; do not step any further in this tree. + step = + step || + // `withGlobalLayerPlan(layerPlan, polymorphicPaths, () => constant(null))` but with reduced memory allocation + (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(layerPlan, polymorphicPaths, constant_js_1.constant, null, null); + haltTree = true; + } + (0, step_js_1.assertExecutableStep)(step); + if (streamDetails === true) { + // subscription + step._stepOptions.stream = {}; + step._stepOptions.walkIterable = true; + } + else if (streamDetails === false) { + step._stepOptions.walkIterable = true; + } + else if (streamDetails != null) { + step._stepOptions.stream = { + initialCountStepId: streamDetails.initialCount.id, + ifStepId: streamDetails.if.id, + labelStepId: streamDetails.label.id, + }; + step._stepOptions.walkIterable = true; + } + if (deduplicate) { + // Now that the field has been planned (including arguments, but NOT + // including selection set) we can deduplicate it to see if any of its + // peers are identical. + this.deduplicateSteps(); + // After deduplication, this step may have been substituted; get the + // updated reference. + step = this.stepTracker.getStepById(step.id); + } + return { step, haltTree }; + } + catch (e) { + if (ALWAYS_THROW_PLANNING_ERRORS) { + throw e; + } + if (THROW_PLANNING_ERRORS_ON_SIDE_EFFECTS) { + for (let i = previousStepCount; i < this.stepTracker.stepCount; i++) { + const step = this.stepTracker.stepById[i]; + if (step && step.hasSideEffects) { + throw e; + } + } + } + try { + this.stepTracker.purgeBackTo(previousStepCount); + layerPlan.latestSideEffectStep = previousSideEffectStep; + } + catch (e2) { + console.error(`Cleanup error occurred whilst trying to recover from field planning error: ${e2.stack}`); + throw e; + } + const step = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(layerPlan, polymorphicPaths, index_js_1.error, null, e); + const haltTree = true; + // PERF: consider deleting all steps that were allocated during this. For + // now we'll just rely on tree-shaking. + return { step, haltTree }; + } + finally { + if (this.loc !== null) + this.loc.pop(); + } + } + /** + * A replacement for GraphQL's + * `CoerceArgumentValues` that factors in tracked variables. + * + * @see https://spec.graphql.org/draft/#CoerceArgumentValues() + */ + getTrackedArguments(argumentDefinitions, field) { + const argumentValues = field.arguments; + const trackedArgumentValues = Object.create(null); + for (const argumentDefinition of argumentDefinitions) { + const argumentName = argumentDefinition.name; + if (index_js_1.isDev && trackedArgumentValues[argumentName]) { + throw new index_js_1.SafeError(`Argument name '${argumentName}' seen twice; aborting.`); + } + const argumentType = argumentDefinition.type; + const defaultValue = argumentDefinition.defaultValue + ? (0, utils_js_1.defaultValueToValueNode)(argumentType, argumentDefinition.defaultValue) + : undefined; + const argumentValue = argumentValues?.find((v) => v.name.value === argumentName); + const argumentPlan = (0, input_js_1.inputStep)(this, argumentType, argumentValue?.value, defaultValue); + trackedArgumentValues[argumentName] = argumentPlan; + } + return { + get(name) { + return trackedArgumentValues[name]; + }, + }; + } + /** + * Sets up tracking for the given value (variableValues, context, rootValue). + */ + track(value, constraints, variableDefinitions) { + const valueStep = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.rootLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, newValueStepCallback, null, variableDefinitions != null); + const trackedObjectStep = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.rootLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, () => new index_js_1.__TrackedValueStep(value, valueStep, constraints, [], variableDefinitions != null, variableDefinitions)); + return [valueStep, trackedObjectStep]; + } + /** + * Checks that no step has a property on it whose value is another step. It + * should addDependency instead. + */ + validateSteps(offset = 0) { + const errors = []; + for (const step of this.stepTracker.activeSteps) { + if (step.id < offset) + continue; + for (const key in step) { + const val = step[key]; + if (key !== "implicitSideEffectStep" && + val instanceof index_js_1.Step) { + errors.push(new Error(`ERROR: ExecutableStep ${step} has illegal reference via property '${key}' to step ${val}. You must not reference steps directly, instead add the step as a dependency (\`depId = this.addDependency($step)\`) and use \`this.getDep(depId)\` to look the step up (or, if the step is not a dependency, store the step ID and use \`this.getStep(stepId)\` each time you need to reference it). Failure to comply could result in subtle breakage during optimisation.`)); + } + } + } + if (errors.length > 0) { + console.error(errors.map((e) => e.message).join("\n")); + throw errors[0]; + } + } + replaceStep($original, $replacement) { + this.stepTracker.replaceStep($original, $replacement); + } + processStep(actionDescription, order, isReadonly, callback, processed, step) { + // MUST come before anything else, otherwise infinite loops may occur + processed.add(step); + if (!this.stepTracker.activeSteps.has(step)) { + return step; + } + if (order === "dependents-first") { + // used for: pushDown, optimize + for (let i = 0; i < step.dependents.length; i++) { + const entry = step.dependents[i]; + const { step: $processFirst } = entry; + if (!processed.has($processFirst)) { + this.processStep(actionDescription, order, isReadonly, callback, processed, $processFirst); + if (step.dependents[i] !== entry) { + // The world has change; go back to the start + i = -1; + } + } + } + const subroutineLayerPlan = step[interfaces_js_1.$$subroutine]; + if (subroutineLayerPlan !== null) { + const $root = subroutineLayerPlan.rootStep; + if ($root) { + this.processStep(actionDescription, order, isReadonly, callback, processed, $root); + } + } + } + else { + // used for: hoist + for (const $processFirst of (0, utils_js_1.sudo)(step).dependencies) { + if (!processed.has($processFirst)) { + this.processStep(actionDescription, order, isReadonly, callback, processed, $processFirst); + } + } + } + // Check again, processing another step may have invalidated this one. + if (!this.stepTracker.activeSteps.has(step)) { + return step; + } + let replacementStep = step; + try { + replacementStep = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(step.layerPlan, step.polymorphicPaths, callback, this, step); + } + catch (e) { + console.error(`Error occurred during ${actionDescription}; whilst processing ${step} in ${order} mode an error occurred:`, e); + throw e; + } + if (!replacementStep) { + throw new Error(`The callback did not return a step during ${actionDescription}`); + } + if (isReadonly) { + if (replacementStep !== step) { + throw new Error(`Replacing step in readonly mode is not permitted!`); + } + } + else { + if (replacementStep !== step) { + this.replaceStep(step, replacementStep); + } + this.deduplicateSteps(); + } + return replacementStep; + } + // PERF: optimize + /** + * Process the given steps, either dependencies first (root to leaf) or + * dependents first (leaves to root). + * + * @internal + */ + processSteps(actionDescription, order, isReadonly, callback) { + if (index_js_1.isDev) + this.stepTracker.lockNewSteps(); + const previousStepCount = this.stepTracker.stepCount; + const processed = new Set(); + for (let i = 0; i < this.stepTracker.stepCount; i++) { + const step = this.stepTracker.getStepById(i, true); + // Check it hasn't been tree-shaken away, or already processed + if (!step || step.id !== i || processed.has(step)) + continue; + const resultStep = this.processStep(actionDescription, order, isReadonly, callback, processed, step); + if (index_js_1.isDev) { + const plansAdded = this.stepTracker.stepCount - previousStepCount; + // NOTE: whilst processing steps new steps may be added, thus we must loop + // ascending and we must re-evaluate this.stepTracker.stepCount on each loop + // iteration. + if (plansAdded > 100000) { + throw new Error(`Whilst processing steps as part of ${actionDescription}Plans, ${plansAdded} new steps have been created... That seems like it's likely a bug in the relevant method of one of your steps. The last plan processed was ${resultStep}`); + } + } + if ((isReadonly || index_js_1.isDev) && + this.stepTracker.stepCount > previousStepCount) { + if (isReadonly) { + throwNoNewStepsError(this, actionDescription, step, previousStepCount, "Creating steps in isReadonly mode is forbidden"); + } + if (index_js_1.isDev) + this.stepTracker.lockNewSteps(); + } + } + if (!isReadonly && + this.phase !== "plan" && + this.stepTracker.stepCount > previousStepCount) { + // Any time new steps are added we should validate them. All plans are + // validated once "plan" is finished, so no need to do it here for that + // phase. + this.validateSteps(previousStepCount); + } + } + /** + * Peers are steps of the same type (but not the same step!) that are in + * compatible layers and have the same dependencies. Peers must not have side + * effects. A step is not its own peer. + */ + getPeers(step) { + if (step.hasSideEffects) { + // Plans with side effects have no peers. + return EMPTY_ARRAY; + } + if (step._stepOptions.stream) { + // Streams have no peers - we cannot reference the stream more + // than once (and we aim to not cache the stream because we want its + // entries to be garbage collected). + // + // HOWEVER! There may be lifecycle parts that need to be called... So + // call the function with an empty array; ignore the result. + return EMPTY_ARRAY; + } + // NOTE: Streams have no peers - we cannot reference the stream more than + // once (and we aim to not cache the stream because we want its entries to + // be garbage collected) - however if we're already fetching the list then + // we shouldn't fetch it again via stream... We should deduplicate a stream + // to return a non-stream. + if (step._stepOptions.stream != null) { + // TODO: remove this if block when we implement the new stream/defer - + // deduplicating a stream should be fine. (Not subscriptions though - may + // need a check for that!) + return EMPTY_ARRAY; + } + if (this.stepTracker.internalDependencies.has(step)) { + // PERF: we need to set up correct tracking, then internal deps can be deduped + return EMPTY_ARRAY; + } + const sstep = (0, utils_js_1.sudo)(step); + const { dependencies: deps, dependencyForbiddenFlags: flags, dependencyOnReject: onReject, layerPlan: layerPlan, constructor: stepConstructor, peerKey, } = sstep; + // const streamInitialCount = sstep._stepOptions.stream?.initialCount; + const dependencyCount = deps.length; + if (dependencyCount === 0) { + let allPeers = null; + const stepsWithNoDependencies = this.stepTracker.stepsWithNoDependenciesByConstructor.get(step.constructor) ?? new Set(); + for (const possiblyPeer of stepsWithNoDependencies) { + if (possiblyPeer !== step && + !possiblyPeer.hasSideEffects && + possiblyPeer.layerPlan === layerPlan && + possiblyPeer._stepOptions.stream == null && + possiblyPeer.peerKey === peerKey + // && possiblyPeer._stepOptions.stream?.initialCount === streamInitialCount + ) { + if (allPeers === null) { + allPeers = [possiblyPeer]; + } + else { + allPeers.push(possiblyPeer); + } + } + } + return allPeers === null ? EMPTY_ARRAY : allPeers; + } + else if (dependencyCount === 1) { + // Optimized form for steps that have one dependency (extremely common!) + const dependencyIndex = 0; + const { ancestry, deferBoundaryDepth } = layerPlan; + const dep = deps[dependencyIndex]; + const dl = dep.dependents.length; + if (dl === 1) { + // We're the only dependent; therefore we have no peers (since peers + // share dependencies) + return EMPTY_ARRAY; + } + const minDepth = Math.max(deferBoundaryDepth, dep.layerPlan.depth); + let allPeers = null; + for (const { dependencyIndex: peerDependencyIndex, step: rawPossiblyPeer, } of dep.dependents) { + if (peerDependencyIndex !== dependencyIndex || + rawPossiblyPeer === step || + rawPossiblyPeer.hasSideEffects || + rawPossiblyPeer._stepOptions.stream != null || + rawPossiblyPeer.constructor !== stepConstructor || + rawPossiblyPeer.peerKey !== peerKey + // || rawPossiblyPeer._stepOptions.stream?.initialCount !== streamInitialCount + ) { + continue; + } + const possiblyPeer = (0, utils_js_1.sudo)(rawPossiblyPeer); + const { layerPlan: peerLayerPlan, dependencyForbiddenFlags: peerFlags, dependencyOnReject: peerOnReject, } = possiblyPeer; + if (peerLayerPlan.depth >= minDepth && + possiblyPeer.dependencies.length === dependencyCount && + peerLayerPlan === ancestry[peerLayerPlan.depth] && + peerFlags[dependencyIndex] === flags[dependencyIndex] && + peerOnReject[dependencyIndex] === onReject[dependencyIndex]) { + if (allPeers === null) { + allPeers = [possiblyPeer]; + } + else { + allPeers.push(possiblyPeer); + } + } + } + return allPeers === null ? EMPTY_ARRAY : allPeers; + } + else { + const { ancestry, deferBoundaryDepth } = layerPlan; + /** + * "compatible" layer plans are calculated by walking up the layer plan tree, + * however: + * + * - do not pass the LayerPlan of one of the dependencies + * - do not pass a "deferred" layer plan + * + * Compatible layer plans are no less deep than minDepth. + */ + let minDepth = deferBoundaryDepth; + const possiblePeers = []; + // Loop backwards since last dependency is most likely to be most unique + for (let dependencyIndex = dependencyCount - 1; dependencyIndex >= 0; dependencyIndex--) { + const dep = deps[dependencyIndex]; + const dl = dep.dependents.length; + if (dl === 1) { + // We're the only dependent; therefore we have no peers (since peers + // share dependencies) + return EMPTY_ARRAY; + } + if (dependencyIndex === dependencyCount - 1) { + // Check the final dependency - this is likely to have the fewest + // dependents (since it was added last it's more likely to be + // unique). + for (const { dependencyIndex: peerDependencyIndex, step: rawPossiblyPeer, } of dep.dependents) { + if (peerDependencyIndex !== dependencyIndex || + rawPossiblyPeer === step || + rawPossiblyPeer.hasSideEffects || + rawPossiblyPeer._stepOptions.stream != null || + rawPossiblyPeer.constructor !== stepConstructor || + rawPossiblyPeer.peerKey !== peerKey + // || rawPossiblyPeer._stepOptions.stream?.initialCount !== streamInitialCount + ) { + continue; + } + const possiblyPeer = (0, utils_js_1.sudo)(rawPossiblyPeer); + const { layerPlan: peerLayerPlan, dependencyForbiddenFlags: peerFlags, dependencyOnReject: peerOnReject, dependencies: peerDependencies, } = possiblyPeer; + if (peerDependencies.length === dependencyCount && + peerLayerPlan === ancestry[peerLayerPlan.depth] && + peerFlags[dependencyIndex] === flags[dependencyIndex] && + peerOnReject[dependencyIndex] === onReject[dependencyIndex]) { + possiblePeers.push(possiblyPeer); + } + } + } + const d = dep.layerPlan.depth; + if (d > minDepth) { + minDepth = d; + } + } + if (possiblePeers.length === 0) { + return EMPTY_ARRAY; + } + let allPeers = null; + outerloop: for (const possiblyPeer of possiblePeers) { + if (possiblyPeer.layerPlan.depth < minDepth) + continue; + // We know the final dependency matches and the dependency count + // matches - check the other dependencies match. + for (let i = 0; i < dependencyCount - 1; i++) { + if (deps[i] !== (0, utils_js_1.sudo)(possiblyPeer).dependencies[i]) { + continue outerloop; + } + } + if (allPeers === null) { + allPeers = [possiblyPeer]; + } + else { + allPeers.push(possiblyPeer); + } + } + return allPeers === null ? EMPTY_ARRAY : allPeers; + } + } + isImmoveable(step) { + if (step.hasSideEffects) { + return true; + } + if (isPrepopulatedStep(step)) { + return true; + } + if (step[interfaces_js_1.$$subroutine] !== null) { + // Don't hoist steps that are the parent of a subroutine + // PERF: we _should_ be able to hoist, but care must be taken. Currently it causes test failures. + return true; + } + return false; + } + /** + * Attempts to hoist the step into a higher layerPlan to maximize + * deduplication. + */ + hoistStep(step) { + if (this.isImmoveable(step)) { + return; + } + // PERF: would be nice to prevent ConstantStep from being hoisted - we + // don't want to keep multiplying up and up its data as it traverses the buckets - would be better + // to push the step down to the furthest level and then have it run there straight away. + // PERF: actually... might be better to specifically replace all + // ConstantStep dependencies with a bucket-local ConstantStep as one of the + // final steps of optimize. + /* // This is disabled because it breaks pgSelect's `mergePlaceholdersInto` logic. + if (step instanceof __InputStaticLeafStep || step instanceof ConstantStep) { + // More optimal to not hoist these - they convert to `constant()` which executes to produce a filled array incredibly efficiently. + return true; + } + */ + if (step.layerPlan.parentLayerPlan?.reason.type === "mutationField") { + // Never hoist into a mutation layer + return; + } + switch (step.layerPlan.reason.type) { + case "root": { + // There is no higher layerPlan + return; + } + case "subscription": + case "defer": { + // Should be deferred, don't evaluate early (unless it's cheap to do so) + if (step.isSyncAndSafe) { + // It's cheap, try and hoist it + break; + } + else { + return; + } + } + case "polymorphic": { + // May only need to be evaluated for certain types, so avoid hoisting anything expensive. + if (step.isSyncAndSafe && + step.polymorphicPaths.size === + step.layerPlan.reason.polymorphicPaths.size) { + // It's cheap and covers all types, try and hoist it. + // NOTE: I have concerns about whether this is safe or not, but I + // have not been able to come up with a counterexample that is + // unsafe. Should we do so, we should remove this. + break; + } + else if (step instanceof index_js_1.__FlagStep) { + break; + } + else { + return; + } + } + case "subroutine": { + // Should be safe to hoist. + break; + } + case "nullableBoundary": { + // Safe to hoist _unless_ it depends on the root step of the nullableBoundary. + const $root = step.layerPlan.reason.parentStep; + if ((0, utils_js_1.sudo)(step).dependencies.includes($root)) { + return; + } + else { + break; + } + } + case "listItem": { + // Should be safe to hoist so long as it doesn't depend on the + // `__ItemStep` itself (which is just a regular dependency, so it'll be + // checked later). + // NOTE: this is true even if the listItem streams. + break; + } + case "mutationField": { + // NOTE: It's the user's responsibility to ensure that steps that have + // side effects are marked as such via `step.hasSideEffects = true`. + if (step.isSyncAndSafe && !step.hasSideEffects) { + if (step.layerPlan.reason.mutationIndex === 0) { + // Safe to hoist inside first mutation; but all later mutations may be impacted by previous actions. + break; + } + // OPTIMIZE: figure out under which circumstances it is safe to hoist here. + // break; + return; + } + else if (step instanceof index_js_1.__FlagStep) { + break; + } + else { + // Plans that rely on external state shouldn't be hoisted because + // their results may change after a mutation, so the mutation should + // run first. + return; + } + } + default: { + const never = step.layerPlan.reason; + throw new Error(`GrafastInternalError<81e3a7d4-aaa0-416b-abbb-a887734007bc>: unhandled layer plan reason ${(0, inspect_js_1.inspect)(never)}`); + } + } + // Finally, check that none of its dependencies are in the same bucket. + const deps = (0, utils_js_1.sudo)(step).dependencies; + if (deps.some((dep) => dep.layerPlan === step.layerPlan)) { + return; + } + // All our checks passed, hoist it. + assert.ok(step.layerPlan.parentLayerPlan !== null, "GrafastInternalError<55c8940f-e8ac-4985-8b34-96fc6f81d62d>: A non-root layer plan had no parent?!"); + // 1: adjust polymorphicPaths to fit new layerPlan + if (step.layerPlan.reason.type === "polymorphic") { + // PERF: this is cacheable + /** The closest ancestor layer plan that is polymorphic */ + let ancestor = step.layerPlan; + while ((ancestor = ancestor.parentLayerPlan)) { + if (ancestor.reason.type === "polymorphic") { + break; + } + } + const parentPolymorphicPaths = ancestor + ? ancestor.reason + .polymorphicPaths + : exports.POLYMORPHIC_ROOT_PATHS; + const myPaths = [...step.polymorphicPaths]; + if (parentPolymorphicPaths?.has(myPaths[0])) { + // All the others must be valid too + } + else if (parentPolymorphicPaths === null) { + step.polymorphicPaths = null; + } + else { + const layerPaths = [...step.layerPlan.reason.polymorphicPaths]; + const newPaths = new Set(); + for (const path of parentPolymorphicPaths) { + const prefix = path + ">"; + const matches = myPaths.filter((p) => p.startsWith(prefix)); + const layerMatches = layerPaths.filter((p) => p.startsWith(prefix)); + if (matches.length !== layerMatches.length) { + // Can't hoist because it's not used for all polymorphicPaths of this type + return; + } + else if (matches.length > 0) { + newPaths.add(path); + } + } + step.polymorphicPaths = newPaths; + } + } + const $subroutine = step.layerPlan.reason.type === "subroutine" + ? step.layerPlan.reason.parentStep + : null; + // 2: move it up a layer + this.stepTracker.moveStepToLayerPlan(step, step.layerPlan.parentLayerPlan); + // 3: if it's was in a subroutine, the subroutine parent plan needs to list it as a dependency + if ($subroutine) { + // Naughty naughty + $subroutine.addDependency(step); + } + // Now try and hoist it again! + this.hoistStep(step); + } + /** + * Attempts to push the step into the lowest layerPlan to minimize the need + * for copying between layer plans. + */ + pushDown(step) { + if (this.isImmoveable(step)) { + return step; + } + if (step._isUnary) { + step._isUnaryLocked = true; + // Don't push unary steps down + return step; + } + switch (step.layerPlan.reason.type) { + case "root": + case "subscription": + case "defer": + case "polymorphic": + case "subroutine": + case "nullableBoundary": + case "listItem": { + // Fine to push lower + break; + } + case "mutationField": { + // NOTE: It's the user's responsibility to ensure that steps that have + // side effects are marked as such via `step.hasSideEffects = true`. + if (step.isSyncAndSafe && !step.hasSideEffects) { + break; + } + else { + // Side effects should take place inside the mutation field plan + // (that's the whole point), so we should not push these down. + return step; + } + } + default: { + const never = step.layerPlan.reason; + throw new Error(`GrafastInternalError<81e3a7d4-aaa0-416b-abbb-a887734009bc>: unhandled layer plan reason ${(0, inspect_js_1.inspect)(never)}`); + } + } + // Now find the lowest bucket that still satisfies all of it's dependents. + const dependentLayerPlans = new Set(); + const outputPlans = this.stepTracker.outputPlansByRootStep.get(step); + if (outputPlans !== undefined) { + for (const outputPlan of outputPlans) { + if (outputPlan.layerPlan === step.layerPlan) { + return step; + } + else { + dependentLayerPlans.add(outputPlan.layerPlan); + } + } + } + for (const { step: s } of step.dependents) { + if (s.layerPlan === step.layerPlan) { + return step; + } + else { + dependentLayerPlans.add(s.layerPlan); + } + } + const layerPlansByParent = this.stepTracker.layerPlansByParentStep.get(step); + if (layerPlansByParent !== undefined) { + for (const layerPlan of layerPlansByParent) { + if (layerPlan.parentLayerPlan === step.layerPlan) { + return step; + } + else { + dependentLayerPlans.add(layerPlan.parentLayerPlan); + } + } + } + const layerPlansByRoot = this.stepTracker.layerPlansByRootStep.get(step); + if (layerPlansByRoot !== undefined) { + for (const layerPlan of layerPlansByRoot) { + if (layerPlan === step.layerPlan) { + return step; + } + else { + dependentLayerPlans.add(layerPlan); + } + } + } + if (dependentLayerPlans.size === 0) { + throw new Error(`Nothing depends on ${step}?!`); + } + if (dependentLayerPlans.has(step.layerPlan)) { + throw new Error(`GrafastInternalError: This should already have been caught`); + } + const paths = []; + let minPathLength = Infinity; + for (const dependentLayerPlan of dependentLayerPlans) { + let lp = dependentLayerPlan; + const path = [lp]; + while (lp.parentLayerPlan != step.layerPlan) { + const parent = lp.parentLayerPlan; + if (!parent) { + throw new Error(`GrafastInternalError<64c07427-4fe2-43c4-9858-272d33bee0b8>: invalid layer plan heirarchy`); + } + lp = parent; + path.push(lp); + } + paths.push(path); + minPathLength = Math.min(path.length, minPathLength); + } + const dependentLayerPlanCount = dependentLayerPlans.size; + let deepest = step.layerPlan; + outerloop: for (let i = 0; i < minPathLength; i++) { + const expected = paths[0][i]; + if (expected.reason.type === "polymorphic") { + // PERF: reconsider + // Let's not pass polymorphic boundaries for now + break; + } + if (expected.reason.type === "subroutine") { + // PERF: reconsider + // Let's not pass subroutine boundaries for now + break; + } + if (expected.reason.type === "mutationField") { + // Let's not pass mutationField boundaries for now + break; + } + for (let j = 1; j < dependentLayerPlanCount; j++) { + const actual = paths[j][i]; + if (expected != actual) { + break outerloop; + } + } + deepest = expected; + } + if (deepest === step.layerPlan) { + return step; + } + // All our checks passed, shove it down! + // 1: no need to adjust polymorphicPaths, since we don't cross polymorphic boundary + // const targetPolymorphicPaths = deepest.polymorphicPaths; + // if (!targetPolymorphicPaths.has([...step.polymorphicPaths][0])) { + // throw new Error( + // `GrafastInternalError<53907e56-940a-4173-979d-bc620e4f1ff8>: polymorphic assumption doesn't hold. Mine = ${[ + // ...step.polymorphicPaths, + // ]}; theirs = ${[...deepest.polymorphicPaths]}`, + // ); + // } + // 2: move it to target layer + this.stepTracker.moveStepToLayerPlan(step, deepest); + return step; + } + _deduplicateInnerLogic(step) { + if (step instanceof index_js_1.__ItemStep) { + // __ItemStep cannot be deduplicated + return null; + } + const peers = this.getPeers(step); + // Even if there are no peers, we must still deduplicate because + // `deduplicate` is called to indicate that the field is done being + // planned, which the step class may want to acknowledge by locking certain + // facets of its functionality (such as adding filters). We'll simplify its + // work though by giving it an empty array to filter. + const wasLocked = index_js_1.isDev && (0, lock_js_1.unlock)(step); + const equivalentSteps = step.deduplicate(peers); + if (wasLocked) + (0, lock_js_1.lock)(step); + if (equivalentSteps.length === 0) { + // No other equivalents + return null; + } + if (index_js_1.isDev) { + if (!equivalentSteps.every((replacementStep) => peers.includes(replacementStep))) { + throw new Error(`deduplicatePlan error: '${step}.deduplicate' may only return steps from its peers peers (peers = ${peers}), but it returned ${equivalentSteps}. This is currently forbidden because it could cause confusion during the optimization process, instead apply this change in 'optimize', or make sure that any child selections aren't applied until the optimize/finalize phase so that no mapping is required during deduplicate.`); + } + } + // Prefer the step that's closest to the root LayerPlan; failing that, prefer the step with the lowest id. + let minDepth = step.layerPlan.depth; + let stepsAtMinDepth = [step]; + for (const step of equivalentSteps) { + const depth = step.layerPlan.depth; + if (depth < minDepth) { + minDepth = depth; + stepsAtMinDepth = [step]; + } + else if (depth === minDepth) { + stepsAtMinDepth.push(step); + } + } + stepsAtMinDepth.sort((a, z) => a.id - z.id); + return { stepsAtMinDepth, equivalentSteps }; + } + deduplicateStep(step) { + // Conditions applied to this step are now finalized, though we may still + // tell the step to do more stuff (like fetch extra data), it can no longer + // change its order, conditions, etc. + step.isArgumentsFinalized = true; + // If a step is unary at this point, it must always remain unary. + if (step._isUnary) { + step._isUnaryLocked = true; + } + if (step.deduplicate == null) + return step; + const result = this._deduplicateInnerLogic(step); + if (result == null) { + return step; + } + const { stepsAtMinDepth, equivalentSteps } = result; + // Hooray, one winning layer! Find the first one by id. + const winner = stepsAtMinDepth[0]; + if (winner.polymorphicPaths !== null) { + const polymorphicPaths = new Set(); + for (const s of stepsAtMinDepth) { + for (const p of s.polymorphicPaths) { + polymorphicPaths.add(p); + } + } + winner.polymorphicPaths = polymorphicPaths; + } + // Equivalent steps cannot be streaming; so we can no longer stream either. + if (equivalentSteps.length > 0) { + winner._stepOptions.stream = null; + } + // Give the steps a chance to pass their responsibilities to the winner. + if (winner !== step) { + const wasLocked = index_js_1.isDev && (0, lock_js_1.unlock)(step); + step.deduplicatedWith?.(winner); + if (wasLocked) + (0, lock_js_1.lock)(step); + this.stepTracker.replaceStep(step, winner); + } + for (const target of equivalentSteps) { + if (winner !== target) { + const wasLocked = index_js_1.isDev && (0, lock_js_1.unlock)(target); + target.deduplicatedWith?.(winner); + if (wasLocked) + (0, lock_js_1.lock)(target); + this.stepTracker.replaceStep(target, winner); + } + } + return winner; + } + /* + * PERF: calculation if peers for deduplicate is too expensive, and shouldn't + * be done in an expensive loop. Alternative: + * + * 1. build a `list` of the steps to deduplicate + * 2. sort this `list` into "dependencies first" order + * 3. for each step in this `list`: + * 1. calculate the list of "compatible" LayerPlans for this step (using + * cache of results of this step where possible) + * 2. find all the "peer" steps within these LayerPlans + * 3. calculate the equivalents for this step + * 4. pick the winning equivalent, replace all other instances with this + * 5. remove the replaced (and winning) steps from the `list` + * + * "compatible" layer plans are calculated by walking up the layer plan tree, + * however: + * - do not pass the LayerPlan of one of the dependencies + * - do not pass a "deferred" layer plan + * + * "Pick the winning equivalent" is challenging, here's current thought: + * + * 1. find the shallowest LayerPlans (logic already written above) + * 2. if just one shallowest LayerPlan, winner is lowest-id plan from this LayerPlan + * 3. otherwise, if all shallowest LayerPlans are polymorphic... ARGH! + * + * ARGH! WHAT DOES THIS MEAN FOR BRANCHING/NON-BRANCHING PLANS. We can + * guarantee that the dependencies must be at least a layer up (otherwise how + * can these be peers with the same dependencies?). For non-branching + * non-deferred plans, push it a layer up. + */ + deduplicateStepsProcess(processed, start, step) { + processed.add(step); + for (const dep of (0, utils_js_1.sudo)(step).dependencies) { + if (dep.id >= start && !processed.has(dep)) { + this.deduplicateStepsProcess(processed, start, dep); + } + } + (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(step.layerPlan, step.polymorphicPaths, this.phase === "plan" ? this.deduplicateStep : this.hoistAndDeduplicate, this, step); + } + /** + * Gives us a chance to replace nearly-duplicate plans with other existing + * plans (and adding the necessary transforms); this means that by the time + * we come to optimize the plan tree should already be simpler. For example + * if you have two plans at the same level that both request row data from + * the same database table with the same identifiers, `WHERE`, `LIMIT`, + * `OFFSET` and `ORDER BY`, but different `SELECT`s we could merge the two + * plans together by replacing the latter with the former and having the + * former SELECT additional fields, then transform the results back to what + * our child plans would be expecting. + */ + deduplicateSteps(depth = 0) { + const start = this.stepTracker.nextStepIdToDeduplicate; + const end = this.stepTracker.stepCount; + if (end === start) { + return; + } + const processed = new Set(); + for (let i = start; i < end; i++) { + const step = this.stepTracker.stepById[i]; + if (!step || step.id !== i || processed.has(step)) + continue; + this.deduplicateStepsProcess(processed, start, step); + } + this.stepTracker.nextStepIdToDeduplicate = end; + if (this.stepTracker.stepCount > end) { + // More steps were created during deduplicate; let's deduplicate those! + const MAX_DEPTH = 5; + if (depth > MAX_DEPTH) { + const newSteps = []; + for (let i = end, l = this.stepTracker.stepCount; i < l; i++) { + newSteps.push(this.stepTracker.stepById[i]); + } + throw new Error(`Whilst deduplicating steps, more steps were created; whilst deduplicating those, even more steps were created. This happened ${MAX_DEPTH} times, which suggests this might go on infinitely. Please check the deduplicate/deduplicatedWith methods on ${newSteps + .map((s) => String(s)) + .join(", ")}.`); + } + return this.deduplicateSteps(depth + 1); + } + } + hoistAndDeduplicate(step) { + this.hoistStep(step); + // Even if step wasn't hoisted, its deps may have been so we should still + // re-deduplicate it. + return step.deduplicate ? this.deduplicateStep(step) : step; + } + hoistSteps() { + this.processSteps("hoist", "dependencies-first", false, this.hoistAndDeduplicate); + } + pushDownSteps() { + this.processSteps("pushDown", "dependents-first", false, this.pushDown); + } + /** + * Calls the 'optimize' method on a plan, which may cause the plan to + * communicate with its (deep) dependencies, and even to replace itself with + * a different plan. + */ + optimizeStep(inStep) { + const step = inStep.allowMultipleOptimizations && inStep.deduplicate + ? this.deduplicateStep(inStep) + : inStep; + if (!step.optimize) { + step.isOptimized = true; + return step; + } + if (step.isOptimized && !step.allowMultipleOptimizations) { + return step; + } + // We know if it's streaming or not based on the LayerPlan it's contained within. + // const stepOptions = step._stepOptions; + let meta; + if (step.optimizeMetaKey !== undefined) { + meta = this.optimizeMeta.get(step.optimizeMetaKey); + if (!meta) { + meta = Object.create(null); + this.optimizeMeta.set(step.optimizeMetaKey, meta); + } + } + const wasLocked = index_js_1.isDev && (0, lock_js_1.unlock)(step); + const replacementStep = step.optimize({ + stream: step._stepOptions.stream + ? { + // We could add more details here, but for now we don't really need them? + } + : null, + meta, + }); + if (wasLocked) + (0, lock_js_1.lock)(step); + if (!replacementStep) { + throw new Error(`Bug in ${step}'s class: the 'optimize' method must return a step. Hint: did you forget 'return this;'?`); + } + step.isOptimized = true; + return replacementStep; + } + /** + * Note that we work through dependents first so we can make sure that we + * know all our dependent's needs before we optimise ourself. + */ + optimizeSteps() { + const thirdAndFutureLoopReplacedPlans = []; + for (let loops = 0; loops < MAX_OPTIMIZATION_LOOPS; loops++) { + let replacedPlan = false; + this.processSteps("optimize", "dependents-first", false, loops === 0 + ? (step) => { + const newStep = this.optimizeStep(step); + if (newStep !== step) { + replacedPlan = true; + } + return newStep; + } + : (step) => { + if (step.allowMultipleOptimizations) { + const replacement = this.optimizeStep(step); + if (replacement !== step) { + replacedPlan = true; + if (loops >= 3) { + thirdAndFutureLoopReplacedPlans.push(step); + } + } + return replacement; + } + else { + return step; + } + }); + if (!replacedPlan) { + return; + } + } + console.warn(`Optimize steps looped ${MAX_OPTIMIZATION_LOOPS} times, and was still replacing steps at the end - this could indicate a very complex plan, or badly behaved steps. Here are some of the steps that were replaced after the second loop: ${thirdAndFutureLoopReplacedPlans + .slice(0, 10) + .join(", ")}`); + } + inlineSteps() { + flagLoop: for (const $flag of this.stepTracker.activeSteps) { + if ($flag instanceof index_js_1.__FlagStep) { + // We can only inline it if it's not used by an output plan or layer plan + { + const usages = this.stepTracker.outputPlansByRootStep.get($flag); + if (usages?.size) { + continue; + } + } + { + const usages = this.stepTracker.layerPlansByRootStep.get($flag); + if (usages?.size) { + continue; + } + } + { + const usages = this.stepTracker.layerPlansByParentStep.get($flag); + if (usages?.size) { + continue; + } + } + // We're only going to inline one if we can inline all. + const toInline = []; + for (const dependent of $flag.dependents) { + const { step, dependencyIndex } = dependent; + const $dependent = (0, utils_js_1.sudo)(step); + const inlineDetails = $flag.inline($dependent.getDepOptions(dependencyIndex)); + if (inlineDetails === null) { + continue flagLoop; + } + toInline.push({ + $dependent, + dependencyIndex, + inlineDetails, + dependent, + }); + } + // All of them pass the check, let's inline them + for (const todo of toInline) { + const { $dependent, dependencyIndex, inlineDetails: { onReject, acceptFlags = interfaces_js_1.DEFAULT_ACCEPT_FLAGS }, } = todo; + (0, utils_js_1.writeableArray)($dependent.dependencyOnReject)[dependencyIndex] = + onReject; + (0, utils_js_1.writeableArray)($dependent.dependencyForbiddenFlags)[dependencyIndex] = + interfaces_js_1.ALL_FLAGS & ~acceptFlags; + } + const $flagDep = (0, utils_js_1.sudo)($flag).dependencies[0]; + this.stepTracker.replaceStep($flag, $flagDep); + } + } + } + /** Finalizes each step */ + finalizeSteps() { + const initialStepCount = this.stepTracker.stepCount; + for (const step of this.stepTracker.activeSteps) { + const wasLocked = index_js_1.isDev && (0, lock_js_1.unlock)(step); + step.finalize(); + if (wasLocked) + (0, lock_js_1.lock)(step); + (0, step_js_1.assertFinalized)(step); + if (index_js_1.isDev && this.stepTracker.stepCount !== initialStepCount) { + throw new Error(`When calling ${step}.finalize() a new plan was created; this is forbidden!`); + } + } + } + finalizeLayerPlans() { + /** + * Adds the `dep` plan to the `copyPlanIds` for `layerPlan` and any + * ancestor layers until we hit the layerPlan that `dep` is from. + */ + const ensurePlanAvailableInLayer = (dep, layerPlan) => { + let currentLayerPlan = layerPlan; + while (dep.layerPlan !== currentLayerPlan) { + if (currentLayerPlan.copyStepIds.includes(dep.id)) { + break; + } + const targetStep = this.stepTracker.getStepById(dep.id); + if (index_js_1.isDev && targetStep !== dep) { + throw new Error(`GrafastInternalError: Plan mismatch; are we using a replaced step? Step ID: ${dep.id}; step: ${dep}; stepById: ${this.stepTracker.getStepById(dep.id)}`); + } + if (targetStep._isUnary) { + targetStep._isUnaryLocked = true; + } + currentLayerPlan.copyStepIds.push(dep.id); + currentLayerPlan = currentLayerPlan.parentLayerPlan; + if (!currentLayerPlan) { + throw new Error(`GrafastInternalError<8c1640b9-fa3c-440d-99e5-7693d0d7e5d1>: could not find layer plan for '${dep}' in chain from layer plan ${layerPlan}`); + } + } + }; + for (const layerPlan of this.stepTracker.layerPlans) { + if (!layerPlan) { + continue; + } + layerPlan.steps = []; + } + for (const step of this.stepTracker.activeSteps) { + step.layerPlan.steps.push(step); + } + for (const layerPlan of this.stepTracker.layerPlans) { + if (!layerPlan) { + continue; + } + layerPlan.pendingSteps = layerPlan.steps.filter((s) => !(step_js_1.$$noExec in s)); + const sideEffectSteps = layerPlan.pendingSteps.filter((s) => s.hasSideEffects); + const pending = new Set(layerPlan.pendingSteps); + const processed = new Set(); + const latestSideEffectStepByPolymorphicPath = new Map(); + function getLatestSideEffectStepFor(step) { + const polymorphicPaths = [...(step.polymorphicPaths ?? [""])]; + const latestSideEffectStep = latestSideEffectStepByPolymorphicPath.get(polymorphicPaths[0]); + for (let i = 1, l = polymorphicPaths.length; i < l; i++) { + const se = latestSideEffectStepByPolymorphicPath.get(polymorphicPaths[i]); + if (se !== latestSideEffectStep) { + throw new Error(`You shouldn't have side effects in polymorphic positions; ${step} exists in ${polymorphicPaths} but these positions have mixed side effects`); + } + } + return latestSideEffectStep; + } + function setLatestSideEffectStep(step) { + const polymorphicPaths = [...(step.polymorphicPaths ?? [""])]; + // Store this side effect for use from now on + for (let i = 0, l = polymorphicPaths.length; i < l; i++) { + latestSideEffectStepByPolymorphicPath.set(polymorphicPaths[i], step); + } + } + const processSideEffectPlan = (step) => { + if (processed.has(step) || isPrepopulatedStep(step)) { + return; + } + const sstep = (0, utils_js_1.sudo)(step); + processed.add(step); + pending.delete(step); + const sideEffectDeps = []; + const rest = []; + for (const dep of sstep.dependencies) { + if (dep.layerPlan !== layerPlan) { + continue; + } + if (processed.has(dep)) { + continue; + } + if (dep.hasSideEffects) { + sideEffectDeps.push(dep); + } + else { + rest.push(dep); + } + } + // Call any side effects we're dependent on + for (const sideEffectDep of sideEffectDeps) { + processSideEffectPlan(sideEffectDep); + } + // PERF: this is silly, we should be able to group them together and + // run them in parallel, and they don't even have side effects! + for (const dep of rest) { + processSideEffectPlan(dep); + } + const latestSideEffectStep = getLatestSideEffectStepFor(step); + if (latestSideEffectStep !== undefined && + !(0, utils_js_1.stepADependsOnStepB)(sstep, latestSideEffectStep)) { + sstep.implicitSideEffectStep = latestSideEffectStep; + } + if (step.hasSideEffects) { + setLatestSideEffectStep(step); + } + const phase = /*#__INLINE__*/ newLayerPlanPhase(); + phase.checkTimeout = true; + phase.normalSteps = [{ step }]; + phase._allSteps.push(step); + layerPlan.phases.push(phase); + }; + for (const sideEffectStep of sideEffectSteps) { + processSideEffectPlan(sideEffectStep); + } + const readyToExecute = (step) => { + for (const dep of (0, utils_js_1.sudo)(step).dependencies) { + if (dep.layerPlan === layerPlan && pending.has(dep)) { + return false; + } + } + return true; + }; + while (pending.size > 0) { + const nextSteps = []; + for (const step of pending) { + if (readyToExecute(step)) { + nextSteps.push(step); + } + } + if (nextSteps.length === 0) { + throw new Error(`GrafastInternalError<2904ebbf-6344-4f2b-9305-8db9c1ff29c5>: Could not compute execution order?! Remaining: ${[ + ...pending, + ]} (processed: ${[...processed]}; all: ${layerPlan.pendingSteps})`); + } + // Do not add to processed until whole layer is known + const phase = /*#__INLINE__*/ newLayerPlanPhase(); + for (const step of nextSteps) { + processed.add(step); + pending.delete(step); + const sstep = (0, utils_js_1.sudo)(step); + const latestSideEffectStep = getLatestSideEffectStepFor(step); + if (latestSideEffectStep !== undefined && + !(0, utils_js_1.stepADependsOnStepB)(sstep, latestSideEffectStep)) { + sstep.implicitSideEffectStep = latestSideEffectStep; + } + if (step.isSyncAndSafe && (0, step_js_1.isUnbatchedStep)(step)) { + if (phase.unbatchedSyncAndSafeSteps !== undefined) { + phase.unbatchedSyncAndSafeSteps.push({ + step, + scratchpad: undefined, + }); + } + else { + phase.unbatchedSyncAndSafeSteps = [ + { step, scratchpad: undefined }, + ]; + } + } + else { + if (!step.isSyncAndSafe || step.hasSideEffects) { + phase.checkTimeout = true; + } + if (phase.normalSteps !== undefined) { + phase.normalSteps.push({ step }); + } + else { + phase.normalSteps = [{ step }]; + } + } + } + // Add more isSyncAndSafe unbatched steps if possible + let foundOne = false; + do { + foundOne = false; + for (const step of pending) { + if (step.isSyncAndSafe && (0, step_js_1.isUnbatchedStep)(step)) { + if (readyToExecute(step)) { + processed.add(step); + pending.delete(step); + const sstep = (0, utils_js_1.sudo)(step); + const latestSideEffectStep = getLatestSideEffectStepFor(step); + if (latestSideEffectStep !== undefined && + !(0, utils_js_1.stepADependsOnStepB)(sstep, latestSideEffectStep)) { + sstep.implicitSideEffectStep = latestSideEffectStep; + } + foundOne = true; + if (phase.unbatchedSyncAndSafeSteps !== undefined) { + phase.unbatchedSyncAndSafeSteps.push({ + step, + scratchpad: undefined, + }); + } + else { + phase.unbatchedSyncAndSafeSteps = [ + { step, scratchpad: undefined }, + ]; + } + } + } + } + } while (foundOne); + if (phase.normalSteps !== undefined) { + for (const { step } of phase.normalSteps) { + phase._allSteps.push(step); + } + } + if (phase.unbatchedSyncAndSafeSteps !== undefined) { + for (const { step } of phase.unbatchedSyncAndSafeSteps) { + phase._allSteps.push(step); + } + } + layerPlan.phases.push(phase); + } + // PERF: this could probably be faster. + // Populate copyPlanIds for each step + for (const step of layerPlan.steps) { + // Items shouldn't have their "list" copied in. + if (step_js_1.$$noExec in step) { + continue; + } + for (const dep of (0, utils_js_1.sudo)(step).dependencies) { + ensurePlanAvailableInLayer(dep, layerPlan); + } + if (step.implicitSideEffectStep) { + ensurePlanAvailableInLayer(step.implicitSideEffectStep, layerPlan); + } + } + const $root = layerPlan.rootStep; + if ($root) { + ensurePlanAvailableInLayer($root, layerPlan); + // If $root explicitly dependends on `layerPlan.parentSideEffectStep` + // then we should remove the implicit layerPlan dependency (e.g. so + // that if you `trap()` the error it does not interfere). + if (layerPlan.parentSideEffectStep) { + if (layerPlan.parentSideEffectStep === $root || + layerPlan.parentSideEffectStep === $root.implicitSideEffectStep || + (0, utils_js_1.stepADependsOnStepB)($root, layerPlan.parentSideEffectStep)) { + layerPlan.parentSideEffectStep = null; + } + } + } + const $sideEffect = layerPlan.parentSideEffectStep; + if ($sideEffect) { + // We read it from the parent layer plan at newBucket time, but we + // don't need to actually scale it up/down. + // + // If parentSideEffectStep exists then parentLayerPlan must exist. + ensurePlanAvailableInLayer($sideEffect, layerPlan.parentLayerPlan); + } + // Copy polymorphic parentStepId + if (layerPlan.reason.type === "polymorphic") { + const parentStep = layerPlan.reason.parentStep; + ensurePlanAvailableInLayer(parentStep, layerPlan); + } + // Ensure list is accessible in parent layerPlan + if (layerPlan.reason.type === "listItem") { + const parentStep = layerPlan.reason.parentStep; + ensurePlanAvailableInLayer(parentStep, layerPlan.parentLayerPlan); + const stream = layerPlan.reason.stream; + if (stream != null) { + if (stream.initialCountStepId) { + ensurePlanAvailableInLayer(this.stepTracker.getStepById(stream.initialCountStepId), layerPlan.parentLayerPlan); + } + if (stream.ifStepId) { + ensurePlanAvailableInLayer(this.stepTracker.getStepById(stream.ifStepId), layerPlan.parentLayerPlan); + } + if (stream.labelStepId) { + ensurePlanAvailableInLayer(this.stepTracker.getStepById(stream.labelStepId), layerPlan.parentLayerPlan); + } + } + } + } + // Populate copyPlanIds for output plans' rootStepId + this.stepTracker.allOutputPlans.forEach((outputPlan) => { + ensurePlanAvailableInLayer(outputPlan.rootStep, outputPlan.layerPlan); + }); + for (const layerPlan of this.stepTracker.layerPlans) { + if (layerPlan !== null) { + layerPlan.finalize(); + } + } + } + /** Optimizes each output plan */ + optimizeOutputPlans() { + this.stepTracker.allOutputPlans.forEach((outputPlan) => outputPlan.optimize()); + } + /** Finalizes each output plan */ + finalizeOutputPlans() { + this.stepTracker.allOutputPlans.forEach((outputPlan) => outputPlan.finalize()); + } + walkOutputPlans(outputPlan, callback) { + callback(outputPlan); + if (outputPlan.child !== null) { + this.walkOutputPlans(outputPlan.child, callback); + } + if (outputPlan.childByTypeName !== undefined) { + Object.values(outputPlan.childByTypeName).forEach((childOutputPlan) => { + this.walkOutputPlans(childOutputPlan, callback); + }); + } + for (const spec of Object.values(outputPlan.keys)) { + if (spec.type === "outputPlan") { + this.walkOutputPlans(spec.outputPlan, callback); + } + } + for (const defer of outputPlan.deferredOutputPlans) { + this.walkOutputPlans(defer, callback); + } + } + generatePlanJSON() { + function printStep(step) { + const metaString = step.toStringMeta(); + const sstep = (0, utils_js_1.sudo)(step); + return { + id: step.id, + stepClass: step.constructor.name, + metaString: metaString ? (0, index_js_1.stripAnsi)(metaString) : metaString, + isUnary: step._isUnary, + bucketId: step.layerPlan.id, + implicitSideEffectStepId: step.implicitSideEffectStep?.id ?? null, + dependencyIds: sstep.dependencies.map((d) => d.id), + dependencyForbiddenFlags: sstep.dependencyForbiddenFlags.slice(), + dependencyOnReject: sstep.dependencyOnReject.map((or) => or ? String(or) : or), + polymorphicPaths: step.polymorphicPaths + ? [...step.polymorphicPaths] + : undefined, + isSyncAndSafe: step.isSyncAndSafe || undefined, + supportsUnbatched: typeof step.unbatchedExecute === "function" || undefined, + hasSideEffects: step.hasSideEffects || undefined, + stream: step._stepOptions.stream + ? { initialCountStepId: step._stepOptions.stream.initialCountStepId } + : undefined, + extra: step.planJSONExtra(), + }; + } + function printPhase(phase) { + return { + normalStepIds: phase.normalSteps?.map((s) => s.step.id), + unbatchedStepIds: phase.unbatchedSyncAndSafeSteps?.map((s) => s.step.id), + }; + } + function printBucketReason(reason) { + switch (reason.type) { + case "root": { + const { type } = reason; + return { type }; + } + case "nullableBoundary": { + const { type, parentStep } = reason; + return { type, parentStepId: parentStep.id }; + } + case "listItem": { + const { type, parentStep, stream } = reason; + return { type, parentStepId: parentStep.id, stream }; + } + case "subscription": { + const { type } = reason; + return { type }; + } + case "mutationField": { + const { type, mutationIndex } = reason; + return { type, mutationIndex }; + } + case "defer": { + const { type, label } = reason; + return { type, label }; + } + case "polymorphic": { + const { type, typeNames, parentStep, polymorphicPaths } = reason; + return { + type, + typeNames, + parentStepId: parentStep.id, + polymorphicPaths: [...polymorphicPaths], + }; + } + case "subroutine": { + const { type, parentStep } = reason; + return { type, parentStepId: parentStep.id }; + } + default: { + const never = reason; + throw new Error(`Failed to process layer plan reason ${(0, inspect_js_1.inspect)(never)}`); + } + } + } + function printBucket(lp) { + lp.reason; + return { + id: lp.id, + reason: printBucketReason(lp.reason), + parentSideEffectStepId: lp.parentSideEffectStep?.id ?? null, + copyStepIds: lp.copyStepIds, + phases: lp.phases.map(printPhase), + steps: lp.steps.map(printStep), + children: lp.children.map(printBucket), + rootStepId: lp.rootStep ? lp.rootStep.id : null, + }; + } + return { + version: "v1", + rootBucket: printBucket(this.rootLayerPlan), + }; + } + finishSubroutine(subroutineStep, layerPlan) { + // Now find anything that these plans are dependent on and make ourself + // dependent on them. + const process = (lp, known) => { + for (const step of this.stepTracker.activeSteps) { + if (step.layerPlan === lp) { + for (const dep of (0, utils_js_1.sudo)(step).dependencies) { + if (!known.includes(dep.layerPlan)) { + // Naughty naughty + subroutineStep.addDependency(dep); + } + } + } + } + for (const child of lp.children) { + process(child, [...known, child]); + } + }; + process(layerPlan, [layerPlan]); + } + /** + * HIGHLY EXPERIMENTAL! + * + * @internal + */ + deleteLayerPlan(layerPlan) { + this.stepTracker.deleteLayerPlan(layerPlan); + } + getStepsByMetaKey(metaKey) { + const matches = []; + for (const step of this.stepTracker.activeSteps) { + if (step.metaKey === metaKey) { + matches.push(step); + } + } + return matches; + } + getStepsByStepClass(klass) { + const matches = []; + for (const step of this.stepTracker.activeSteps) { + if (step instanceof klass) { + matches.push(step); + } + } + return matches; + } + /** + * Cache a generated step by a given identifier (cacheKey) such that we don't + * need to regenerate it on future calls, significantly reducing the load on + * deduplication later. + * + * Note: automatically extends the cached step into other (relevant) + * polymorphic paths; if this shouldn't be the case then don't use cacheStep + * and instead rely on deduplication as usual. + * + * @experimental + */ + cacheStep(ownerStep, actionKey, cacheKey, cb) { + const layerPlan = (0, withGlobalLayerPlan_js_1.currentLayerPlan)(); + const paths = (0, withGlobalLayerPlan_js_1.currentPolymorphicPaths)(); + const cache = (this._cacheStepStoreByLayerPlanAndActionKey[`${actionKey}|${layerPlan.id}|${ownerStep.id}`] ??= new Map()); + const cacheIt = () => { + const stepToCache = cb(); + if (!(stepToCache instanceof index_js_1.Step)) { + throw new Error(`The callback passed to cacheStep must always return an ExecutableStep; but this call from ${ownerStep} returned instead ${(0, inspect_js_1.inspect)(stepToCache)}`); + } + cache.set(cacheKey, stepToCache.id); + return stepToCache; + }; + if (!cache.has(cacheKey)) { + return cacheIt(); + } + const cachedStepId = cache.get(cacheKey); + const cachedStep = this.stepTracker.stepById[cachedStepId]; + if (cachedStep) { + // Fix poly paths + if (paths && cachedStep.polymorphicPaths) { + const polymorphicPaths = new Set([ + ...cachedStep.polymorphicPaths, + ...paths, + ]); + cachedStep.polymorphicPaths = polymorphicPaths; + } + return cachedStep; + } + else { + return cacheIt(); + } + } + /** + * Clears the cache, typically due to side effects having taken place. Called + * from setting hasSideEffects on an ExecutableStep, among other places. + */ + resetCache() { + this._cacheStepStoreByLayerPlanAndActionKey = Object.create(null); + } + withRootLayerPlan(cb) { + return (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.rootLayerPlan, exports.POLYMORPHIC_ROOT_PATHS, cb); + } +} +exports.OperationPlan = OperationPlan; +function makeMetaByMetaKeysFactory(allMetaKeysList) { + const l = allMetaKeysList.length; + // Optimize the common cases + if (l === 0) { + return makeMetaByMetaKeys0; + } + else if (l === 1) { + return makeMetaByMetaKeys1Factory(allMetaKeysList[0]); + } + else if (l === 2) { + return makeMetaByMetaKeys2Factory(allMetaKeysList[0], allMetaKeysList[1]); + } + else if (l === 3) { + return makeMetaByMetaKeys3Factory(allMetaKeysList[0], allMetaKeysList[1], allMetaKeysList[2]); + } + else if (l === 4) { + return makeMetaByMetaKeys4Factory(allMetaKeysList[0], allMetaKeysList[1], allMetaKeysList[2], allMetaKeysList[3]); + } + else if (l === 5) { + return makeMetaByMetaKeys5Factory(allMetaKeysList[0], allMetaKeysList[1], allMetaKeysList[2], allMetaKeysList[3], allMetaKeysList[4]); + } + else if (l === 6) { + return makeMetaByMetaKeys6Factory(allMetaKeysList[0], allMetaKeysList[1], allMetaKeysList[2], allMetaKeysList[3], allMetaKeysList[4], allMetaKeysList[5]); + } + return function makeMetaByMetaKey() { + const metaByMetaKey = Object.create(null); + for (let i = 0; i < l; i++) { + metaByMetaKey[allMetaKeysList[i]] = Object.create(null); + } + return metaByMetaKey; + }; +} +const EMPTY_OBJECT = Object.freeze(Object.create(null)); +function makeMetaByMetaKeys0() { + return EMPTY_OBJECT; +} +function makeMetaByMetaKeys1Factory(key1) { + return function makeMetaByMetaKeys1() { + const obj = Object.create(null); + obj[key1] = Object.create(null); + return obj; + }; +} +function makeMetaByMetaKeys2Factory(key1, key2) { + return function makeMetaByMetaKeys2() { + const obj = Object.create(null); + obj[key1] = Object.create(null); + obj[key2] = Object.create(null); + return obj; + }; +} +function makeMetaByMetaKeys3Factory(key1, key2, key3) { + return function makeMetaByMetaKeys3() { + const obj = Object.create(null); + obj[key1] = Object.create(null); + obj[key2] = Object.create(null); + obj[key3] = Object.create(null); + return obj; + }; +} +function makeMetaByMetaKeys4Factory(key1, key2, key3, key4) { + return function makeMetaByMetaKeys4() { + const obj = Object.create(null); + obj[key1] = Object.create(null); + obj[key2] = Object.create(null); + obj[key3] = Object.create(null); + obj[key4] = Object.create(null); + return obj; + }; +} +function makeMetaByMetaKeys5Factory(key1, key2, key3, key4, key5) { + return function makeMetaByMetaKeys5() { + const obj = Object.create(null); + obj[key1] = Object.create(null); + obj[key2] = Object.create(null); + obj[key3] = Object.create(null); + obj[key4] = Object.create(null); + obj[key5] = Object.create(null); + return obj; + }; +} +function makeMetaByMetaKeys6Factory(key1, key2, key3, key4, key5, key6) { + return function makeMetaByMetaKeys6() { + const obj = Object.create(null); + obj[key1] = Object.create(null); + obj[key2] = Object.create(null); + obj[key3] = Object.create(null); + obj[key4] = Object.create(null); + obj[key5] = Object.create(null); + obj[key6] = Object.create(null); + return obj; + }; +} +function newLayerPlanPhase() { + return { + checkTimeout: false, + normalSteps: undefined, + unbatchedSyncAndSafeSteps: undefined, + _allSteps: [], + }; +} +function throwNoNewStepsError(operationPlan, actionDescription, step, previousStepCount, message) { + const newSteps = []; + for (let i = previousStepCount, l = operationPlan.stepTracker.stepCount; i < l; i++) { + newSteps.push(operationPlan.stepTracker.stepById[i]); + } + throw new Error(`${message}; whilst performing ${actionDescription} of ${step} the following new steps were created: ${newSteps + .map((s) => String(s)) + .join(", ")}`); +} +//# sourceMappingURL=OperationPlan.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OperationPlan.js.map b/grafast/grafast/dist/engine/OperationPlan.js.map new file mode 100644 index 0000000000..88c85b03e1 --- /dev/null +++ b/grafast/grafast/dist/engine/OperationPlan.js.map @@ -0,0 +1 @@ +{"version":3,"file":"OperationPlan.js","sourceRoot":"","sources":["../../src/engine/OperationPlan.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OutputPlan.d.ts b/grafast/grafast/dist/engine/OutputPlan.d.ts new file mode 100644 index 0000000000..01ea763ba0 --- /dev/null +++ b/grafast/grafast/dist/engine/OutputPlan.d.ts @@ -0,0 +1,176 @@ +import LRU from "@graphile/lru"; +import type { FieldNode, GraphQLEnumType, GraphQLObjectType, GraphQLScalarType } from "graphql"; +import * as graphql from "graphql"; +import type { Bucket } from "../bucket.js"; +import type { ExecutionEntryFlags, JSONValue, LocationDetails } from "../interfaces.js"; +import type { Step } from "../step.js"; +import type { PayloadRoot } from "./executeOutputPlan.js"; +import type { LayerPlan } from "./LayerPlan.js"; +export type OutputPlanTypeIntrospection = { + mode: "introspection"; + /** + * The GraphQL introspection field selection (may include arguments/etc). We + * can build a GraphQL document from this and issue it to graphql-js rather + * than replicating that effort. + */ + field: FieldNode; + /** + * The names of the variables used in this document. + */ + variableNames: string[]; + /** + * No need to re-run the introspection each time, may as well cache it, + * right? + * + * Key: canonical JSON stringify of the variables used. + * Value: the GraphQL result (`{data, errors}`) for this. + */ + introspectionCacheByVariableValues: LRU; +}; +export type OutputPlanTypeRoot = { + /** + * Always return `{}` + */ + mode: "root"; + typeName: string; +}; +export type OutputPlanTypeObject = { + /** + * Return `{}` if non-null + */ + mode: "object"; + typeName: string; + deferLabel: string | undefined; +}; +export type OutputPlanTypePolymorphicObject = { + /** + * Return `{}` if non-null + */ + mode: "polymorphic"; + typeNames: string[]; + deferLabel: string | undefined; +}; +export type OutputPlanTypeArray = { + /** + * Return a list of the same length if an array + */ + mode: "array"; +}; +export type OutputPlanTypeLeaf = { + /** + * Return the value. + */ + mode: "leaf"; + graphqlType: GraphQLScalarType | GraphQLEnumType; +}; +export type OutputPlanTypeNull = { + mode: "null"; +}; +/** + * Thanks to `@stream`, output plans must handle their own nullability concerns + * and we might need an output plan for any of these: + * + * - A concrete object + * - A polymorphic object + * - A leaf (enum/scalar) + * - Something we know will always be null + * - A list of any of the above + * - A list of lists + * + * In addition to the above, we also need to cover + * + * - The root object (which is like a concrete object, except it's never null) + * - Introspection + */ +export type OutputPlanType = OutputPlanTypeRoot | OutputPlanTypeObject | OutputPlanTypePolymorphicObject | OutputPlanTypeLeaf | OutputPlanTypeNull | OutputPlanTypeArray | OutputPlanTypeIntrospection; +export type OutputPlanKeyValueOutputPlan = { + type: "outputPlan"; + outputPlan: OutputPlan; + isNonNull: boolean; + locationDetails: LocationDetails; +}; +export type OutputPlanKeyValueTypeName = { + type: "__typename"; + locationDetails: LocationDetails; +}; +export type OutputPlanKeyValue = OutputPlanKeyValueOutputPlan | OutputPlanKeyValueTypeName; +export type OutputPlanKeyValueOutputPlanWithCachedBits = OutputPlanKeyValueOutputPlan & { + layerPlanId: number; +}; +/** + * Defines a way of taking a layerPlan and converting it into an output value. + * + * The result of executing an output plan will be the following: + * + * - data?: the data for this layer, could be object, array or leaf (see OutputPlanMode) + * - errors: a list of errors that occurred (if any), including path details _within the output plan_ + * - streams: a list of streams that were created + */ +export declare class OutputPlan { + layerPlan: LayerPlan; + readonly type: TType; + /** For errors */ + readonly locationDetails: LocationDetails; + /** + * The step that represents the root value. How this is used depends on the + * OutputPlanMode. + */ + readonly rootStep: Step; + /** + * If this output plan should resolve to an error if a side effect step + * raises an error, this is that side effect. + */ + readonly sideEffectStep: Step | null; + /** + * For root/object output plans, the keys to set on the resulting object + * grouped by the concrete object type name. + * + * IMPORTANT: the order of these keys is significant, they MUST match the + * order in the request otherwise we break GraphQL spec compliance! + */ + keys: { + [key: string]: OutputPlanKeyValueTypeName | OutputPlanKeyValueOutputPlanWithCachedBits; + }; + /** + * For list output plans, the output plan that describes the list children. + */ + child: OutputPlan | null; + childIsNonNull: boolean; + /** + * For polymorphic output plans, the Object output plan for each specific type. + */ + childByTypeName: { + [typeName: string]: OutputPlan; + } | undefined; + /** + * For object output plan types only. + */ + deferredOutputPlans: OutputPlan[]; + constructor(layerPlan: LayerPlan, + /** + * For root, this should always be an object. + * + * For object this could represent an object or null. + * + * For polymorphic this could represent a polymorphic object or null. + * + * For array it's the list itself (or null) and dictates the length of the result. + * + * For leaf, it's the leaf plan itself. + * + * For `introspection`, `null` it's irrelevant. Use `constant(null)` or whatever. + */ + rootStep: Step, type: TType, locationDetails: LocationDetails); + print(): string; + toString(): string; + addChild(type: GraphQLObjectType | null, key: string | null, child: OutputPlanKeyValue): void; + getLayerPlans(layerPlans?: Set>): Set; + makeNextStepByLayerPlan(): Record; + execute(this: OutputPlan, _root: PayloadRoot, _mutablePath: ReadonlyArray, _bucket: Bucket, _bucketIndex: number, _rawBucketRootValue?: any, _bucketRootFlags?: ExecutionEntryFlags): JSONValue; + executeString(this: OutputPlan, _root: PayloadRoot, _mutablePath: ReadonlyArray, _bucket: Bucket, _bucketIndex: number, _rawBucketRootValue?: any, _bucketRootFlags?: ExecutionEntryFlags): string; + optimize(): void; + finalize(): void; +} +export declare function coerceError(error: Error, locationDetails: LocationDetails, path: ReadonlyArray): graphql.GraphQLError; +export declare function nonNullError(locationDetails: LocationDetails, path: readonly (string | number)[]): graphql.GraphQLError; +//# sourceMappingURL=OutputPlan.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OutputPlan.d.ts.map b/grafast/grafast/dist/engine/OutputPlan.d.ts.map new file mode 100644 index 0000000000..a5fc961ef2 --- /dev/null +++ b/grafast/grafast/dist/engine/OutputPlan.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OutputPlan.d.ts","sourceRoot":"","sources":["../../src/engine/OutputPlan.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OutputPlan.js b/grafast/grafast/dist/engine/OutputPlan.js new file mode 100644 index 0000000000..c9a162580b --- /dev/null +++ b/grafast/grafast/dist/engine/OutputPlan.js @@ -0,0 +1,1047 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.OutputPlan = void 0; +exports.coerceError = coerceError; +exports.nonNullError = nonNullError; +exports.getChildBucketAndIndex = getChildBucketAndIndex; +const tslib_1 = require("tslib"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const graphql = tslib_1.__importStar(require("graphql")); +const tamedevil_1 = tslib_1.__importStar(require("tamedevil")); +const assert = tslib_1.__importStar(require("../assert.js")); +const dev_js_1 = require("../dev.js"); +const index_js_1 = require("../index.js"); +const inspect_js_1 = require("../inspect.js"); +const interfaces_js_1 = require("../interfaces.js"); +const polymorphic_js_1 = require("../polymorphic.js"); +const access_js_1 = require("../steps/access.js"); +const { executeSync, GraphQLBoolean, GraphQLError, GraphQLFloat, GraphQLID, GraphQLInt, GraphQLString, isObjectType, Kind, OperationTypeNode, } = graphql; +/** + * Defines a way of taking a layerPlan and converting it into an output value. + * + * The result of executing an output plan will be the following: + * + * - data?: the data for this layer, could be object, array or leaf (see OutputPlanMode) + * - errors: a list of errors that occurred (if any), including path details _within the output plan_ + * - streams: a list of streams that were created + */ +class OutputPlan { + constructor(layerPlan, + /** + * For root, this should always be an object. + * + * For object this could represent an object or null. + * + * For polymorphic this could represent a polymorphic object or null. + * + * For array it's the list itself (or null) and dictates the length of the result. + * + * For leaf, it's the leaf plan itself. + * + * For `introspection`, `null` it's irrelevant. Use `constant(null)` or whatever. + */ + rootStep, type, locationDetails) { + this.layerPlan = layerPlan; + this.type = type; + /** + * Appended to the root step when accessed to avoid the need for AccessSteps + * + * @internal + */ + this.processRoot = null; + /** + * For root/object output plans, the keys to set on the resulting object + * grouped by the concrete object type name. + * + * IMPORTANT: the order of these keys is significant, they MUST match the + * order in the request otherwise we break GraphQL spec compliance! + */ + this.keys = Object.create(null); + /** + * For list output plans, the output plan that describes the list children. + */ + this.child = null; + this.childIsNonNull = false; + /** + * For object output plan types only. + */ + this.deferredOutputPlans = []; + this.locationDetails = locationDetails; + this.rootStep = rootStep; + layerPlan.operationPlan.stepTracker.addOutputPlan(this); + this.childByTypeName = + this.type.mode === "polymorphic" ? Object.create(null) : undefined; + // NOTE: this may be cleared during `this.finalize()` + this.sideEffectStep = layerPlan.latestSideEffectStep; + } + print() { + const type = this.type; + switch (type.mode) { + case "root": + case "object": { + return `${this.toString()}\n${Object.entries(this.keys) + .map(([fieldName, val]) => { + return `.${fieldName}: ${val.type === "__typename" ? "" : val.isNonNull ? "!" : "?"}${val.type === "__typename" + ? `__typename(${type.typeName})` + : val.outputPlan.print().replace(/\n/g, "\n ")}`; + }) + .join("\n")}`; + } + case "polymorphic": { + return `${this.toString()}\n${Object.entries(this.childByTypeName) + .map(([typeName, outputPlan]) => { + return `? ${typeName}: ${outputPlan + .print() + .replace(/\n/g, "\n ")}`; + }) + .join("\n")}`; + } + case "array": { + return `${this.toString()}\n ${this.childIsNonNull ? "!" : "?"}${this.child.print().replace(/\n/g, "\n ")}`; + } + default: { + return this.toString(); + } + } + } + toString() { + return `OutputPlan<${this.type.mode}${this.sideEffectStep ? `^${this.sideEffectStep.id}` : ""}∈${this.layerPlan.id}!${this.rootStep.id}>`; + } + addChild(type, key, child) { + if (this.type.mode === "root" || this.type.mode === "object") { + if (dev_js_1.isDev) { + if (typeof key !== "string") { + throw new Error(`GrafastInternalError<7334ec50-23dc-442a-8ffa-19664c9eb79f>: Key must be provided in ${this.type.mode} OutputPlan mode`); + } + if (type == null) { + throw new Error(`GrafastInternalError<638cebef-4ec6-49f4-b681-2f390fb1c0fc>: Type must be provided in ${this.type.mode} OutputPlan mode.`); + } + if (!isObjectType(type)) { + throw new Error(`GrafastInternalError: Type must provided in ${this.type.mode} OutputPlan mode must be an object type, instead saw '${type}'.`); + } + assert.ok(["root", "object"].includes(this.type.mode), "Can only addChild on root/object output plans"); + if (this.keys[key] !== undefined) { + throw new Error(`GrafastInternalError<5ceecb19-8c2c-4797-9be5-9be1b207fa45>: child already set for key '${key}'`); + } + } + this.keys[key] = + child.type === "outputPlan" + ? { + ...child, + layerPlanId: child.outputPlan.layerPlan.id, + } + : child; + } + else if (this.type.mode === "array") { + if (dev_js_1.isDev) { + if (key != null) { + throw new Error(`GrafastInternalError<7de67325-a02f-4619-b118-61bb2d84f33b>: Key must not be provided in ${this.type.mode} OutputPlan mode`); + } + assert.ok(type == null, "Array should not specify type"); + if (this.child !== null) { + throw new Error(`GrafastInternalError<07059d9d-a47d-441f-b834-683cca1d856a>: child already set`); + } + } + if (child.type === "outputPlan") { + this.child = child.outputPlan; + this.childIsNonNull = child.isNonNull; + } + else { + throw new Error(`GrafastInternalError<7525c854-9145-4c6d-8d60-79c14f040519>: Array child must be an outputPlan`); + } + } + else if (this.type.mode === "polymorphic") { + if (dev_js_1.isDev) { + assert.ok(type && this.type.typeNames.includes(type.name), "GrafastInternalError<566a34ac-1138-4dbf-943e-f704819431dd>: polymorphic output plan can only addChild for a matching type"); + assert.strictEqual(key, null, "GrafastInternalError<4346ebda-a02d-4489-b767-7a6d621a73c7>: addChild for polymorphic OutputPlan should not specify a key"); + assert.ok(child.type === "outputPlan", "GrafastInternalError: polymorphic OutputPlan child must be an outputPlan"); + assert.ok(child.outputPlan.type.mode === "object", "GrafastInternalError<203469c6-4bfa-4cd1-ae82-cc5d0132ca16>: polymorphic OutputPlan child must be an object outputPlan"); + } + this.childByTypeName[type.name] = child.outputPlan; + } + else { + throw new Error(`GrafastInternalError<5667df5f-30b7-48d3-be3f-a0065ed9c05c>: Doesn't make sense to set a child in mode '${this.type.mode}'`); + } + } + getLayerPlans(layerPlans = new Set()) { + // Find all the layerPlans referenced + layerPlans.add(this.layerPlan); + if (this.child !== null) { + if (this.child.layerPlan != this.layerPlan) { + this.child.getLayerPlans(layerPlans); + } + else { + throw new Error("GrafastInternalError<4013e05f-b8ed-41ea-a869-204232d02763>: how could the child be in the same layer?"); + } + } + for (const key in this.keys) { + const spec = this.keys[key]; + if (spec.type === "outputPlan") { + if (spec.outputPlan.layerPlan !== this.layerPlan) { + spec.outputPlan.getLayerPlans(layerPlans); + layerPlans.add(spec.outputPlan.layerPlan); + } + } + } + return layerPlans; + } + makeNextStepByLayerPlan() { + const layerPlans = this.getLayerPlans(); + const map = Object.create(null); + for (const layerPlan of layerPlans) { + map[layerPlan.id] = []; + } + return map; + } + // This gets replaced with a mode-specific executor + execute(_root, + // By just reusing the same path over and over we don't need to allocate + // more memory for more arrays; but we must be _incredibly_ careful to + // ensure any changes to it are reversed. + _mutablePath, _bucket, _bucketIndex, _rawBucketRootValue, _bucketRootFlags) { + throw new Error(`OutputPlan.execute has yet to be built!`); + } + // This gets replaced with a mode-specific executor + executeString(_root, + // By just reusing the same path over and over we don't need to allocate + // more memory for more arrays; but we must be _incredibly_ careful to + // ensure any changes to it are reversed. + _mutablePath, _bucket, _bucketIndex, _rawBucketRootValue, _bucketRootFlags) { + throw new Error(`OutputPlan.executeString has yet to be built!`); + } + optimize() { + // This optimization works by ridding us of access steps at the very end of + // paths and just accessing properties directly. In rare circumstances + // involving untethered side effects in earlier versions this could lead to + // errors being skipped and data generated previous to the error being + // returned; but OutputPlans now check the latestSideEffectStep so this + // should be safe aga. + const $root = this.layerPlan.operationPlan.dangerouslyGetStep(this.rootStep.id); + if ($root instanceof index_js_1.AccessStep && + $root.fallback === undefined && + $root.implicitSideEffectStep === null && + (!this.sideEffectStep || !(0, index_js_1.stepADependsOnStepB)($root, this.sideEffectStep))) { + const expressionDetails = $root.unbatchedExecute[access_js_1.expressionSymbol]; + if (expressionDetails !== undefined) { + // @ts-ignore + const { step: $parent } = $root.getDepOptions(0); + this.layerPlan.operationPlan.stepTracker.setOutputPlanRootStep(this, $parent); + const [path, fallback] = expressionDetails; + withFastExpression(path, fallback, (fn) => { + this.processRoot = fn; + }); + } + } + } + finalize() { + // Clear the sideEffectStep if the rootStep explicitly depends on it. + // NOTE: this occurs here since more dependencies could have been added to + // $root after `this` was created. + const $sideEffect = this.sideEffectStep; + if ($sideEffect) { + const $root = this.rootStep; + if ($root === $sideEffect || + $root.implicitSideEffectStep === $sideEffect || + (0, index_js_1.stepADependsOnStepB)($root, $sideEffect)) { + // It's marked readonly, but we override it anyway + this.sideEffectStep = null; + } + } + // Build the executor + switch (this.type.mode) { + case "null": { + this.execute = nullExecutor; + this.executeString = nullExecutorString; + break; + } + case "leaf": { + this.execute = leafExecutor; + if (this.type.graphqlType.serialize === GraphQLID.serialize || + this.type.graphqlType.serialize === GraphQLString.serialize) { + // String types + this.executeString = stringLeafExecutorString; + } + else if (this.type.graphqlType.serialize === GraphQLInt.serialize) { + this.executeString = intLeafExecutorString; + } + else if (this.type.graphqlType.serialize === GraphQLFloat.serialize) { + this.executeString = floatLeafExecutorString; + } + else if (this.type.graphqlType.serialize === GraphQLBoolean.serialize) { + // Boolean type + this.executeString = booleanLeafExecutorString; + } + else { + // PERF: we could probably optimize enums too + this.executeString = leafExecutorString; + } + break; + } + case "introspection": { + this.execute = introspectionExecutor; + this.executeString = introspectionExecutorString; + break; + } + case "polymorphic": { + this.execute = polymorphicExecutor; + this.executeString = polymorphicExecutorString; + break; + } + case "array": { + if (!this.child) { + throw new Error("GrafastInternalError<48fabdc8-ce84-45ec-ac20-35a2af9098e0>: No child output plan for list bucket?"); + } + const childIsNonNull = this.childIsNonNull; + let directLayerPlanChild = this.child.layerPlan; + while (directLayerPlanChild.parentLayerPlan !== this.layerPlan) { + const parent = directLayerPlanChild.parentLayerPlan; + if (!parent) { + throw new Error(`GrafastInternalError: Invalid heirarchy - could not find direct layerPlan child of ${this}`); + } + directLayerPlanChild = parent; + } + const canStream = directLayerPlanChild.reason.type === "listItem" && + !!directLayerPlanChild.reason.stream; + if (childIsNonNull) { + if (canStream) { + this.execute = arrayExecutor_nonNullable_streaming; + this.executeString = arrayExecutorString_nonNullable_streaming; + } + else { + this.execute = arrayExecutor_nonNullable; + this.executeString = arrayExecutorString_nonNullable; + } + } + else { + if (canStream) { + this.execute = arrayExecutor_nullable_streaming; + this.executeString = arrayExecutorString_nullable_streaming; + } + else { + this.execute = arrayExecutor_nullable; + this.executeString = arrayExecutorString_nullable; + } + } + break; + } + case "root": + case "object": { + const type = this.type; + const digestFieldTypes = Object.create(null); + for (const [responseKey, spec] of Object.entries(this.keys)) { + digestFieldTypes[responseKey] = { + fieldType: spec.type === "__typename" + ? "__typename" + : spec.isNonNull + ? "outputPlan!" + : "outputPlan?", + sameBucket: spec.type === "__typename" || + spec.outputPlan.layerPlan.id === this.layerPlan.id, + }; + } + this.execute = makeObjectExecutor(type.typeName, digestFieldTypes, this.deferredOutputPlans.length > 0, type.mode === "root", false); + this.executeString = makeObjectExecutor(type.typeName, digestFieldTypes, this.deferredOutputPlans.length > 0, type.mode === "root", true); + break; + } + default: { + const never = this.type; + throw new Error(`GrafastInternalError: Could not build executor for OutputPlan with type ${(0, inspect_js_1.inspect)(never)}}`); + } + } + } +} +exports.OutputPlan = OutputPlan; +function coerceError(error, locationDetails, path) { + // Ensure it's a GraphQL error + if (error instanceof GraphQLError) { + if (error.path !== undefined) { + return error; + } + else { + return new GraphQLError(error.message, locationDetails.node, null, null, path, error.originalError ?? error, error.extensions); + } + } + else { + return new GraphQLError(error?.message ?? String(error), locationDetails.node, null, null, path, error, null); + } +} +function nonNullError(locationDetails, path) { + const { parentTypeName, fieldName, node } = locationDetails; + if (!parentTypeName || !fieldName) { + return new GraphQLError(`GrafastInternalError: null bubbled to root`, node, null, null, path, null, null); + } + return new GraphQLError(`Cannot return null for non-nullable field ${parentTypeName}.${fieldName}.`, node, null, null, path, null, null); +} +/** + * We're currently running OutputPlan `outputPlan` in bucket `bucket` at index + * `bucketIndex`. If this is an array OutputPlan then we're looping over the + * entries in our list and we're currently at index `inArrayIndex` (otherwise + * this is null). + * + * Now we want to run `childOutputPlan`, but to do so we need to find the + * related `childBucket` and `childBucketIndex`. + * + * @internal + */ +function getChildBucketAndIndex(layerPlan, outputPlan, bucket, bucketIndex, arrayIndex = null) { + if (bucket.layerPlan === layerPlan) { + return [bucket, bucketIndex]; + } + if ((arrayIndex == null) === + (outputPlan != null && outputPlan.type.mode === "array")) { + throw new Error("GrafastInternalError<83d0e3cc-7eec-4185-85b4-846540288162>: arrayIndex must be supplied iff outputPlan is an array"); + } + if (outputPlan != null && layerPlan === bucket.layerPlan) { + // Same layer; straightforward + return [bucket, bucketIndex]; + } + const reversePath = [layerPlan]; + let current = layerPlan; + while (!bucket.children[current.id]) { + current = current.parentLayerPlan; + if (!current) { + return null; + } + reversePath.push(current); + } + let currentBucket = bucket; + let currentIndex = bucketIndex; + for (let l = reversePath.length, i = l - 1; i >= 0; i--) { + const layerPlan = reversePath[i]; + const child = currentBucket.children[layerPlan.id]; + if (!child) { + return null; + } + const out = child.map.get(currentIndex); + if (out == null) { + return null; + } + /* + * TEST: I think this '|| i !== l - 1' check is saying that an array can + * only occur at the furthest ancestor and everything since then must be + * non-array. Presumably in the case of nested arrays there would be an + * intermediary bucket, hence why this check is allowed, but that should be + * tested. Also, are there any confounding factors when it comes to steps + * themselves using arrays for object values - for example pgSelectSingle is + * represented by an array (tuple), but that doesn't make it a list so it should + * be fine. Use tests to validate this is all fine. + */ + if (arrayIndex == null || i !== l - 1) { + if (Array.isArray(out)) { + throw new Error("GrafastInternalError: Was expecting an arrayIndex, but none was provided"); + } + currentBucket = child.bucket; + currentIndex = out; + } + else { + if (!Array.isArray(out)) { + throw new Error(`GrafastInternalError<8190d09f-dc75-46ec-8162-b20ad516de41>: Cannot access array index in non-array ${(0, inspect_js_1.inspect)(out)}`); + } + if (!(out.length > arrayIndex)) { + throw new Error(`GrafastInternalError<1f596c22-368b-4d0d-94df-fb3df632b064>: Attempted to retrieve array index '${arrayIndex}' which is out of bounds of array with length '${out.length}'`); + } + currentBucket = child.bucket; + currentIndex = out[arrayIndex]; + } + } + if (currentIndex == null) { + return null; + } + return [currentBucket, currentIndex]; +} +function makeExecutor(config) { + const { preamble = null, inner, asString, nameExtra, skipNullHandling = false, } = config; + const fn = function (root, mutablePath, bucket, bucketIndex, rawBucketRootValue = bucket.store.get(this.rootStep.id).at(bucketIndex), bucketRootFlags = bucket.store.get(this.rootStep.id)._flagsAt(bucketIndex)) { + if (this.sideEffectStep !== null) { + const sideEffectBucketDetails = getChildBucketAndIndex(this.sideEffectStep.layerPlan, null, bucket, bucketIndex); + if (sideEffectBucketDetails) { + const [sideEffectBucket, sideEffectBucketIndex] = sideEffectBucketDetails; + const ev = sideEffectBucket.store.get(this.sideEffectStep.id); + if (!ev) { + throw new Error(`GrafastInternalError: ${(0, index_js_1.stripAnsi)(String(this.sideEffectStep))} has no entry in ${bucket}`); + } + const seFlags = ev._flagsAt(sideEffectBucketIndex); + if (seFlags & interfaces_js_1.FLAG_ERROR) { + const seVal = ev.at(sideEffectBucketIndex); + throw coerceError(seVal, this.locationDetails, mutablePath.slice(1)); + } + } + } + if (bucketRootFlags & interfaces_js_1.FLAG_ERROR) { + throw coerceError(rawBucketRootValue, this.locationDetails, mutablePath.slice(1)); + } + const bucketRootValue = this.processRoot !== null + ? this.processRoot(rawBucketRootValue, bucketRootFlags) + : rawBucketRootValue; + const earlyReturn = preamble?.call(this, bucketRootValue); + if (earlyReturn !== undefined) { + return earlyReturn; + } + if (!skipNullHandling) { + if (bucketRootValue == null) + return (asString ? "null" : null); + } + return inner.call(this, bucketRootValue, root, mutablePath, bucket, bucketIndex, rawBucketRootValue, bucketRootFlags); + }; + fn.displayName = `outputPlan${asString ? "String" : ""}_${nameExtra}`; + return fn; +} +function executeChildPlan(that, locationDetails, childOutputPlan, isNonNull, asString, childBucket, childBucketIndex, bucket, bucketIndex, mutablePath, mutablePathIndex, root, rawBucketRootValue, bucketRootFlags) { + const $sideEffect = childOutputPlan.layerPlan.parentSideEffectStep; + if ($sideEffect !== null) { + // Check if there's an error + const sideEffectBucketDetails = getChildBucketAndIndex($sideEffect.layerPlan, null, bucket, bucketIndex); + if (sideEffectBucketDetails) { + const [sideEffectBucket, sideEffectBucketIndex] = sideEffectBucketDetails; + const ev = sideEffectBucket.store.get($sideEffect.id); + if (!ev) { + throw new Error(`GrafastInternalError: ${(0, index_js_1.stripAnsi)(String($sideEffect))} has no entry in ${bucket}`); + } + const flags = ev._flagsAt(sideEffectBucketIndex); + if (flags & interfaces_js_1.FLAG_ERROR) { + const e = coerceError(ev.at(sideEffectBucketIndex), locationDetails, mutablePath.slice(1)); + if (isNonNull) { + throw e; + } + else { + const streamCount = root.streams.length; + const queueCount = root.queue.length; + commonErrorHandler(e, locationDetails, mutablePath, mutablePathIndex, root, streamCount, queueCount); + return asString ? "null" : null; + } + } + } + } + // This is the code that changes based on if the field is nullable or not + if (isNonNull) { + // No need to catch error + if (childBucket === bucket) { + //noop + } + else { + if (childBucket == null) { + throw nonNullError(locationDetails, mutablePath.slice(1)); + } + } + const fieldResult = childOutputPlan[asString ? "executeString" : "execute"](root, mutablePath, childBucket, childBucketIndex, + // NOTE: the previous code may have had a bug here, it referenced childBucket.rootStep + childOutputPlan.rootStep === that.rootStep + ? rawBucketRootValue + : undefined, childOutputPlan.rootStep === that.rootStep ? bucketRootFlags : undefined); + if (fieldResult == (asString ? "null" : null)) { + throw nonNullError(locationDetails, mutablePath.slice(1)); + } + return fieldResult; + } + else { + // Need to catch error and set null + const streamCount = root.streams.length; + const queueCount = root.queue.length; + try { + if (childBucket !== bucket && childBucket == null) { + return asString ? "null" : null; + } + else { + return childOutputPlan[asString ? "executeString" : "execute"](root, mutablePath, childBucket, childBucketIndex, + // NOTE: the previous code may have had a bug here, it referenced childBucket.rootStep + childOutputPlan.rootStep === that.rootStep + ? rawBucketRootValue + : undefined, childOutputPlan.rootStep === that.rootStep + ? bucketRootFlags + : undefined); + } + } + catch (e) { + commonErrorHandler(e, locationDetails, mutablePath, mutablePathIndex, root, streamCount, queueCount); + return asString ? "null" : null; + } + } +} +function commonErrorHandler(e, locationDetails, mutablePath, mutablePathIndex, root, streamCount, queueCount) { + if (root.streams.length > streamCount) { + root.streams.splice(streamCount); + } + if (root.queue.length > queueCount) { + root.queue.splice(queueCount); + } + const error = coerceError(e, locationDetails, mutablePath.slice(1)); + const pathLengthTarget = mutablePathIndex + 1; + const overSize = mutablePath.length - pathLengthTarget; + if (overSize > 0) { + mutablePath.splice(pathLengthTarget, overSize); + } + root.errors.push(error); +} +const nullExecutor = makeExecutor({ + inner: () => null, + nameExtra: "null", + asString: false, +}); +const nullExecutorString = makeExecutor({ + inner: () => "null", + nameExtra: `null`, + asString: true, +}); +/* This is what leafExecutor should use if insideGraphQL (which isn't currently + * supported) + `\ + if (root.insideGraphQL) { + // Don't serialize to avoid the double serialization problem + return bucketRootValue; + } else { + return this.type.graphqlType.serialize(bucketRootValue); + } + ` */ +const leafExecutor = makeExecutor({ + inner(bucketRootValue) { + return this.type.graphqlType.serialize(bucketRootValue); + }, + nameExtra: `leaf`, + asString: false, +}); +const leafExecutorString = makeExecutor({ + inner(bucketRootValue) { + return (0, tamedevil_1.stringifyJSON)(this.type.graphqlType.serialize(bucketRootValue)); + }, + nameExtra: `leaf`, + asString: true, +}); +const booleanLeafExecutorString = makeExecutor({ + inner(bucketRootValue) { + const val = this.type.graphqlType.serialize(bucketRootValue); + return val === true ? "true" : "false"; + }, + nameExtra: `booleanLeaf`, + asString: true, + skipNullHandling: false, + preamble(bucketRootValue) { + if (bucketRootValue === true) + return "true"; + if (bucketRootValue === false) + return "false"; + }, +}); +const intLeafExecutorString = makeExecutor({ + inner(bucketRootValue) { + return "" + this.type.graphqlType.serialize(bucketRootValue); + }, + nameExtra: `intLeaf`, + asString: true, + skipNullHandling: false, + // Fast check to see if number is 32 bit integer + preamble(bucketRootValue) { + if ((bucketRootValue | 0) === bucketRootValue) { + return "" + bucketRootValue; + } + }, +}); +const floatLeafExecutorString = makeExecutor({ + inner(bucketRootValue) { + return String(this.type.graphqlType.serialize(bucketRootValue)); + }, + nameExtra: `floatLeaf`, + asString: true, + skipNullHandling: false, + preamble(bucketRootValue) { + if (Number.isFinite(bucketRootValue)) { + return "" + bucketRootValue; + } + }, +}); +const stringLeafExecutorString = makeExecutor({ + inner(bucketRootValue) { + return (0, tamedevil_1.stringifyString)(this.type.graphqlType.serialize(bucketRootValue)); + }, + nameExtra: `stringLeaf`, + asString: true, + skipNullHandling: false, + preamble(bucketRootValue) { + if (typeof bucketRootValue === "string") { + return (0, tamedevil_1.stringifyString)(bucketRootValue); + } + }, +}); +// NOTE: the reference to $$concreteType here is a (temporary) optimization; it +// should be `resolveType(bucketRootValue)` but it's not worth the function +// call overhead. Longer term it should just be read directly from a different +// store. +function makePolymorphicExecutor(asString) { + return makeExecutor({ + inner(bucketRootValue, root, mutablePath, bucket, bucketIndex) { + if (dev_js_1.isDev) { + if (!(0, polymorphic_js_1.isPolymorphicData)(bucketRootValue)) { + throw coerceError(new Error("GrafastInternalError: Expected polymorphic data"), this.locationDetails, mutablePath.slice(1)); + } + } + const typeName = bucketRootValue[interfaces_js_1.$$concreteType]; + const childOutputPlan = this.childByTypeName[typeName]; + if (dev_js_1.isDev) { + assert.ok(typeName, "GrafastInternalError: Could not determine concreteType for object"); + assert.ok(childOutputPlan, `GrafastInternalError: Could not determine the OutputPlan to use for '${typeName}' from '${bucket.layerPlan}'`); + } + const directChild = bucket.children[childOutputPlan.layerPlan.id]; + if (directChild !== undefined) { + return childOutputPlan[asString ? "executeString" : "execute"](root, mutablePath, directChild.bucket, directChild.map.get(bucketIndex)); + } + else { + const c = getChildBucketAndIndex(childOutputPlan.layerPlan, this, bucket, bucketIndex); + if (!c) { + throw new Error("GrafastInternalError<691509d8-31fa-4cfe-a6df-dcba21bd521f>: polymorphic executor couldn't determine child bucket"); + } + const [childBucket, childBucketIndex] = c; + return childOutputPlan[asString ? "executeString" : "execute"](root, mutablePath, childBucket, childBucketIndex); + } + }, + nameExtra: "polymorphic", + asString, + }); +} +const polymorphicExecutor = makePolymorphicExecutor(false); +const polymorphicExecutorString = makePolymorphicExecutor(true); +function makeArrayExecutor(childIsNonNull, canStream, asString) { + return makeExecutor({ + inner(bucketRootValue, root, mutablePath, bucket, bucketIndex, rawBucketRootValue, bucketRootFlags) { + if (!Array.isArray(bucketRootValue)) { + console.warn(`Hit fallback for value ${(0, inspect_js_1.inspect)(bucketRootValue)} coercion to mode 'array'`); + return (asString ? "null" : null); + } + if (this.child === null) { + throw new Error(`GrafastInternalError<365fd45e-2939-411b-92a6-4f6875d8fbd3>: ${this} has no child output plan?!`); + } + const childOutputPlan = this.child; + const l = bucketRootValue.length; + let string; + let data; + if (l === 0) { + if (asString) { + string = "[]"; + } + else { + data = []; + } + } + else { + if (asString) { + string = "["; + } + else { + data = []; + } + const mutablePathIndex = mutablePath.push(-1) - 1; + // Now to populate the children... + const directChild = bucket.children[childOutputPlan.layerPlan.id]; + let childBucket, childBucketIndex, lookup; + if (directChild !== undefined) { + childBucket = directChild.bucket; + lookup = directChild.map.get(bucketIndex); + } + for (let i = 0; i < l; i++) { + if (directChild !== undefined) { + childBucketIndex = lookup[i]; + } + else { + const c = getChildBucketAndIndex(childOutputPlan.layerPlan, this, bucket, bucketIndex, i); + if (c !== null) { + [childBucket, childBucketIndex] = c; + } + else { + childBucket = childBucketIndex = null; + } + } + mutablePath[mutablePathIndex] = i; + if (asString) { + if (i > 0) { + string += ","; + } + } + const val = executeChildPlan(this, this.locationDetails, childOutputPlan, childIsNonNull, asString, childBucket, childBucketIndex, bucket, bucketIndex, mutablePath, mutablePathIndex, root, rawBucketRootValue, bucketRootFlags); + if (asString) { + string += val; + } + else { + data[i] = val; + } + } + mutablePath.length = mutablePathIndex; + if (asString) { + string += "]"; + } + } + if (canStream) { + const stream = bucketRootValue[interfaces_js_1.$$streamMore]; + if (stream !== undefined) { + const labelStepId = childOutputPlan.layerPlan.reason.stream?.labelStepId; + root.streams.push({ + root, + path: mutablePath.slice(1), + bucket, + bucketIndex, + outputPlan: childOutputPlan, + label: labelStepId != null + ? bucket.store.get(labelStepId)?.unaryValue() + : undefined, + stream, + startIndex: bucketRootValue.length, + }); + } + } + return (asString ? string : data); + }, + nameExtra: `array${childIsNonNull ? "_nonNull" : ""}${canStream ? "_stream" : ""}`, + asString, + }); +} +const arrayExecutor_nullable = makeArrayExecutor(false, false, false); +const arrayExecutor_nullable_streaming = makeArrayExecutor(false, true, false); +const arrayExecutor_nonNullable = makeArrayExecutor(true, false, false); +const arrayExecutor_nonNullable_streaming = makeArrayExecutor(true, true, false); +const arrayExecutorString_nullable = makeArrayExecutor(false, false, true); +const arrayExecutorString_nullable_streaming = makeArrayExecutor(false, true, true); +const arrayExecutorString_nonNullable = makeArrayExecutor(true, false, true); +const arrayExecutorString_nonNullable_streaming = makeArrayExecutor(true, true, true); +/** + * This piggy-backs off of GraphQL.js by rewriting the request, executing it in + * GraphQL.js, and then patching it into our response. It's a temporary + * workaround until we can afford the time to write our own introspection + * execution. + * + * ENHANCE: write our own introspection execution! + */ +function introspect(root, outputPlan, mutablePath, asString) { + const { locationDetails } = outputPlan; + const { field: rawField, introspectionCacheByVariableValues, variableNames, } = outputPlan.type; + const field = { + ...rawField, + alias: { kind: Kind.NAME, value: "a" }, + }; + const document = { + definitions: [ + { + kind: Kind.OPERATION_DEFINITION, + operation: OperationTypeNode.QUERY, + selectionSet: { + kind: Kind.SELECTION_SET, + selections: [field], + }, + variableDefinitions: outputPlan.layerPlan.operationPlan.operation.variableDefinitions?.filter((d) => variableNames.includes(d.variable.name.value)), + }, + ...Object.values(outputPlan.layerPlan.operationPlan.fragments), + ], + kind: Kind.DOCUMENT, + }; + const variableValues = Object.create(null); + const sortedVariableNames = [...variableNames].sort(); + for (const variableName of sortedVariableNames) { + variableValues[variableName] = root.variables[variableName]; + } + // "canonical" only to one level, but given introspection doesn't really + // accept objects this should be mostly sufficient for decent optimization + // level. + const canonical = JSON.stringify(variableValues); + const cached = introspectionCacheByVariableValues.get(canonical); + if (cached !== undefined) { + return (asString ? JSON.stringify(cached) : cached); + } + const graphqlResult = executeSync({ + schema: outputPlan.layerPlan.operationPlan.schema, + document, + variableValues, + }); + if (graphqlResult.errors !== undefined) { + // NOTE: we should map the introspection path, however that might require + // us to be able to raise multiple errors. Theoretically if the query + // validates we shouldn't be able to get errors out of the introspection + // system, so we'll skip over this for now. When we get around to + // implementing introspection natively in Grafast rather than piggy-backing + // off of GraphQL.js then this problem will go away on its own. + console.error("INTROSPECTION FAILED!"); + console.error(graphqlResult); + const { node } = locationDetails; + throw new GraphQLError("INTROSPECTION FAILED!", node, null, null, mutablePath.slice(1), null, null); + } + const result = graphqlResult.data.a; + introspectionCacheByVariableValues.set(canonical, result); + return (asString ? JSON.stringify(result) : result); +} +const introspectionExecutor = makeExecutor({ + inner(_bucketRootValue, root, mutablePath) { + return introspect(root, this, mutablePath, false); + }, + nameExtra: `introspection`, + asString: false, + skipNullHandling: true, +}); +const introspectionExecutorString = makeExecutor({ + inner(_bucketRootValue, root, mutablePath) { + return introspect(root, this, mutablePath, true); + }, + nameExtra: `introspection`, + asString: true, + skipNullHandling: true, +}); +const SAFE_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/; +function makeObjectExecutor(typeName, fieldTypes, hasDeferredOutputPlans, +// this.type.mode === "root", +isRoot, asString) { + if (!SAFE_NAME.test(typeName)) { + throw new Error(`Unsafe type name: ${typeName}; doesn't conform to 'Name' in the GraphQL spec`); + } + if (dev_js_1.isDev) { + if (Object.getPrototypeOf(fieldTypes) !== null) { + throw new Error(`GrafastInternalError<3d8e3547-d818-44e1-a076-16b828e3a34d>: fieldTypes must have a null prototype`); + } + } + const fieldDigests = Object.entries(fieldTypes).map(([responseKey, fieldSpec], i) => { + // NOTE: this code relies on the fact that fieldName and typeName do + // not require any quoting in JSON/JS - they must conform to GraphQL + // `Name`. + if (!SAFE_NAME.test(responseKey)) { + // This should not be able to happen if the GraphQL operation is valid + throw new Error(`Unsafe key: ${responseKey}; doesn't conform to 'Name' in the GraphQL spec`); + } + const { fieldType, sameBucket } = fieldSpec; + const addComma = asString && i > 0; + switch (fieldType) { + case "__typename": { + return { + isTypeName: true, + addComma, + responseKey, + stringValue: asString ? `"${responseKey}":"${typeName}"` : null, + }; + } + case "outputPlan!": + case "outputPlan?": { + return { + isTypeName: false, + addComma, + responseKey, + stringPrefix: asString ? `"${responseKey}":` : null, + sameBucket, + isNonNull: fieldType === "outputPlan!", + }; + } + default: { + const never = fieldType; + throw new Error(`GrafastInternalError<879082f4-fe6f-4112-814f-852b9932ca83>: unsupported key type ${never}`); + } + } + }); + return makeExecutor({ + inner(bucketRootValue, root, mutablePath, bucket, bucketIndex, rawBucketRootValue, bucketRootFlags) { + let string = asString ? "{" : undefined; + const obj = asString + ? undefined + : Object.create(null); + const keys = this.keys; + const mutablePathIndex = mutablePath.push("!") - 1; + for (const digest of fieldDigests) { + if (digest.addComma) { + string += ","; + } + const responseKey = digest.responseKey; + if (digest.isTypeName) { + if (asString) { + string += digest.stringValue; + } + else { + obj[responseKey] = typeName; + } + } + else { + mutablePath[mutablePathIndex] = responseKey; + const spec = keys[responseKey]; + if (digest.sameBucket) { + const val = executeChildPlan(this, spec.locationDetails, spec.outputPlan, digest.isNonNull, asString, bucket, bucketIndex, bucket, bucketIndex, mutablePath, mutablePathIndex, root, rawBucketRootValue, bucketRootFlags); + if (asString) { + string += digest.stringPrefix; + string += val; + } + else { + obj[responseKey] = val; + } + } + else { + const directChild = bucket.children[spec.outputPlan.layerPlan.id]; + let childBucket, childBucketIndex; + if (directChild !== undefined) { + childBucket = directChild.bucket; + childBucketIndex = directChild.map.get(bucketIndex); + } + else { + const c = getChildBucketAndIndex(spec.outputPlan.layerPlan, this, bucket, bucketIndex); + if (c !== null) { + [childBucket, childBucketIndex] = c; + } + else { + childBucket = childBucketIndex = null; + } + } + const val = executeChildPlan(this, spec.locationDetails, spec.outputPlan, digest.isNonNull, asString, childBucket, childBucketIndex, bucket, bucketIndex, mutablePath, mutablePathIndex, root, rawBucketRootValue, bucketRootFlags); + if (asString) { + string += digest.stringPrefix; + string += val; + } + else { + obj[responseKey] = val; + } + } + } + } + mutablePath.length = mutablePathIndex; + if (asString) { + string += "}"; + } + if (hasDeferredOutputPlans) { + // Everything seems okay; queue any deferred payloads + for (const defer of this.deferredOutputPlans) { + root.queue.push({ + root, + path: mutablePath.slice(1), + bucket, + bucketIndex, + outputPlan: defer, + label: defer.type.deferLabel, + }); + } + } + return (asString ? string : obj); + }, + nameExtra: "object", + asString, + skipNullHandling: isRoot, + }); +} +const makeCache = new lru_1.default({ + maxLength: 1000, +}); +const makingCache = new Map(); +function withFastExpression(path, fallback, callback) { + const signature = (fallback === undefined ? "d" : "f") + "_" + path.join("|"); + const existing = makeCache.get(signature); + if (existing !== undefined) { + callback(existing); + return; + } + const existingCallbacks = makingCache.get(signature); + if (existingCallbacks !== undefined) { + existingCallbacks.push(callback); + return; + } + const callbacks = [callback]; + makingCache.set(signature, callbacks); + const jitParts = []; + for (let i = 0, l = path.length; i < l; i++) { + const part = path[i]; + jitParts.push(tamedevil_1.default.optionalGet(part)); + } + const expression = tamedevil_1.default.join(jitParts, ""); + tamedevil_1.default.runInBatch((0, tamedevil_1.default) `(value => (value${expression})${fallback !== undefined ? (0, tamedevil_1.default) ` ?? ${tamedevil_1.default.lit(fallback)}` : tamedevil_1.default.blank})`, (fn) => { + makeCache.set(signature, fn); + makingCache.delete(signature); + for (const callback of callbacks) { + callback(fn); + } + }); +} +//# sourceMappingURL=OutputPlan.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/OutputPlan.js.map b/grafast/grafast/dist/engine/OutputPlan.js.map new file mode 100644 index 0000000000..9c5af844b5 --- /dev/null +++ b/grafast/grafast/dist/engine/OutputPlan.js.map @@ -0,0 +1 @@ +{"version":3,"file":"OutputPlan.js","sourceRoot":"","sources":["../../src/engine/OutputPlan.ts"],"names":[],"mappings":";;;AAinBA,kCA+BC;AAED,oCAyBC;AAaD,wDAuFC;;AA/wBD,gEAAgC;AAQhC,yDAAmC;AAEnC,+DAA+D;AAE/D,6DAAuC;AAEvC,sCAAkC;AAClC,0CAAyE;AACzE,8CAAwC;AAMxC,oDAA4E;AAC5E,sDAAsD;AAEtD,kDAAsD;AAItD,MAAM,EACJ,WAAW,EACX,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,iBAAiB,GAClB,GAAG,OAAO,CAAC;AAgHZ;;;;;;;;GAQG;AACH,MAAa,UAAU;IA0DrB,YACS,SAAoB;IAC3B;;;;;;;;;;;;OAYG;IACH,QAAc,EACE,IAAW,EAC3B,eAAgC;QAhBzB,cAAS,GAAT,SAAS,CAAW;QAeX,SAAI,GAAJ,IAAI,CAAO;QA3D7B;;;;WAIG;QACI,gBAAW,GAChB,IAAI,CAAC;QAEP;;;;;;WAMG;QACI,SAAI,GAIP,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAExB;;WAEG;QACI,UAAK,GAAsB,IAAI,CAAC;QAChC,mBAAc,GAAG,KAAK,CAAC;QAW9B;;WAEG;QACI,wBAAmB,GAEpB,EAAE,CAAC;QAqBP,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe;YAClB,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAErE,qDAAqD;QACrD,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,oBAAoB,CAAC;IACvD,CAAC;IAEM,KAAK;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;qBACpD,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE;oBACxB,OAAO,IAAI,SAAS,KAClB,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GACzD,GACE,GAAG,CAAC,IAAI,KAAK,YAAY;wBACvB,CAAC,CAAC,cAAc,IAAI,CAAC,QAAQ,GAAG;wBAChC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAClD,EAAE,CAAC;gBACL,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAgB,CAAC;qBAChE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;oBAC9B,OAAO,KAAK,QAAQ,KAAK,UAAU;yBAChC,KAAK,EAAE;yBACP,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC9B,CAAC,CAAC;qBACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClB,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,OACvB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAC9B,GAAG,IAAI,CAAC,KAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;YAClD,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,OAAO,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,GACjC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EACvD,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAC/C,CAAC;IAED,QAAQ,CACN,IAA8B,EAC9B,GAAkB,EAClB,KAAyB;QAEzB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,IAAI,cAAK,EAAE,CAAC;gBACV,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CACb,uFAAuF,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CACxH,CAAC;gBACJ,CAAC;gBACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CACb,wFAAwF,IAAI,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAC1H,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CACb,qFAAqF,IAAI,CAAC,IAAI,CAAC,IAAI,yDAAyD,IAAI,IAAI,CACrK,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,EAAE,CACP,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAC3C,+CAA+C,CAChD,CAAC;gBACF,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CACb,0FAA0F,GAAG,GAAG,CACjG,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC;gBACb,KAAK,CAAC,IAAI,KAAK,YAAY;oBACzB,CAAC,CAAC;wBACE,GAAG,KAAK;wBACR,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;qBAC3C;oBACH,CAAC,CAAC,KAAK,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACtC,IAAI,cAAK,EAAE,CAAC;gBACV,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CACb,2FAA2F,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAC5H,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,EAAE,+BAA+B,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;gBAC9B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC5C,IAAI,cAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,CACP,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAC/C,2HAA2H,CAC5H,CAAC;gBACF,MAAM,CAAC,WAAW,CAChB,GAAG,EACH,IAAI,EACJ,0HAA0H,CAC3H,CAAC;gBACF,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,IAAI,KAAK,YAAY,EAC3B,gHAAgH,CACjH,CAAC;gBACF,MAAM,CAAC,EAAE,CACP,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EACvC,uHAAuH,CACxH,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,eAAgB,CAAC,IAAK,CAAC,IAAI,CAAC,GAC/B,KACD,CAAC,UAA8C,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,0GAA0G,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAC5H,CAAC;QACJ,CAAC;IACH,CAAC;IAED,aAAa,CAAC,aAAa,IAAI,GAAG,EAAa;QAC7C,qCAAqC;QACrC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;YACJ,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC1C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,uBAAuB;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,mDAAmD;IACnD,OAAO,CAEL,KAAkB;IAClB,wEAAwE;IACxE,sEAAsE;IACtE,yCAAyC;IACzC,YAA4C,EAC5C,OAAe,EACf,YAAoB,EACpB,mBAAyB,EACzB,gBAAsC;QAEtC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,mDAAmD;IACnD,aAAa,CAEX,KAAkB;IAClB,wEAAwE;IACxE,sEAAsE;IACtE,yCAAyC;IACzC,YAA4C,EAC5C,OAAe,EACf,YAAoB,EACpB,mBAAyB,EACzB,gBAAsC;QAEtC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,QAAQ;QACN,2EAA2E;QAC3E,sEAAsE;QACtE,2EAA2E;QAC3E,sEAAsE;QACtE,uEAAuE;QACvE,sBAAsB;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,kBAAkB,CAC3D,IAAI,CAAC,QAAQ,CAAC,EAAE,CACjB,CAAC;QACF,IACE,KAAK,YAAY,qBAAU;YAC3B,KAAK,CAAC,QAAQ,KAAK,SAAS;YAC5B,KAAK,CAAC,sBAAsB,KAAK,IAAI;YACrC,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAA,8BAAmB,EAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,EAC1E,CAAC;YACD,MAAM,iBAAiB,GAEN,KAAK,CAAC,gBAAyB,CAAC,4BAAgB,CAAC,CAAC;YACnE,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACpC,aAAa;gBACb,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjD,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,qBAAqB,CAC5D,IAAI,EACJ,OAAO,CACR,CAAC;gBACF,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,iBAAiB,CAAC;gBAC3C,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;oBACxC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;gBACxB,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,QAAQ;QACN,qEAAqE;QACrE,0EAA0E;QAC1E,kCAAkC;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;QACxC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC5B,IACE,KAAK,KAAK,WAAW;gBACrB,KAAK,CAAC,sBAAsB,KAAK,WAAW;gBAC5C,IAAA,8BAAmB,EAAC,KAAK,EAAE,WAAW,CAAC,EACvC,CAAC;gBACD,kDAAkD;gBACjD,IAAI,CAAC,cAA8B,GAAG,IAAI,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;gBAC5B,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC;gBACxC,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;gBAC5B,IACE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;oBACvD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,aAAa,CAAC,SAAS,EAC3D,CAAC;oBACD,eAAe;oBACf,IAAI,CAAC,aAAa,GAAG,wBAAwB,CAAC;gBAChD,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,EAAE,CAAC;oBACpE,IAAI,CAAC,aAAa,GAAG,qBAAqB,CAAC;gBAC7C,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;oBACtE,IAAI,CAAC,aAAa,GAAG,uBAAuB,CAAC;gBAC/C,CAAC;qBAAM,IACL,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,EAC5D,CAAC;oBACD,eAAe;oBACf,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACN,6CAA6C;oBAC7C,IAAI,CAAC,aAAa,GAAG,kBAAkB,CAAC;gBAC1C,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC;gBACrC,IAAI,CAAC,aAAa,GAAG,2BAA2B,CAAC;gBACjD,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC;gBACnC,IAAI,CAAC,aAAa,GAAG,yBAAyB,CAAC;gBAC/C,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;gBACJ,CAAC;gBACD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC3C,IAAI,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBAChD,OAAO,oBAAoB,CAAC,eAAe,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC/D,MAAM,MAAM,GAAG,oBAAoB,CAAC,eAAe,CAAC;oBACpD,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,MAAM,IAAI,KAAK,CACb,4HAA4H,IAAI,EAAE,CACnI,CAAC;oBACJ,CAAC;oBACD,oBAAoB,GAAG,MAAM,CAAC;gBAChC,CAAC;gBACD,MAAM,SAAS,GACb,oBAAoB,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU;oBAC/C,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC;gBAEvC,IAAI,cAAc,EAAE,CAAC;oBACnB,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,CAAC,OAAO,GAAG,mCAAmC,CAAC;wBACnD,IAAI,CAAC,aAAa,GAAG,yCAAyC,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,OAAO,GAAG,yBAAyB,CAAC;wBACzC,IAAI,CAAC,aAAa,GAAG,+BAA+B,CAAC;oBACvD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,SAAS,EAAE,CAAC;wBACd,IAAI,CAAC,OAAO,GAAG,gCAAgC,CAAC;wBAChD,IAAI,CAAC,aAAa,GAAG,sCAAsC,CAAC;oBAC9D,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,OAAO,GAAG,sBAAsB,CAAC;wBACtC,IAAI,CAAC,aAAa,GAAG,4BAA4B,CAAC;oBACpD,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC;YACZ,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAiD,CAAC;gBACpE,MAAM,gBAAgB,GAElB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxB,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5D,gBAAgB,CAAC,WAAW,CAAC,GAAG;wBAC9B,SAAS,EACP,IAAI,CAAC,IAAI,KAAK,YAAY;4BACxB,CAAC,CAAC,YAAY;4BACd,CAAC,CAAC,IAAI,CAAC,SAAS;gCACd,CAAC,CAAC,aAAa;gCACf,CAAC,CAAC,aAAa;wBACrB,UAAU,EACR,IAAI,CAAC,IAAI,KAAK,YAAY;4BAC1B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;qBACrD,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAC/B,IAAI,CAAC,QAAQ,EACb,gBAAgB,EAChB,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EACnC,IAAI,CAAC,IAAI,KAAK,MAAM,EACpB,KAAK,CACN,CAAC;gBACF,IAAI,CAAC,aAAa,GAAG,kBAAkB,CACrC,IAAI,CAAC,QAAQ,EACb,gBAAgB,EAChB,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EACnC,IAAI,CAAC,IAAI,KAAK,MAAM,EACpB,IAAI,CACL,CAAC;gBACF,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,KAAK,GAAU,IAAI,CAAC,IAAI,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,iHAAiH,IAAA,oBAAO,EACtH,KAAK,CACN,GAAG,CACL,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA9cD,gCA8cC;AAED,SAAgB,WAAW,CACzB,KAAY,EACZ,eAAgC,EAChC,IAAoC;IAEpC,8BAA8B;IAC9B,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,YAAY,CACrB,KAAK,CAAC,OAAO,EACb,eAAe,CAAC,IAAI,EACpB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,CAAC,aAAa,IAAI,KAAK,EAC5B,KAAK,CAAC,UAAU,CACjB,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,YAAY,CACrB,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,EAC/B,eAAe,CAAC,IAAI,EACpB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAC1B,eAAgC,EAChC,IAAkC;IAElC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;IAC5D,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,OAAO,IAAI,YAAY,CACrB,kFAAkF,EAClF,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,YAAY,CACrB,6CAA6C,cAAc,IAAI,SAAS,GAAG,EAC3E,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,sBAAsB,CACpC,SAAoB,EACpB,UAA6B,EAC7B,MAAc,EACd,WAAmB,EACnB,aAA4B,IAAI;IAEhC,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/B,CAAC;IACD,IACE,CAAC,UAAU,IAAI,IAAI,CAAC;QACpB,CAAC,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,EACxD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,oHAAoH,CACrH,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,IAAI,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QACzD,8BAA8B;QAC9B,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,OAAO,GAAqB,SAAS,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;QAClC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACd,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,aAAa,GAAG,MAAM,CAAC;IAC3B,IAAI,YAAY,GAAG,WAAW,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;;;;;;;WASG;QACH,IAAI,UAAU,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CACb,gHAAgH,CACjH,CAAC;YACJ,CAAC;YACD,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;YAC7B,YAAY,GAAG,GAAG,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CACb,sGAAsG,IAAA,oBAAO,EAC3G,GAAG,CACJ,EAAE,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,kGAAkG,UAAU,kDAAkD,GAAG,CAAC,MAAM,GAAG,CAC5K,CAAC;YACJ,CAAC;YACD,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;YAC7B,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC;AA8DD,SAAS,YAAY,CAGnB,MAA6C;IAC7C,MAAM,EACJ,QAAQ,GAAG,IAAI,EACf,KAAK,EACL,QAAQ,EACR,SAAS,EACT,gBAAgB,GAAG,KAAK,GACzB,GAAG,MAAM,CAAC;IACX,MAAM,EAAE,GAAqD,UAE3D,IAAiB,EACjB,WAAmC,EACnC,MAAc,EACd,WAAmB,EACnB,qBAAqB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EACxE,kBAAkB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAE3E,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,uBAAuB,GAAG,sBAAsB,CACpD,IAAI,CAAC,cAAc,CAAC,SAAS,EAC7B,IAAI,EACJ,MAAM,EACN,WAAW,CACZ,CAAC;YACF,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,GAC7C,uBAAuB,CAAC;gBAC1B,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBAC9D,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAA,oBAAS,EACtE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAC5B,oBAAoB,MAAM,EAAE,CAC9B,CAAC;gBACJ,CAAC;gBACD,MAAM,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;gBACnD,IAAI,OAAO,GAAG,0BAAU,EAAE,CAAC;oBACzB,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC;oBAC3C,MAAM,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,eAAe,GAAG,0BAAU,EAAE,CAAC;YACjC,MAAM,WAAW,CACf,kBAAkB,EAClB,IAAI,CAAC,eAAe,EACpB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CACrB,CAAC;QACJ,CAAC;QACD,MAAM,eAAe,GACnB,IAAI,CAAC,WAAW,KAAK,IAAI;YACvB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,eAAe,CAAC;YACvD,CAAC,CAAC,kBAAkB,CAAC;QACzB,MAAM,WAAW,GAAG,QAAQ,EAAE,IAAI,CAChC,IAAuB,EACvB,eAAe,CAChB,CAAC;QACF,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,WAAkB,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,IAAI,eAAe,IAAI,IAAI;gBACzB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAEnB,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CACf,IAAuB,EACvB,eAAe,EACf,IAAI,EACJ,WAAW,EACX,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,eAAe,CAChB,CAAC;IACJ,CAAQ,CAAC;IACT,EAAE,CAAC,WAAW,GAAG,aAAa,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;IACtE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAgB,EAChB,eAAgC,EAChC,eAA2B,EAC3B,SAAkB,EAClB,QAAiB,EACjB,WAA0B,EAC1B,gBAA+B,EAC/B,MAAc,EACd,WAAmB,EACnB,WAA2C,EAC3C,gBAAwB,EACxB,IAAiB,EACjB,kBAAuB,EACvB,eAAoC;IAEpC,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,CAAC,oBAAoB,CAAC;IACnE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,4BAA4B;QAC5B,MAAM,uBAAuB,GAAG,sBAAsB,CACpD,WAAW,CAAC,SAAS,EACrB,IAAI,EACJ,MAAM,EACN,WAAW,CACZ,CAAC;QACF,IAAI,uBAAuB,EAAE,CAAC;YAC5B,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,GAAG,uBAAuB,CAAC;YAC1E,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAA,oBAAS,EACtE,MAAM,CAAC,WAAW,CAAC,CACpB,oBAAoB,MAAM,EAAE,CAC9B,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YACjD,IAAI,KAAK,GAAG,0BAAU,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,WAAW,CACnB,EAAE,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAC5B,eAAe,EACf,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CACrB,CAAC;gBACF,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,CAAC,CAAC;gBACV,CAAC;qBAAM,CAAC;oBACN,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBACxC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;oBACrC,kBAAkB,CAChB,CAAC,EACD,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,UAAU,CACX,CAAC;oBACF,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,yEAAyE;IACzE,IAAI,SAAS,EAAE,CAAC;QACd,yBAAyB;QACzB,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM;QACR,CAAC;aAAM,CAAC;YACN,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CACzE,IAAI,EACJ,WAAW,EACX,WAAW,EACX,gBAAiB;QACjB,sFAAsF;QACtF,eAAe,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;YACxC,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,SAAS,EACb,eAAe,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CACzE,CAAC;QACF,IAAI,WAAW,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,YAAY,CAAC,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,mCAAmC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC;YACH,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBAClD,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAC5D,IAAI,EACJ,WAAW,EACX,WAAW,EACX,gBAAiB;gBACjB,sFAAsF;gBACtF,eAAe,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;oBACxC,CAAC,CAAC,kBAAkB;oBACpB,CAAC,CAAC,SAAS,EACb,eAAe,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ;oBACxC,CAAC,CAAC,eAAe;oBACjB,CAAC,CAAC,SAAS,CACd,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,kBAAkB,CAChB,CAAC,EACD,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,IAAI,EACJ,WAAW,EACX,UAAU,CACX,CAAC;YACF,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,CAAQ,EACR,eAAgC,EAChC,WAA2C,EAC3C,gBAAwB,EACxB,IAAiB,EACjB,WAAmB,EACnB,UAAkB;IAElB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,GAAG,gBAAgB,CAAC;IACvD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAChB,WAAsC,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,YAAY,GAAG,YAAY,CAAC;IAChC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI;IACjB,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,KAAK;CAChB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,YAAY,CAAC;IACtC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM;IACnB,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH;;;;;;;;;MASM;AACN,MAAM,YAAY,GAAG,YAAY,CAA4B;IAC3D,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAc,CAAC;IACvE,CAAC;IACD,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,KAAK;CAChB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,YAAY,CAA2B;IAChE,KAAK,CAAC,eAAe;QACnB,OAAO,IAAA,yBAAa,EACjB,IAAI,CAAC,IAA2B,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CACzE,CAAC;IACJ,CAAC;IACD,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,YAAY,CAA2B;IACvE,KAAK,CAAC,eAAe;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC7D,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACzC,CAAC;IACD,SAAS,EAAE,aAAa;IACxB,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,KAAK;IACvB,QAAQ,CAAC,eAAe;QACtB,IAAI,eAAe,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QAC5C,IAAI,eAAe,KAAK,KAAK;YAAE,OAAO,OAAO,CAAC;IAChD,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,YAAY,CAA2B;IACnE,KAAK,CAAC,eAAe;QACnB,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/D,CAAC;IACD,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,KAAK;IACvB,gDAAgD;IAChD,QAAQ,CAAC,eAAe;QACtB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;YAC9C,OAAO,EAAE,GAAG,eAAe,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,YAAY,CAA2B;IACrE,KAAK,CAAC,eAAe;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,KAAK;IACvB,QAAQ,CAAC,eAAe;QACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACrC,OAAO,EAAE,GAAG,eAAe,CAAC;QAC9B,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,YAAY,CAA2B;IACtE,KAAK,CAAC,eAAe;QACnB,OAAO,IAAA,2BAAe,EACpB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAW,CAC3D,CAAC;IACJ,CAAC;IACD,SAAS,EAAE,YAAY;IACvB,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,KAAK;IACvB,QAAQ,CAAC,eAAe;QACtB,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,IAAA,2BAAe,EAAC,eAAe,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,+EAA+E;AAC/E,2EAA2E;AAC3E,8EAA8E;AAC9E,SAAS;AAET,SAAS,uBAAuB,CAC9B,QAAmB;IAEnB,OAAO,YAAY,CAAC;QAClB,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW;YAC3D,IAAI,cAAK,EAAE,CAAC;gBACV,IAAI,CAAC,IAAA,kCAAiB,EAAC,eAAe,CAAC,EAAE,CAAC;oBACxC,MAAM,WAAW,CACf,IAAI,KAAK,CACP,uFAAuF,CACxF,EACD,IAAI,CAAC,eAAe,EACpB,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CACrB,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,MAAM,QAAQ,GAAG,eAAe,CAAC,8BAAc,CAAC,CAAC;YACjD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAgB,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,cAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,CACP,QAAQ,EACR,yGAAyG,CAC1G,CAAC;gBACF,MAAM,CAAC,EAAE,CACP,eAAe,EACf,8GAA8G,QAAQ,WAAW,MAAM,CAAC,SAAS,GAAG,CACrJ,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAClE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC9B,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAC5D,IAAI,EACJ,WAAW,EACX,WAAW,CAAC,MAAM,EAClB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAW,CACI,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,sBAAsB,CAC9B,eAAe,CAAC,SAAS,EACzB,IAAI,EACJ,MAAM,EACN,WAAW,CACZ,CAAC;gBACF,IAAI,CAAC,CAAC,EAAE,CAAC;oBACP,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBAC1C,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAC5D,IAAI,EACJ,WAAW,EACX,WAAW,EACX,gBAAgB,CAC8B,CAAC;YACnD,CAAC;QACH,CAAC;QACD,SAAS,EAAE,aAAa;QACxB,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC3D,MAAM,yBAAyB,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAEhE,SAAS,iBAAiB,CACxB,cAAuB,EACvB,SAAkB,EAClB,QAAmB;IAEnB,OAAO,YAAY,CAAC;QAClB,KAAK,CACH,eAAe,EACf,IAAI,EACJ,WAAW,EACX,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,eAAe;YAEf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBACpC,OAAO,CAAC,IAAI,CACV,0BAA0B,IAAA,oBAAO,EAC/B,eAAe,CAChB,2BAA2B,CAC7B,CAAC;gBACF,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAEnB,CAAC;YAChB,CAAC;YAED,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAI,6BAA6B,CACjG,CAAC;YACJ,CAAC;YACD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;YACnC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;YACjC,IAAI,MAA0B,CAAC;YAC/B,IAAI,IAAuB,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACZ,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,IAAI,CAAC;gBAChB,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,EAAE,CAAC;gBACZ,CAAC;gBACD,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAElD,kCAAkC;gBAClC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAClE,IAAI,WAA0B,EAC5B,gBAA+B,EAC/B,MAA4B,CAAC;gBAC/B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;oBACjC,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAa,CAAC;gBACxD,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;wBAC9B,gBAAgB,GAAG,MAAO,CAAC,CAAC,CAAC,CAAC;oBAChC,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,GAAG,sBAAsB,CAC9B,eAAe,CAAC,SAAS,EACzB,IAAI,EACJ,MAAM,EACN,WAAW,EACX,CAAC,CACF,CAAC;wBACF,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;4BACf,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;wBACtC,CAAC;6BAAM,CAAC;4BACN,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAAC;wBACxC,CAAC;oBACH,CAAC;oBAED,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBAClC,IAAI,QAAQ,EAAE,CAAC;wBACb,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;4BACV,MAAO,IAAI,GAAG,CAAC;wBACjB,CAAC;oBACH,CAAC;oBACD,MAAM,GAAG,GAAG,gBAAgB,CAC1B,IAAI,EACJ,IAAI,CAAC,eAAe,EACpB,eAAe,EACf,cAAc,EACd,QAAQ,EACR,WAAY,EACZ,gBAAiB,EACjB,MAAM,EACN,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,IAAI,EACJ,kBAAkB,EAClB,eAAe,CAChB,CAAC;oBACF,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAO,IAAI,GAAG,CAAC;oBACjB,CAAC;yBAAM,CAAC;wBACN,IAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;oBACjB,CAAC;gBACH,CAAC;gBAED,WAAW,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBACtC,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAO,IAAI,GAAG,CAAC;gBACjB,CAAC;YACH,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,MAAM,GAAI,eAAuB,CAAC,4BAAY,CAEvC,CAAC;gBACd,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,WAAW,GACf,eAAe,CAAC,SACjB,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;oBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;wBAChB,IAAI;wBACJ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC1B,MAAM;wBACN,WAAW;wBACX,UAAU,EAAE,eAAe;wBAC3B,KAAK,EACH,WAAW,IAAI,IAAI;4BACjB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE;4BAC7C,CAAC,CAAC,SAAS;wBACf,MAAM;wBACN,UAAU,EAAE,eAAe,CAAC,MAAM;qBACnC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAEnB,CAAC;QAChB,CAAC;QACD,SAAS,EAAE,QAAQ,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GACjD,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAC1B,EAAE;QACF,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AACD,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACtE,MAAM,gCAAgC,GAAG,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC/E,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACxE,MAAM,mCAAmC,GAAG,iBAAiB,CAC3D,IAAI,EACJ,IAAI,EACJ,KAAK,CACN,CAAC;AACF,MAAM,4BAA4B,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3E,MAAM,sCAAsC,GAAG,iBAAiB,CAC9D,KAAK,EACL,IAAI,EACJ,IAAI,CACL,CAAC;AACF,MAAM,+BAA+B,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7E,MAAM,yCAAyC,GAAG,iBAAiB,CACjE,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,CAAC;AAEF;;;;;;;GAOG;AACH,SAAS,UAAU,CACjB,IAAiB,EACjB,UAAmD,EACnD,WAA2C,EAC3C,QAAmB;IAEnB,MAAM,EAAE,eAAe,EAAE,GAAG,UAAU,CAAC;IACvC,MAAM,EACJ,KAAK,EAAE,QAAQ,EACf,kCAAkC,EAClC,aAAa,GACd,GAAG,UAAU,CAAC,IAAmC,CAAC;IACnD,MAAM,KAAK,GAAc;QACvB,GAAG,QAAQ;QACX,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;KACvC,CAAC;IACF,MAAM,QAAQ,GAAiB;QAC7B,WAAW,EAAE;YACX;gBACE,IAAI,EAAE,IAAI,CAAC,oBAAoB;gBAC/B,SAAS,EAAE,iBAAiB,CAAC,KAAK;gBAClC,YAAY,EAAE;oBACZ,IAAI,EAAE,IAAI,CAAC,aAAa;oBACxB,UAAU,EAAE,CAAC,KAAK,CAAC;iBACpB;gBACD,mBAAmB,EACjB,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CACtE,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CACrD;aACJ;YACD,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC;SAC/D;QAED,IAAI,EAAE,IAAI,CAAC,QAAQ;KACpB,CAAC;IACF,MAAM,cAAc,GAAwB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,KAAK,MAAM,YAAY,IAAI,mBAAmB,EAAE,CAAC;QAC/C,cAAc,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC9D,CAAC;IACD,wEAAwE;IACxE,0EAA0E;IAC1E,SAAS;IACT,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,kCAAkC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CACL,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CACI,CAAC;IACnD,CAAC;IACD,MAAM,aAAa,GAAG,WAAW,CAAC;QAChC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM;QACjD,QAAQ;QACR,cAAc;KACf,CAAC,CAAC;IACH,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvC,yEAAyE;QACzE,qEAAqE;QACrE,wEAAwE;QACxE,iEAAiE;QACjE,2EAA2E;QAC3E,+DAA+D;QAE/D,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC;QACjC,MAAM,IAAI,YAAY,CACpB,uBAAuB,EACvB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EACpB,IAAI,EACJ,IAAI,CACL,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,aAAa,CAAC,IAAK,CAAC,CAAc,CAAC;IAClD,kCAAkC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAErC,CAAC;AAChB,CAAC;AAED,MAAM,qBAAqB,GAAG,YAAY,CAAqC;IAC7E,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW;QACvC,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IACD,SAAS,EAAE,eAAe;IAC1B,QAAQ,EAAE,KAAK;IACf,gBAAgB,EAAE,IAAI;CACvB,CAAC,CAAC;AACH,MAAM,2BAA2B,GAAG,YAAY,CAG9C;IACA,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW;QACvC,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,SAAS,EAAE,eAAe;IAC1B,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,IAAI;CACvB,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAE7C,SAAS,kBAAkB,CACzB,QAAgB,EAChB,UAEC,EACD,sBAA+B;AAC/B,6BAA6B;AAC7B,MAAe,EACf,QAAmB;IAEnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,iDAAiD,CAC/E,CAAC;IACJ,CAAC;IACD,IAAI,cAAK,EAAE,CAAC;QACV,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,mGAAmG,CACpG,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CACjD,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,oEAAoE;QACpE,oEAAoE;QACpE,UAAU;QACV,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACjC,sEAAsE;YACtE,MAAM,IAAI,KAAK,CACb,eAAe,WAAW,iDAAiD,CAC5E,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;QACnC,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,OAAO;oBACL,UAAU,EAAE,IAAa;oBACzB,QAAQ;oBACR,WAAW;oBACX,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI;iBACvD,CAAC;YACb,CAAC;YACD,KAAK,aAAa,CAAC;YACnB,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,OAAO;oBACL,UAAU,EAAE,KAAc;oBAC1B,QAAQ;oBACR,WAAW;oBACX,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC,CAAC,IAAI;oBACnD,UAAU;oBACV,SAAS,EAAE,SAAS,KAAK,aAAa;iBAC9B,CAAC;YACb,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,KAAK,GAAU,SAAS,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,oFAAoF,KAAK,EAAE,CAC5F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;IACF,OAAO,YAAY,CAAkC;QACnD,KAAK,CACH,eAAe,EACf,IAAI,EACJ,WAAW,EACX,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,eAAe;YAEf,IAAI,MAAM,GAAuB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5D,MAAM,GAAG,GAA0C,QAAQ;gBACzD,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEnD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;gBAClC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAO,IAAI,GAAG,CAAC;gBACjB,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;gBACvC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;oBACtB,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAO,IAAI,MAAM,CAAC,WAAW,CAAC;oBAChC,CAAC;yBAAM,CAAC;wBACN,GAAI,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;oBAC/B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAAC;oBAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAiC,CAAC;oBAC/D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;wBACtB,MAAM,GAAG,GAAG,gBAAgB,CAC1B,IAAI,EACJ,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,UAAU,EACf,MAAM,CAAC,SAAS,EAChB,QAAQ,EACR,MAAM,EACN,WAAW,EACX,MAAM,EACN,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,IAAI,EACJ,kBAAkB,EAClB,eAAe,CAChB,CAAC;wBACF,IAAI,QAAQ,EAAE,CAAC;4BACb,MAAO,IAAI,MAAM,CAAC,YAAY,CAAC;4BAC/B,MAAO,IAAI,GAAG,CAAC;wBACjB,CAAC;6BAAM,CAAC;4BACN,GAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;wBAC1B,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;wBAClE,IAAI,WAAW,EAAE,gBAAgB,CAAC;wBAClC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;4BAC9B,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC;4BACjC,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;wBACtD,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,GAAG,sBAAsB,CAC9B,IAAI,CAAC,UAAU,CAAC,SAAS,EACzB,IAAI,EACJ,MAAM,EACN,WAAW,CACZ,CAAC;4BACF,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gCACf,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;4BACtC,CAAC;iCAAM,CAAC;gCACN,WAAW,GAAG,gBAAgB,GAAG,IAAI,CAAC;4BACxC,CAAC;wBACH,CAAC;wBACD,MAAM,GAAG,GAAG,gBAAgB,CAC1B,IAAI,EACJ,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,UAAU,EACf,MAAM,CAAC,SAAS,EAChB,QAAQ,EACR,WAAW,EACX,gBAA0B,EAC1B,MAAM,EACN,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,IAAI,EACJ,kBAAkB,EAClB,eAAe,CAChB,CAAC;wBACF,IAAI,QAAQ,EAAE,CAAC;4BACb,MAAO,IAAI,MAAM,CAAC,YAAY,CAAC;4BAC/B,MAAO,IAAI,GAAG,CAAC;wBACjB,CAAC;6BAAM,CAAC;4BACN,GAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;wBAC1B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,WAAW,CAAC,MAAM,GAAG,gBAAgB,CAAC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAO,IAAI,GAAG,CAAC;YACjB,CAAC;YACD,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,qDAAqD;gBACrD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;wBACd,IAAI;wBACJ,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC1B,MAAM;wBACN,WAAW;wBACX,UAAU,EAAE,KAAK;wBACjB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAElB,CAAC;QAChB,CAAC;QACD,SAAS,EAAE,QAAQ;QACnB,QAAQ;QACR,gBAAgB,EAAE,MAAM;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,aAAG,CAA8B;IACrD,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoD,CAAC;AAEhF,SAAS,kBAAkB,CACzB,IAAoC,EACpC,QAAa,EACb,QAA2C;IAE3C,MAAM,SAAS,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnB,OAAO;IACT,CAAC;IACD,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACpC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAS,EAAE,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,mBAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,UAAU,GAAG,mBAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzC,mBAAE,CAAC,UAAU,CACX,IAAA,mBAAE,EAAA,mBAAmB,UAAU,IAC7B,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAA,mBAAE,EAAA,OAAO,mBAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAE,CAAC,KAC5D,GAAG,EACH,CAAC,EAAE,EAAE,EAAE;QACL,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7B,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/StepTracker.d.ts b/grafast/grafast/dist/engine/StepTracker.d.ts new file mode 100644 index 0000000000..73b594dc37 --- /dev/null +++ b/grafast/grafast/dist/engine/StepTracker.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=StepTracker.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/StepTracker.d.ts.map b/grafast/grafast/dist/engine/StepTracker.d.ts.map new file mode 100644 index 0000000000..77b1788055 --- /dev/null +++ b/grafast/grafast/dist/engine/StepTracker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"StepTracker.d.ts","sourceRoot":"","sources":["../../src/engine/StepTracker.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/StepTracker.js b/grafast/grafast/dist/engine/StepTracker.js new file mode 100644 index 0000000000..313190cb18 --- /dev/null +++ b/grafast/grafast/dist/engine/StepTracker.js @@ -0,0 +1,598 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.StepTracker = void 0; +const dev_js_1 = require("../dev.js"); +const inspect_js_1 = require("../inspect.js"); +const interfaces_js_1 = require("../interfaces.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +const lock_js_1 = require("./lock.js"); +/** + * This class keeps track of all of our steps, and the dependencies between + * steps and other steps, layer plans and steps, and output plans and steps. + * + * When a step is replaced by another step, all the dependencies are updated + * such that the replaced step simply evaporates. + * + * @internal + */ +class StepTracker { + constructor(operationPlan) { + this.operationPlan = operationPlan; + /** @internal */ + this.stepCount = 0; + /** @internal */ + this.lockedStepCount = 0; + /** @internal */ + this.activeSteps = new Set(); + /** @internal */ + this.stepById = []; + /** @internal */ + this.aliasesById = []; + /** @internal */ + this.stepsWithNoDependenciesByConstructor = new Map(); + /** @internal */ + this.internalDependencies = new Set(); + /** @internal */ + this.outputPlansByRootStep = new Map(); + /** @internal */ + this.layerPlansByRootStep = new Map(); + /** @internal */ + this.layerPlansByParentStep = new Map(); + /** @internal */ + this.layerPlans = []; + /** + * All the OutputPlans that were created to allow a more efficient + * walkOutputPlans implementation. + * + * @internal + */ + this.allOutputPlans = []; + this.nextStepIdToDeduplicate = 0; + } + newStepsSince(oldStepCount) { + return this.stepById.slice(oldStepCount); + } + forbid(key) { + this[key] = () => { + throw new Error(`StepTracker.${key}(...) is forbidden after 'finalize' phase`); + }; + } + /** Called when OperationPlan enters finalize phase. */ + finalizeSteps() { + this.forbid("addStep"); + this.forbid("addLayerPlan"); + this.forbid("addOutputPlan"); + this.forbid("deleteLayerPlan"); + this.forbid("addStepDependency"); + this.forbid("setLayerPlanRootStep"); + this.forbid("replaceStep"); + } + /** Called when OperationPlan is about to finalize the output plans. */ + finalizeOutputPlans() { + this.forbid("setOutputPlanRootStep"); + } + addStep($step) { + const stepId = this.stepCount++; + this.activeSteps.add($step); + const ctor = $step.constructor; + let stepsWithNoDependencies = this.stepsWithNoDependenciesByConstructor.get(ctor); + if (!stepsWithNoDependencies) { + stepsWithNoDependencies ??= new Set(); + this.stepsWithNoDependenciesByConstructor.set(ctor, stepsWithNoDependencies); + } + stepsWithNoDependencies.add($step); + this.stepById[stepId] = $step; + this.aliasesById[stepId] = undefined; + this.addStepToItsLayerPlan($step); + return stepId; + } + /** + * @internal + */ + addLayerPlan(layerPlan) { + const id = this.layerPlans.push(layerPlan) - 1; + switch (layerPlan.reason.type) { + case "root": + case "subscription": + case "mutationField": + case "defer": { + break; + } + case "nullableBoundary": + case "listItem": + case "polymorphic": { + const store = this.layerPlansByParentStep.get(layerPlan.reason.parentStep); + if (store !== undefined) { + store.add(layerPlan); + } + else { + const layerPlans = new Set(); + layerPlans.add(layerPlan); + this.layerPlansByParentStep.set(layerPlan.reason.parentStep, layerPlans); + } + break; + } + case "subroutine": { + const parent = layerPlan.reason.parentStep; + if (parent[interfaces_js_1.$$subroutine] !== null) { + throw new Error(`Steps may currently only have one subroutine. If you have need for a step with multiple subroutines, please get in touch.`); + } + parent[interfaces_js_1.$$subroutine] = + layerPlan; + break; + } + default: { + const never = layerPlan.reason; + throw new Error(`Unexpected layerPlan reason ${never.type}`); + } + } + return id; + } + /** + * @internal + */ + addOutputPlan(outputPlan) { + if (dev_js_1.isDev && !this.activeSteps.has(outputPlan.rootStep)) { + throw new Error(`GrafastInternalError<84485250-c4f3-4175-ab0c-360e073fa69f>: Root step '${outputPlan.rootStep}' is not active; perhaps it was replaced (replacement: ${this.getStepById(outputPlan.rootStep.id)})`); + } + this.allOutputPlans.push(outputPlan); + const store = this.outputPlansByRootStep.get(outputPlan.rootStep); + if (store !== undefined) { + store.add(outputPlan); + } + else { + const outputPlans = new Set(); + outputPlans.add(outputPlan); + this.outputPlansByRootStep.set(outputPlan.rootStep, outputPlans); + } + } + /** + * HIGHLY EXPERIMENTAL! + * + * @internal + */ + deleteLayerPlan(layerPlan) { + if (dev_js_1.isDev) { + if (layerPlan.children.length > 0) { + throw new Error("This layer plan has children... should we really be deleting it?!"); + } + this.allOutputPlans.forEach((o) => { + if (o.layerPlan === layerPlan) { + throw new Error("An output plan depends on this layer plan... should we really be deleting it?!"); + } + }); + } + this.layerPlans[layerPlan.id] = null; + // Remove layerPlan from its parent + if (layerPlan.parentLayerPlan !== null) { + const idx = layerPlan.parentLayerPlan.children.indexOf(layerPlan); + if (idx >= 0) { + layerPlan.parentLayerPlan.children.splice(idx, 1); + } + } + // Remove references + const $root = layerPlan.rootStep; + if ($root) { + this.layerPlansByRootStep.get($root).delete(layerPlan); + } + if (layerPlan.reason.type !== "subroutine") { + const $parent = "parentStep" in layerPlan.reason ? layerPlan.reason.parentStep : null; + if ($parent) { + this.layerPlansByParentStep + .get($parent) + .delete(layerPlan); + } + } + // Remove all plans in this layer + const handled = new Set(); + const handle = (step) => { + if (handled.has(step)) + return; + handled.add(step); + // Handle dependents first + for (const dependent of step.dependents) { + if (dependent.step.layerPlan === layerPlan) { + handle(dependent.step); + } + } + this.eradicate(step); + }; + for (const step of this.activeSteps) { + if (step.layerPlan === layerPlan) { + handle(step); + } + } + } + getStepById(id, allowUnset = false) { + const step = this.stepById[id]; + if (!step && !allowUnset) { + throw new Error(`Illegal step access? Step with id ${id} doesn't exist`); + } + if (dev_js_1.isDev) { + if (step && !this.activeSteps.has(step)) { + throw new Error(`${step} is not active, but we retrieved it from stepTracker.getStepById(${id}, ${allowUnset})`); + } + } + return step; + } + addStepDependency(raw$dependent, options) { + const $dependent = (0, utils_js_1.sudo)(raw$dependent); + const $dependency = (0, utils_js_1.sudo)(options.step); + if (!this.activeSteps.has($dependent)) { + throw new Error(`Cannot add ${$dependency} as a dependency of ${$dependent}; the latter is deleted!`); + } + if (!this.activeSteps.has($dependency)) { + throw new Error(`Cannot add ${$dependency} as a dependency of ${$dependent}; the former is deleted!`); + } + if ($dependent.isFinalized) { + throw new Error("You cannot add a dependency after the step is finalized."); + } + if (!($dependency instanceof step_js_1.Step)) { + throw new Error(`Error occurred when adding dependency for '${$dependent}', value passed was not a step, it was '${(0, inspect_js_1.inspect)($dependency)}'`); + } + if (dev_js_1.isDev) { + // Check that we can actually add this as a dependency + if (!$dependent.layerPlan.ancestry.includes($dependency.layerPlan)) { + throw new Error( + //console.error( + // This is not a GrafastInternalError + `Attempted to add '${$dependency}' (${$dependency.layerPlan}) as a dependency of '${$dependent}' (${$dependent.layerPlan}), but we cannot because that LayerPlan isn't an ancestor`); + } + } + const dependentDependencies = (0, utils_js_1.writeableArray)($dependent.dependencies); + const dependentDependencyForbiddenFlags = (0, utils_js_1.writeableArray)($dependent.dependencyForbiddenFlags); + const dependentDependencyOnReject = (0, utils_js_1.writeableArray)($dependent.dependencyOnReject); + const { skipDeduplication, acceptFlags = interfaces_js_1.ALL_FLAGS & ~$dependent.defaultForbiddenFlags, onReject, } = options; + // When copying dependencies between classes, we might not want to + // deduplicate because we might refer to the dependency by its index. As + // such, we should only dedupe by default but allow opting out. + // TODO: change this to `!skipDeduplication` + if (skipDeduplication === false) { + const existingIndex = dependentDependencies.indexOf($dependency); + if (existingIndex >= 0) { + return existingIndex; + } + } + if (!$dependency._isUnary && $dependent._isUnary) { + if ($dependent._isUnaryLocked) { + throw new Error(`Attempted to add non-unary step ${$dependency} as a dependency of ${$dependent}; but the latter is unary, so it cannot depend on batch steps`); + } + $dependent._isUnary = false; + } + const forbiddenFlags = interfaces_js_1.ALL_FLAGS & ~(acceptFlags & interfaces_js_1.TRAPPABLE_FLAGS); + this.stepsWithNoDependenciesByConstructor + .get($dependent.constructor) + ?.delete($dependent); + const dependencyIndex = dependentDependencies.push($dependency) - 1; + dependentDependencyForbiddenFlags[dependencyIndex] = forbiddenFlags; + dependentDependencyOnReject[dependencyIndex] = onReject; + (0, utils_js_1.writeableArray)($dependency.dependents).push({ + step: $dependent, + dependencyIndex, + }); + return dependencyIndex; + } + addStepUnaryDependency($dependent, options) { + const $dependency = options.step; + if (!$dependency._isUnary) { + const { nonUnaryMessage = defaultNonUnaryMessage } = options; + throw new Error(nonUnaryMessage($dependent, $dependency)); + } + $dependency._isUnaryLocked = true; + return this.addStepDependency($dependent, options); + } + setOutputPlanRootStep(outputPlan, $dependency) { + if (!this.activeSteps.has($dependency)) { + throw new Error(`Cannot add ${$dependency} to ${outputPlan} because it's deleted`); + } + const $existing = outputPlan.rootStep; + if ($existing) { + const outputPlansBy$existing = this.outputPlansByRootStep.get($existing); + if (!outputPlansBy$existing) { + throw new Error(`GrafastInternalError: ${outputPlan}.rootStep (${$existing}) isn't in 'outputPlansByRootStep'`); + } + outputPlansBy$existing.delete(outputPlan); + if (outputPlansBy$existing.size === 0) { + // PERF: Cleanup, tree shake, etc + } + } + outputPlan.rootStep = $dependency; + const store = this.outputPlansByRootStep.get($dependency); + if (store !== undefined) { + store.add(outputPlan); + } + else { + const outputPlans = new Set(); + outputPlans.add(outputPlan); + this.outputPlansByRootStep.set($dependency, outputPlans); + } + } + setLayerPlanRootStep(layerPlan, $dependency) { + if (!this.activeSteps.has($dependency)) { + throw new Error(`Cannot add ${$dependency} to ${layerPlan} because it's deleted`); + } + const $existing = layerPlan.rootStep; + if ($existing) { + const layerPlansBy$existing = this.layerPlansByRootStep.get($existing); + if (!layerPlansBy$existing) { + throw new Error(`GrafastInternalError<7b5b7fe6-d403-48bd-a75f-1c9557b9a030>: ${layerPlan}.rootStep (${$existing}) isn't in 'layerPlansByRootStep'`); + } + layerPlansBy$existing.delete(layerPlan); + if (layerPlansBy$existing.size === 0) { + this.layerPlansByRootStep.delete($existing); + // PERF: Cleanup, tree shake, etc + } + } + layerPlan.rootStep = $dependency; + const store = this.layerPlansByRootStep.get($dependency); + if (store !== undefined) { + store.add(layerPlan); + } + else { + const layerPlans = new Set(); + layerPlans.add(layerPlan); + this.layerPlansByRootStep.set($dependency, layerPlans); + } + } + /** @internal */ + replaceStep($original, $replacement) { + if (!this.activeSteps.has($original)) { + // OPTIMIZE: seems like there's unnecessary work being done here. + // console.trace(`${$original} should be replaced with ${$replacement} but it's no longer alive`); + // Already handled + return; + } + // Replace all references to $original with $replacement + const oldAliases = this.aliasesById[$original.id]; + const newAliases = this.aliasesById[$replacement.id] ?? [$replacement.id]; + this.aliasesById[$replacement.id] = newAliases; + if (oldAliases !== undefined) { + for (const id of oldAliases) { + this.stepById[id] = $replacement; + newAliases.push(id); + } + this.aliasesById[$original.id] = undefined; + } + else { + this.stepById[$original.id] = $replacement; + newAliases.push($original.id); + } + { + // Transfer step dependents of $original to $replacement + const dependents = $original.dependents; + if (dependents.length > 0) { + const replacementDependents = (0, utils_js_1.writeableArray)($replacement.dependents); + for (const dependent of dependents) { + (0, utils_js_1.writeableArray)((0, utils_js_1.sudo)(dependent.step).dependencies)[dependent.dependencyIndex] = $replacement; + replacementDependents.push(dependent); + } + $original.dependents = []; + } + } + { + // Convert root step of output plans from $original to $replacement + const outputPlans = this.outputPlansByRootStep.get($original); + if (outputPlans?.size) { + let outputPlansByReplacementStep = this.outputPlansByRootStep.get($replacement); + if (!outputPlansByReplacementStep) { + outputPlansByReplacementStep = new Set(); + this.outputPlansByRootStep.set($replacement, outputPlansByReplacementStep); + } + for (const outputPlan of outputPlans) { + outputPlan.rootStep = $replacement; + outputPlansByReplacementStep.add(outputPlan); + } + outputPlans.clear(); + } + } + { + // Convert root step of layer plans from $original to $replacement + const layerPlans = this.layerPlansByRootStep.get($original); + if (layerPlans?.size) { + let layerPlansByReplacementRootStep = this.layerPlansByRootStep.get($replacement); + if (!layerPlansByReplacementRootStep) { + layerPlansByReplacementRootStep = new Set(); + this.layerPlansByRootStep.set($replacement, layerPlansByReplacementRootStep); + } + for (const layerPlan of layerPlans) { + layerPlan.rootStep = $replacement; + layerPlansByReplacementRootStep.add(layerPlan); + } + layerPlans.clear(); + } + } + // NOTE: had to add the code ensuring all the layer plan parentStepId's + // existed to fix polymorphism, but it feels wrong. Should we be doing + // something different? + { + // Convert parent step of layer plans from $original to $replacement + const layerPlans = this.layerPlansByParentStep.get($original); + if (layerPlans?.size) { + let layerPlansByReplacementParentStep = this.layerPlansByParentStep.get($replacement); + if (!layerPlansByReplacementParentStep) { + layerPlansByReplacementParentStep = new Set(); + this.layerPlansByParentStep.set($replacement, layerPlansByReplacementParentStep); + } + for (const layerPlan of layerPlans) { + layerPlan.reason.parentStep = $replacement; + layerPlansByReplacementParentStep.add(layerPlan); + } + layerPlans.clear(); + } + } + // NOTE: I don't think side-effect plans need any special handling, since + // they cannot be deduplicated. + // NOTE: there may be more work required here for 'subprocedure' layerPlans + // (e.g. making sure their steps are retained), but it's not clear what + // work is necessary and we've not seen any issues from this yet. + // Remove this step (and perform localized tree-shaking) + this.eradicate($original); + } + treeShakeSteps() { + for (const $step of this.activeSteps) { + if (this.isNotNeeded($step)) { + this.eradicate($step); + } + } + } + /** + * Return true if this step can be tree-shaken. + */ + isNotNeeded($step) { + if ($step.dependents.length !== 0) + return false; + if ($step.hasSideEffects) + return false; + if (this.internalDependencies.has($step)) { + return false; + } + const s1 = this.outputPlansByRootStep.get($step); + if (s1 && s1.size !== 0) + return false; + const s2 = this.layerPlansByRootStep.get($step); + if (s2 && s2.size !== 0) + return false; + const s3 = this.layerPlansByParentStep.get($step); + if (s3 && s3.size !== 0) + return false; + return true; + } + /** + * Only for use during planField. + */ + purgeBackTo(count) { + const upper = this.stepCount; + const toRemove = new Set(); + for (let i = count; i < upper; i++) { + const step = this.stepById[i]; + if (step) { + toRemove.add(step); + } + } + const remove = (step) => { + if (this.stepById[step.id] !== step) { + return; + } + if (toRemove.has(step)) { + for (const dependent of step.dependents) { + if (dependent.step.id >= count) { + remove(dependent.step); + } + } + this.eradicate(step); + toRemove.delete(step); + } + }; + for (const step of toRemove) { + remove(step); + } + } + /** + * ONLY CALL THIS IF NOTHING DEPENDS ON $original! It's intended to be called + * from `replaceStep` or from itself. + * + * This method removes $original from the various maps/sets/lists, and also + * removes the fact that it was dependent on other steps. If these other + * steps no longer have any dependents (steps, layer plans or output plans) + * then they can also be eradicated _except_ during the 'plan' phase. + */ + eradicate($original) { + if ($original[interfaces_js_1.$$subroutine] !== null) { + this.deleteLayerPlan($original[interfaces_js_1.$$subroutine]); + } + this.removeStepFromItsLayerPlan($original); + const oldAliases = this.aliasesById[$original.id]; + if (oldAliases !== undefined) { + for (const id of oldAliases) { + // Nothing needs us, so set ourself null (DELIBERATELY BYPASSES TYPESCRIPT!) + this.stepById[id] = null; + } + this.aliasesById[$original.id] = undefined; + } + else if (this.stepById[$original.id] === $original) { + this.stepById[$original.id] = null; + } + // Since this step is being removed, it doesn't need its dependencies any more + const oldDependencies = (0, utils_js_1.sudo)($original).dependencies; + for (const $dependency of oldDependencies) { + // $dependency is no longer a dependent of $original, since we're getting + // rid of $original + $dependency.dependents = $dependency.dependents.filter((dependent) => dependent.step !== $original); + // If we've done our first tree-shake, let's keep it tidy in here. + if (this.operationPlan.phase !== "plan" && + this.isNotNeeded($dependency)) { + // Nothing depends on $dependency and it has no side effects - we can get rid of it! + this.eradicate($dependency); + } + } + // Ensure nothing depends on this step - steps, layer plans, output plans. + // This should already be the case, so we just do it in dev as a + // consistency check. + if (dev_js_1.isDev) { + if ($original.dependents.length > 0) { + throw new Error(`${$original} eradicated, but it is needed by ${$original.dependents.map((d) => d.step)}`); + } + const outputPlansByRoot = this.outputPlansByRootStep.get($original); + if (outputPlansByRoot && outputPlansByRoot.size !== 0) { + throw new Error(`${$original} eradicated, but it is needed by ${[ + ...outputPlansByRoot, + ]}`); + } + const layerPlansByRoot = this.layerPlansByRootStep.get($original); + if (layerPlansByRoot && layerPlansByRoot.size !== 0) { + throw new Error(`${$original} eradicated, but it is needed by ${[ + ...layerPlansByRoot, + ]}`); + } + const layerPlansByParent = this.layerPlansByParentStep.get($original); + if (layerPlansByParent && layerPlansByParent.size !== 0) { + throw new Error(`${$original} eradicated, but it is needed by ${[ + ...layerPlansByParent, + ]}`); + } + } + this.stepsWithNoDependenciesByConstructor + .get($original.constructor) + ?.delete($original); + this.outputPlansByRootStep.delete($original); + this.layerPlansByRootStep.delete($original); + this.layerPlansByParentStep.delete($original); + this.activeSteps.delete($original); + // Referencing $original after this will likely cause errors. + $original.destroy(); + } + moveStepToLayerPlan(step, targetLayerPlan) { + this.removeStepFromItsLayerPlan(step); + step.layerPlan = targetLayerPlan; + this.addStepToItsLayerPlan(step); + } + addStepToItsLayerPlan(step) { + const { layerPlan: { stepsByConstructor }, constructor, } = step; + let set = stepsByConstructor.get(constructor); + if (!set) { + set = new Set(); + stepsByConstructor.set(constructor, set); + } + set.add(step); + } + removeStepFromItsLayerPlan(step) { + step.layerPlan.stepsByConstructor.get(step.constructor).delete(step); + } + lockNewSteps() { + if (!dev_js_1.isDev) + return; + for (let i = this.lockedStepCount; i < this.stepCount; i++) { + const step = this.getStepById(i, true); + if (step && step.id === i) { + (0, lock_js_1.lock)(step); + } + } + this.lockedStepCount = this.stepCount; + } +} +exports.StepTracker = StepTracker; +function defaultNonUnaryMessage($dependent, $dependency) { + return `${$dependent} attempted to create a unary step dependency on ${$dependency}, but that step is not unary. See https://err.red/gud`; +} +//# sourceMappingURL=StepTracker.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/StepTracker.js.map b/grafast/grafast/dist/engine/StepTracker.js.map new file mode 100644 index 0000000000..05adba6338 --- /dev/null +++ b/grafast/grafast/dist/engine/StepTracker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"StepTracker.js","sourceRoot":"","sources":["../../src/engine/StepTracker.ts"],"names":[],"mappings":";;;AAAA,sCAAkC;AAElC,8CAAwC;AAExC,oDAA4E;AAC5E,wCAAkC;AAElC,0CAAmD;AAMnD,uCAAiC;AAGjC;;;;;;;;GAQG;AACH,MAAa,WAAW;IA8CtB,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QA7CzD,gBAAgB;QACT,cAAS,GAAG,CAAC,CAAC;QACrB,gBAAgB;QACT,oBAAe,GAAG,CAAC,CAAC;QAC3B,gBAAgB;QACT,gBAAW,GAAG,IAAI,GAAG,EAAQ,CAAC;QACrC,gBAAgB;QACT,aAAQ,GAEX,EAAE,CAAC;QACP,gBAAgB;QACR,gBAAW,GAEf,EAAE,CAAC;QACP,gBAAgB;QACT,yCAAoC,GAAG,IAAI,GAAG,EAIlD,CAAC;QAEJ,gBAAgB;QACT,yBAAoB,GAAG,IAAI,GAAG,EAAQ,CAAC;QAC9C,gBAAgB;QACT,0BAAqB,GAAG,IAAI,GAAG,EAAyB,CAAC;QAChE,gBAAgB;QACT,yBAAoB,GAAG,IAAI,GAAG,EAAwB,CAAC;QAC9D,gBAAgB;QACT,2BAAsB,GAAG,IAAI,GAAG,EAGpC,CAAC;QAEJ,gBAAgB;QACT,eAAU,GAA4B,EAAE,CAAC;QAChD;;;;;WAKG;QACI,mBAAc,GAAiB,EAAE,CAAC;QAElC,4BAAuB,GAAG,CAAC,CAAC;IAEyB,CAAC;IAEtD,aAAa,CAAC,YAAoB;QACvC,OAAQ,IAAI,CAAC,QAAmB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;IAEO,MAAM,CACZ,GAIC;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE;YACf,MAAM,IAAI,KAAK,CACb,eAAe,GAAa,2CAA2C,CACxE,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,uDAAuD;IAChD,aAAa;QAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7B,CAAC;IAED,uEAAuE;IAChE,mBAAmB;QACxB,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IAEM,OAAO,CAAC,KAAW;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;QAC/B,IAAI,uBAAuB,GACzB,IAAI,CAAC,oCAAoC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC7B,uBAAuB,KAAK,IAAI,GAAG,EAAE,CAAC;YACtC,IAAI,CAAC,oCAAoC,CAAC,GAAG,CAC3C,IAAI,EACJ,uBAAuB,CACxB,CAAC;QACJ,CAAC;QACD,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,YAAY,CAAC,SAAoB;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,QAAQ,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC;YACZ,KAAK,cAAc,CAAC;YACpB,KAAK,eAAe,CAAC;YACrB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;YACD,KAAK,kBAAkB,CAAC;YACxB,KAAK,UAAU,CAAC;YAChB,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAC3C,SAAS,CAAC,MAAM,CAAC,UAAU,CAC3B,CAAC;gBACH,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,KAAK,CAAC,GAAG,CAAC,SAAsD,CAAC,CAAC;gBACpE,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,IAAI,GAAG,EAEvB,CAAC;oBACJ,UAAU,CAAC,GAAG,CACZ,SAAsD,CACvD,CAAC;oBACF,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAC7B,SAAS,CAAC,MAAM,CAAC,UAAU,EAC3B,UAAU,CACX,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC3C,IAAI,MAAM,CAAC,4BAAY,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CACb,2HAA2H,CAC5H,CAAC;gBACJ,CAAC;gBACD,MAAM,CAAC,4BAAY,CAAC;oBAClB,SAAiD,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,KAAK,GAAU,SAAS,CAAC,MAAM,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,+BAAgC,KAAa,CAAC,IAAI,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,UAAsB;QACzC,IAAI,cAAK,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,0EACE,UAAU,CAAC,QACb,0DAA0D,IAAI,CAAC,WAAW,CACxE,UAAU,CAAC,QAAQ,CAAC,EAAE,CACvB,GAAG,CACL,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;YAC1C,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC5B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,SAAoB;QACzC,IAAI,cAAK,EAAE,CAAC;YACV,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACrC,mCAAmC;QACnC,IAAI,SAAS,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBACb,SAAS,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QACD,oBAAoB;QACpB,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;QACjC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC3C,MAAM,OAAO,GACX,YAAY,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACxE,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,sBAAsB;qBACxB,GAAG,CAAC,OAAO,CAAE;qBACb,MAAM,CAAC,SAAsD,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,iCAAiC;QACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAQ,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,IAAU,EAAE,EAAE;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,0BAA0B;YAC1B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACxC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAOM,WAAW,CAChB,EAAU,EACV,UAAU,GAAG,KAAK;QAElB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qCAAqC,EAAE,gBAAgB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,cAAK,EAAE,CAAC;YACV,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,oEAAoE,EAAE,KAAK,UAAU,GAAG,CAChG,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO,IAAoB,CAAC;IAC9B,CAAC;IAEM,iBAAiB,CACtB,aAAmB,EACnB,OAA6B;QAE7B,MAAM,UAAU,GAAG,IAAA,eAAI,EAAC,aAAa,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,IAAA,eAAI,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CACb,cAAc,WAAW,uBAAuB,UAAU,0BAA0B,CACrF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,cAAc,WAAW,uBAAuB,UAAU,0BAA0B,CACrF,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,YAAY,cAAI,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,8CAA8C,UAAU,2CAA2C,IAAA,oBAAO,EACxG,WAAW,CACZ,GAAG,CACL,CAAC;QACJ,CAAC;QACD,IAAI,cAAK,EAAE,CAAC;YACV,sDAAsD;YACtD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK;gBACb,gBAAgB;gBAChB,qCAAqC;gBACrC,qBAAqB,WAAW,MAAM,WAAW,CAAC,SAAS,yBAAyB,UAAU,MAAM,UAAU,CAAC,SAAS,2DAA2D,CACpL,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,qBAAqB,GAAG,IAAA,yBAAc,EAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACtE,MAAM,iCAAiC,GAAG,IAAA,yBAAc,EACtD,UAAU,CAAC,wBAAwB,CACpC,CAAC;QACF,MAAM,2BAA2B,GAAG,IAAA,yBAAc,EAChD,UAAU,CAAC,kBAAkB,CAC9B,CAAC;QACF,MAAM,EACJ,iBAAiB,EACjB,WAAW,GAAG,yBAAS,GAAG,CAAC,UAAU,CAAC,qBAAqB,EAC3D,QAAQ,GACT,GAAG,OAAO,CAAC;QACZ,kEAAkE;QAClE,wEAAwE;QACxE,+DAA+D;QAC/D,4CAA4C;QAC5C,IAAI,iBAAiB,KAAK,KAAK,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACjE,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,aAAa,CAAC;YACvB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACjD,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CACb,mCAAmC,WAAW,uBAAuB,UAAU,+DAA+D,CAC/I,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC9B,CAAC;QAED,MAAM,cAAc,GAAG,yBAAS,GAAG,CAAC,CAAC,WAAW,GAAG,+BAAe,CAAC,CAAC;QAEpE,IAAI,CAAC,oCAAoC;aACtC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC;YAC5B,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACvB,MAAM,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpE,iCAAiC,CAAC,eAAe,CAAC,GAAG,cAAc,CAAC;QACpE,2BAA2B,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC;QACxD,IAAA,yBAAc,EAAC,WAAW,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;YAC1C,IAAI,EAAE,UAAU;YAChB,eAAe;SAChB,CAAC,CAAC;QAEH,OAAO,eAAe,CAAC;IACzB,CAAC;IAEM,sBAAsB,CAC3B,UAAgB,EAChB,OAA6B;QAE7B,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,EAAE,eAAe,GAAG,sBAAsB,EAAE,GAAG,OAAO,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC;QAClC,OAAO,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAEM,qBAAqB,CAAC,UAAsB,EAAE,WAAiB;QACpE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,cAAc,WAAW,OAAO,UAAU,uBAAuB,CAClE,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC;QACtC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,sBAAsB,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzE,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,+DAA+D,UAAU,cAAc,SAAS,oCAAoC,CACrI,CAAC;YACJ,CAAC;YACD,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,sBAAsB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtC,iCAAiC;YACnC,CAAC;QACH,CAAC;QACA,UAAU,CAAC,QAAgB,GAAG,WAAW,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;YAC1C,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC5B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEM,oBAAoB,CAAC,SAAoB,EAAE,WAAiB;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,cAAc,WAAW,OAAO,SAAS,uBAAuB,CACjE,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;QACrC,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvE,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,+DAA+D,SAAS,cAAc,SAAS,mCAAmC,CACnI,CAAC;YACJ,CAAC;YACD,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxC,IAAI,qBAAqB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5C,iCAAiC;YACnC,CAAC;QACH,CAAC;QACA,SAAS,CAAC,QAAgB,GAAG,WAAW,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,IAAI,GAAG,EAAa,CAAC;YACxC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,gBAAgB;IACT,WAAW,CAAC,SAAe,EAAE,YAAkB;QACpD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,iEAAiE;YACjE,kGAAkG;YAElG,kBAAkB;YAClB,OAAO;QACT,CAAC;QAED,wDAAwD;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;QAC/C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC;gBACjC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;QAED,CAAC;YACC,wDAAwD;YACxD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YACxC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,qBAAqB,GAAG,IAAA,yBAAc,EAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBACtE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,IAAA,yBAAc,EAAC,IAAA,eAAI,EAAC,SAAS,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAC/C,SAAS,CAAC,eAAe,CAC1B,GAAG,YAAY,CAAC;oBACjB,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACxC,CAAC;gBACA,SAAS,CAAC,UAAkB,GAAG,EAAE,CAAC;YACrC,CAAC;QACH,CAAC;QAED,CAAC;YACC,mEAAmE;YACnE,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,WAAW,EAAE,IAAI,EAAE,CAAC;gBACtB,IAAI,4BAA4B,GAC9B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC/C,IAAI,CAAC,4BAA4B,EAAE,CAAC;oBAClC,4BAA4B,GAAG,IAAI,GAAG,EAAE,CAAC;oBACzC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAC5B,YAAY,EACZ,4BAA4B,CAC7B,CAAC;gBACJ,CAAC;gBACD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;oBACpC,UAAU,CAAC,QAAgB,GAAG,YAAY,CAAC;oBAC5C,4BAA4B,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC/C,CAAC;gBACD,WAAW,CAAC,KAAK,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAED,CAAC;YACC,kEAAkE;YAClE,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC;gBACrB,IAAI,+BAA+B,GACjC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC9C,IAAI,CAAC,+BAA+B,EAAE,CAAC;oBACrC,+BAA+B,GAAG,IAAI,GAAG,EAAE,CAAC;oBAC5C,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAC3B,YAAY,EACZ,+BAA+B,CAChC,CAAC;gBACJ,CAAC;gBACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBAClC,SAAS,CAAC,QAAgB,GAAG,YAAY,CAAC;oBAC3C,+BAA+B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACjD,CAAC;gBACD,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,sEAAsE;QACtE,uBAAuB;QACvB,CAAC;YACC,oEAAoE;YACpE,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,UAAU,EAAE,IAAI,EAAE,CAAC;gBACrB,IAAI,iCAAiC,GACnC,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAChD,IAAI,CAAC,iCAAiC,EAAE,CAAC;oBACvC,iCAAiC,GAAG,IAAI,GAAG,EAAE,CAAC;oBAC9C,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAC7B,YAAY,EACZ,iCAAiC,CAClC,CAAC;gBACJ,CAAC;gBACD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBAClC,SAAS,CAAC,MAAM,CAAC,UAAkB,GAAG,YAAY,CAAC;oBACpD,iCAAiC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACnD,CAAC;gBACD,UAAU,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,+BAA+B;QAE/B,2EAA2E;QAC3E,uEAAuE;QACvE,iEAAiE;QAEjE,wDAAwD;QACxD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAEM,cAAc;QACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAW;QAC7B,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,KAAK,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QACvC,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,WAAW,CAAC,KAAa;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAQ,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAU,EAAQ,EAAE;YAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpC,OAAO;YACT,CAAC;YACD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACxC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;wBAC/B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACrB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,SAAS,CAAC,SAAe;QAC/B,IAAI,SAAS,CAAC,4BAAY,CAAC,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,4BAAY,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,4EAA4E;gBAC5E,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACrC,CAAC;QAED,8EAA8E;QAC9E,MAAM,eAAe,GAAG,IAAA,eAAI,EAAC,SAAS,CAAC,CAAC,YAAY,CAAC;QACrD,KAAK,MAAM,WAAW,IAAI,eAAe,EAAE,CAAC;YAC1C,yEAAyE;YACzE,mBAAmB;YAClB,WAAW,CAAC,UAAkB,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAC7D,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,SAAS,CAC5C,CAAC;YAEF,kEAAkE;YAClE,IACE,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,MAAM;gBACnC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAC7B,CAAC;gBACD,oFAAoF;gBACpF,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,gEAAgE;QAChE,qBAAqB;QACrB,IAAI,cAAK,EAAE,CAAC;YACV,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,oCAAoC,SAAS,CAAC,UAAU,CAAC,GAAG,CACtE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACd,EAAE,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,oCAAoC;oBAC9C,GAAG,iBAAiB;iBACrB,EAAE,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClE,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,oCAAoC;oBAC9C,GAAG,gBAAgB;iBACpB,EAAE,CACJ,CAAC;YACJ,CAAC;YACD,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACtE,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,oCAAoC;oBAC9C,GAAG,kBAAkB;iBACtB,EAAE,CACJ,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,oCAAoC;aACtC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC;YAC3B,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEnC,6DAA6D;QAC7D,SAAS,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IAED,mBAAmB,CAAC,IAAU,EAAE,eAA0B;QACxD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,SAAiB,GAAG,eAAe,CAAC;QAC1C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,qBAAqB,CAAC,IAAU;QAC9B,MAAM,EACJ,SAAS,EAAE,EAAE,kBAAkB,EAAE,EACjC,WAAW,GACZ,GAAG,IAAI,CAAC;QACT,IAAI,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,0BAA0B,CAAC,IAAU;QACnC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,YAAY;QACV,IAAI,CAAC,cAAK;YAAE,OAAO;QACnB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YACvC,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAA,cAAI,EAAC,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;IACxC,CAAC;CACF;AAttBD,kCAstBC;AAED,SAAS,sBAAsB,CAAC,UAAgB,EAAE,WAAiB;IACjE,OAAO,GAAG,UAAU,mDAAmD,WAAW,uDAAuD,CAAC;AAC5I,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeBucket.d.ts b/grafast/grafast/dist/engine/executeBucket.d.ts new file mode 100644 index 0000000000..853baef2a2 --- /dev/null +++ b/grafast/grafast/dist/engine/executeBucket.d.ts @@ -0,0 +1,6 @@ +import type { Bucket } from "../bucket.js"; +import type { BatchExecutionValue, ExecutionEntryFlags, UnaryExecutionValue } from "../interfaces.js"; +export declare function bucketToString(this: Bucket): string; +export declare function batchExecutionValue(entries: TData[], _flags?: ExecutionEntryFlags[]): BatchExecutionValue; +export declare function unaryExecutionValue(value: TData, _entryFlags?: ExecutionEntryFlags): UnaryExecutionValue; +//# sourceMappingURL=executeBucket.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeBucket.d.ts.map b/grafast/grafast/dist/engine/executeBucket.d.ts.map new file mode 100644 index 0000000000..f91351de7a --- /dev/null +++ b/grafast/grafast/dist/engine/executeBucket.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"executeBucket.d.ts","sourceRoot":"","sources":["../../src/engine/executeBucket.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AAIzD,OAAO,KAAK,EACV,mBAAmB,EAInB,mBAAmB,EAUnB,mBAAmB,EAEpB,MAAM,kBAAkB,CAAC;AAwsC1B,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,UAE1C;AAWD,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,OAAO,EAAE,KAAK,EAAE,EAChB,MAAM,GAAE,mBAAmB,EAAqC,GAC/D,mBAAmB,CAAC,KAAK,CAAC,CAe5B;AAGD,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,KAAK,EAAE,KAAK,EACZ,WAAW,GAAE,mBAAuB,GACnC,mBAAmB,CAAC,KAAK,CAAC,CAc5B"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeBucket.js b/grafast/grafast/dist/engine/executeBucket.js new file mode 100644 index 0000000000..6a7739e29c --- /dev/null +++ b/grafast/grafast/dist/engine/executeBucket.js @@ -0,0 +1,1102 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.executeBucket = executeBucket; +exports.newBucket = newBucket; +exports.bucketToString = bucketToString; +exports.batchExecutionValue = batchExecutionValue; +exports.unaryExecutionValue = unaryExecutionValue; +const tslib_1 = require("tslib"); +const iterall_1 = require("iterall"); +const assert = tslib_1.__importStar(require("../assert.js")); +const dev_js_1 = require("../dev.js"); +const error_js_1 = require("../error.js"); +const inspect_js_1 = require("../inspect.js"); +const interfaces_js_1 = require("../interfaces.js"); +const timeSource_js_1 = require("../timeSource.js"); +const utils_js_1 = require("../utils.js"); +const timeoutError = Object.freeze(new error_js_1.SafeError("Execution timeout exceeded, please simplify or add limits to your request.", Object.freeze({ [interfaces_js_1.$$timeout]: true }))); +function noop() { + /*noop*/ +} +/** + * Takes a list of `results` (shorter than `resultCount`) and an object with + * errors and indexes; returns a list of length `resultCount` with the results + * from `results` but with errors injected at the indexes specified in + * `errors`. + * + * ASSERT: `results.length + Object.values(errors).length === resultCount` + * + * @internal + */ +function mergeErrorsBackIn(results, forcedValues, resultCount) { + const finalFlags = []; + const finalResults = []; + /** The index within `results`, which is shorter than `resultCount` */ + let resultIndex = 0; + for (let finalIndex = 0; finalIndex < resultCount; finalIndex++) { + const flags = forcedValues.flags[finalIndex]; + if (flags !== undefined) { + const value = forcedValues.results[finalIndex]; + finalResults[finalIndex] = value; + finalFlags[finalIndex] = flags; + } + else { + finalResults[finalIndex] = results[resultIndex++]; + finalFlags[finalIndex] = 0; + } + } + return { flags: finalFlags, results: finalResults }; +} +/** @internal */ +function executeBucket(bucket, requestContext) { + /** + * Execute the step directly; since there's no errors we can pass the + * dependencies through verbatim. + */ + function reallyExecuteStepWithoutFiltering(size, step, dependencies, extra) { + const results = executeOrStream(size, step, dependencies, extra); + const flags = (0, utils_js_1.arrayOfLength)(size, interfaces_js_1.NO_FLAGS); + if ((0, utils_js_1.isPromiseLike)(results)) { + return results.then((results) => ({ flags, results })); + } + else { + return { flags, results }; + } + } + const { stopTime, eventEmitter, args } = requestContext; + const { middleware } = args; + const { metaByMetaKey, size, store, layerPlan: { phases, children: childLayerPlans }, } = bucket; + const phaseCount = phases.length; + // Like a `for(i = 0; i < phaseCount; i++)` loop with some `await`s in it, except it does promise + // handling manually so that it can complete synchronously (no promises) if + // possible. + const nextPhase = (phaseIndex) => { + if (phaseIndex >= phaseCount) { + return; + } + const phase = phases[phaseIndex]; + const { _allSteps } = phase; + /** + * To ensure we don't enter a situation where an "unhandled" promise + * rejection causes Node to exit, we must process each completed step during the + * same tick in which it completes. + */ + let indexesPendingLoopOver = []; + let executePromises = null; + let executePromiseResultIndex = null; + const resultList = []; + if (phase.checkTimeout && + stopTime !== null && + timeSource_js_1.timeSource.now() >= stopTime) { + // ABORT! + if (phase.normalSteps !== undefined) { + const normalSteps = phase.normalSteps; + for (let normalStepIndex = 0, l = normalSteps.length; normalStepIndex < l; normalStepIndex++) { + const step = normalSteps[normalStepIndex].step; + const stepSize = step._isUnary ? 1 : bucket.size; + const r = timeoutError; + const results = (0, utils_js_1.arrayOfLength)(stepSize, r); + const flags = (0, utils_js_1.arrayOfLength)(stepSize, interfaces_js_1.FLAG_ERROR); + resultList[normalStepIndex] = { flags, results }; + indexesPendingLoopOver.push(normalStepIndex); + // TODO: I believe we can remove this line? + bucket.flagUnion |= interfaces_js_1.FLAG_ERROR; + } + } + } + else if (phase.normalSteps !== undefined) { + const normalSteps = phase.normalSteps; + for (let normalStepIndex = 0, l = normalSteps.length; normalStepIndex < l; normalStepIndex++) { + const step = normalSteps[normalStepIndex].step; + const stepSize = step._isUnary ? 1 : bucket.size; + try { + const r = executeStep(step); + if ((0, utils_js_1.isPromiseLike)(r)) { + resultList[normalStepIndex] = undefined /* will populate shortly */; + if (!executePromises) { + executePromises = [r]; + executePromiseResultIndex = [normalStepIndex]; + } + else { + const newIndex = executePromises.push(r) - 1; + executePromiseResultIndex[newIndex] = normalStepIndex; + } + } + else { + resultList[normalStepIndex] = r; + indexesPendingLoopOver.push(normalStepIndex); + } + } + catch (e) { + const r = e; + const results = (0, utils_js_1.arrayOfLength)(stepSize, r); + const flags = (0, utils_js_1.arrayOfLength)(stepSize, interfaces_js_1.FLAG_ERROR); + resultList[normalStepIndex] = { flags, results }; + indexesPendingLoopOver.push(normalStepIndex); + // TODO: I believe we can remove this line? + bucket.flagUnion |= interfaces_js_1.FLAG_ERROR; + } + } + } + const next = () => { + return nextPhase(phaseIndex + 1); + }; + /** + * Loops over (and resets) the indexesPendingLoopOver array, ensuring that + * all errors are handled. + */ + const loopOverResults = () => { + if (indexesPendingLoopOver.length === 0) + return; + const indexesToProcess = indexesPendingLoopOver; + indexesPendingLoopOver = []; + // Validate executed steps + for (const allStepsIndex of indexesToProcess) { + const finishedStep = _allSteps[allStepsIndex]; + const internalResult = resultList[allStepsIndex]; + if (!internalResult) { + throw new Error(`GrafastInternalError<166ef53d-b80d-4bea-8b54-803c2694112a>: Result from ${finishedStep} should exist`); + } + const { /* flags, */ results } = internalResult; + const resultLength = results?.length; + const expectedSize = finishedStep._isUnary ? 1 : size; + if (resultLength !== expectedSize) { + if (!Array.isArray(results)) { + throw new Error(`Result from ${finishedStep} should be an array, instead received ${(0, inspect_js_1.inspect)(results, { colors: true })}`); + } + throw new Error(`Result array from ${finishedStep} should have length ${expectedSize}${finishedStep._isUnary ? " (because it's unary)" : ""}, instead it had length ${results.length}`); + } + if (finishedStep._isUnary) { + // Handled later + } + else { + bucket.store.set(finishedStep.id, batchExecutionValue((0, utils_js_1.arrayOfLength)(size))); + } + } + // Need to complete promises, check for errors, etc. + // **DO NOT THROW, DO NOT ALLOW AN ERROR TO BE RAISED!** + // **USE DEFENSIVE PROGRAMMING HERE!** + /** PROMISES ADDED HERE MUST NOT REJECT */ + let promises; + let pendingPromises; + let pendingPromiseIndexes; + // TODO: it seems that if this throws an error it results in a permanent + // hang of defers? In the mean time... Don't throw any errors here! + const success = (finishedStep, bucket, resultIndex, value, flags) => { + // Fast lanes + if (typeof value !== "object") { + // non-objects + bucket.setResult(finishedStep, resultIndex, value, flags); + return; + } + else if (value === null) { + // nulls + const finalFlags = flags | interfaces_js_1.FLAG_NULL; + bucket.setResult(finishedStep, resultIndex, null, finalFlags); + return; + } + else if ((0, error_js_1.isFlaggedValue)(value)) { + // flagged values + const finalFlags = flags | value.flags; + bucket.setResult(finishedStep, resultIndex, value.value, finalFlags); + return; + } + let valueIsAsyncIterable; + if (finishedStep._stepOptions.walkIterable && + // PERF: do we want to handle arrays differently? + ((valueIsAsyncIterable = (0, iterall_1.isAsyncIterable)(value)) || (0, iterall_1.isIterable)(value))) { + // PERF: we've already calculated this once; can we reference that again here? + const stream = evaluateStream(bucket, finishedStep); + const initialCount = stream?.initialCount ?? Infinity; + const iterator = valueIsAsyncIterable + ? value[Symbol.asyncIterator]() + : value[Symbol.iterator](); + // Here we track the iterator via the bucket, this allows us to + // ensure that the iterator is terminated even if the stream is never + // consumed (e.g. if an error is thrown/caught during execution of + // the output plan). + if (!bucket.iterators[resultIndex]) { + bucket.iterators[resultIndex] = new Set(); + } + bucket.iterators[resultIndex].add(iterator); + if (initialCount === 0) { + // Optimization - defer everything + const arr = []; + arr[interfaces_js_1.$$streamMore] = iterator; + bucket.setResult(finishedStep, resultIndex, arr, flags); + } + else { + // Evaluate the first initialCount entries, rest is streamed. + const promise = (async () => { + try { + let valuesSeen = 0; + const arr = []; + /* + * We need to "shift" a few entries off the top of the + * iterator, but still keep it iterable for the later + * stream. To accomplish this we have to do manual + * looping + */ + let resultPromise; + while ((resultPromise = iterator.next())) { + const resolvedResult = await resultPromise; + if (resolvedResult.done) { + break; + } + arr.push(await resolvedResult.value); + if (++valuesSeen >= initialCount) { + // This is safe to do in the `while` since we checked + // the `0` entries condition in the optimization + // above. + arr[interfaces_js_1.$$streamMore] = iterator; + break; + } + } + bucket.setResult(finishedStep, resultIndex, arr, flags); + } + catch (e) { + bucket.setResult(finishedStep, resultIndex, e, flags | interfaces_js_1.FLAG_ERROR); + } + })(); + if (!promises) { + promises = [promise]; + } + else { + promises.push(promise); + } + } + } + else { + bucket.setResult(finishedStep, resultIndex, value, flags); + } + }; + for (const allStepsIndex of indexesToProcess) { + const step = _allSteps[allStepsIndex]; + const internalResult = resultList[allStepsIndex]; + if (!internalResult) { + throw new Error(`GrafastInternalError: Result from ${step} should exist`); + } + const { flags, results } = internalResult; + const count = step._isUnary ? 1 : size; + for (let dataIndex = 0; dataIndex < count; dataIndex++) { + const val = results[dataIndex]; + if (step.isSyncAndSafe || !(0, utils_js_1.isPromiseLike)(val)) { + if (flags[dataIndex] == null) { + throw new Error(`GraphileInternalError<75df71bb-0f76-4a98-9664-9167d502296a>: result for ${step} has no flag at index ${dataIndex} (value = ${(0, inspect_js_1.inspect)(val)})`); + } + success(step, bucket, dataIndex, val, flags[dataIndex]); + } + else { + if (!pendingPromises) { + pendingPromises = [val]; + pendingPromiseIndexes = [{ s: allStepsIndex, i: dataIndex }]; + } + else { + pendingPromises.push(val); + pendingPromiseIndexes.push({ s: allStepsIndex, i: dataIndex }); + } + } + } + } + if (pendingPromises !== undefined) { + return Promise.allSettled(pendingPromises) + .then((resultSettledResult) => { + for (let i = 0, pendingPromisesLength = resultSettledResult.length; i < pendingPromisesLength; i++) { + const settledResult = resultSettledResult[i]; + const { s: allStepsIndex, i: dataIndex } = pendingPromiseIndexes[i]; + const finishedStep = _allSteps[allStepsIndex]; + if (settledResult.status === "fulfilled") { + success(finishedStep, bucket, dataIndex, settledResult.value, interfaces_js_1.NO_FLAGS); + } + else { + const error = settledResult.reason; + bucket.setResult(finishedStep, dataIndex, error, interfaces_js_1.FLAG_ERROR); + } + } + return promises ? Promise.all(promises) : undefined; + }) + .then(null, (e) => { + // THIS SHOULD NEVER HAPPEN! + console.error(`GrafastInternalError<1e9731b4-005e-4b0e-bc61-43baa62e6444>: this error should never occur! Please file an issue against grafast. Details: ${e}`); + bucket.flagUnion |= interfaces_js_1.FLAG_ERROR; + for (let i = 0, pendingPromisesLength = pendingPromises.length; i < pendingPromisesLength; i++) { + const { s: allStepsIndex, i: dataIndex } = pendingPromiseIndexes[i]; + const finishedStep = _allSteps[allStepsIndex]; + const error = new Error(`GrafastInternalError<1e9731b4-005e-4b0e-bc61-43baa62e6444>: error occurred whilst performing completedStep(${finishedStep.id})`); + bucket.setResult(finishedStep, dataIndex, error, interfaces_js_1.FLAG_ERROR); + } + }); + } + else { + return promises ? Promise.all(promises) : undefined; + } + }; + const runSyncSteps = () => { + const executedLength = resultList.length; + if (dev_js_1.isDev) { + assert.strictEqual(executedLength, phase.normalSteps?.length ?? 0, "Expected only and all normalSteps to have executed"); + } + if (!phase.unbatchedSyncAndSafeSteps) { + return next(); + } + const allStepsLength = _allSteps.length; + const extras = []; + for (let allStepsIndex = executedLength; allStepsIndex < allStepsLength; allStepsIndex++) { + const step = _allSteps[allStepsIndex]; + const meta = step.metaKey !== undefined ? metaByMetaKey[step.metaKey] : undefined; + extras[allStepsIndex] = { + stopTime, + meta, + eventEmitter, + stream: evaluateStream(bucket, step), + _bucket: bucket, + _requestContext: requestContext, + }; + if (step._isUnary) { + // Handled later + } + else { + bucket.store.set(step.id, batchExecutionValue((0, utils_js_1.arrayOfLength)(size))); + } + } + for (let dataIndex = 0; dataIndex < size; dataIndex++) { + stepLoop: for (let allStepsIndex = executedLength; allStepsIndex < allStepsLength; allStepsIndex++) { + const step = (0, utils_js_1.sudo)(_allSteps[allStepsIndex]); + // Unary steps only need to be processed once + if (step._isUnary && dataIndex !== 0) { + continue; + } + // Check if the side effect errored + const $sideEffect = step.implicitSideEffectStep; + if ($sideEffect) { + let currentPolymorphicPath; + if ($sideEffect.polymorphicPaths === null || + (currentPolymorphicPath = + bucket.polymorphicPathList[dataIndex]) === null || + $sideEffect.polymorphicPaths.has(currentPolymorphicPath)) { + const depExecutionValue = bucket.store.get($sideEffect.id); + if (depExecutionValue === undefined) { + throw new Error(`GrafastInternalError: failed to get result for side effect ${$sideEffect} which impacts ${step}`); + } + const depFlags = depExecutionValue._flagsAt(dataIndex); + if (depFlags & interfaces_js_1.FLAG_POLY_SKIPPED) { + /* noop */ + } + else if (depFlags & interfaces_js_1.FLAG_ERROR) { + if (step._isUnary) { + // COPY the unary value + bucket.store.set(step.id, depExecutionValue); + bucket.flagUnion |= depFlags; + } + else { + const depVal = depExecutionValue.at(dataIndex); + bucket.setResult(step, dataIndex, depVal, depFlags); + } + continue stepLoop; + } + } + } + try { + const deps = []; + const extra = extras[allStepsIndex]; + let forceIndexValue = undefined; + let rejectValue = undefined; + let indexFlags = interfaces_js_1.NO_FLAGS; + for (let i = 0, l = step.dependencies.length; i < l; i++) { + const $dep = step.dependencies[i]; + const forbiddenFlags = step.dependencyForbiddenFlags[i]; + const onReject = step.dependencyOnReject[i]; + const depExecutionVal = bucket.store.get($dep.id); + // Search for "f2b3b1b3" for similar block + const flags = depExecutionVal._flagsAt(dataIndex); + const disallowedFlags = flags & forbiddenFlags; + if (disallowedFlags) { + indexFlags |= disallowedFlags; + // If there's a reject behavior and we're FRESHLY rejected (weren't + // already inhibited), use that as a fallback. + // TODO: validate this. + // If dep is inhibited and we don't allow inhibited, copy through (null or error). + // If dep is inhibited and we do allow inhibited, but we're disallowed, use our onReject. + // If dep is not inhibited, but we're disallowed, use our onReject. + if (onReject !== undefined && + (disallowedFlags & (interfaces_js_1.FLAG_INHIBITED | interfaces_js_1.FLAG_ERROR)) === interfaces_js_1.NO_FLAGS) { + rejectValue ||= onReject; + } + if (forceIndexValue == null) { + if ((flags & interfaces_js_1.FLAG_ERROR) !== 0) { + const v = depExecutionVal.at(dataIndex); + forceIndexValue = v; + } + else { + forceIndexValue = null; + } + } + else { + // First error wins, ignore this second error. + } + // End "f2b3b1b3" block + } + else if (forceIndexValue === undefined) { + const depVal = depExecutionVal.at(dataIndex); + let depFlags; + if ((bucket.flagUnion & interfaces_js_1.FLAG_ERROR) === interfaces_js_1.FLAG_ERROR && + ((depFlags = depExecutionVal._flagsAt(dataIndex)) & + interfaces_js_1.FLAG_ERROR) === + interfaces_js_1.FLAG_ERROR) { + if (step._isUnary) { + // COPY the unary value + bucket.store.set(step.id, depExecutionVal); + bucket.flagUnion |= depFlags; + } + else { + bucket.setResult(step, dataIndex, depVal, interfaces_js_1.FLAG_ERROR); + } + continue stepLoop; + } + deps.push(depVal); + } + } + let stepResult, stepFlags; + if (forceIndexValue !== undefined) { + // Search for "17217999b7a7" for similar block + if (forceIndexValue == null && rejectValue != null) { + indexFlags |= interfaces_js_1.FLAG_ERROR; + forceIndexValue = rejectValue; + } + else { + indexFlags |= interfaces_js_1.FLAG_INHIBITED; + } + // End "17217999b7a7" block + stepResult = forceIndexValue; + stepFlags = indexFlags; + } + else { + const rawStepResult = step.unbatchedExecute(extra, ...deps); + if (typeof rawStepResult === "object" && + rawStepResult !== null && + (0, error_js_1.isFlaggedValue)(rawStepResult)) { + stepResult = rawStepResult.value; + stepFlags = rawStepResult.flags; + } + else { + stepResult = rawStepResult; + stepFlags = rawStepResult == null ? interfaces_js_1.FLAG_NULL : interfaces_js_1.NO_FLAGS; + } + } + // TODO: what if stepResult is _returned_ error (as opposed to + // thrown)? + // NOTE: we are in `runSyncSteps` so this step is guaranteed to + // be "isSyncAndSafe". As such, we don't need to worry about it + // returning an error (unsafe) or a promise (async), we only + // need to check if it's null. + bucket.setResult(step, dataIndex, stepResult, stepFlags); + } + catch (e) { + bucket.setResult(step, dataIndex, e, interfaces_js_1.FLAG_ERROR); + } + } + } + return next(); + }; + if (executePromises !== null) { + const processedPromises = []; + if (indexesPendingLoopOver.length > 0) { + // This **must be done in the same tick** + const promiseOrNot = loopOverResults(); + if ((0, utils_js_1.isPromiseLike)(promiseOrNot)) { + processedPromises.push(promiseOrNot); + } + } + for (let i = 0, l = executePromises.length; i < l; i++) { + const executePromise = executePromises[i]; + const index = executePromiseResultIndex[i]; + processedPromises.push(executePromise.then((promiseResult) => { + resultList[index] = promiseResult; + indexesPendingLoopOver.push(index); + // We must loop over the results in the same tick in which the + // promise resolved. + return loopOverResults(); + })); + } + return Promise.all(processedPromises).then(runSyncSteps); + } + else { + const promiseOrNot = loopOverResults(); + if ((0, utils_js_1.isPromiseLike)(promiseOrNot)) { + return promiseOrNot.then(runSyncSteps); + } + else { + return runSyncSteps(); + } + } + }; + const promise = nextPhase(0); + if ((0, utils_js_1.isPromiseLike)(promise)) { + return promise.then(executeSamePhaseChildren); + } + else { + return executeSamePhaseChildren(); + } + // Function definitions below here + function executeOrStream(count, step, values, extra) { + if (dev_js_1.isDev && step._isUnary && count !== 1) { + throw new Error(`GrafastInternalError<84a6cdfa-e8fe-4dea-85fe-9426a6a78027>: ${step} is a unary step, but we're attempting to pass it ${count} (!= 1) values`); + } + if (step.execute.length > 1) { + throw new Error(`${step} is using a legacy form of 'execute' which accepts multiple arguments, please see https://err.red/gev2`); + } + const executeDetails = { + indexMap: makeIndexMap(count), + indexForEach: makeIndexForEach(count), + count, + values, + extra, + stream: evaluateStream(bucket, step), + }; + if (!step.isSyncAndSafe && middleware != null) { + return middleware.run("executeStep", { args, step, executeDetails }, executeStepFromEvent); + } + else { + return step.execute(executeDetails); + } + } + // Slow mode... + /** + * Execute the step, filtering out errors and entries with non-matching + * polymorphicPaths from the input dependencies and then padding the lists + * back out at the end. + */ + function reallyExecuteStepWithFiltering(step, dependenciesIncludingSideEffects, dependencyForbiddenFlags, dependencyOnReject, polymorphicPathList, extra) { + const expectedSize = step._isUnary ? 1 : size; + const forcedValues = { + flags: (0, utils_js_1.arrayOfLength)(expectedSize, undefined), + results: (0, utils_js_1.arrayOfLength)(expectedSize, undefined), + }; + /** + * If there's errors/forbidden values, we must manipulate the arrays being + * passed into the step execution + */ + let needsTransform = false; + /** If all we see is errors, there's no need to execute! */ + let newSize = 0; + let stepPolymorphicPaths = step.polymorphicPaths; + const legitDepsCount = (0, utils_js_1.sudo)(step).dependencies.length; + const dependenciesIncludingSideEffectsCount = dependenciesIncludingSideEffects.length; + let dependencies = dependenciesIncludingSideEffectsCount > legitDepsCount + ? dependenciesIncludingSideEffects.slice(0, legitDepsCount) + : dependenciesIncludingSideEffects; + // OPTIM: if unariesIncludingSideEffects.some(isGrafastError) then shortcut execution because everything fails + let hasPolyMatch = true; + if (step._isUnary && stepPolymorphicPaths !== null) { + // Check that at least one datapoint matches one of our paths + hasPolyMatch = false; + for (let dataIndex = 0; dataIndex < size; dataIndex++) { + if (stepPolymorphicPaths.has(polymorphicPathList[dataIndex])) { + hasPolyMatch = true; + break; + } + } + stepPolymorphicPaths = null; + } + for (let dataIndex = 0; dataIndex < expectedSize; dataIndex++) { + let forceIndexValue = hasPolyMatch + ? undefined + : null; + let rejectValue = undefined; + let indexFlags = hasPolyMatch + ? interfaces_js_1.NO_FLAGS + : interfaces_js_1.FLAG_POLY_SKIPPED; + if (stepPolymorphicPaths !== null && + !stepPolymorphicPaths.has(polymorphicPathList[dataIndex])) { + indexFlags |= interfaces_js_1.FLAG_POLY_SKIPPED; + forceIndexValue = null; + } + else if (extra._bucket.flagUnion) { + for (let i = 0; i < dependenciesIncludingSideEffectsCount; i++) { + const depExecutionVal = dependenciesIncludingSideEffects[i]; + const forbiddenFlags = dependencyForbiddenFlags[i]; + const onReject = dependencyOnReject[i]; + // Search for "f2b3b1b3" for similar block + const flags = depExecutionVal._flagsAt(dataIndex); + const disallowedFlags = flags & forbiddenFlags; + if (disallowedFlags) { + indexFlags |= disallowedFlags; + // If there's a reject behavior and we're FRESHLY rejected (weren't + // already inhibited), use that as a fallback. + // TODO: validate this. + // If dep is inhibited and we don't allow inhibited, copy through (null or error). + // If dep is inhibited and we do allow inhibited, but we're disallowed, use our onReject. + // If dep is not inhibited, but we're disallowed, use our onReject. + if (onReject !== undefined && + (disallowedFlags & (interfaces_js_1.FLAG_INHIBITED | interfaces_js_1.FLAG_ERROR)) === interfaces_js_1.NO_FLAGS) { + rejectValue ||= onReject; + } + if (forceIndexValue == null) { + if ((flags & interfaces_js_1.FLAG_ERROR) !== 0) { + const v = depExecutionVal.at(dataIndex); + forceIndexValue = v; + } + else { + forceIndexValue = null; + } + } + else { + // First error wins, ignore this second error. + } + // End "f2b3b1b3" block + break; + } + } + } + else { + // All good + } + if (forceIndexValue !== undefined) { + if (!needsTransform) { + needsTransform = true; + // Clone up until this point, make mutable, don't add self + dependencies = dependencies.map((ev) => ev.isBatch + ? // TODO: move this creation to happen once the full list is + // already built, ideally we shouldn't be mutating an execution + // value later. + batchExecutionValue(ev.entries.slice(0, dataIndex)) + : ev); + } + // Search for "17217999b7a7" for similar block + if (forceIndexValue == null && rejectValue != null) { + indexFlags |= interfaces_js_1.FLAG_ERROR; + forceIndexValue = rejectValue; + } + else { + indexFlags |= interfaces_js_1.FLAG_INHIBITED; + } + // End "17217999b7a7" block + forcedValues.flags[dataIndex] = indexFlags; + forcedValues.results[dataIndex] = forceIndexValue; + } + else { + newSize++; + if (needsTransform) { + // dependenciesWithoutErrors has limited content; add this non-error value + for (let depListIndex = 0; depListIndex < legitDepsCount; depListIndex++) { + const depList = dependencies[depListIndex]; + if (depList.isBatch) { + const depVal = dependenciesIncludingSideEffects[depListIndex]; + depList.entries.push(depVal.at(dataIndex)); + depList._flags.push(depVal._flagsAt(dataIndex)); + } + } + } + } + } + if (newSize === 0) { + // Everything is errors; we can skip execution + return forcedValues; + } + else if (needsTransform) { + const resultWithoutErrors = executeOrStream(newSize, step, dependencies, extra); + if ((0, utils_js_1.isPromiseLike)(resultWithoutErrors)) { + return resultWithoutErrors.then((r) => mergeErrorsBackIn(r, forcedValues, expectedSize)); + } + else { + return mergeErrorsBackIn(resultWithoutErrors, forcedValues, expectedSize); + } + } + else { + if (dev_js_1.isDev) { + assert.ok(newSize === expectedSize, "GrafastInternalError<47fca4ab-069c-428f-8374-267479c7fd27>: Expected newSize to equal expectedSize"); + } + return reallyExecuteStepWithoutFiltering(newSize, step, dependencies, extra); + } + } + /** + * This function MIGHT throw or reject, so be sure to handle that. + */ + function executeStep(step) { + // DELIBERATE SHADOWING! + const size = step._isUnary ? 1 : bucket.size; + try { + const meta = step.metaKey !== undefined ? metaByMetaKey[step.metaKey] : undefined; + const extra = { + stopTime, + meta, + eventEmitter, + stream: evaluateStream(bucket, step), + _bucket: bucket, + _requestContext: requestContext, + }; + /** Only mutate this inside `addDependency` */ + const _rawDependencies = []; + const _rawForbiddenFlags = []; + const _rawOnReject = []; + const dependencies = _rawDependencies; + let needsFiltering = false; + const defaultForbiddenFlags = (0, utils_js_1.sudo)(step).defaultForbiddenFlags; + const addDependency = ($dep, forbiddenFlags, onReject) => { + if (step._isUnary && !$dep._isUnary) { + throw new Error(`GrafastInternalError<58bc38e2-8722-4c19-ba38-fd01a020654b>: unary step ${step} cannot be made dependent on non-unary step ${$dep}!`); + } + const executionValue = store.get($dep.id); + if (executionValue === undefined) { + throw new Error(`GrafastInternalError: ${$dep} data couldn't be found, but required by ${step} (with side effect ${step.implicitSideEffectStep})!`); + } + _rawDependencies.push(executionValue); + _rawForbiddenFlags.push(forbiddenFlags); + _rawOnReject.push(onReject); + if (!needsFiltering && (bucket.flagUnion & forbiddenFlags) !== 0) { + const flags = executionValue._getStateUnion(); + needsFiltering = (flags & forbiddenFlags) !== 0; + } + }; + const sstep = (0, utils_js_1.sudo)(step); + const depCount = sstep.dependencies.length; + if (depCount > 0) { + for (let i = 0, l = depCount; i < l; i++) { + const $dep = sstep.dependencies[i]; + addDependency($dep, sstep.dependencyForbiddenFlags[i], sstep.dependencyOnReject[i]); + } + } + const $sideEffect = step.implicitSideEffectStep; + if ($sideEffect) { + if ($sideEffect._isUnary || !step._isUnary) { + addDependency($sideEffect, defaultForbiddenFlags, undefined); + } + } + if (dev_js_1.isDev && + step.layerPlan.reason.type === "polymorphic" && + step.polymorphicPaths === null) { + throw new Error(`GrafastInternalError: a step without polymorphic paths cannot belong to a polymorphic bucket`); + } + if (!needsFiltering) { + const isSelectiveStep = step.layerPlan.reason.type === "polymorphic" && + step.polymorphicPaths.size !== + step.layerPlan.reason.polymorphicPaths.size; + needsFiltering ||= isSelectiveStep; + } + const result = needsFiltering + ? reallyExecuteStepWithFiltering(step, dependencies, _rawForbiddenFlags, _rawOnReject, bucket.polymorphicPathList, extra) + : reallyExecuteStepWithoutFiltering(size, step, $sideEffect ? dependencies.slice(0, depCount) : dependencies, extra); + if ((0, utils_js_1.isPromiseLike)(result)) { + return result.then(null, (error) => { + // Don't need to do this here, it will be done where the + // ExecutionValue is created: + // bucket.hasNonZeroStatus = true; + return { + flags: (0, utils_js_1.arrayOfLength)(size, interfaces_js_1.FLAG_ERROR | interfaces_js_1.FLAG_STOPPED), + results: (0, utils_js_1.arrayOfLength)(size, error), + }; + }); + } + else { + return result; + } + } + catch (error) { + // Don't need to do this here, it will be done where the + // ExecutionValue is created: + // bucket.hasNonZeroStatus = true; + return { + flags: (0, utils_js_1.arrayOfLength)(size, interfaces_js_1.FLAG_ERROR | interfaces_js_1.FLAG_STOPPED), + results: (0, utils_js_1.arrayOfLength)(size, error), + }; + } + } + function executeSamePhaseChildren() { + // PERF: create a JIT factory for this at planning time + const childPromises = []; + // This promise should never reject + let mutationQueue = null; + /** + * Ensures that callback is only called once all other enqueued callbacks + * are called. + */ + const enqueue = (callback) => { + const result = mutationQueue ? mutationQueue.then(callback) : callback(); + if ((0, utils_js_1.isPromiseLike)(result)) { + mutationQueue = result.then(noop, noop); + } + return result; + }; + loop: for (const childLayerPlan of childLayerPlans) { + switch (childLayerPlan.reason.type) { + case "nullableBoundary": + case "listItem": + case "polymorphic": { + const childBucket = childLayerPlan.newBucket(bucket); + if (childBucket !== null) { + // Execute + const result = executeBucket(childBucket, requestContext); + if ((0, utils_js_1.isPromiseLike)(result)) { + childPromises.push(result); + } + } + break; + } + case "mutationField": { + const childBucket = childLayerPlan.newBucket(bucket); + if (childBucket !== null) { + // Enqueue for execution (mutations must run in order) + const promise = enqueue(() => executeBucket(childBucket, requestContext)); + if ((0, utils_js_1.isPromiseLike)(promise)) { + childPromises.push(promise); + } + } + break; + } + case "subroutine": + case "subscription": + case "defer": { + // Ignore; these are handled elsewhere + continue loop; + } + case "root": { + throw new Error( + // *confused emoji* + "GrafastInternalError<05fb7069-81b5-43f7-ae71-f62547d2c2b7>: root cannot be not the root (...)"); + } + default: { + const never = childLayerPlan.reason; + throw new Error(`GrafastInternalError: unhandled reason '${(0, inspect_js_1.inspect)(never)}'`); + } + } + } + if (childPromises.length > 0) { + return Promise.all(childPromises).then(() => { + bucket.isComplete = true; + return; + }); + } + else { + bucket.isComplete = true; + return; + } + } +} +/** @internal */ +function newBucket(spec, parentMetaByMetaKey) { + if (dev_js_1.isDev) { + // Some validations + if (!(spec.size > 0)) { + throw new Error("GrafastInternalError: No need to create an empty bucket!"); + } + assert.strictEqual(spec.polymorphicPathList.length, spec.size, "polymorphicPathList length must match bucket size"); + /* + for (let i = 0, l = spec.size; i < l; i++) { + const p = spec.polymorphicPathList[i]; + assert.strictEqual( + typeof p, + "string", + `Entry ${i} in polymorphicPathList for bucket for ${spec.layerPlan} was not a string`, + ); + } + */ + for (const [key, list] of spec.store.entries()) { + assert.ok(typeof list.isBatch === "boolean", `Store entry for step '${key}' for layerPlan '${spec.layerPlan.id}' should be an ExecutionValue`); + if (list.isBatch) { + assert.strictEqual(list.entries.length, spec.size, `Store entry for step '${key}' for layerPlan '${spec.layerPlan.id}' should have same length as bucket`); + } + } + if (!spec.iterators) { + throw new Error(`newBucket called but no iterators array was specified`); + } + } + const type = spec.layerPlan.reason.type; + const metaByMetaKey = parentMetaByMetaKey === null || + type === "root" || + type === "mutationField" || + type === "subscription" + ? // Reset the metaByMetaKey + spec.layerPlan.operationPlan.makeMetaByMetaKey() + : parentMetaByMetaKey; + // Copy from spec + const { layerPlan, store, size, flagUnion, polymorphicPathList, iterators } = spec; + const children = Object.create(null); + return { + toString: bucketToString, + layerPlan, + store, + size, + flagUnion, + polymorphicPathList, + iterators, + metaByMetaKey, + isComplete: false, + children, + setResult(step, index, value, flags) { + const stepId = step.id; + if (index >= size) { + throw new Error(`GrafastInternalError<9465db89-cc9d-415c-97e7-57bb19ddebe0>: attempt to write to out of bounds index ${index} for bucket of size ${size} for step ${step}`); + } + if (flags !== 0) { + this.flagUnion |= flags; + } + if (step._isUnary) { + if (dev_js_1.isDev && store.has(stepId)) { + const ev = store.get(stepId); + console.error(`GrafastInternalWarning<603e635f-af46-4feb-abb1-bac184bf7ef2>: value for step ${step} has already been stored to bucket ${layerPlan}; overwriting.`, { + isBatch: ev?.isBatch, + value0: ev?.at(0), + flags0: ev?._flagsAt(0), + }, { isBatch: false, value, flags }); + } + const ev = unaryExecutionValue(value, flags); + store.set(stepId, ev); + } + else { + const storeEntry = store.get(stepId); + if (!storeEntry || !storeEntry.isBatch) { + if (!storeEntry) { + throw new Error(`GrafastInternalError: value for step ${step} expected to be a batch value, but is not set`); + } + else { + throw new Error(`GrafastInternalError: value for step ${step} expected to be a batch value, but is unary (non-batch)`); + } + } + storeEntry._setResult(index, value, flags); + } + }, + }; +} +function bucketToString() { + return `Bucket<${this.layerPlan}>`; +} +// NOTE: I evaluated using `__proto__: batchExecutionValueProto` to extract the +// shared properties of these objects to see if performance was improved, but +// this was actually a net loss in performance. +// +// This is also evidence that you shouldn't trust ChatGPT for performance +// advice, and should always run your own benchmarks instead: +// https://chatgpt.com/share/67d1746f-4da8-8012-bdf8-707e54a4238e +// TODO: memoize? +function batchExecutionValue(entries, _flags = (0, utils_js_1.arrayOfLength)(entries.length, 0)) { + return { + // Try and keep these properties in the same order as unaryExecutionValue + isBatch: true, + at: batchEntriesAt, + unaryValue: batchThrowNotUnary, + _flagsAt: batchFlagsAt, + _getStateUnion: batchGetStateUnion, + _setResult: batchSetResult, + _copyResult: batchCopyResult, + entries, + _flags, + _cachedStateUnion: null, + }; +} +// TODO: memoize? +function unaryExecutionValue(value, _entryFlags = 0) { + return { + // Try and keep these properties in the same order as batchExecutionValue + isBatch: false, + at: unaryAt, + unaryValue: unaryThisDotValue, + _flagsAt: unaryFlagsAt, + _getStateUnion: unaryGetStateUnion, + _setResult: unarySetResult, + _copyResult: unaryCopyResult, + value, + _entryFlags, + }; +} +function batchThrowNotUnary() { + throw new Error(`This is not a unary value so we cannot get the single value - there may be more than one!`); +} +function batchGetStateUnion() { + if (this._cachedStateUnion === null) { + let u = interfaces_js_1.NO_FLAGS; + for (const flag of this._flags) { + u = u | flag; + } + this._cachedStateUnion = u; + } + return this._cachedStateUnion; +} +function batchEntriesAt(i) { + return this.entries[i]; +} +function batchFlagsAt(i) { + return this._flags[i]; +} +function batchSetResult(i, value, flags) { + this.entries[i] = value; + this._flags[i] = flags; +} +// NOTE: batchCopyResult and unaryCopyResult are **identical**, but we don't +// want a single megamorphic function so we define it twice. +function batchCopyResult(targetIndex, source, sourceIndex) { + this._setResult(targetIndex, source.at(sourceIndex), source._flagsAt(sourceIndex)); +} +function unaryCopyResult(targetIndex, source, sourceIndex) { + this._setResult(targetIndex, source.at(sourceIndex), source._flagsAt(sourceIndex)); +} +function unaryThisDotValue() { + return this.value; +} +function unaryAt() { + return this.value; +} +function unaryFlagsAt() { + return this._entryFlags; +} +function unaryGetStateUnion() { + return this._entryFlags; +} +function unarySetResult(i, value, flags) { + if (i !== 0) { + throw new Error(`Unary step only expects one result`); + } + this.value = value; + this._entryFlags = flags; +} +const indexMapCache = new Map(); +function makeIndexMap(count) { + const existing = indexMapCache.get(count); + if (existing !== undefined) { + return existing; + } + const result = (callback) => { + const results = []; + for (let i = 0; i < count; i++) { + results.push(callback(i)); + } + return results; + }; + if (count <= 100) { + indexMapCache.set(count, result); + } + return result; +} +const indexForEachCache = new Map(); +function makeIndexForEach(count) { + const existing = indexForEachCache.get(count); + if (existing !== undefined) { + return existing; + } + const result = (callback) => { + for (let i = 0; i < count; i++) { + callback(i); + } + }; + if (count <= 100) { + indexForEachCache.set(count, result); + } + return result; +} +function executeStepFromEvent(event) { + return event.step.execute(event.executeDetails); +} +function evaluateStream(bucket, step) { + const stream = step._stepOptions.stream; + if (!stream) + return null; + const shouldStream = stream.ifStepId == null + ? true + : (bucket.store.get(stream.ifStepId)?.unaryValue() ?? true); + if (!shouldStream) + return null; + const initialCount = stream.initialCountStepId == null + ? 0 + : (bucket.store.get(stream.initialCountStepId)?.unaryValue() ?? 0); + return { initialCount }; +} +//# sourceMappingURL=executeBucket.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeBucket.js.map b/grafast/grafast/dist/engine/executeBucket.js.map new file mode 100644 index 0000000000..c4530ad98c --- /dev/null +++ b/grafast/grafast/dist/engine/executeBucket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"executeBucket.js","sourceRoot":"","sources":["../../src/engine/executeBucket.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeOutputPlan.d.ts b/grafast/grafast/dist/engine/executeOutputPlan.d.ts new file mode 100644 index 0000000000..d080331315 --- /dev/null +++ b/grafast/grafast/dist/engine/executeOutputPlan.d.ts @@ -0,0 +1,30 @@ +import type { Bucket, RequestTools } from "../bucket.js"; +import type { OutputPlan } from "./OutputPlan.js"; +export type OutputPath = Array; +export interface OutputStream { + asyncIterable: AsyncIterableIterator; +} +export interface OutputPlanContext { + requestContext: RequestTools; + root: PayloadRoot; + path: ReadonlyArray; +} +export interface SubsequentPayloadSpec { + root: PayloadRoot; + path: ReadonlyArray; + bucket: Bucket; + bucketIndex: number; + outputPlan: OutputPlan; + label: string | undefined; +} +export interface SubsequentStreamSpec { + root: PayloadRoot; + path: ReadonlyArray; + bucket: Bucket; + bucketIndex: number; + outputPlan: OutputPlan; + label: string | undefined; + stream: AsyncIterator | Iterator; + startIndex: number; +} +//# sourceMappingURL=executeOutputPlan.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeOutputPlan.d.ts.map b/grafast/grafast/dist/engine/executeOutputPlan.d.ts.map new file mode 100644 index 0000000000..063b5b55b3 --- /dev/null +++ b/grafast/grafast/dist/engine/executeOutputPlan.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"executeOutputPlan.d.ts","sourceRoot":"","sources":["../../src/engine/executeOutputPlan.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKlD,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAChD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;CAC3C;AAoDD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,YAAY,CAAC;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IAIpC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IAInC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeOutputPlan.js b/grafast/grafast/dist/engine/executeOutputPlan.js new file mode 100644 index 0000000000..16b61c603f --- /dev/null +++ b/grafast/grafast/dist/engine/executeOutputPlan.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.executeOutputPlan = executeOutputPlan; +const tslib_1 = require("tslib"); +const debug_1 = tslib_1.__importDefault(require("debug")); +const assert = tslib_1.__importStar(require("../assert.js")); +const dev_js_1 = require("../dev.js"); +const debug = (0, debug_1.default)("grafast:OutputPlan"); +const debugVerbose = debug.extend("verbose"); +/** + * @internal + */ +function executeOutputPlan(ctx, outputPlan, bucket, bucketIndex, outputDataAsString) { + if (debugVerbose.enabled) { + debugVerbose("Executing %c with data:\n%c", outputPlan, bucket); + } + if (dev_js_1.isDev) { + assert.strictEqual(bucket.isComplete, true, "Can only process an output plan for a completed bucket"); + } + // PERF: feels like this path could be done more efficiently + const mutablePath = ["SOMEONE_FORGOT_TO_SLICE_THE_PATH!", ...ctx.path]; + return outputDataAsString + ? outputPlan.executeString(ctx.root, mutablePath, bucket, bucketIndex) + : outputPlan.execute(ctx.root, mutablePath, bucket, bucketIndex); +} +//# sourceMappingURL=executeOutputPlan.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/executeOutputPlan.js.map b/grafast/grafast/dist/engine/executeOutputPlan.js.map new file mode 100644 index 0000000000..e79cb420cf --- /dev/null +++ b/grafast/grafast/dist/engine/executeOutputPlan.js.map @@ -0,0 +1 @@ +{"version":3,"file":"executeOutputPlan.js","sourceRoot":"","sources":["../../src/engine/executeOutputPlan.ts"],"names":[],"mappings":";;AAsGA,8CAsBC;;AA5HD,0DAAiC;AAGjC,6DAAuC;AAEvC,sCAAkC;AAIlC,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,oBAAoB,CAAC,CAAC;AACjD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAyF7C;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,GAAsB,EACtB,UAAsB,EACtB,MAAc,EACd,WAAmB,EACnB,kBAA2B;IAE3B,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,YAAY,CAAC,6BAA6B,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,cAAK,EAAE,CAAC;QACV,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,UAAU,EACjB,IAAI,EACJ,wDAAwD,CACzD,CAAC;IACJ,CAAC;IACD,4DAA4D;IAC5D,MAAM,WAAW,GAAG,CAAC,mCAAmC,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACvE,OAAO,kBAAkB;QACvB,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC;QACtE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACrE,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts b/grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts new file mode 100644 index 0000000000..33ca61732e --- /dev/null +++ b/grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts @@ -0,0 +1,6 @@ +import type { FieldPlanResolver } from "../../interfaces.js"; +import type { Step } from "../../step.js"; +export declare const defaultPlanResolver: FieldPlanResolver Step; +}, any>; +//# sourceMappingURL=defaultPlanResolver.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts.map b/grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts.map new file mode 100644 index 0000000000..ee7d34c6e5 --- /dev/null +++ b/grafast/grafast/dist/engine/lib/defaultPlanResolver.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"defaultPlanResolver.d.ts","sourceRoot":"","sources":["../../../src/engine/lib/defaultPlanResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,CACjD,GAAG,EACH,IAAI,GAAG;IAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,EACxC,GAAG,CAKJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/defaultPlanResolver.js b/grafast/grafast/dist/engine/lib/defaultPlanResolver.js new file mode 100644 index 0000000000..fd24cc476d --- /dev/null +++ b/grafast/grafast/dist/engine/lib/defaultPlanResolver.js @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defaultPlanResolver = void 0; +const access_js_1 = require("../../steps/access.js"); +const defaultPlanResolver = ($step, _, { fieldName }) => { + return typeof $step.get === "function" + ? $step.get(fieldName) + : (0, access_js_1.access)($step, [fieldName]); +}; +exports.defaultPlanResolver = defaultPlanResolver; +//# sourceMappingURL=defaultPlanResolver.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/defaultPlanResolver.js.map b/grafast/grafast/dist/engine/lib/defaultPlanResolver.js.map new file mode 100644 index 0000000000..0bcfca1e96 --- /dev/null +++ b/grafast/grafast/dist/engine/lib/defaultPlanResolver.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defaultPlanResolver.js","sourceRoot":"","sources":["../../../src/engine/lib/defaultPlanResolver.ts"],"names":[],"mappings":";;;AAEA,qDAA+C;AAExC,MAAM,mBAAmB,GAI5B,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IAC9B,OAAO,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU;QACpC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;QACtB,CAAC,CAAC,IAAA,kBAAM,EAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC;AARW,QAAA,mBAAmB,uBAQ9B"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts new file mode 100644 index 0000000000..75ddf1b183 --- /dev/null +++ b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts @@ -0,0 +1,7 @@ +import type { Step } from "../.."; +import type { LayerPlan } from "../LayerPlan"; +export declare function withGlobalLayerPlan(layerPlan: LayerPlan, polymorphicPaths: ReadonlySet | null, callback: (this: TThis, ...args: TArgs) => T, callbackThis?: TThis, ...callbackArgs: TArgs): T; +export declare function currentLayerPlan(): LayerPlan; +export declare function currentPolymorphicPaths(): ReadonlySet | null; +export declare function isUnaryStep($step: Step): boolean; +//# sourceMappingURL=withGlobalLayerPlan.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts.map b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts.map new file mode 100644 index 0000000000..4e0a570676 --- /dev/null +++ b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"withGlobalLayerPlan.d.ts","sourceRoot":"","sources":["../../../src/engine/lib/withGlobalLayerPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,wBAAgB,mBAAmB,CACjC,CAAC,EACD,KAAK,GAAG,GAAG,EACX,KAAK,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,EAEjD,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,EAC5C,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,CAAC,EAC5C,YAAY,CAAC,EAAE,KAAK,EACpB,GAAG,YAAY,EAAE,KAAK,GACrB,CAAC,CAWH;AAED,wBAAgB,gBAAgB,IAAI,SAAS,CAQ5C;AAED,wBAAgB,uBAAuB,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAOpE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAEhD"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js new file mode 100644 index 0000000000..87634da14d --- /dev/null +++ b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.withGlobalLayerPlan = withGlobalLayerPlan; +exports.currentLayerPlan = currentLayerPlan; +exports.currentPolymorphicPaths = currentPolymorphicPaths; +exports.isUnaryStep = isUnaryStep; +let globalData_layerPlan = undefined; +let globalData_polymorphicPaths = undefined; +function withGlobalLayerPlan(layerPlan, polymorphicPaths, callback, callbackThis, ...callbackArgs) { + const oldLayerPlan = globalData_layerPlan; + globalData_layerPlan = layerPlan; + const oldPolymorphicPaths = globalData_polymorphicPaths; + globalData_polymorphicPaths = polymorphicPaths; + try { + return callback.apply(callbackThis, callbackArgs); + } + finally { + globalData_layerPlan = oldLayerPlan; + globalData_polymorphicPaths = oldPolymorphicPaths; + } +} +function currentLayerPlan() { + if (globalData_layerPlan === undefined) { + throw new Error( + // Must only be called from inside `withGlobalLayerPlan`! + "Now is not a valid time to call `currentLayerPlan`. This error typically occurs when you attempt to call a Grafast step function from outside of the planning lifecycle - it's important to note that Grafast plans must be resolved synchronously, so check for 'async' or 'setTimeout' or any location where a step function is called outside of a plan resolver. For more information, read about plan resolvers: https://grafast.org/grafast/plan-resolvers"); + } + return globalData_layerPlan; +} +function currentPolymorphicPaths() { + if (globalData_polymorphicPaths === undefined) { + throw new Error("GrafastInternalError: currentPolymorphicPaths called out of turn; must only called within a withGlobalLayerPlan callback"); + } + return globalData_polymorphicPaths; +} +function isUnaryStep($step) { + return $step._isUnary; +} +//# sourceMappingURL=withGlobalLayerPlan.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js.map b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js.map new file mode 100644 index 0000000000..812acde8e6 --- /dev/null +++ b/grafast/grafast/dist/engine/lib/withGlobalLayerPlan.js.map @@ -0,0 +1 @@ +{"version":3,"file":"withGlobalLayerPlan.js","sourceRoot":"","sources":["../../../src/engine/lib/withGlobalLayerPlan.ts"],"names":[],"mappings":";;AAOA,kDAqBC;AAED,4CAQC;AAED,0DAOC;AAED,kCAEC;AAhDD,IAAI,oBAAoB,GAA0B,SAAS,CAAC;AAC5D,IAAI,2BAA2B,GAC7B,SAAS,CAAC;AAEZ,SAAgB,mBAAmB,CAKjC,SAAoB,EACpB,gBAA4C,EAC5C,QAA4C,EAC5C,YAAoB,EACpB,GAAG,YAAmB;IAEtB,MAAM,YAAY,GAAG,oBAAoB,CAAC;IAC1C,oBAAoB,GAAG,SAAS,CAAC;IACjC,MAAM,mBAAmB,GAAG,2BAA2B,CAAC;IACxD,2BAA2B,GAAG,gBAAgB,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,KAAK,CAAC,YAAqB,EAAE,YAAY,CAAC,CAAC;IAC7D,CAAC;YAAS,CAAC;QACT,oBAAoB,GAAG,YAAY,CAAC;QACpC,2BAA2B,GAAG,mBAAmB,CAAC;IACpD,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB;IAC9B,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK;QACb,yDAAyD;QACzD,kcAAkc,CACnc,CAAC;IACJ,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC;AAED,SAAgB,uBAAuB;IACrC,IAAI,2BAA2B,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,gKAAgK,CACjK,CAAC;IACJ,CAAC;IACD,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,SAAgB,WAAW,CAAC,KAAW;IACrC,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lock.d.ts b/grafast/grafast/dist/engine/lock.d.ts new file mode 100644 index 0000000000..80971a099d --- /dev/null +++ b/grafast/grafast/dist/engine/lock.d.ts @@ -0,0 +1,4 @@ +import type { Step } from ".."; +export declare function lock($step: Step): void; +export declare function unlock($step: Step): boolean; +//# sourceMappingURL=lock.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lock.d.ts.map b/grafast/grafast/dist/engine/lock.d.ts.map new file mode 100644 index 0000000000..95b22c270b --- /dev/null +++ b/grafast/grafast/dist/engine/lock.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/engine/lock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAc/B,wBAAgB,IAAI,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAkDtC;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAO3C"} \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lock.js b/grafast/grafast/dist/engine/lock.js new file mode 100644 index 0000000000..6852960c05 --- /dev/null +++ b/grafast/grafast/dist/engine/lock.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.$$unlock = void 0; +exports.lock = lock; +exports.unlock = unlock; +/** + * Used internally to prevent steps using other steps' optimize/finalize/etc + * methods. + * + * @internal + */ +exports.$$unlock = Symbol("unlock"); +function isLocked($step) { + return $step[exports.$$unlock] !== undefined; +} +function lock($step) { + if (!isLocked($step)) { + const { optimize, finalize, deduplicate, deduplicatedWith } = $step; + if (optimize) { + $step.optimize = optimizeLocked; + } + if (typeof finalize === "function") { + $step.finalize = finalizeLocked; + } + if (deduplicate) { + $step.deduplicate = deduplicateLocked; + } + if (deduplicatedWith) { + $step.deduplicatedWith = deduplicatedWithLocked; + } + $step[exports.$$unlock] = () => { + $step[exports.$$unlock] = undefined; + if (optimize && $step.optimize !== optimizeLocked) { + console.warn(`Warning: ${$step}'s optimize method changed whilst locked`); + } + else { + $step.optimize = optimize; + } + if (typeof finalize === "function" && $step.finalize !== finalizeLocked) { + console.warn(`Warning: ${$step}'s finalize method changed whilst locked`); + } + else { + $step.finalize = finalize; + } + if (deduplicate && $step.deduplicate !== deduplicateLocked) { + console.warn(`Warning: ${$step}'s deduplicate method changed whilst locked`); + } + else { + $step.deduplicate = deduplicate; + } + if (deduplicatedWith && + $step.deduplicatedWith !== deduplicatedWithLocked) { + console.warn(`Warning: ${$step}'s deduplicatedWith method changed whilst locked`); + } + else { + $step.deduplicatedWith = deduplicatedWith; + } + }; + } +} +function unlock($step) { + if (isLocked($step)) { + $step[exports.$$unlock](); + return true; + } + else { + return false; + } +} +function optimizeLocked() { + throw new Error(`Only Grafast may call a step's optimize method; rather than calling optimize on the steps your class depends on, consider opting in to multiple optimization passes via \`allowMultipleOptimizations\`.`); +} +function finalizeLocked() { + throw new Error(`Only Grafast may call a step's finalize method; steps should not attempt to interact with other steps during finalize.`); +} +function deduplicateLocked() { + throw new Error(`Only Grafast may call a step's deduplicate method.`); +} +function deduplicatedWithLocked() { + throw new Error(`Only Grafast may call a step's deduplicatedWith method.`); +} +//# sourceMappingURL=lock.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/engine/lock.js.map b/grafast/grafast/dist/engine/lock.js.map new file mode 100644 index 0000000000..80490dcd7d --- /dev/null +++ b/grafast/grafast/dist/engine/lock.js.map @@ -0,0 +1 @@ +{"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/engine/lock.ts"],"names":[],"mappings":";;;AAcA,oBAkDC;AAED,wBAOC;AAvED;;;;;GAKG;AACU,QAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEzC,SAAS,QAAQ,CAAC,KAAW;IAC3B,OAAO,KAAK,CAAC,gBAAQ,CAAC,KAAK,SAAS,CAAC;AACvC,CAAC;AAED,SAAgB,IAAI,CAAC,KAAW;IAC9B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;QACpE,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC;QAClC,CAAC;QACD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACnC,KAAK,CAAC,QAAQ,GAAG,cAAc,CAAC;QAClC,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,WAAW,GAAG,iBAAiB,CAAC;QACxC,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,CAAC,gBAAgB,GAAG,sBAAsB,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,gBAAQ,CAAC,GAAG,GAAG,EAAE;YACrB,KAAK,CAAC,gBAAQ,CAAC,GAAG,SAAS,CAAC;YAC5B,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CACV,YAAY,KAAK,0CAA0C,CAC5D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,CAAC;YACD,IAAI,OAAO,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;gBACxE,OAAO,CAAC,IAAI,CACV,YAAY,KAAK,0CAA0C,CAC5D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,CAAC;YACD,IAAI,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,iBAAiB,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CACV,YAAY,KAAK,6CAA6C,CAC/D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,WAAW,GAAG,WAAW,CAAC;YAClC,CAAC;YACD,IACE,gBAAgB;gBAChB,KAAK,CAAC,gBAAgB,KAAK,sBAAsB,EACjD,CAAC;gBACD,OAAO,CAAC,IAAI,CACV,YAAY,KAAK,kDAAkD,CACpE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,MAAM,CAAC,KAAW;IAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,gBAAQ,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,KAAK,CACb,yMAAyM,CAC1M,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,KAAK,CACb,wHAAwH,CACzH,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACxE,CAAC;AACD,SAAS,sBAAsB;IAC7B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC7E,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/envelop.d.ts b/grafast/grafast/dist/envelop.d.ts new file mode 100644 index 0000000000..4ab6eef24c --- /dev/null +++ b/grafast/grafast/dist/envelop.d.ts @@ -0,0 +1,19 @@ +import type { Plugin as EnvelopPlugin } from "@envelop/core"; +export interface UseGrafastOptions { + /** + * Set this to 'true' to allow all explains; set it to a list of the allowed + * explains to allow only those, set it to false to disable explains. + */ + explainAllowed?: boolean | string[]; +} +/** + * An Envelop plugin that uses Grafast to prepare and execute the GraphQL + * query. + */ +export declare const useGrafast: (options?: UseGrafastOptions) => EnvelopPlugin; +/** + * An Envelop plugin that will make any GraphQL errors easier to read from + * inside of GraphiQL. + */ +export declare const useMoreDetailedErrors: () => EnvelopPlugin; +//# sourceMappingURL=envelop.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/envelop.d.ts.map b/grafast/grafast/dist/envelop.d.ts.map new file mode 100644 index 0000000000..e7be6432a0 --- /dev/null +++ b/grafast/grafast/dist/envelop.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"envelop.d.ts","sourceRoot":"","sources":["../src/envelop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAQ7D,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;CACrC;AA4BD;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,UAAS,iBAAsB,KAAG,aAiD5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,QAAO,aAcvC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/envelop.js b/grafast/grafast/dist/envelop.js new file mode 100644 index 0000000000..349d11a6d5 --- /dev/null +++ b/grafast/grafast/dist/envelop.js @@ -0,0 +1,85 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.useMoreDetailedErrors = exports.useGrafast = void 0; +const graphile_config_1 = require("graphile-config"); +const execute_js_1 = require("./execute.js"); +const stripAnsi_js_1 = require("./stripAnsi.js"); +const subscribe_js_1 = require("./subscribe.js"); +function processExplain(explainAllowed, explainHeaders) { + if (explainAllowed === false || + (Array.isArray(explainAllowed) && explainAllowed.length === 0)) { + return undefined; + } + const explainHeader = Array.isArray(explainHeaders) + ? explainHeaders.join(",") + : explainHeaders; + if (typeof explainHeader !== "string") { + return undefined; + } + const explainParts = explainHeader.split(","); + if (explainAllowed === true || explainAllowed === undefined) { + return explainParts; + } + // Assumption: explainAllowed is relatively short (and unique). + // PERF: there's probably a faster way to do this... + return explainAllowed.filter((p) => explainParts.includes(p)); +} +/** + * An Envelop plugin that uses Grafast to prepare and execute the GraphQL + * query. + */ +const useGrafast = (options = {}) => { + const { explainAllowed = true } = options; + return { + async onExecute(opts) { + const explainHeaders = opts.args.contextValue?.req?.headers["x-graphql-explain"]; + const explain = processExplain(explainAllowed, explainHeaders); + opts.setExecuteFn((args) => (0, execute_js_1.execute)(args, (0, graphile_config_1.resolvePreset)({ + grafast: { explain }, + }))); + }, + async onSubscribe(opts) { + const ctx = opts.args.contextValue; + const headersObj = ctx?.req?.headers || + ctx?.request?.headers || + ctx?.normalizedConnectionParams || + ctx?.connectionParams; + let explainHeaders; + if (headersObj) { + explainHeaders = headersObj["x-graphql-explain"]; + if (explainHeaders == null) { + const key = Object.keys(headersObj).find((k) => k.toLowerCase() === "x-graphql-explain"); + if (key != null) { + explainHeaders = headersObj[key]; + } + } + } + const explain = processExplain(explainAllowed, explainHeaders); + opts.setSubscribeFn(async (args) => (0, subscribe_js_1.subscribe)(args, (0, graphile_config_1.resolvePreset)({ + grafast: { explain }, + }))); + }, + }; +}; +exports.useGrafast = useGrafast; +/** + * An Envelop plugin that will make any GraphQL errors easier to read from + * inside of GraphiQL. + */ +const useMoreDetailedErrors = () => ({ + onExecute: () => ({ + onExecuteDone({ result }) { + if ("errors" in result && result.errors) { + result.errors = result.errors.map((e) => { + const obj = e.toJSON(); + return Object.assign(obj, { + message: (0, stripAnsi_js_1.stripAnsi)(obj.message), + extensions: { stack: (0, stripAnsi_js_1.stripAnsi)(e.stack ?? "").split("\n") }, + }); + }); + } + }, + }), +}); +exports.useMoreDetailedErrors = useMoreDetailedErrors; +//# sourceMappingURL=envelop.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/envelop.js.map b/grafast/grafast/dist/envelop.js.map new file mode 100644 index 0000000000..f176b82b1f --- /dev/null +++ b/grafast/grafast/dist/envelop.js.map @@ -0,0 +1 @@ +{"version":3,"file":"envelop.js","sourceRoot":"","sources":["../src/envelop.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/error.d.ts b/grafast/grafast/dist/error.d.ts new file mode 100644 index 0000000000..5efaf6783e --- /dev/null +++ b/grafast/grafast/dist/error.d.ts @@ -0,0 +1,31 @@ +import type { ExecutionEntryFlags } from "./interfaces.js"; +import { $$safeError } from "./interfaces.js"; +declare const $$flagged: unique symbol; +/** + * Wrapper for errors to return (rather than throw or reject) from user code. + */ +export interface FlaggedValue { + [$$flagged]: true; + flags: ExecutionEntryFlags; + value: TValue; + planId: number | null; + toString(): string; +} +export declare const $$inhibit: FlaggedValue; +/** + * Used to wrap error values to have Grafast treat them as if they were + * thrown/rejected (rather than just regular values). + */ +export declare function flagError(value: TError, planId?: number | null): FlaggedValue; +export declare class SafeError | undefined = Record | undefined> extends Error { + extensions: TExtensions; + static $$export: { + moduleName: string; + exportName: string; + }; + [$$safeError]: boolean; + constructor(message: string, extensions?: TExtensions, errorOptions?: ErrorOptions); +} +export declare function isSafeError(error: Error): error is SafeError; +export {}; +//# sourceMappingURL=error.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/error.d.ts.map b/grafast/grafast/dist/error.d.ts.map new file mode 100644 index 0000000000..3f60aafad1 --- /dev/null +++ b/grafast/grafast/dist/error.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,WAAW,EAIZ,MAAM,iBAAiB,CAAC;AAEzB,QAAA,MAAM,SAAS,eAAgC,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,MAAM,GAAG,GAAG;IACxC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,IAAI,MAAM,CAAC;CACpB;AAsCD,eAAO,MAAM,SAAS,oBAIrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,SAAS,KAAK,GAAG,KAAK,EACpD,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,YAAY,CAAC,MAAM,CAAC,CAEtB;AAWD,qBAAa,SAAS,CACpB,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAC/C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACnB,SAAS,CACb,SAAQ,KAAK;IAQJ,UAAU,EAAE,WAAW;IAPhC,MAAM,CAAC,QAAQ;;;MAGb;IACF,CAAC,WAAW,CAAC,UAAQ;gBAEnB,OAAO,EAAE,MAAM,EACR,UAAU,GAAE,WAAsC,EACzD,YAAY,CAAC,EAAE,YAAY;CAK9B;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,IAAI,SAAS,CAE5D"} \ No newline at end of file diff --git a/grafast/grafast/dist/error.js b/grafast/grafast/dist/error.js new file mode 100644 index 0000000000..610cac9e5c --- /dev/null +++ b/grafast/grafast/dist/error.js @@ -0,0 +1,73 @@ +"use strict"; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SafeError = exports.$$inhibit = void 0; +exports.flagError = flagError; +exports.isFlaggedValue = isFlaggedValue; +exports.isSafeError = isSafeError; +const dev_js_1 = require("./dev.js"); +const inspect_js_1 = require("./inspect.js"); +const interfaces_js_1 = require("./interfaces.js"); +const $$flagged = Symbol("grafastFlaggedValue"); +function flaggedValueToString() { + if (this.flags & interfaces_js_1.FLAG_ERROR && this.value instanceof Error) { + return String(this.value); + } + else if (this.flags & interfaces_js_1.FLAG_INHIBITED && this.value === null) { + return "INHIBIT"; + } + else { + return `${this.flags}/${(0, inspect_js_1.inspect)(this.value)}`; + } +} +function flaggedValue(flags, value, planId) { + if (dev_js_1.isDev) { + if (value === null && !(flags & interfaces_js_1.FLAG_NULL)) { + throw new Error(`flaggedValue called with null, but not flagged as null.`); + } + if (value === null && !(flags & interfaces_js_1.FLAG_INHIBITED)) { + throw new Error(`flaggedValue called with null, but not flagged as inhibited.`); + } + } + return { + [$$flagged]: true, + flags, + value, + planId, + toString: flaggedValueToString, + }; +} +exports.$$inhibit = flaggedValue(interfaces_js_1.FLAG_NULL | interfaces_js_1.FLAG_INHIBITED, null, null); +/** + * Used to wrap error values to have Grafast treat them as if they were + * thrown/rejected (rather than just regular values). + */ +function flagError(value, planId = null) { + return flaggedValue(interfaces_js_1.FLAG_ERROR, value, planId); +} +/** + * Is this a flagged value? + * + * @internal + */ +function isFlaggedValue(value) { + return Object.hasOwn(value, $$flagged); +} +class SafeError extends Error { + static { _a = interfaces_js_1.$$safeError; } + static { this.$$export = { + moduleName: "grafast", + exportName: "SafeError", + }; } + constructor(message, extensions = undefined, errorOptions) { + super(message, errorOptions); + this.extensions = extensions; + this[_a] = true; + Object.setPrototypeOf(this, SafeError.prototype); + } +} +exports.SafeError = SafeError; +function isSafeError(error) { + return error[interfaces_js_1.$$safeError]; +} +//# sourceMappingURL=error.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/error.js.map b/grafast/grafast/dist/error.js.map new file mode 100644 index 0000000000..af1d89e03b --- /dev/null +++ b/grafast/grafast/dist/error.js.map @@ -0,0 +1 @@ +{"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":";;;;AAqEA,8BAKC;AAOD,wCAEC;AAsBD,kCAEC;AA3GD,qCAAiC;AACjC,6CAAuC;AAEvC,mDAKyB;AAEzB,MAAM,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAahD,SAAS,oBAAoB;IAC3B,IAAI,IAAI,CAAC,KAAK,GAAG,0BAAU,IAAI,IAAI,CAAC,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,GAAG,8BAAc,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9D,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAA,oBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAA0B,EAC1B,KAAU,EACV,MAAqB;IAErB,IAAI,cAAK,EAAE,CAAC;QACV,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,yBAAS,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,yDAAyD,CAC1D,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,8BAAc,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO;QACL,CAAC,SAAS,CAAC,EAAE,IAAI;QACjB,KAAK;QACL,KAAK;QACL,MAAM;QACN,QAAQ,EAAE,oBAAoB;KAC/B,CAAC;AACJ,CAAC;AAEY,QAAA,SAAS,GAAG,YAAY,CACnC,yBAAS,GAAG,8BAAc,EAC1B,IAAI,EACJ,IAAI,CACL,CAAC;AAEF;;;GAGG;AACH,SAAgB,SAAS,CACvB,KAAa,EACb,SAAwB,IAAI;IAE5B,OAAO,YAAY,CAAC,0BAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAa,SAIX,SAAQ,KAAK;kBAKZ,2BAAW;aAJL,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,WAAW;KACxB,AAHc,CAGb;IAEF,YACE,OAAe,EACR,aAA0B,SAAwB,EACzD,YAA2B;QAE3B,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAHtB,eAAU,GAAV,UAAU,CAAwC;QAH3D,QAAa,GAAG,IAAI,CAAC;QAOnB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;;AAjBH,8BAkBC;AAED,SAAgB,WAAW,CAAC,KAAY;IACtC,OAAQ,KAAa,CAAC,2BAAW,CAAC,CAAC;AACrC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/establishOperationPlan.d.ts b/grafast/grafast/dist/establishOperationPlan.d.ts new file mode 100644 index 0000000000..3b7e7928ef --- /dev/null +++ b/grafast/grafast/dist/establishOperationPlan.d.ts @@ -0,0 +1,12 @@ +import type { GraphQLSchema, OperationDefinitionNode } from "graphql"; +import { OperationPlan } from "./index.js"; +import type { BaseGraphQLRootValue, BaseGraphQLVariables, Fragments } from "./interfaces.js"; +/** + * Implements the `EstablishOpPlan` algorithm. + * + * @remarks Though EstablishOpPlan accepts document and operationName, we + * instead accept operation and fragments since they're easier to get a hold of + * in GraphQL.js. + */ +export declare function establishOperationPlan(schema: GraphQLSchema, operation: OperationDefinitionNode, fragments: Fragments, variableValues: TVariables, context: TContext, rootValue: TRootValue, planningTimeout?: number | null): OperationPlan; +//# sourceMappingURL=establishOperationPlan.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/establishOperationPlan.d.ts.map b/grafast/grafast/dist/establishOperationPlan.d.ts.map new file mode 100644 index 0000000000..787a424b50 --- /dev/null +++ b/grafast/grafast/dist/establishOperationPlan.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"establishOperationPlan.d.ts","sourceRoot":"","sources":["../src/establishOperationPlan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAKtE,OAAO,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EAEpB,SAAS,EAEV,MAAM,iBAAiB,CAAC;AAoFzB;;;;;;GAMG;AAEH,wBAAgB,sBAAsB,CACpC,UAAU,SAAS,oBAAoB,GAAG,oBAAoB,EAC9D,QAAQ,SAAS,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,EAClD,UAAU,SAAS,oBAAoB,GAAG,oBAAoB,EAE9D,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,uBAAuB,EAClC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,UAAU,EAC1B,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE,UAAU,EACrB,eAAe,GAAE,MAAM,GAAG,IAAW,GACpC,aAAa,CAqJf"} \ No newline at end of file diff --git a/grafast/grafast/dist/establishOperationPlan.js b/grafast/grafast/dist/establishOperationPlan.js new file mode 100644 index 0000000000..bb8c176b47 --- /dev/null +++ b/grafast/grafast/dist/establishOperationPlan.js @@ -0,0 +1,201 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.establishOperationPlan = establishOperationPlan; +const tslib_1 = require("tslib"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const debug_1 = tslib_1.__importDefault(require("debug")); +const constraints_js_1 = require("./constraints.js"); +const dev_js_1 = require("./dev.js"); +const index_js_1 = require("./index.js"); +const interfaces_js_1 = require("./interfaces.js"); +const timeSource_js_1 = require("./timeSource.js"); +const debug = (0, debug_1.default)("grafast:establishOperationPlan"); +// How long is a timeout valid for? Here I've set it to 60 seconds. +const TIMEOUT_TIMEOUT = (typeof process !== "undefined" && + typeof process.env.GRAFAST_TIMEOUT_VALIDITY_MS === "string" + ? parseInt(process.env.GRAFAST_TIMEOUT_VALIDITY_MS, 10) + : null) || 60_000; +// OPTIMIZE: we should consider increasing the timeout once the process has been +// running a while (since the JIT should have kicked in) - we could even use +// `setTimeout` to trigger it after certain amount of time elapsed. +/** + * This is a development-only validation to check fragments do, in fact, match + * - even if the objects themselves differ. + */ +function reallyAssertFragmentsMatch(oldFragments, fragments) { + if (oldFragments !== fragments) { + debug("fragments aren't `===` for same operation"); + // Consistency check - we assume that if the operation is the same then + // the fragments will be, but this may not be the case depending on if + // GraphQL.js caches the operation node. + const oldKeys = Object.keys(oldFragments).sort(); + const newKeys = Object.keys(fragments).sort(); + const oldKeyStr = oldKeys.join(","); + const newKeyStr = newKeys.join(","); + if (oldKeyStr.length !== newKeyStr.length) { + throw new Error(`Inconsistency error: operation matches, but fragment keys differ: '${oldKeyStr}' != '${newKeyStr}'.`); + } + for (const key of newKeys) { + if (oldFragments[key] !== fragments[key]) { + throw new Error(`Inconsistency error: operation matches, fragment names match, but fragment '${key}' is not '===' to the previous value.`); + } + } + } +} +// Optimise this away in production. +const assertFragmentsMatch = !dev_js_1.isDev ? dev_js_1.noop : reallyAssertFragmentsMatch; +/** + * Implements the `IsOpPlanCompatible` algorithm. + * + * @remarks Due to the optimisation in `establishOperationPlan`, the schema, document + * and operationName checks have already been performed. + */ +function isOperationPlanResultCompatible(operationPlan, variableValues, context, rootValue) { + const { variableValuesConstraints, contextConstraints, rootValueConstraints, } = operationPlan; + if (!(0, constraints_js_1.matchesConstraints)(variableValuesConstraints, variableValues)) { + return false; + } + if (!(0, constraints_js_1.matchesConstraints)(contextConstraints, context)) { + return false; + } + if (!(0, constraints_js_1.matchesConstraints)(rootValueConstraints, rootValue)) { + return false; + } + return true; +} +/** + * Implements the `EstablishOpPlan` algorithm. + * + * @remarks Though EstablishOpPlan accepts document and operationName, we + * instead accept operation and fragments since they're easier to get a hold of + * in GraphQL.js. + */ +// eslint-disable-next-line @typescript-eslint/ban-types +function establishOperationPlan(schema, operation, fragments, variableValues, context, rootValue, planningTimeout = null) { + let cacheByOperation = schema.extensions.grafast?.[interfaces_js_1.$$cacheByOperation]; + let cache = cacheByOperation?.get(operation); + // These two variables to make it easy to trim the linked list later. + let count = 0; + let lastButOneItem = null; + if (cache !== undefined) { + // Dev-only validation + assertFragmentsMatch(cache.fragments, fragments); + let previousItem = null; + let linkedItem = cache.possibleOperationPlans; + while (linkedItem) { + const value = linkedItem.value; + if (isOperationPlanResultCompatible(value, variableValues, context, rootValue)) { + const { error, operationPlan } = value; + if (error != null) { + if (error instanceof index_js_1.SafeError) { + if (error.extensions?.[interfaces_js_1.$$timeout] != null) { + if (error.extensions[interfaces_js_1.$$ts] < timeSource_js_1.timeSource.now() - TIMEOUT_TIMEOUT) { + // Remove this out of date timeout + linkedItem = linkedItem.next; + if (previousItem !== null) { + previousItem.next = linkedItem; + } + else { + cache.possibleOperationPlans = linkedItem; + } + continue; + } + if (planningTimeout !== null && + error.extensions[interfaces_js_1.$$timeout] >= planningTimeout) { + // It was a timeout error - do not retry + throw error; + } + else { + // That's Not My Timeout, let's try again. + } + } + else { + // Not a timeout error - this will always fail in the same way? + throw error; + } + } + else { + // Not a timeout error - this will always fail in the same way? + throw error; + } + } + else { + // Hoist to top of linked list + if (previousItem !== null) { + // Remove linkedItem from existing chain + previousItem.next = linkedItem.next; + // Add rest of chain after linkedItem + linkedItem.next = cache.possibleOperationPlans; + // linkedItem is now head of chain + cache.possibleOperationPlans = linkedItem; + } + // We found a suitable OperationPlan - use that! + return operationPlan; + } + } + count++; + lastButOneItem = previousItem; + previousItem = linkedItem; + linkedItem = linkedItem.next; + } + } + // No suitable OperationPlan found, time to make one. + let operationPlan; + let error; + const variableValuesConstraints = []; + const contextConstraints = []; + const rootValueConstraints = []; + try { + operationPlan = new index_js_1.OperationPlan(schema, operation, fragments, variableValuesConstraints, variableValues, contextConstraints, context, rootValueConstraints, rootValue, planningTimeout); + } + catch (e) { + error = e; + } + // Store it to the cache + if (!cacheByOperation) { + if (!schema.extensions.grafast) { + schema.extensions.grafast = Object.create(null); + } + cacheByOperation = new lru_1.default({ + maxLength: schema.extensions.grafast.operationsCacheMaxLength ?? 500, + }); + schema.extensions.grafast[interfaces_js_1.$$cacheByOperation] = cacheByOperation; + } + const establishOperationPlanResult = { + variableValuesConstraints, + contextConstraints, + rootValueConstraints, + ...(operationPlan ? { operationPlan } : { error: error }), + }; + if (!cache) { + cache = { + fragments, + possibleOperationPlans: { + value: establishOperationPlanResult, + next: null, + }, + }; + cacheByOperation.set(operation, cache); + } + else { + const max = schema.extensions.grafast.operationOperationPlansCacheMaxLength ?? 50; + if (count >= max) { + // Remove the tail to ensure we never grow too big + lastButOneItem.next = null; + count--; + // LOGGING: we should announce this so that people know there's something that needs fixing in their schema (too much eval?) + } + // Add new operationPlan to top of the linked list. + cache.possibleOperationPlans = { + value: establishOperationPlanResult, + next: cache.possibleOperationPlans, + }; + } + if (error !== undefined) { + throw error; + } + else { + return operationPlan; + } +} +//# sourceMappingURL=establishOperationPlan.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/establishOperationPlan.js.map b/grafast/grafast/dist/establishOperationPlan.js.map new file mode 100644 index 0000000000..3eaddacca8 --- /dev/null +++ b/grafast/grafast/dist/establishOperationPlan.js.map @@ -0,0 +1 @@ +{"version":3,"file":"establishOperationPlan.js","sourceRoot":"","sources":["../src/establishOperationPlan.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/execute.d.ts b/grafast/grafast/dist/execute.d.ts new file mode 100644 index 0000000000..23c3f26e3a --- /dev/null +++ b/grafast/grafast/dist/execute.d.ts @@ -0,0 +1,14 @@ +import type { AsyncExecutionResult, ExecutionArgs, ExecutionResult } from "graphql"; +import type { PromiseOrValue } from "graphql/jsutils/PromiseOrValue"; +import type { GrafastExecutionArgs } from "./interfaces.js"; +/** + * @deprecated Second and third parameters should be passed as part of args, + * specifically `resolvedPreset` and `outputDataAsString`. + */ +export declare function execute(args: ExecutionArgs, resolvedPreset: GraphileConfig.ResolvedPreset | undefined, outputDataAsString?: boolean): PromiseOrValue>; +/** + * Use this instead of GraphQL.js' execute method and we'll automatically + * run grafastPrepare for you and handle the result. + */ +export declare function execute(args: GrafastExecutionArgs): PromiseOrValue>; +//# sourceMappingURL=execute.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/execute.d.ts.map b/grafast/grafast/dist/execute.d.ts.map new file mode 100644 index 0000000000..19f2d236fb --- /dev/null +++ b/grafast/grafast/dist/execute.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,eAAe,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,KAAK,EAIV,oBAAoB,EACrB,MAAM,iBAAiB,CAAC;AAgFzB;;;GAGG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,cAAc,CAAC,cAAc,GAAG,SAAS,EACzD,kBAAkB,CAAC,EAAE,OAAO,GAC3B,cAAc,CACf,eAAe,GAAG,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,CACxE,CAAC;AACF;;;GAGG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,oBAAoB,GACzB,cAAc,CACf,eAAe,GAAG,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,CACxE,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/execute.js b/grafast/grafast/dist/execute.js new file mode 100644 index 0000000000..e066d01058 --- /dev/null +++ b/grafast/grafast/dist/execute.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.withGrafastArgs = withGrafastArgs; +exports.execute = execute; +const tslib_1 = require("tslib"); +const eventemitter3_1 = tslib_1.__importDefault(require("eventemitter3")); +const dev_js_1 = require("./dev.js"); +const inspect_js_1 = require("./inspect.js"); +const interfaces_js_1 = require("./interfaces.js"); +const middleware_js_1 = require("./middleware.js"); +const prepare_js_1 = require("./prepare.js"); +const utils_js_1 = require("./utils.js"); +/** + * Used by `execute` and `subscribe`. + * @internal + */ +function withGrafastArgs(args) { + const options = args.resolvedPreset?.grafast; + if (dev_js_1.isDev) { + if (args.rootValue != null && + (typeof args.rootValue !== "object" || + Object.keys(args.rootValue).length > 0)) { + throw new Error(`Grafast executor doesn't support there being a rootValue (found ${(0, inspect_js_1.inspect)(args.rootValue)})`); + } + } + if (args.rootValue == null) { + args.rootValue = Object.create(null); + } + if (typeof args.rootValue !== "object" || args.rootValue == null) { + throw new Error("Grafast requires that the 'rootValue' be an object"); + } + const explain = options?.explain; + const shouldExplain = !!explain; + let unlisten = null; + if (shouldExplain) { + const eventEmitter = new eventemitter3_1.default(); + const explainOperations = []; + args.rootValue = Object.assign(Object.create(null), args.rootValue, { + [interfaces_js_1.$$eventEmitter]: eventEmitter, + [interfaces_js_1.$$extensions]: { + explain: { + operations: explainOperations, + }, + }, + }); + const handleExplainOperation = ({ operation, }) => { + if (explain === true || (explain && explain.includes(operation.type))) { + explainOperations.push(operation); + } + }; + eventEmitter.on("explainOperation", handleExplainOperation); + unlisten = () => { + eventEmitter.removeListener("explainOperation", handleExplainOperation); + }; + } + const rootValue = (0, prepare_js_1.grafastPrepare)(args, { + explain: options?.explain, + timeouts: options?.timeouts, + // TODO: Delete this + outputDataAsString: args.outputDataAsString, + }); + if (unlisten !== null) { + Promise.resolve(rootValue).then(unlisten, unlisten); + } + // Convert from PromiseOrDirect to PromiseOrValue + if ((0, utils_js_1.isPromiseLike)(rootValue)) { + return Promise.resolve(rootValue); + } + else { + return rootValue; + } +} +function execute(args, legacyResolvedPreset, legacyOutputDataAsString) { + // TODO: remove legacy compatibility + if (legacyResolvedPreset !== undefined) { + args.resolvedPreset = legacyResolvedPreset; + } + if (legacyOutputDataAsString !== undefined) { + args.outputDataAsString = legacyOutputDataAsString; + } + const { resolvedPreset } = args; + const middleware = args.middleware === undefined && resolvedPreset != null + ? (0, middleware_js_1.getGrafastMiddleware)(resolvedPreset) + : (args.middleware ?? null); + if (args.middleware === undefined) { + args.middleware = middleware; + } + if (middleware !== null) { + return middleware.run("execute", { args }, executeMiddlewareCallback); + } + else { + return withGrafastArgs(args); + } +} +const executeMiddlewareCallback = (event) => withGrafastArgs(event.args); +//# sourceMappingURL=execute.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/execute.js.map b/grafast/grafast/dist/execute.js.map new file mode 100644 index 0000000000..cd708c70d9 --- /dev/null +++ b/grafast/grafast/dist/execute.js.map @@ -0,0 +1 @@ +{"version":3,"file":"execute.js","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":";;AAyBA,0CAoEC;AAsBD,0BA4BC;;AA/ID,0EAAyC;AAQzC,qCAAiC;AACjC,6CAAuC;AAOvC,mDAA+D;AAC/D,mDAAuD;AACvD,6CAA8C;AAC9C,yCAA2C;AAE3C;;;GAGG;AACH,SAAgB,eAAe,CAC7B,IAA0B;IAI1B,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAC7C,IAAI,cAAK,EAAE,CAAC;QACV,IACE,IAAI,CAAC,SAAS,IAAI,IAAI;YACtB,CAAC,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;gBACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,EACzC,CAAC;YACD,MAAM,IAAI,KAAK,CACb,mEAAmE,IAAA,oBAAO,EACxE,IAAI,CAAC,SAAS,CACf,GAAG,CACL,CAAC;QACJ,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IACjC,MAAM,aAAa,GAAG,CAAC,CAAC,OAAO,CAAC;IAEhC,IAAI,QAAQ,GAAwB,IAAI,CAAC;IACzC,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,YAAY,GAAsC,IAAI,uBAAY,EAAE,CAAC;QAC3E,MAAM,iBAAiB,GAAU,EAAE,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE;YAClE,CAAC,8BAAc,CAAC,EAAE,YAAY;YAC9B,CAAC,4BAAY,CAAC,EAAE;gBACd,OAAO,EAAE;oBACP,UAAU,EAAE,iBAAiB;iBAC9B;aACF;SACF,CAAC,CAAC;QACH,MAAM,sBAAsB,GAAG,CAAC,EAC9B,SAAS,GAC6B,EAAE,EAAE;YAC1C,IAAI,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACtE,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;QACF,YAAa,CAAC,EAAE,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QAC7D,QAAQ,GAAG,GAAG,EAAE;YACd,YAAa,CAAC,cAAc,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;QAC3E,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,2BAAc,EAAC,IAAI,EAAE;QACrC,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,QAAQ,EAAE,OAAO,EAAE,QAAQ;QAC3B,oBAAoB;QACpB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;KAC5C,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IACD,iDAAiD;IACjD,IAAI,IAAA,wBAAa,EAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAsBD,SAAgB,OAAO,CACrB,IAA0B,EAC1B,oBAAoD,EACpD,wBAAkC;IAIlC,oCAAoC;IACpC,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC;IAC7C,CAAC;IACD,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,wBAAwB,CAAC;IACrD,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,cAAc,IAAI,IAAI;QACrD,CAAC,CAAC,IAAA,oCAAoB,EAAC,cAAc,CAAC;QACtC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,yBAAyB,GAAG,CAAC,KAAmB,EAAE,EAAE,CACxD,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/exportAs.d.ts b/grafast/grafast/dist/exportAs.d.ts new file mode 100644 index 0000000000..edbe8d3fb7 --- /dev/null +++ b/grafast/grafast/dist/exportAs.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=exportAs.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/exportAs.d.ts.map b/grafast/grafast/dist/exportAs.d.ts.map new file mode 100644 index 0000000000..7824d9145e --- /dev/null +++ b/grafast/grafast/dist/exportAs.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"exportAs.d.ts","sourceRoot":"","sources":["../src/exportAs.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/grafast/dist/exportAs.js b/grafast/grafast/dist/exportAs.js new file mode 100644 index 0000000000..738df34515 --- /dev/null +++ b/grafast/grafast/dist/exportAs.js @@ -0,0 +1,56 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.exportAs = exportAs; +exports.exportAsMany = exportAsMany; +const utils_js_1 = require("./utils.js"); +/** + * Marks that `thing` is exported from the `grafast` module as + * `exportName` so that `graphile-export` can convert references to `thing` + * into an `import` statement. + * + * @internal + */ +function exportAs(moduleName, thing, exportName) { + if (!("$$export" in thing)) { + Object.defineProperty(thing, "$$export", { + value: { moduleName, exportName }, + }); + } + else { + const e = thing.$$export; + if (e.moduleName !== moduleName) { + throw new Error(`Attempted to export ${thing} as '${moduleName}.${exportName}', but it's already exported as '${e.moduleName}.${e.exportName}' (module name mismatch)`); + } + if (typeof e.exportName === "string" || exportName === "string") { + if (e.exportName !== exportName) { + throw new Error(`Attempted to export ${thing} as '${moduleName}.${exportName}', but it's already exported as '${e.moduleName}.${e.exportName}' (export name mismatch)`); + } + } + else { + // Must be arrays + if (!Array.isArray(e.exportName) || + !Array.isArray(exportName) || + !(0, utils_js_1.arraysMatch)(e.exportName, exportName)) { + throw new Error(`Attempted to export ${thing} as '${moduleName}.${exportName}', but it's already exported as '${e.moduleName}.${e.exportName}' (export name path mismatch)`); + } + } + } + return thing; +} +/** + * Marks that each value in `all` is exported from the `grafast` + * module as the key in the `all` object so that `graphile-export` can + * convert references to these values into `import` statements. + * + * @internal + */ +function exportAsMany(moduleName, all) { + for (const key of Object.keys(all)) { + const value = all[key]; + if ((typeof value === "object" || typeof value === "function") && + value !== null) { + exportAs(moduleName, all[key], key); + } + } +} +//# sourceMappingURL=exportAs.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/exportAs.js.map b/grafast/grafast/dist/exportAs.js.map new file mode 100644 index 0000000000..cc520596d1 --- /dev/null +++ b/grafast/grafast/dist/exportAs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"exportAs.js","sourceRoot":"","sources":["../src/exportAs.ts"],"names":[],"mappings":";;AASA,4BAuCC;AASD,oCAaC;AAtED,yCAAyC;AAEzC;;;;;;GAMG;AACH,SAAgB,QAAQ,CACtB,UAAkB,EAClB,KAAQ,EACR,UAA6B;IAE7B,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE;YACvC,KAAK,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,KAAK,CAAC,QAGf,CAAC;QACF,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,QAAQ,UAAU,IAAI,UAAU,oCAAoC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,0BAA0B,CACvJ,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,QAAQ,UAAU,IAAI,UAAU,oCAAoC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,0BAA0B,CACvJ,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;gBAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC1B,CAAC,IAAA,sBAAW,EAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,EACtC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,QAAQ,UAAU,IAAI,UAAU,oCAAoC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,+BAA+B,CAC5J,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAC1B,UAAkB,EAClB,GAA2B;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IACE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,UAAU,CAAC;YAC1D,KAAK,KAAK,IAAI,EACd,CAAC;YACD,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/global.d.ts b/grafast/grafast/dist/global.d.ts new file mode 100644 index 0000000000..118bf81eb4 --- /dev/null +++ b/grafast/grafast/dist/global.d.ts @@ -0,0 +1,3 @@ +export declare function setDebug(newDebug: boolean): void; +export declare function getDebug(): boolean; +//# sourceMappingURL=global.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/global.d.ts.map b/grafast/grafast/dist/global.d.ts.map new file mode 100644 index 0000000000..979e1634fd --- /dev/null +++ b/grafast/grafast/dist/global.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AACA,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAEhD;AACD,wBAAgB,QAAQ,IAAI,OAAO,CAElC"} \ No newline at end of file diff --git a/grafast/grafast/dist/global.js b/grafast/grafast/dist/global.js new file mode 100644 index 0000000000..4be7cfc949 --- /dev/null +++ b/grafast/grafast/dist/global.js @@ -0,0 +1,12 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.setDebug = setDebug; +exports.getDebug = getDebug; +let debug = false; +function setDebug(newDebug) { + debug = newDebug; +} +function getDebug() { + return debug; +} +//# sourceMappingURL=global.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/global.js.map b/grafast/grafast/dist/global.js.map new file mode 100644 index 0000000000..cf6d25172b --- /dev/null +++ b/grafast/grafast/dist/global.js.map @@ -0,0 +1 @@ +{"version":3,"file":"global.js","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":";;AACA,4BAEC;AACD,4BAEC;AAND,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,SAAgB,QAAQ,CAAC,QAAiB;IACxC,KAAK,GAAG,QAAQ,CAAC;AACnB,CAAC;AACD,SAAgB,QAAQ;IACtB,OAAO,KAAK,CAAC;AACf,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/grafastGraphql.d.ts b/grafast/grafast/dist/grafastGraphql.d.ts new file mode 100644 index 0000000000..df84a18b81 --- /dev/null +++ b/grafast/grafast/dist/grafastGraphql.d.ts @@ -0,0 +1,15 @@ +import type { AsyncExecutionResult, ExecutionResult } from "graphql"; +import type { PromiseOrValue } from "graphql/jsutils/PromiseOrValue"; +import type { GrafastArgs } from "./interfaces.js"; +/** + * A replacement for GraphQL.js' `graphql` method that calls Grafast's + * execute instead + */ +export declare function grafast(args: GrafastArgs): PromiseOrValue>; +/** + * @deprecated Second and third parameters should be passed as part of args, + * specifically `resolvedPreset` and `requestContext`. + */ +export declare function grafast(args: GrafastArgs, legacyResolvedPreset?: GraphileConfig.ResolvedPreset | undefined, legacyCtx?: Partial | undefined): PromiseOrValue>; +export declare function grafastSync(args: GrafastArgs, legacyResolvedPreset?: GraphileConfig.ResolvedPreset, legacyRequestContext?: Partial): ExecutionResult; +//# sourceMappingURL=grafastGraphql.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/grafastGraphql.d.ts.map b/grafast/grafast/dist/grafastGraphql.d.ts.map new file mode 100644 index 0000000000..fb33eb2f35 --- /dev/null +++ b/grafast/grafast/dist/grafastGraphql.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"grafastGraphql.d.ts","sourceRoot":"","sources":["../src/grafastGraphql.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EAEpB,eAAe,EAEhB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAKrE,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,iBAAiB,CAAC;AAqGzB;;;GAGG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,WAAW,GAChB,cAAc,CACf,eAAe,GAAG,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,CACxE,CAAC;AACF;;;GAGG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,WAAW,EACjB,oBAAoB,CAAC,EAAE,cAAc,CAAC,cAAc,GAAG,SAAS,EAChE,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,SAAS,GACtD,cAAc,CACf,eAAe,GAAG,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,SAAS,CAAC,CACxE,CAAC;AAyFF,wBAAgB,WAAW,CACzB,IAAI,EAAE,WAAW,EACjB,oBAAoB,CAAC,EAAE,cAAc,CAAC,cAAc,EACpD,oBAAoB,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GACrD,eAAe,CAMjB"} \ No newline at end of file diff --git a/grafast/grafast/dist/grafastGraphql.js b/grafast/grafast/dist/grafastGraphql.js new file mode 100644 index 0000000000..950e8f9231 --- /dev/null +++ b/grafast/grafast/dist/grafastGraphql.js @@ -0,0 +1,152 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.grafast = grafast; +exports.grafastSync = grafastSync; +const tslib_1 = require("tslib"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const graphql = tslib_1.__importStar(require("graphql")); +const error_js_1 = require("./error.js"); +const execute_js_1 = require("./execute.js"); +const index_js_1 = require("./index.js"); +const interfaces_js_1 = require("./interfaces.js"); +const middleware_js_1 = require("./middleware.js"); +const utils_js_1 = require("./utils.js"); +const { GraphQLError, parse, Source, validate, validateSchema } = graphql; +/** Rough average size per query */ +const CACHE_MULTIPLIER = 100000; +const MEGABYTE = 1024 * 1024; +const queryCacheMaxSizeInBytes = 50 * MEGABYTE; +const defaultQueryCacheMaxSize = Math.max(2, Math.ceil(queryCacheMaxSizeInBytes / CACHE_MULTIPLIER)); +// If we can use crypto to create a hash, great. Otherwise just use the string. +let calculateQueryHash; +try { + let lastString; + let lastHash; + const createHash = require("crypto").createHash; + if (typeof createHash !== "function") { + throw new Error("Failed to load createHash"); + } + calculateQueryHash = (queryString) => { + if (queryString !== lastString) { + lastString = queryString; + lastHash = createHash("sha1").update(queryString).digest("base64"); + } + return lastHash; + }; +} +catch { + calculateQueryHash = (str) => str; +} +const parseAndValidate = (gqlSchema, stringOrSource) => { + let queryCache = gqlSchema.extensions.grafast?.[interfaces_js_1.$$queryCache]; + if (!queryCache) { + const cacheSize = gqlSchema.extensions.grafast?.queryCacheMaxLength ?? + defaultQueryCacheMaxSize; + queryCache = new lru_1.default({ maxLength: cacheSize }); + if (!gqlSchema.extensions.grafast) { + gqlSchema.extensions.grafast = Object.create(null); + } + gqlSchema.extensions.grafast[interfaces_js_1.$$queryCache] = queryCache; + } + // Only cache queries that are less than 100kB, we don't want DOS attacks + // attempting to exhaust our memory. + const hash = calculateQueryHash(typeof stringOrSource === "string" ? stringOrSource : stringOrSource.body); + const result = queryCache.get(hash); + if (result !== undefined) { + return result; + } + else { + const source = typeof stringOrSource === "string" + ? new Source(stringOrSource, "GraphQL Http Request") + : stringOrSource; + let queryDocumentAst; + // Catch an errors while parsing so that we can set the `statusCode` to + // 400. Otherwise we don’t need to parse this way. + try { + queryDocumentAst = parse(source); + // Validate our GraphQL query using given rules. + const validationErrors = validate(gqlSchema, queryDocumentAst); + const cacheResult = validationErrors.length > 0 ? validationErrors : queryDocumentAst; + queryCache.set(hash, cacheResult); + return cacheResult; + } + catch (error) { + const cacheResult = [ + error instanceof GraphQLError + ? error + : new GraphQLError("Validation error occurred", undefined, undefined, undefined, undefined, error), + ]; + queryCache.set(hash, cacheResult); + return cacheResult; + } + } +}; +function grafast(args, legacyResolvedPreset, legacyCtx) { + // Convert legacy args to properties on `args`: + if (legacyResolvedPreset !== undefined) { + args.resolvedPreset = args.resolvedPreset ?? legacyResolvedPreset; + } + if (legacyCtx !== undefined) { + args.requestContext = args.requestContext ?? legacyCtx; + } + const { schema, source, rootValue, contextValue, variableValues, operationName, fieldResolver, typeResolver, resolvedPreset, requestContext, middleware: rawMiddleware, } = args; + const middleware = rawMiddleware !== undefined + ? rawMiddleware + : resolvedPreset != null + ? (0, middleware_js_1.getGrafastMiddleware)(resolvedPreset) + : null; + // Validate Schema + const schemaValidationErrors = middleware != null && resolvedPreset != null + ? middleware.runSync("validateSchema", { schema, resolvedPreset }, validateSchemaWithEvent) + : validateSchema(schema); + if (schemaValidationErrors.length > 0) { + return { errors: schemaValidationErrors }; + } + // Cached parse and validate + const documentOrErrors = middleware != null && resolvedPreset != null + ? middleware.runSync("parseAndValidate", { resolvedPreset, schema, source }, parseAndValidateWithEvent) + : parseAndValidate(schema, source); + if (Array.isArray(documentOrErrors)) { + return { errors: documentOrErrors }; + } + const document = documentOrErrors; + const executionArgs = { + schema, + document, + rootValue, + contextValue, + variableValues, + operationName, + fieldResolver, + typeResolver, + middleware, + resolvedPreset, + requestContext, + }; + if (resolvedPreset && requestContext) { + const argsOrPromise = (0, index_js_1.hookArgs)(executionArgs); + if ((0, utils_js_1.isPromiseLike)(argsOrPromise)) { + return Promise.resolve(argsOrPromise).then(execute_js_1.execute); + } + else { + return (0, execute_js_1.execute)(argsOrPromise); + } + } + else { + return (0, execute_js_1.execute)(executionArgs); + } +} +function grafastSync(args, legacyResolvedPreset, legacyRequestContext) { + const result = grafast(args, legacyResolvedPreset, legacyRequestContext); + if ((0, utils_js_1.isPromiseLike)(result)) { + throw new error_js_1.SafeError("Grafast execution failed to complete synchronously."); + } + return result; +} +function validateSchemaWithEvent(event) { + return validateSchema(event.schema); +} +function parseAndValidateWithEvent(event) { + return parseAndValidate(event.schema, event.source); +} +//# sourceMappingURL=grafastGraphql.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/grafastGraphql.js.map b/grafast/grafast/dist/grafastGraphql.js.map new file mode 100644 index 0000000000..a1a8e943c0 --- /dev/null +++ b/grafast/grafast/dist/grafastGraphql.js.map @@ -0,0 +1 @@ +{"version":3,"file":"grafastGraphql.js","sourceRoot":"","sources":["../src/grafastGraphql.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/grafastPrint.d.ts b/grafast/grafast/dist/grafastPrint.d.ts new file mode 100644 index 0000000000..34ae76287c --- /dev/null +++ b/grafast/grafast/dist/grafastPrint.d.ts @@ -0,0 +1,16 @@ +import type { Bucket } from "./bucket.js"; +export declare function _grafastPrint(symbol: string | symbol | symbol[] | Record | Map, seen: Set): string; +export declare function recursivePrintBucket(bucket: Bucket, indentLevel?: number): string; +export declare function printStore(bucket: Bucket): string; +export declare function grafastColor(text: string, n: number): string; +/** + * Prints something grafast-style (i.e. concise, coloured, with helpful detail) + */ +export declare function grafastPrint(symbol: symbol | symbol[] | Record | Map | any): string; +/** + * An ANSI-aware pad function; strips ANSI sequences from the string, figures + * out how much it needs to pad it by, and then pads the original string by + * that amount. + */ +export declare function ansiPad(ansiString: string, targetLength: number, fill: string, position: "start" | "end"): string; +//# sourceMappingURL=grafastPrint.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/grafastPrint.d.ts.map b/grafast/grafast/dist/grafastPrint.d.ts.map new file mode 100644 index 0000000000..f825545321 --- /dev/null +++ b/grafast/grafast/dist/grafastPrint.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"grafastPrint.d.ts","sourceRoot":"","sources":["../src/grafastPrint.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AA+C1C,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EACxE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GACb,MAAM,CAsFR;AA2BD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,SAAI,GAAG,MAAM,CAW5E;AAkBD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAuCjD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAG5D;AAmCD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GACpE,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,OAAO,GAAG,KAAK,GACxB,MAAM,CAaR"} \ No newline at end of file diff --git a/grafast/grafast/dist/grafastPrint.js b/grafast/grafast/dist/grafastPrint.js new file mode 100644 index 0000000000..40fb2c54d3 --- /dev/null +++ b/grafast/grafast/dist/grafastPrint.js @@ -0,0 +1,238 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports._grafastPrint = _grafastPrint; +exports.recursivePrintBucket = recursivePrintBucket; +exports.printStore = printStore; +exports.grafastColor = grafastColor; +exports.grafastPrint = grafastPrint; +exports.ansiPad = ansiPad; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const executeBucket_js_1 = require("./engine/executeBucket.js"); +const OutputPlan_js_1 = require("./engine/OutputPlan.js"); +const inspect_js_1 = require("./inspect.js"); +const step_js_1 = require("./step.js"); +const stripAnsi_js_1 = require("./stripAnsi.js"); +const utils_js_1 = require("./utils.js"); +/* + * This file contains utilities used with the `debug` module primarily (but + * also used elsewhere) that are useful for outputting Grafast stuff in a + * more helpful way - typically with more relevant detail and colours to help + * you (me) digest things. + */ +const COLORS = [ + //chalk.black, + chalk_1.default.yellow, + chalk_1.default.magenta, + //chalk.cyan, + chalk_1.default.red, + //chalk.white, + //chalk.blackBright, + chalk_1.default.greenBright, + chalk_1.default.yellowBright, + chalk_1.default.blueBright, + chalk_1.default.magentaBright, + chalk_1.default.cyanBright, + chalk_1.default.redBright, + chalk_1.default.blue, + chalk_1.default.green, + //chalk.whiteBright, +]; +const BG_COLORS = [ + // chalk.bgRgb(53, 0, 0), + // chalk.bgRgb(0, 53, 0), + // chalk.bgRgb(0, 0, 53), + chalk_1.default.visible, + chalk_1.default.underline, +]; +function _grafastPrint(symbol, seen) { + if ((0, utils_js_1.isDeferred)(symbol)) { + return chalk_1.default.gray ``; + } + if ((0, utils_js_1.isPromise)(symbol)) { + return chalk_1.default.gray ``; + } + if (symbol === utils_js_1.ROOT_VALUE_OBJECT) { + return chalk_1.default.gray `(blank)`; + } + if (symbol instanceof step_js_1.Step) { + return String(symbol); + } + if (Array.isArray(symbol)) { + if (seen.has(symbol)) { + return chalk_1.default.gray `(loop)`; + } + seen.add(symbol); + return `[${symbol + .map((value, i) => BG_COLORS[i % BG_COLORS.length](_grafastPrint(value, new Set(seen)))) + .join(", ")}]`; + } + if (symbol instanceof Map) { + if (seen.has(symbol)) { + return chalk_1.default.gray `(loop)`; + } + seen.add(symbol); + const pairs = []; + let i = 0; + for (const [key, value] of symbol.entries()) { + pairs.push(BG_COLORS[i % BG_COLORS.length](`${_grafastPrint(key, new Set(seen))}: ${_grafastPrint(value, new Set(seen))}`)); + i++; + } + return `Map{${pairs.join(", ")}}`; + } + if (isBucket(symbol)) { + return recursivePrintBucket(symbol); + } + if (typeof symbol === "object" && symbol) { + if (symbol instanceof Error) { + return chalk_1.default.red(`ERROR<${(0, stripAnsi_js_1.stripAnsi)(String(symbol.message)) + .replace(/\s+/g, " ") + .substring(0, 30) + "..."}>`); + } + if (symbol instanceof OutputPlan_js_1.OutputPlan) { + return symbol.print(); + } + if (![null, Object.prototype, utils_js_1.sharedNull].includes(Object.getPrototypeOf(symbol))) { + return chalk_1.default.red(`OBJECT<${(0, stripAnsi_js_1.stripAnsi)(String(symbol))}>`); + } + if (seen.has(symbol)) { + return chalk_1.default.gray `(loop)`; + } + seen.add(symbol); + return `{${[...Object.keys(symbol), ...Object.getOwnPropertySymbols(symbol)] + .map((key, i) => BG_COLORS[i % BG_COLORS.length](`${_grafastPrint(key, new Set(seen))}: ${_grafastPrint(symbol[key], new Set(seen))}`)) + .join(", ")}}`; + } + if (typeof symbol !== "symbol") { + return (0, inspect_js_1.inspect)(symbol, { colors: true }); + } + return grafastPrintSymbol(symbol); +} +function isBucket(thing) { + return (typeof thing === "object" && + thing !== null && + thing.toString === executeBucket_js_1.bucketToString); +} +function _grafastSymbolDescription(symbol) { + if (!symbol.description) { + return chalk_1.default.green("Symbol()"); + } + const nStr = symbol.description?.replace(/[^0-9]/g, "") || ""; + const n = parseInt(nStr, 10) || 0; + if (n > 0) { + return grafastColor(symbol.description, n); + } + else { + return chalk_1.default.cyan(`$$${symbol.description}`); + } +} +function indent(level, string) { + return " ".repeat(level) + string.replace(/\n/g, `\n${" ".repeat(level)}`); +} +function recursivePrintBucket(bucket, indentLevel = 0) { + return indent(indentLevel, `Bucket for ${bucket.layerPlan} (size = ${bucket.size}): + Store: +${indent(4, printStore(bucket))} + Children: +${Object.entries(bucket.children) + .map(([_id, { bucket }]) => indent(4, recursivePrintBucket(bucket))) + .join("\n")}`); +} +const PRINT_STORE_INSPECT_OPTIONS = { + colors: true, + depth: 0, + showHidden: false, + maxArrayLength: 5, + maxStringLength: 50, +}; +function indentIfMultiline(string) { + if (string.includes("\n")) { + return indent(4, "\n" + string); + } + else { + return string; + } +} +function printStore(bucket) { + const output = []; + for (const [key, val] of bucket.store) { + const printKey = String(key).padStart(3, " "); + if (bucket.layerPlan.copyStepIds.includes(key)) { + output.push(`${printKey} (copy)`); + } + else if (val.isBatch) { + const step = bucket.layerPlan.operationPlan.stepTracker.getStepById(key, true); + output.push(`${printKey} (BATCH): ${step ?? "-"}\n${indent(2, val.entries + .map((e, i) => `${String(i).padStart(3, " ")}: flags=${String(val._flagsAt(i)).padStart(2, " ")} value=${indentIfMultiline((0, inspect_js_1.inspect)(val.at(i), PRINT_STORE_INSPECT_OPTIONS))}`) + .join("\n"))}`); + } + else { + const step = bucket.layerPlan.operationPlan.stepTracker.getStepById(key, true); + output.push(`${printKey} (UNARY/${String(val._entryFlags).padStart(2, " ")}) ${step ?? "-"}\n${indent(4, (0, inspect_js_1.inspect)(val.value, PRINT_STORE_INSPECT_OPTIONS))}`); + } + } + return output.join("\n") || "EMPTY"; +} +function grafastColor(text, n) { + const color = COLORS[Math.abs(n) % COLORS.length]; + return color(text); +} +const symbolsByAlias = new Map(); +let symbolClear = null; +/** + * Returns a text description for a symbol that helps differentiate similar + * symbols by keeping track of the symbols/descriptions it has seen and adding + * numeric identifiers to the output. Only tracks symbols over a short period + * so counts will reset very frequently. + */ +function grafastPrintSymbol(symbol) { + const description = _grafastSymbolDescription(symbol); + if (!symbolClear) { + // Only cache symbols for a few milliseconds, we don't want a memory leak! + symbolClear = setTimeout(() => { + symbolClear = null; + symbolsByAlias.clear(); + }, 200); + } + const symbols = symbolsByAlias.get(description); + if (!symbols) { + symbolsByAlias.set(description, [symbol]); + return description; + } + let idx = symbols.indexOf(symbol); + if (idx === 0) { + return description; + } + if (idx < 0) { + idx = symbols.push(symbol) - 1; + } + return `${description}${chalk_1.default.gray(`:${idx + 1}`)}`; +} +/** + * Prints something grafast-style (i.e. concise, coloured, with helpful detail) + */ +function grafastPrint(symbol) { + return _grafastPrint(symbol, new Set()); +} +/** + * An ANSI-aware pad function; strips ANSI sequences from the string, figures + * out how much it needs to pad it by, and then pads the original string by + * that amount. + */ +function ansiPad(ansiString, targetLength, fill, position) { + const string = (0, stripAnsi_js_1.stripAnsi)(ansiString); + const fillLength = targetLength - string.length; + if (fillLength >= 0) { + const fillString = fill.repeat(fillLength); + if (position === "start") { + return fillString + ansiString; + } + else { + return ansiString + fillString; + } + } + else { + return ansiString; + } +} +//# sourceMappingURL=grafastPrint.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/grafastPrint.js.map b/grafast/grafast/dist/grafastPrint.js.map new file mode 100644 index 0000000000..670568d236 --- /dev/null +++ b/grafast/grafast/dist/grafastPrint.js.map @@ -0,0 +1 @@ +{"version":3,"file":"grafastPrint.js","sourceRoot":"","sources":["../src/grafastPrint.ts"],"names":[],"mappings":";;AAiDA,sCAyFC;AA2BD,oDAWC;AAkBD,gCAuCC;AAED,oCAGC;AAsCD,oCAIC;AAOD,0BAkBC;;AAjTD,0DAA0B;AAG1B,gEAA2D;AAC3D,0DAAoD;AACpD,6CAAuC;AACvC,uCAAiC;AACjC,iDAA2C;AAC3C,yCAKoB;AAEpB;;;;;GAKG;AAEH,MAAM,MAAM,GAAG;IACb,cAAc;IACd,eAAK,CAAC,MAAM;IACZ,eAAK,CAAC,OAAO;IACb,aAAa;IACb,eAAK,CAAC,GAAG;IACT,cAAc;IACd,oBAAoB;IACpB,eAAK,CAAC,WAAW;IACjB,eAAK,CAAC,YAAY;IAClB,eAAK,CAAC,UAAU;IAChB,eAAK,CAAC,aAAa;IACnB,eAAK,CAAC,UAAU;IAChB,eAAK,CAAC,SAAS;IACf,eAAK,CAAC,IAAI;IACV,eAAK,CAAC,KAAK;IACX,oBAAoB;CACZ,CAAC;AAEX,MAAM,SAAS,GAAG;IAChB,yBAAyB;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,eAAK,CAAC,OAAO;IACb,eAAK,CAAC,SAAS;CACP,CAAC;AAEX,SAAgB,aAAa,CAC3B,MAAwE,EACxE,IAAc;IAEd,IAAI,IAAA,qBAAU,EAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,eAAK,CAAC,IAAI,CAAA,YAAY,CAAC;IAChC,CAAC;IACD,IAAI,IAAA,oBAAS,EAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,eAAK,CAAC,IAAI,CAAA,WAAW,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,KAAK,4BAAiB,EAAE,CAAC;QACjC,OAAO,eAAK,CAAC,IAAI,CAAA,SAAS,CAAC;IAC7B,CAAC;IACD,IAAI,MAAM,YAAY,cAAI,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,OAAO,eAAK,CAAC,IAAI,CAAA,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,IAAI,MAAM;aACd,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAChB,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CACrE;aACA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACnB,CAAC;IACD,IAAI,MAAM,YAAY,GAAG,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,OAAO,eAAK,CAAC,IAAI,CAAA,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5C,KAAK,CAAC,IAAI,CACR,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAC7B,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,aAAa,CACpD,KAAK,EACL,IAAI,GAAG,CAAC,IAAI,CAAC,CACd,EAAE,CACJ,CACF,CAAC;YACF,CAAC,EAAE,CAAC;QACN,CAAC;QACD,OAAO,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,EAAE,CAAC;QACzC,IAAI,MAAM,YAAY,KAAK,EAAE,CAAC;YAC5B,OAAO,eAAK,CAAC,GAAG,CACd,SACE,IAAA,wBAAS,EAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBAC9B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KACxB,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,YAAY,0BAAU,EAAE,CAAC;YACjC,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,IACE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,qBAAU,CAAC,CAAC,QAAQ,CAC5C,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAC9B,EACD,CAAC;YACD,OAAO,eAAK,CAAC,GAAG,CAAC,UAAU,IAAA,wBAAS,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACrB,OAAO,eAAK,CAAC,IAAI,CAAA,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;aACzE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACd,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAC7B,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,aAAa,CACnD,MAAc,CAAC,GAAG,CAAC,EACpB,IAAI,GAAG,CAAC,IAAI,CAAC,CACd,EAAE,CACJ,CACF;aACA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAA,oBAAO,EAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAU;IAC1B,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,QAAQ,KAAK,iCAAc,CAClC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9D,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,OAAO,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,eAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,MAAc;IAC3C,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAc,EAAE,WAAW,GAAG,CAAC;IAClE,OAAO,MAAM,CACX,WAAW,EACX,cAAc,MAAM,CAAC,SAAS,YAAY,MAAM,CAAC,IAAI;;EAEvD,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;;EAE7B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;SACnE,IAAI,CAAC,IAAI,CAAC,EAAE,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,2BAA2B,GAAG;IAClC,MAAM,EAAE,IAAI;IACZ,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,KAAK;IACjB,cAAc,EAAE,CAAC;IACjB,eAAe,EAAE,EAAE;CACpB,CAAC;AAEF,SAAS,iBAAiB,CAAC,MAAc;IACvC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc;IACvC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CACjE,GAAG,EACH,IAAI,CACL,CAAC;YACF,MAAM,CAAC,IAAI,CACT,GAAG,QAAQ,aAAa,IAAI,IAAI,GAAG,KAAK,MAAM,CAC5C,CAAC,EACD,GAAG,CAAC,OAAO;iBACR,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,MAAM,CAC5C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAChB,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,iBAAiB,CAC3C,IAAA,oBAAO,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAChD,EAAE,CACN;iBACA,IAAI,CAAC,IAAI,CAAC,CACd,EAAE,CACJ,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,CACjE,GAAG,EACH,IAAI,CACL,CAAC;YACF,MAAM,CAAC,IAAI,CACT,GAAG,QAAQ,WAAW,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAC5D,IAAI,IAAI,GACV,KAAK,MAAM,CAAC,CAAC,EAAE,IAAA,oBAAO,EAAC,GAAG,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC,EAAE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC;AACtC,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY,EAAE,CAAS;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAAoB,CAAC;AACnD,IAAI,WAAW,GAAwB,IAAI,CAAC;AAE5C;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,WAAW,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,0EAA0E;QAC1E,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,WAAW,GAAG,IAAI,CAAC;YACnB,cAAc,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IACD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,WAAW,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAC1B,MAAqE;IAErE,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CACrB,UAAkB,EAClB,YAAoB,EACpB,IAAY,EACZ,QAAyB;IAEzB,MAAM,MAAM,GAAG,IAAA,wBAAS,EAAC,UAAU,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,OAAO,UAAU,GAAG,UAAU,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,OAAO,UAAU,GAAG,UAAU,CAAC;QACjC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,UAAU,CAAC;IACpB,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlCollectFields.d.ts b/grafast/grafast/dist/graphqlCollectFields.d.ts new file mode 100644 index 0000000000..7df95cb5e3 --- /dev/null +++ b/grafast/grafast/dist/graphqlCollectFields.d.ts @@ -0,0 +1,10 @@ +import type { DirectiveNode } from "graphql"; +import type { __TrackedValueStep } from "./steps/index.js"; +export declare function evalDirectiveArgDirect(directive: DirectiveNode, argumentName: string, variableValuesStep: __TrackedValueStep, defaultValue: T): T | undefined; +export declare function newSelectionSetDigest(resolverEmulation: boolean): { + label: undefined; + fields: Map; + deferred: undefined; + resolverEmulation: boolean; +}; +//# sourceMappingURL=graphqlCollectFields.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlCollectFields.d.ts.map b/grafast/grafast/dist/graphqlCollectFields.d.ts.map new file mode 100644 index 0000000000..2122d93ecc --- /dev/null +++ b/grafast/grafast/dist/graphqlCollectFields.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"graphqlCollectFields.d.ts","sourceRoot":"","sources":["../src/graphqlCollectFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAId,MAAM,SAAS,CAAC;AAKjB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAmD3D,wBAAgB,sBAAsB,CAAC,CAAC,GAAG,OAAO,EAChD,SAAS,EAAE,aAAa,EACxB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,CAAC,GACd,CAAC,GAAG,SAAS,CAmCf;AA+FD,wBAAgB,qBAAqB,CAAC,iBAAiB,EAAE,OAAO;;;;;EAO/D"} \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlCollectFields.js b/grafast/grafast/dist/graphqlCollectFields.js new file mode 100644 index 0000000000..27a3348417 --- /dev/null +++ b/grafast/grafast/dist/graphqlCollectFields.js @@ -0,0 +1,228 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.evalDirectiveArg = evalDirectiveArg; +exports.evalDirectiveArgDirect = evalDirectiveArgDirect; +exports.newSelectionSetDigest = newSelectionSetDigest; +exports.graphqlCollectFields = graphqlCollectFields; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const error_js_1 = require("./error.js"); +const { GraphQLError, GraphQLInterfaceType, GraphQLObjectType, GraphQLUnionType, } = graphql; +/** + * Given a selection, finds the first directive named `directiveName`. + * + * @internal + * + * PERF: inline. + */ +function getDirective(selection, directiveName) { + return selection.directives?.find((d) => d.name.value === directiveName); +} +/** + * Given a selection, finds the first directive named `directiveName` and, if + * found, extracts and returns the value from the argument named + * `argumentName`, tracking variable access if necessary. + * + * @remarks Currently only supports booleans. + * + * @internal + * + * PERF: inline. + */ +function evalDirectiveArg(selection, directiveName, argumentName, variableValuesStep, defaultValue) { + const directive = getDirective(selection, directiveName); + if (!directive) + return undefined; + return evalDirectiveArgDirect(directive, argumentName, variableValuesStep, defaultValue); +} +function evalDirectiveArgDirect(directive, argumentName, variableValuesStep, defaultValue) { + if (!directive.arguments) + return defaultValue; + const argument = directive.arguments.find((a) => a.name.value === argumentName); + if (argument !== undefined) { + const value = argument.value; + switch (value.kind) { + case "Variable": { + return variableValuesStep.get(value.name.value).eval(); + } + case "BooleanValue": { + return value.value; + } + case "IntValue": { + return parseInt(value.value, 10); + } + case "FloatValue": { + return parseFloat(value.value); + } + case "StringValue": { + return value.value; + } + case "NullValue": { + return null; + } + default: { + throw new error_js_1.SafeError(`Unsupported @${directive.name}(${argumentName}:) argument; expected Variable, Boolean or null; but received '${value.kind}'`); + } + } + } + else { + return defaultValue; + } +} +/** + * Implements the `DoesFragmentTypeApply` algorithm from the GraphQL + * specification. + * + * @see https://spec.graphql.org/draft/#DoesFragmentTypeApply() + * + * @internal + */ +function graphqlDoesFragmentTypeApply(objectType, fragmentType) { + if (fragmentType instanceof GraphQLObjectType) { + return objectType === fragmentType; + } + else if (fragmentType instanceof GraphQLInterfaceType) { + const interfaces = objectType.getInterfaces(); + return interfaces.includes(fragmentType); + } + else if (fragmentType instanceof GraphQLUnionType) { + const types = fragmentType.getTypes(); + return types.includes(objectType); + } + else { + throw new Error("Invalid call to graphqlDoesFragmentTypeApply"); + } +} +const processFragment = (operationPlan, parentStepId, objectType, isMutation, selectionSetDigest, selection, fragmentSelectionSet, visitedFragments) => { + const trackedVariableValuesStep = operationPlan.trackedVariableValuesStep; + const defer = selection.directives?.find((d) => d.name.value === "defer"); + const deferIf = defer + ? (evalDirectiveArgDirect(defer, "if", trackedVariableValuesStep, true) ?? true) + : undefined; + const label = defer + ? (evalDirectiveArgDirect(defer, "label", trackedVariableValuesStep, null) ?? undefined) + : undefined; + const deferredDigest = deferIf === true + ? { + label, + fields: new Map(), + deferred: undefined, + resolverEmulation: selectionSetDigest.resolverEmulation, + } + : null; + if (deferredDigest !== null) { + if (selectionSetDigest.deferred === undefined) { + selectionSetDigest.deferred = [deferredDigest]; + } + else { + selectionSetDigest.deferred.push(deferredDigest); + } + } + graphqlCollectFields(operationPlan, parentStepId, objectType, fragmentSelectionSet.selections, deferredDigest ?? selectionSetDigest, isMutation, visitedFragments); +}; +function newSelectionSetDigest(resolverEmulation) { + return { + label: undefined, + fields: new Map(), + deferred: undefined, + resolverEmulation, + }; +} +/** + * Implements the `GraphQLCollectFields` algorithm - like `CollectFields` the + * GraphQL spec, but modified such that access to variables is tracked. + * + * @see https://spec.graphql.org/draft/#CollectFields() + * + * @internal + */ +function graphqlCollectFields(operationPlan, parentStepId, objectType, selections, selectionSetDigest, isMutation = false, +// This is significantly faster than an array or a Set +visitedFragments = Object.create(null)) { + // const objectTypeFields = objectType.getFields(); + const trackedVariableValuesStep = operationPlan.trackedVariableValuesStep; + for (let i = 0, l = selections.length; i < l; i++) { + const selection = selections[i]; + if (selection.directives !== undefined) { + if (evalDirectiveArg(selection, "skip", "if", trackedVariableValuesStep, true) === true) { + continue; + } + if (evalDirectiveArg(selection, "include", "if", trackedVariableValuesStep, true) === false) { + continue; + } + } + switch (selection.kind) { + case "Field": { + const field = selection; + const responseKey = field.alias ? field.alias.value : field.name.value; + let groupForResponseKey = selectionSetDigest.fields.get(responseKey); + if (groupForResponseKey === undefined) { + groupForResponseKey = [field]; + selectionSetDigest.fields.set(responseKey, groupForResponseKey); + } + else { + groupForResponseKey.push(field); + } + break; + } + case "FragmentSpread": { + const fragmentSpreadName = selection.name.value; + if (visitedFragments[fragmentSpreadName]) { + continue; + } + const fragment = operationPlan.fragments[fragmentSpreadName]; + // This is forbidden by validation + if (fragment == null) + continue; + const fragmentTypeName = fragment.typeCondition.name.value; + if (fragmentTypeName === objectType.name) { + // No further checks needed + } + else { + const fragmentType = operationPlan.schema.getType(fragmentTypeName); + // This is forbidden by validation + if (!fragmentType) + continue; + if (fragmentType.constructor === GraphQLObjectType || + /* According to validation, this must be the case */ + // !(isInterfaceType(fragmentType) || isUnionType(fragmentType)) || + !graphqlDoesFragmentTypeApply(objectType, fragmentType)) { + continue; + } + } + const fragmentSelectionSet = fragment.selectionSet; + const newVisitedFragments = Object.assign(Object.create(null), visitedFragments); + newVisitedFragments[fragmentSpreadName] = true; + processFragment(operationPlan, parentStepId, objectType, isMutation, selectionSetDigest, selection, fragmentSelectionSet, newVisitedFragments); + break; + } + case "InlineFragment": { + const fragmentTypeAst = selection.typeCondition; + if (fragmentTypeAst != null) { + const fragmentTypeName = fragmentTypeAst.name.value; + if (fragmentTypeName === objectType.name) { + // No further checks required + } + else { + const fragmentType = operationPlan.schema.getType(fragmentTypeName); + // This is forbidden by validation + if (fragmentType == null) { + throw new GraphQLError(`We don't have a type named '${fragmentTypeName}'`); + } + if (fragmentType.constructor === GraphQLObjectType || + /* According to validation, this must be the case */ + // !(isInterfaceType(fragmentType) || isUnionType(fragmentType)) || + !graphqlDoesFragmentTypeApply(objectType, fragmentType)) { + continue; + } + } + } + const fragmentSelectionSet = selection.selectionSet; + processFragment(operationPlan, parentStepId, objectType, isMutation, selectionSetDigest, selection, fragmentSelectionSet, visitedFragments); + break; + } + } + } + return selectionSetDigest; +} +//# sourceMappingURL=graphqlCollectFields.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlCollectFields.js.map b/grafast/grafast/dist/graphqlCollectFields.js.map new file mode 100644 index 0000000000..00ce41a76a --- /dev/null +++ b/grafast/grafast/dist/graphqlCollectFields.js.map @@ -0,0 +1 @@ +{"version":3,"file":"graphqlCollectFields.js","sourceRoot":"","sources":["../src/graphqlCollectFields.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlMergeSelectionSets.d.ts b/grafast/grafast/dist/graphqlMergeSelectionSets.d.ts new file mode 100644 index 0000000000..821023b82d --- /dev/null +++ b/grafast/grafast/dist/graphqlMergeSelectionSets.d.ts @@ -0,0 +1,8 @@ +import type { FieldNode, GraphQLObjectType, SelectionNode } from "graphql"; +import type { OperationPlan } from "./index.js"; +/** + * Given a list of polymorphic selections, return a list of the nested field + * selections that apply to the object type `type`. + */ +export declare function fieldSelectionsForType(operationPlan: OperationPlan, type: GraphQLObjectType, selections: ReadonlyArray, result?: Array): ReadonlyArray; +//# sourceMappingURL=graphqlMergeSelectionSets.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlMergeSelectionSets.d.ts.map b/grafast/grafast/dist/graphqlMergeSelectionSets.d.ts.map new file mode 100644 index 0000000000..027f265be3 --- /dev/null +++ b/grafast/grafast/dist/graphqlMergeSelectionSets.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"graphqlMergeSelectionSets.d.ts","sourceRoot":"","sources":["../src/graphqlMergeSelectionSets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EAEjB,aAAa,EACd,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA4BhD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,iBAAiB,EACvB,UAAU,EAAE,aAAa,CAAC,aAAa,CAAC,EACxC,MAAM,GAAE,KAAK,CAAC,SAAS,CAAM,GAC5B,aAAa,CAAC,SAAS,CAAC,CAgD1B"} \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlMergeSelectionSets.js b/grafast/grafast/dist/graphqlMergeSelectionSets.js new file mode 100644 index 0000000000..3a35f16b89 --- /dev/null +++ b/grafast/grafast/dist/graphqlMergeSelectionSets.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.fieldSelectionsForType = fieldSelectionsForType; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const inspect_js_1 = require("./inspect.js"); +const { Kind } = graphql; +// PERF: this is incredibly inefficient +function typeMatchesCondition(operationPlan, type, condition) { + const name = condition.name.value; + if (type.name === name) { + return true; + } + if (type.getInterfaces().some((i) => i.name === name)) { + return true; + } + if (operationPlan.unionsContainingObjectType[type.name].some((u) => u.name === name)) { + return true; + } + return false; +} +/** + * Given a list of polymorphic selections, return a list of the nested field + * selections that apply to the object type `type`. + */ +function fieldSelectionsForType(operationPlan, type, selections, result = []) { + for (let i = 0, l = selections.length; i < l; i++) { + const selection = selections[i]; + switch (selection.kind) { + case Kind.FRAGMENT_SPREAD: { + // Assumed to exist because query passed validation. + const fragment = operationPlan.fragments[selection.name.value]; + const typeCondition = fragment.typeCondition; + if (typeMatchesCondition(operationPlan, type, typeCondition)) { + fieldSelectionsForType(operationPlan, type, fragment.selectionSet.selections, result); + } + break; + } + case Kind.INLINE_FRAGMENT: { + const typeCondition = selection.typeCondition; + if (!typeCondition || + typeMatchesCondition(operationPlan, type, typeCondition)) { + fieldSelectionsForType(operationPlan, type, selection.selectionSet.selections, result); + } + break; + } + case Kind.FIELD: { + result.push(selection); + break; + } + default: { + const never = selection; + throw new Error(`GrafastInternalError<10b01e35-cf2b-4f48-9c66-486cdef00323>: cannot process selection '${(0, inspect_js_1.inspect)(never)}'`); + } + } + } + return result; +} +//# sourceMappingURL=graphqlMergeSelectionSets.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/graphqlMergeSelectionSets.js.map b/grafast/grafast/dist/graphqlMergeSelectionSets.js.map new file mode 100644 index 0000000000..d94968facb --- /dev/null +++ b/grafast/grafast/dist/graphqlMergeSelectionSets.js.map @@ -0,0 +1 @@ +{"version":3,"file":"graphqlMergeSelectionSets.js","sourceRoot":"","sources":["../src/graphqlMergeSelectionSets.ts"],"names":[],"mappings":";;AAwCA,wDAqDC;;AAvFD,yDAAmC;AAGnC,6CAAuC;AAEvC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAEzB,uCAAuC;AACvC,SAAS,oBAAoB,CAC3B,aAA4B,EAC5B,IAAuB,EACvB,SAAwB;IAExB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IACE,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CACvB,EACD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CACpC,aAA4B,EAC5B,IAAuB,EACvB,UAAwC,EACxC,SAA2B,EAAE;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC1B,oDAAoD;gBACpD,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/D,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;gBAC7C,IAAI,oBAAoB,CAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;oBAC7D,sBAAsB,CACpB,aAAa,EACb,IAAI,EACJ,QAAQ,CAAC,YAAY,CAAC,UAAU,EAChC,MAAM,CACP,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;gBAC1B,MAAM,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;gBAC9C,IACE,CAAC,aAAa;oBACd,oBAAoB,CAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,EACxD,CAAC;oBACD,sBAAsB,CACpB,aAAa,EACb,IAAI,EACJ,SAAS,CAAC,YAAY,CAAC,UAAU,EACjC,MAAM,CACP,CAAC;gBACJ,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,KAAK,GAAU,SAAS,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,yFAAyF,IAAA,oBAAO,EAC9F,KAAK,CACN,GAAG,CACL,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/index.d.ts b/grafast/grafast/dist/index.d.ts new file mode 100644 index 0000000000..32b356ab34 --- /dev/null +++ b/grafast/grafast/dist/index.d.ts @@ -0,0 +1,201 @@ +import "./thereCanBeOnlyOne.js"; +import type LRU from "@graphile/lru"; +import type { MiddlewareHandlers } from "graphile-config"; +import type { DocumentNode, GraphQLError, OperationDefinitionNode } from "graphql"; +import type { DataFromObjectSteps } from "./steps/object.js"; +type PromiseOrValue = T | Promise; +import { exportAs, exportAsMany } from "./exportAs.js"; +import { grafastPrint } from "./grafastPrint.js"; +import { EnumPlans, FieldPlans, GrafastPlans, InputObjectPlans, InterfaceOrUnionPlans, makeGrafastSchema, ObjectPlans, ScalarPlans } from "./makeGrafastSchema.js"; +import { defer, Deferred } from "./deferred.js"; +import { isDev, noop } from "./dev.js"; +import { defaultPlanResolver } from "./engine/lib/defaultPlanResolver.js"; +import { isUnaryStep } from "./engine/lib/withGlobalLayerPlan.js"; +import { OperationPlan } from "./engine/OperationPlan.js"; +import { $$inhibit, flagError, isSafeError, SafeError } from "./error.js"; +import { execute } from "./execute.js"; +import { grafast, grafastSync } from "./grafastGraphql.js"; +import type { $$cacheByOperation, $$hooked, $$queryCache, ArgumentApplyPlanResolver, BatchExecutionValue, CacheByOperationEntry, DataFromStep, EnumValueApplyResolver, EstablishOperationPlanEvent, ExecuteEvent, ExecuteStepEvent, ExecutionValue, GrafastExecutionArgs, GrafastTimeouts, InputObjectFieldApplyResolver, InputObjectTypeBakedInfo, InputObjectTypeBakedResolver, ParseAndValidateEvent, PrepareArgsEvent, ScalarInputPlanResolver, UnaryExecutionValue, ValidateSchemaEvent } from "./interfaces.js"; +import { $$bypassGraphQL, $$eventEmitter, $$extensions, $$idempotent, $$verbatim, BaseEventMap, BaseGraphQLArguments, BaseGraphQLRootValue, BaseGraphQLVariables, EventCallback, EventMapKey, ExecutionDetails, ExecutionDetailsStream, ExecutionEventEmitter, ExecutionEventMap, ExecutionExtra, ExecutionResults, ExecutionResultValue, FieldArg, FieldArgs, FieldInfo, FieldPlanResolver, GrafastArgumentConfig, GrafastFieldConfig, GrafastFieldConfigArgumentMap, GrafastInputFieldConfig, GrafastPlanJSON, GrafastResultsList, GrafastResultStreamList, GrafastSubscriber, GrafastValuesList, JSONArray, JSONObject, JSONValue, Maybe, NodeIdCodec, NodeIdHandler, OutputPlanForType, PolymorphicData, PromiseOrDirect, ScalarPlanResolver, StepOptimizeOptions, StepStreamOptions, TypedEventEmitter, UnbatchedExecutionExtra } from "./interfaces.js"; +import { getGrafastMiddleware } from "./middleware.js"; +import type { Multistep, UnwrapMultistep } from "./multistep.js"; +import { multistep } from "./multistep.js"; +import { getNullableInputTypeAtPath } from "./operationPlan-input.js"; +import { polymorphicWrap } from "./polymorphic.js"; +import { assertExecutableStep, assertListCapableStep, assertStep, isExecutableStep, isListCapableStep, isListLikeStep, isObjectLikeStep, isStep, ListCapableStep, ListLikeStep, ObjectLikeStep, PolymorphicStep, Step, UnbatchedStep } from "./step.js"; +import { __FlagStep, __InputListStep, __InputObjectStep, __InputObjectStepWithDollars, __InputStaticLeafStep, __ItemStep, __ListTransformStep, __TrackedValueStep, __TrackedValueStepWithDollars, __ValueStep, access, AccessStep, ActualKeyByDesiredKey, applyInput, ApplyInputStep, applyTransforms, ApplyTransformsStep, assertEdgeCapableStep, assertModifier, assertNotNull, assertPageInfoCapableStep, bakedInput, bakedInputRuntime, BakedInputStep, condition, ConditionStep, connection, ConnectionCapableStep, ConnectionStep, constant, ConstantStep, context, createObjectAndApplyChildren, debugPlans, each, EdgeCapableStep, EdgeStep, error, ErrorStep, filter, FilterPlanMemo, first, FirstStep, GraphQLItemHandler, graphqlItemHandler, graphqlResolver, GraphQLResolverStep, groupBy, GroupByPlanMemo, inhibitOnNull, isModifier, lambda, LambdaStep, last, LastStep, list, listen, ListenStep, ListStep, listTransform, ListTransformItemPlanCallback, ListTransformOptions, ListTransformReduce, LoadedRecordStep, loadMany, LoadManyCallback, loadManyCallback, loadOne, LoadOneCallback, loadOneCallback, LoadOptions, LoadStep, makeDecodeNodeId, makeDecodeNodeIdRuntime, Modifier, node, nodeIdFromNode, NodeStep, object, ObjectPlanMeta, ObjectStep, operationPlan, PageInfoCapableStep, partitionByIndex, polymorphicBranch, PolymorphicBranchMatcher, PolymorphicBranchMatchers, PolymorphicBranchStep, proxy, ProxyStep, remapKeys, RemapKeysStep, reverse, reverseArray, ReverseStep, rootValue, Setter, setter, SetterCapable, sideEffect, SideEffectStep, specFromNodeId, trackedContext, trackedRootValue, trap, TRAP_ERROR, TRAP_ERROR_OR_INHIBITED, TRAP_INHIBITED } from "./steps/index.js"; +import { stringifyPayload } from "./stringifyPayload.js"; +import { stripAnsi } from "./stripAnsi.js"; +import { subscribe } from "./subscribe.js"; +import { arrayOfLength, arraysMatch, getEnumValueConfig, getEnumValueConfigs, GrafastInputFieldConfigMap, GrafastInputObjectType, GrafastObjectType, inputObjectFieldSpec, InputObjectTypeSpec, isPromiseLike, newGrafastFieldConfigBuilder, newInputObjectTypeBuilder, newObjectTypeBuilder, objectFieldSpec, objectSpec, ObjectTypeFields, ObjectTypeSpec, stepADependsOnStepB, stepAMayDependOnStepB, stepsAreInSamePhase } from "./utils.js"; +export { isAsyncIterable } from "iterall"; +export { __FlagStep, __InputListStep, __InputObjectStep, __InputObjectStepWithDollars, __InputStaticLeafStep, __ItemStep, __ListTransformStep, __TrackedValueStep, __TrackedValueStepWithDollars, __ValueStep, $$bypassGraphQL, $$eventEmitter, $$extensions, $$idempotent, $$inhibit, $$verbatim, access, AccessStep, ActualKeyByDesiredKey, applyInput, ApplyInputStep, applyTransforms, ApplyTransformsStep, arrayOfLength, arraysMatch, assertEdgeCapableStep, assertExecutableStep, assertListCapableStep, assertModifier, assertNotNull, assertPageInfoCapableStep, assertStep, bakedInput, bakedInputRuntime, BakedInputStep, BaseEventMap, BaseGraphQLArguments, BaseGraphQLRootValue, BaseGraphQLVariables, BatchExecutionValue, condition, ConditionStep, connection, ConnectionCapableStep, ConnectionStep, constant, ConstantStep, context, createObjectAndApplyChildren, DataFromObjectSteps, DataFromStep, debugPlans, defaultPlanResolver, defer, Deferred, each, EdgeCapableStep, EdgeStep, EnumPlans, error, ErrorStep, EventCallback, EventMapKey, Step as ExecutableStep, execute, ExecutionDetails, ExecutionDetailsStream, ExecutionEventEmitter, ExecutionEventMap, ExecutionExtra, ExecutionResults, ExecutionResultValue, ExecutionValue, exportAs, exportAsMany, FieldArg, FieldArgs, FieldInfo, FieldPlanResolver, FieldPlans, filter, FilterPlanMemo, first, FirstStep, flagError, getEnumValueConfig, getEnumValueConfigs, getGrafastMiddleware, getNullableInputTypeAtPath, grafast, GrafastArgumentConfig, GrafastExecutionArgs, GrafastFieldConfig, GrafastFieldConfigArgumentMap, grafast as grafastGraphql, grafastSync as grafastGraphqlSync, GrafastInputFieldConfig, GrafastInputFieldConfigMap, GrafastInputObjectType, GrafastObjectType, GrafastPlanJSON, GrafastPlans, grafastPrint, GrafastResultsList, GrafastResultStreamList, GrafastSubscriber, grafastSync, GrafastValuesList, GraphQLItemHandler, graphqlItemHandler, graphqlResolver, GraphQLResolverStep, groupBy, GroupByPlanMemo, inhibitOnNull, InputObjectFieldApplyResolver, inputObjectFieldSpec, InputObjectPlans, InputObjectTypeBakedInfo, InputObjectTypeBakedResolver, InputObjectTypeSpec, InterfaceOrUnionPlans, isDev, isExecutableStep, isListCapableStep, isListLikeStep, isModifier, isObjectLikeStep, isPromiseLike, isSafeError, isStep, isUnaryStep, JSONArray, JSONObject, JSONValue, lambda, LambdaStep, last, LastStep, list, ListCapableStep, listen, ListenStep, ListLikeStep, ListStep, listTransform, ListTransformItemPlanCallback, ListTransformOptions, ListTransformReduce, LoadedRecordStep, loadMany, LoadManyCallback, loadManyCallback, loadOne, LoadOneCallback, loadOneCallback, LoadOptions, LoadStep, makeDecodeNodeId, makeDecodeNodeIdRuntime, makeGrafastSchema, Maybe, Modifier, Multistep, multistep, newGrafastFieldConfigBuilder, newInputObjectTypeBuilder, newObjectTypeBuilder, node, NodeIdCodec, nodeIdFromNode, NodeIdHandler, NodeStep, noop, object, objectFieldSpec, ObjectLikeStep, ObjectPlanMeta, ObjectPlans, objectSpec, ObjectStep, ObjectTypeFields, ObjectTypeSpec, OperationPlan, operationPlan, OutputPlanForType, PageInfoCapableStep, partitionByIndex, polymorphicBranch, PolymorphicBranchMatcher, PolymorphicBranchMatchers, PolymorphicBranchStep, PolymorphicData, PolymorphicStep, polymorphicWrap, PromiseOrDirect, proxy, ProxyStep, remapKeys, RemapKeysStep, reverse, reverseArray, ReverseStep, rootValue, SafeError, ScalarPlanResolver, ScalarPlans, Setter, setter, SetterCapable, sideEffect, SideEffectStep, specFromNodeId, Step, stepADependsOnStepB, stepAMayDependOnStepB, StepOptimizeOptions, stepsAreInSamePhase, StepStreamOptions, stringifyPayload, stripAnsi, subscribe, trackedContext, trackedRootValue, trap, TRAP_ERROR, TRAP_ERROR_OR_INHIBITED, TRAP_INHIBITED, TypedEventEmitter, UnaryExecutionValue, UnbatchedStep as UnbatchedExecutableStep, UnbatchedExecutionExtra, UnbatchedStep, UnwrapMultistep, }; +export { hookArgs } from "./args.js"; +export { version } from "./version.js"; +/** @deprecated Renamed to 'applyTransforms' */ +export declare const deepEval: typeof applyTransforms; +/** @deprecated Renamed to 'ApplyTransformsStep' */ +export declare const DeepEvalStep: typeof ApplyTransformsStep; +declare global { + namespace Grafast { + type ExecutionArgs = Pick & { + [$$hooked]?: boolean; + contextValue: Grafast.Context; + }; + /** + * Details about the incoming GraphQL request - e.g. if it was sent over an + * HTTP request, the request itself so headers can be interrogated. + * + * It's anticipated this will be expanded via declaration merging, e.g. if + * your server is Koa v2 then `RequestContext.koav2` might be added. + */ + interface RequestContext { + } + /** + * The GraphQL context our schemas expect, generally generated from details in Grafast.RequestContext + */ + interface Context { + } + interface FieldExtensions { + plan?: FieldPlanResolver; + subscribePlan?: FieldPlanResolver; + } + interface ArgumentExtensions { + applyPlan?: ArgumentApplyPlanResolver; + applySubscribePlan?: ArgumentApplyPlanResolver; + inputPlan?: never; + autoApplyAfterParentPlan?: never; + autoApplyAfterParentSubscribePlan?: never; + } + interface InputObjectTypeExtensions { + baked?: InputObjectTypeBakedResolver; + } + interface InputFieldExtensions { + apply?: InputObjectFieldApplyResolver; + inputPlan?: never; + applyPlan?: never; + autoApplyAfterParentInputPlan?: never; + autoApplyAfterParentApplyPlan?: never; + } + interface ObjectTypeExtensions { + assertStep?: ((step: Step) => asserts step is Step) | { + new (...args: any[]): Step; + } | null; + } + interface EnumTypeExtensions { + } + interface EnumValueExtensions { + /** + * EXPERIMENTAL! + * + * @experimental + */ + apply?: EnumValueApplyResolver; + applyPlan?: never; + } + interface ScalarTypeExtensions { + plan?: ScalarPlanResolver; + inputPlan?: ScalarInputPlanResolver; + /** + * Set true if `serialize(serialize(foo)) === serialize(foo)` for all foo + */ + idempotent?: boolean; + } + interface SchemaExtensions { + /** + * Maximum number of queries to store in this schema's query cache. + */ + queryCacheMaxLength?: number; + /** + * The underlying query cache + */ + [$$queryCache]?: LRU>; + /** + * Maximum number of operations to store an operation plan lookup cache for + */ + operationsCacheMaxLength?: number; + /** + * Maximum number of operation plans to store in a single operation's cache + */ + operationOperationPlansCacheMaxLength?: number; + /** + * The starting point for finding/storing the relevant OperationPlan for a request. + */ + [$$cacheByOperation]?: LRU; + } + } + namespace GraphileConfig { + interface GrafastOptions { + /** + * An object to merge into the GraphQL context. Alternatively, pass an + * (optionally asynchronous) function that returns an object to merge into + * the GraphQL context. + */ + context?: Partial | ((ctx: Partial, args: Grafast.ExecutionArgs) => PromiseOrValue>); + /** + * A list of 'explain' types that should be included in `extensions.explain`. + * + * - `plan` will cause the plan JSON to be included + * - other values are dependent on the plugins in play + * + * If set to `true` then all possible explain types will be exposed. + */ + explain?: boolean | string[]; + timeouts?: GrafastTimeouts; + } + interface Preset { + /** + * Options that control how `grafast` should execute your GraphQL + * operations. + */ + grafast?: GraphileConfig.GrafastOptions; + } + interface GrafastMiddleware { + /** Synchronous! */ + validateSchema(event: ValidateSchemaEvent): readonly GraphQLError[]; + /** Synchronous! */ + parseAndValidate(event: ParseAndValidateEvent): DocumentNode | readonly GraphQLError[]; + prepareArgs(event: PrepareArgsEvent): PromiseOrDirect; + execute(event: ExecuteEvent): ReturnType; + subscribe(event: ExecuteEvent): ReturnType; + /** Synchronous! */ + establishOperationPlan(event: EstablishOperationPlanEvent): OperationPlan; + executeStep(event: ExecuteStepEvent): PromiseOrDirect>; + } + interface Plugin { + grafast?: { + middleware?: MiddlewareHandlers; + }; + } + } +} +declare module "graphql" { + interface GraphQLFieldExtensions<_TSource, _TContext, _TArgs = any> { + grafast?: Grafast.FieldExtensions; + } + interface GraphQLArgumentExtensions { + grafast?: Grafast.ArgumentExtensions; + } + interface GraphQLInputObjectTypeExtensions { + grafast?: Grafast.InputObjectTypeExtensions; + } + interface GraphQLInputFieldExtensions { + grafast?: Grafast.InputFieldExtensions; + } + interface GraphQLObjectTypeExtensions<_TSource = any, _TContext = any> { + grafast?: Grafast.ObjectTypeExtensions; + } + interface GraphQLEnumTypeExtensions { + grafast?: Grafast.EnumTypeExtensions; + } + interface GraphQLEnumValueExtensions { + grafast?: Grafast.EnumValueExtensions; + } + interface GraphQLScalarTypeExtensions { + grafast?: Grafast.ScalarTypeExtensions; + } + interface GraphQLSchemaExtensions { + grafast?: Grafast.SchemaExtensions; + } +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/index.d.ts.map b/grafast/grafast/dist/index.d.ts.map new file mode 100644 index 0000000000..2fe96d2f2b --- /dev/null +++ b/grafast/grafast/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/index.js b/grafast/grafast/dist/index.js new file mode 100644 index 0000000000..cb9342c00f --- /dev/null +++ b/grafast/grafast/dist/index.js @@ -0,0 +1,328 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.execute = exports.ExecutableStep = exports.ErrorStep = exports.error = exports.EdgeStep = exports.each = exports.defer = exports.defaultPlanResolver = exports.debugPlans = exports.createObjectAndApplyChildren = exports.context = exports.ConstantStep = exports.constant = exports.ConnectionStep = exports.connection = exports.ConditionStep = exports.condition = exports.BakedInputStep = exports.bakedInputRuntime = exports.bakedInput = exports.assertStep = exports.assertPageInfoCapableStep = exports.assertNotNull = exports.assertModifier = exports.assertListCapableStep = exports.assertExecutableStep = exports.assertEdgeCapableStep = exports.arraysMatch = exports.arrayOfLength = exports.ApplyTransformsStep = exports.applyTransforms = exports.ApplyInputStep = exports.applyInput = exports.AccessStep = exports.access = exports.$$verbatim = exports.$$inhibit = exports.$$idempotent = exports.$$extensions = exports.$$eventEmitter = exports.$$bypassGraphQL = exports.__ValueStep = exports.__TrackedValueStep = exports.__ListTransformStep = exports.__ItemStep = exports.__InputStaticLeafStep = exports.__InputObjectStep = exports.__InputListStep = exports.__FlagStep = exports.isAsyncIterable = void 0; +exports.makeGrafastSchema = exports.makeDecodeNodeIdRuntime = exports.makeDecodeNodeId = exports.LoadStep = exports.loadOneCallback = exports.loadOne = exports.loadManyCallback = exports.loadMany = exports.LoadedRecordStep = exports.listTransform = exports.ListStep = exports.ListenStep = exports.listen = exports.list = exports.LastStep = exports.last = exports.LambdaStep = exports.lambda = exports.isUnaryStep = exports.isStep = exports.isSafeError = exports.isPromiseLike = exports.isObjectLikeStep = exports.isModifier = exports.isListLikeStep = exports.isListCapableStep = exports.isExecutableStep = exports.isDev = exports.inputObjectFieldSpec = exports.inhibitOnNull = exports.groupBy = exports.GraphQLResolverStep = exports.graphqlResolver = exports.graphqlItemHandler = exports.GraphQLItemHandler = exports.grafastSync = exports.grafastPrint = exports.grafastGraphqlSync = exports.grafastGraphql = exports.grafast = exports.getNullableInputTypeAtPath = exports.getGrafastMiddleware = exports.getEnumValueConfigs = exports.getEnumValueConfig = exports.flagError = exports.FirstStep = exports.first = exports.filter = exports.exportAsMany = exports.exportAs = void 0; +exports.version = exports.hookArgs = exports.UnbatchedStep = exports.UnbatchedExecutableStep = exports.TRAP_INHIBITED = exports.TRAP_ERROR_OR_INHIBITED = exports.TRAP_ERROR = exports.trap = exports.trackedRootValue = exports.trackedContext = exports.subscribe = exports.stripAnsi = exports.stringifyPayload = exports.stepsAreInSamePhase = exports.stepAMayDependOnStepB = exports.stepADependsOnStepB = exports.Step = exports.specFromNodeId = exports.SideEffectStep = exports.sideEffect = exports.setter = exports.Setter = exports.SafeError = exports.rootValue = exports.ReverseStep = exports.reverseArray = exports.reverse = exports.RemapKeysStep = exports.remapKeys = exports.ProxyStep = exports.proxy = exports.polymorphicWrap = exports.PolymorphicBranchStep = exports.polymorphicBranch = exports.partitionByIndex = exports.operationPlan = exports.OperationPlan = exports.ObjectStep = exports.objectSpec = exports.objectFieldSpec = exports.object = exports.noop = exports.NodeStep = exports.nodeIdFromNode = exports.node = exports.newObjectTypeBuilder = exports.newInputObjectTypeBuilder = exports.newGrafastFieldConfigBuilder = exports.multistep = exports.Modifier = void 0; +exports.DeepEvalStep = exports.deepEval = void 0; +const tslib_1 = require("tslib"); +require("./thereCanBeOnlyOne.js"); +const debug_1 = tslib_1.__importDefault(require("debug")); +const exportAs_js_1 = require("./exportAs.js"); +Object.defineProperty(exports, "exportAs", { enumerable: true, get: function () { return exportAs_js_1.exportAs; } }); +Object.defineProperty(exports, "exportAsMany", { enumerable: true, get: function () { return exportAs_js_1.exportAsMany; } }); +const grafastPrint_js_1 = require("./grafastPrint.js"); +Object.defineProperty(exports, "grafastPrint", { enumerable: true, get: function () { return grafastPrint_js_1.grafastPrint; } }); +const makeGrafastSchema_js_1 = require("./makeGrafastSchema.js"); +Object.defineProperty(exports, "makeGrafastSchema", { enumerable: true, get: function () { return makeGrafastSchema_js_1.makeGrafastSchema; } }); +// HACK: doing this here feels "naughty". +debug_1.default.formatters.c = grafastPrint_js_1.grafastPrint; +const deferred_js_1 = require("./deferred.js"); +Object.defineProperty(exports, "defer", { enumerable: true, get: function () { return deferred_js_1.defer; } }); +// Handy for debugging +const dev_js_1 = require("./dev.js"); +Object.defineProperty(exports, "isDev", { enumerable: true, get: function () { return dev_js_1.isDev; } }); +Object.defineProperty(exports, "noop", { enumerable: true, get: function () { return dev_js_1.noop; } }); +const defaultPlanResolver_js_1 = require("./engine/lib/defaultPlanResolver.js"); +Object.defineProperty(exports, "defaultPlanResolver", { enumerable: true, get: function () { return defaultPlanResolver_js_1.defaultPlanResolver; } }); +const withGlobalLayerPlan_js_1 = require("./engine/lib/withGlobalLayerPlan.js"); +Object.defineProperty(exports, "isUnaryStep", { enumerable: true, get: function () { return withGlobalLayerPlan_js_1.isUnaryStep; } }); +const OperationPlan_js_1 = require("./engine/OperationPlan.js"); +Object.defineProperty(exports, "OperationPlan", { enumerable: true, get: function () { return OperationPlan_js_1.OperationPlan; } }); +const error_js_1 = require("./error.js"); +Object.defineProperty(exports, "$$inhibit", { enumerable: true, get: function () { return error_js_1.$$inhibit; } }); +Object.defineProperty(exports, "flagError", { enumerable: true, get: function () { return error_js_1.flagError; } }); +Object.defineProperty(exports, "isSafeError", { enumerable: true, get: function () { return error_js_1.isSafeError; } }); +Object.defineProperty(exports, "SafeError", { enumerable: true, get: function () { return error_js_1.SafeError; } }); +const execute_js_1 = require("./execute.js"); +Object.defineProperty(exports, "execute", { enumerable: true, get: function () { return execute_js_1.execute; } }); +const grafastGraphql_js_1 = require("./grafastGraphql.js"); +Object.defineProperty(exports, "grafast", { enumerable: true, get: function () { return grafastGraphql_js_1.grafast; } }); +Object.defineProperty(exports, "grafastGraphql", { enumerable: true, get: function () { return grafastGraphql_js_1.grafast; } }); +Object.defineProperty(exports, "grafastGraphqlSync", { enumerable: true, get: function () { return grafastGraphql_js_1.grafastSync; } }); +Object.defineProperty(exports, "grafastSync", { enumerable: true, get: function () { return grafastGraphql_js_1.grafastSync; } }); +const interfaces_js_1 = require("./interfaces.js"); +Object.defineProperty(exports, "$$bypassGraphQL", { enumerable: true, get: function () { return interfaces_js_1.$$bypassGraphQL; } }); +Object.defineProperty(exports, "$$eventEmitter", { enumerable: true, get: function () { return interfaces_js_1.$$eventEmitter; } }); +Object.defineProperty(exports, "$$extensions", { enumerable: true, get: function () { return interfaces_js_1.$$extensions; } }); +Object.defineProperty(exports, "$$idempotent", { enumerable: true, get: function () { return interfaces_js_1.$$idempotent; } }); +Object.defineProperty(exports, "$$verbatim", { enumerable: true, get: function () { return interfaces_js_1.$$verbatim; } }); +const middleware_js_1 = require("./middleware.js"); +Object.defineProperty(exports, "getGrafastMiddleware", { enumerable: true, get: function () { return middleware_js_1.getGrafastMiddleware; } }); +const multistep_js_1 = require("./multistep.js"); +Object.defineProperty(exports, "multistep", { enumerable: true, get: function () { return multistep_js_1.multistep; } }); +const operationPlan_input_js_1 = require("./operationPlan-input.js"); +Object.defineProperty(exports, "getNullableInputTypeAtPath", { enumerable: true, get: function () { return operationPlan_input_js_1.getNullableInputTypeAtPath; } }); +const polymorphic_js_1 = require("./polymorphic.js"); +Object.defineProperty(exports, "polymorphicWrap", { enumerable: true, get: function () { return polymorphic_js_1.polymorphicWrap; } }); +const step_js_1 = require("./step.js"); +Object.defineProperty(exports, "assertExecutableStep", { enumerable: true, get: function () { return step_js_1.assertExecutableStep; } }); +Object.defineProperty(exports, "assertListCapableStep", { enumerable: true, get: function () { return step_js_1.assertListCapableStep; } }); +Object.defineProperty(exports, "assertStep", { enumerable: true, get: function () { return step_js_1.assertStep; } }); +Object.defineProperty(exports, "isExecutableStep", { enumerable: true, get: function () { return step_js_1.isExecutableStep; } }); +Object.defineProperty(exports, "isListCapableStep", { enumerable: true, get: function () { return step_js_1.isListCapableStep; } }); +Object.defineProperty(exports, "isListLikeStep", { enumerable: true, get: function () { return step_js_1.isListLikeStep; } }); +Object.defineProperty(exports, "isObjectLikeStep", { enumerable: true, get: function () { return step_js_1.isObjectLikeStep; } }); +Object.defineProperty(exports, "isStep", { enumerable: true, get: function () { return step_js_1.isStep; } }); +Object.defineProperty(exports, "ExecutableStep", { enumerable: true, get: function () { return step_js_1.Step; } }); +Object.defineProperty(exports, "Step", { enumerable: true, get: function () { return step_js_1.Step; } }); +Object.defineProperty(exports, "UnbatchedExecutableStep", { enumerable: true, get: function () { return step_js_1.UnbatchedStep; } }); +Object.defineProperty(exports, "UnbatchedStep", { enumerable: true, get: function () { return step_js_1.UnbatchedStep; } }); +const index_js_1 = require("./steps/index.js"); +Object.defineProperty(exports, "__FlagStep", { enumerable: true, get: function () { return index_js_1.__FlagStep; } }); +Object.defineProperty(exports, "__InputListStep", { enumerable: true, get: function () { return index_js_1.__InputListStep; } }); +Object.defineProperty(exports, "__InputObjectStep", { enumerable: true, get: function () { return index_js_1.__InputObjectStep; } }); +Object.defineProperty(exports, "__InputStaticLeafStep", { enumerable: true, get: function () { return index_js_1.__InputStaticLeafStep; } }); +Object.defineProperty(exports, "__ItemStep", { enumerable: true, get: function () { return index_js_1.__ItemStep; } }); +Object.defineProperty(exports, "__ListTransformStep", { enumerable: true, get: function () { return index_js_1.__ListTransformStep; } }); +Object.defineProperty(exports, "__TrackedValueStep", { enumerable: true, get: function () { return index_js_1.__TrackedValueStep; } }); +Object.defineProperty(exports, "__ValueStep", { enumerable: true, get: function () { return index_js_1.__ValueStep; } }); +Object.defineProperty(exports, "access", { enumerable: true, get: function () { return index_js_1.access; } }); +Object.defineProperty(exports, "AccessStep", { enumerable: true, get: function () { return index_js_1.AccessStep; } }); +Object.defineProperty(exports, "applyInput", { enumerable: true, get: function () { return index_js_1.applyInput; } }); +Object.defineProperty(exports, "ApplyInputStep", { enumerable: true, get: function () { return index_js_1.ApplyInputStep; } }); +Object.defineProperty(exports, "applyTransforms", { enumerable: true, get: function () { return index_js_1.applyTransforms; } }); +Object.defineProperty(exports, "ApplyTransformsStep", { enumerable: true, get: function () { return index_js_1.ApplyTransformsStep; } }); +Object.defineProperty(exports, "assertEdgeCapableStep", { enumerable: true, get: function () { return index_js_1.assertEdgeCapableStep; } }); +Object.defineProperty(exports, "assertModifier", { enumerable: true, get: function () { return index_js_1.assertModifier; } }); +Object.defineProperty(exports, "assertNotNull", { enumerable: true, get: function () { return index_js_1.assertNotNull; } }); +Object.defineProperty(exports, "assertPageInfoCapableStep", { enumerable: true, get: function () { return index_js_1.assertPageInfoCapableStep; } }); +Object.defineProperty(exports, "bakedInput", { enumerable: true, get: function () { return index_js_1.bakedInput; } }); +Object.defineProperty(exports, "bakedInputRuntime", { enumerable: true, get: function () { return index_js_1.bakedInputRuntime; } }); +Object.defineProperty(exports, "BakedInputStep", { enumerable: true, get: function () { return index_js_1.BakedInputStep; } }); +Object.defineProperty(exports, "condition", { enumerable: true, get: function () { return index_js_1.condition; } }); +Object.defineProperty(exports, "ConditionStep", { enumerable: true, get: function () { return index_js_1.ConditionStep; } }); +Object.defineProperty(exports, "connection", { enumerable: true, get: function () { return index_js_1.connection; } }); +Object.defineProperty(exports, "ConnectionStep", { enumerable: true, get: function () { return index_js_1.ConnectionStep; } }); +Object.defineProperty(exports, "constant", { enumerable: true, get: function () { return index_js_1.constant; } }); +Object.defineProperty(exports, "ConstantStep", { enumerable: true, get: function () { return index_js_1.ConstantStep; } }); +Object.defineProperty(exports, "context", { enumerable: true, get: function () { return index_js_1.context; } }); +Object.defineProperty(exports, "createObjectAndApplyChildren", { enumerable: true, get: function () { return index_js_1.createObjectAndApplyChildren; } }); +Object.defineProperty(exports, "debugPlans", { enumerable: true, get: function () { return index_js_1.debugPlans; } }); +Object.defineProperty(exports, "each", { enumerable: true, get: function () { return index_js_1.each; } }); +Object.defineProperty(exports, "EdgeStep", { enumerable: true, get: function () { return index_js_1.EdgeStep; } }); +Object.defineProperty(exports, "error", { enumerable: true, get: function () { return index_js_1.error; } }); +Object.defineProperty(exports, "ErrorStep", { enumerable: true, get: function () { return index_js_1.ErrorStep; } }); +Object.defineProperty(exports, "filter", { enumerable: true, get: function () { return index_js_1.filter; } }); +Object.defineProperty(exports, "first", { enumerable: true, get: function () { return index_js_1.first; } }); +Object.defineProperty(exports, "FirstStep", { enumerable: true, get: function () { return index_js_1.FirstStep; } }); +Object.defineProperty(exports, "GraphQLItemHandler", { enumerable: true, get: function () { return index_js_1.GraphQLItemHandler; } }); +Object.defineProperty(exports, "graphqlItemHandler", { enumerable: true, get: function () { return index_js_1.graphqlItemHandler; } }); +Object.defineProperty(exports, "graphqlResolver", { enumerable: true, get: function () { return index_js_1.graphqlResolver; } }); +Object.defineProperty(exports, "GraphQLResolverStep", { enumerable: true, get: function () { return index_js_1.GraphQLResolverStep; } }); +Object.defineProperty(exports, "groupBy", { enumerable: true, get: function () { return index_js_1.groupBy; } }); +Object.defineProperty(exports, "inhibitOnNull", { enumerable: true, get: function () { return index_js_1.inhibitOnNull; } }); +Object.defineProperty(exports, "isModifier", { enumerable: true, get: function () { return index_js_1.isModifier; } }); +Object.defineProperty(exports, "lambda", { enumerable: true, get: function () { return index_js_1.lambda; } }); +Object.defineProperty(exports, "LambdaStep", { enumerable: true, get: function () { return index_js_1.LambdaStep; } }); +Object.defineProperty(exports, "last", { enumerable: true, get: function () { return index_js_1.last; } }); +Object.defineProperty(exports, "LastStep", { enumerable: true, get: function () { return index_js_1.LastStep; } }); +Object.defineProperty(exports, "list", { enumerable: true, get: function () { return index_js_1.list; } }); +Object.defineProperty(exports, "listen", { enumerable: true, get: function () { return index_js_1.listen; } }); +Object.defineProperty(exports, "ListenStep", { enumerable: true, get: function () { return index_js_1.ListenStep; } }); +Object.defineProperty(exports, "ListStep", { enumerable: true, get: function () { return index_js_1.ListStep; } }); +Object.defineProperty(exports, "listTransform", { enumerable: true, get: function () { return index_js_1.listTransform; } }); +Object.defineProperty(exports, "LoadedRecordStep", { enumerable: true, get: function () { return index_js_1.LoadedRecordStep; } }); +Object.defineProperty(exports, "loadMany", { enumerable: true, get: function () { return index_js_1.loadMany; } }); +Object.defineProperty(exports, "loadManyCallback", { enumerable: true, get: function () { return index_js_1.loadManyCallback; } }); +Object.defineProperty(exports, "loadOne", { enumerable: true, get: function () { return index_js_1.loadOne; } }); +Object.defineProperty(exports, "loadOneCallback", { enumerable: true, get: function () { return index_js_1.loadOneCallback; } }); +Object.defineProperty(exports, "LoadStep", { enumerable: true, get: function () { return index_js_1.LoadStep; } }); +Object.defineProperty(exports, "makeDecodeNodeId", { enumerable: true, get: function () { return index_js_1.makeDecodeNodeId; } }); +Object.defineProperty(exports, "makeDecodeNodeIdRuntime", { enumerable: true, get: function () { return index_js_1.makeDecodeNodeIdRuntime; } }); +Object.defineProperty(exports, "Modifier", { enumerable: true, get: function () { return index_js_1.Modifier; } }); +Object.defineProperty(exports, "node", { enumerable: true, get: function () { return index_js_1.node; } }); +Object.defineProperty(exports, "nodeIdFromNode", { enumerable: true, get: function () { return index_js_1.nodeIdFromNode; } }); +Object.defineProperty(exports, "NodeStep", { enumerable: true, get: function () { return index_js_1.NodeStep; } }); +Object.defineProperty(exports, "object", { enumerable: true, get: function () { return index_js_1.object; } }); +Object.defineProperty(exports, "ObjectStep", { enumerable: true, get: function () { return index_js_1.ObjectStep; } }); +Object.defineProperty(exports, "operationPlan", { enumerable: true, get: function () { return index_js_1.operationPlan; } }); +Object.defineProperty(exports, "partitionByIndex", { enumerable: true, get: function () { return index_js_1.partitionByIndex; } }); +Object.defineProperty(exports, "polymorphicBranch", { enumerable: true, get: function () { return index_js_1.polymorphicBranch; } }); +Object.defineProperty(exports, "PolymorphicBranchStep", { enumerable: true, get: function () { return index_js_1.PolymorphicBranchStep; } }); +Object.defineProperty(exports, "proxy", { enumerable: true, get: function () { return index_js_1.proxy; } }); +Object.defineProperty(exports, "ProxyStep", { enumerable: true, get: function () { return index_js_1.ProxyStep; } }); +Object.defineProperty(exports, "remapKeys", { enumerable: true, get: function () { return index_js_1.remapKeys; } }); +Object.defineProperty(exports, "RemapKeysStep", { enumerable: true, get: function () { return index_js_1.RemapKeysStep; } }); +Object.defineProperty(exports, "reverse", { enumerable: true, get: function () { return index_js_1.reverse; } }); +Object.defineProperty(exports, "reverseArray", { enumerable: true, get: function () { return index_js_1.reverseArray; } }); +Object.defineProperty(exports, "ReverseStep", { enumerable: true, get: function () { return index_js_1.ReverseStep; } }); +Object.defineProperty(exports, "rootValue", { enumerable: true, get: function () { return index_js_1.rootValue; } }); +Object.defineProperty(exports, "Setter", { enumerable: true, get: function () { return index_js_1.Setter; } }); +Object.defineProperty(exports, "setter", { enumerable: true, get: function () { return index_js_1.setter; } }); +Object.defineProperty(exports, "sideEffect", { enumerable: true, get: function () { return index_js_1.sideEffect; } }); +Object.defineProperty(exports, "SideEffectStep", { enumerable: true, get: function () { return index_js_1.SideEffectStep; } }); +Object.defineProperty(exports, "specFromNodeId", { enumerable: true, get: function () { return index_js_1.specFromNodeId; } }); +Object.defineProperty(exports, "trackedContext", { enumerable: true, get: function () { return index_js_1.trackedContext; } }); +Object.defineProperty(exports, "trackedRootValue", { enumerable: true, get: function () { return index_js_1.trackedRootValue; } }); +Object.defineProperty(exports, "trap", { enumerable: true, get: function () { return index_js_1.trap; } }); +Object.defineProperty(exports, "TRAP_ERROR", { enumerable: true, get: function () { return index_js_1.TRAP_ERROR; } }); +Object.defineProperty(exports, "TRAP_ERROR_OR_INHIBITED", { enumerable: true, get: function () { return index_js_1.TRAP_ERROR_OR_INHIBITED; } }); +Object.defineProperty(exports, "TRAP_INHIBITED", { enumerable: true, get: function () { return index_js_1.TRAP_INHIBITED; } }); +const stringifyPayload_js_1 = require("./stringifyPayload.js"); +Object.defineProperty(exports, "stringifyPayload", { enumerable: true, get: function () { return stringifyPayload_js_1.stringifyPayload; } }); +const stripAnsi_js_1 = require("./stripAnsi.js"); +Object.defineProperty(exports, "stripAnsi", { enumerable: true, get: function () { return stripAnsi_js_1.stripAnsi; } }); +const subscribe_js_1 = require("./subscribe.js"); +Object.defineProperty(exports, "subscribe", { enumerable: true, get: function () { return subscribe_js_1.subscribe; } }); +const utils_js_1 = require("./utils.js"); +Object.defineProperty(exports, "arrayOfLength", { enumerable: true, get: function () { return utils_js_1.arrayOfLength; } }); +Object.defineProperty(exports, "arraysMatch", { enumerable: true, get: function () { return utils_js_1.arraysMatch; } }); +Object.defineProperty(exports, "getEnumValueConfig", { enumerable: true, get: function () { return utils_js_1.getEnumValueConfig; } }); +Object.defineProperty(exports, "getEnumValueConfigs", { enumerable: true, get: function () { return utils_js_1.getEnumValueConfigs; } }); +Object.defineProperty(exports, "inputObjectFieldSpec", { enumerable: true, get: function () { return utils_js_1.inputObjectFieldSpec; } }); +Object.defineProperty(exports, "isPromiseLike", { enumerable: true, get: function () { return utils_js_1.isPromiseLike; } }); +Object.defineProperty(exports, "newGrafastFieldConfigBuilder", { enumerable: true, get: function () { return utils_js_1.newGrafastFieldConfigBuilder; } }); +Object.defineProperty(exports, "newInputObjectTypeBuilder", { enumerable: true, get: function () { return utils_js_1.newInputObjectTypeBuilder; } }); +Object.defineProperty(exports, "newObjectTypeBuilder", { enumerable: true, get: function () { return utils_js_1.newObjectTypeBuilder; } }); +Object.defineProperty(exports, "objectFieldSpec", { enumerable: true, get: function () { return utils_js_1.objectFieldSpec; } }); +Object.defineProperty(exports, "objectSpec", { enumerable: true, get: function () { return utils_js_1.objectSpec; } }); +Object.defineProperty(exports, "stepADependsOnStepB", { enumerable: true, get: function () { return utils_js_1.stepADependsOnStepB; } }); +Object.defineProperty(exports, "stepAMayDependOnStepB", { enumerable: true, get: function () { return utils_js_1.stepAMayDependOnStepB; } }); +Object.defineProperty(exports, "stepsAreInSamePhase", { enumerable: true, get: function () { return utils_js_1.stepsAreInSamePhase; } }); +var iterall_1 = require("iterall"); +Object.defineProperty(exports, "isAsyncIterable", { enumerable: true, get: function () { return iterall_1.isAsyncIterable; } }); +(0, exportAs_js_1.exportAsMany)("grafast", { + exportAs: exportAs_js_1.exportAs, + exportAsMany: exportAs_js_1.exportAsMany, + grafastPrint: grafastPrint_js_1.grafastPrint, + makeGrafastSchema: makeGrafastSchema_js_1.makeGrafastSchema, + OperationPlan: OperationPlan_js_1.OperationPlan, + defer: deferred_js_1.defer, + execute: execute_js_1.execute, + getNullableInputTypeAtPath: operationPlan_input_js_1.getNullableInputTypeAtPath, + getGrafastMiddleware: middleware_js_1.getGrafastMiddleware, + grafast: grafastGraphql_js_1.grafast, + grafastSync: grafastGraphql_js_1.grafastSync, + subscribe: subscribe_js_1.subscribe, + __InputListStep: index_js_1.__InputListStep, + stringifyPayload: stringifyPayload_js_1.stringifyPayload, + __InputObjectStep: index_js_1.__InputObjectStep, + __InputStaticLeafStep: index_js_1.__InputStaticLeafStep, + assertExecutableStep: step_js_1.assertExecutableStep, + assertStep: step_js_1.assertStep, + assertListCapableStep: step_js_1.assertListCapableStep, + assertModifier: index_js_1.assertModifier, + isStep: step_js_1.isStep, + isListCapableStep: step_js_1.isListCapableStep, + isModifier: index_js_1.isModifier, + isObjectLikeStep: step_js_1.isObjectLikeStep, + isListLikeStep: step_js_1.isListLikeStep, + __ItemStep: index_js_1.__ItemStep, + __ListTransformStep: index_js_1.__ListTransformStep, + __TrackedValueStep: index_js_1.__TrackedValueStep, + __ValueStep: index_js_1.__ValueStep, + access: index_js_1.access, + AccessStep: index_js_1.AccessStep, + applyInput: index_js_1.applyInput, + ApplyInputStep: index_js_1.ApplyInputStep, + bakedInput: index_js_1.bakedInput, + bakedInputRuntime: index_js_1.bakedInputRuntime, + BakedInputStep: index_js_1.BakedInputStep, + operationPlan: index_js_1.operationPlan, + connection: index_js_1.connection, + assertEdgeCapableStep: index_js_1.assertEdgeCapableStep, + assertPageInfoCapableStep: index_js_1.assertPageInfoCapableStep, + ConnectionStep: index_js_1.ConnectionStep, + EdgeStep: index_js_1.EdgeStep, + condition: index_js_1.condition, + ConditionStep: index_js_1.ConditionStep, + constant: index_js_1.constant, + ConstantStep: index_js_1.ConstantStep, + context: index_js_1.context, + rootValue: index_js_1.rootValue, + trackedContext: index_js_1.trackedContext, + trackedRootValue: index_js_1.trackedRootValue, + inhibitOnNull: index_js_1.inhibitOnNull, + assertNotNull: index_js_1.assertNotNull, + trap: index_js_1.trap, + __FlagStep: index_js_1.__FlagStep, + TRAP_ERROR: index_js_1.TRAP_ERROR, + TRAP_ERROR_OR_INHIBITED: index_js_1.TRAP_ERROR_OR_INHIBITED, + TRAP_INHIBITED: index_js_1.TRAP_INHIBITED, + debugPlans: index_js_1.debugPlans, + each: index_js_1.each, + error: index_js_1.error, + ErrorStep: index_js_1.ErrorStep, + groupBy: index_js_1.groupBy, + filter: index_js_1.filter, + partitionByIndex: index_js_1.partitionByIndex, + listTransform: index_js_1.listTransform, + first: index_js_1.first, + node: index_js_1.node, + specFromNodeId: index_js_1.specFromNodeId, + nodeIdFromNode: index_js_1.nodeIdFromNode, + polymorphicBranch: index_js_1.polymorphicBranch, + PolymorphicBranchStep: index_js_1.PolymorphicBranchStep, + makeDecodeNodeId: index_js_1.makeDecodeNodeId, + makeDecodeNodeIdRuntime: index_js_1.makeDecodeNodeIdRuntime, + proxy: index_js_1.proxy, + applyTransforms: index_js_1.applyTransforms, + ApplyTransformsStep: index_js_1.ApplyTransformsStep, + ProxyStep: index_js_1.ProxyStep, + graphqlResolver: index_js_1.graphqlResolver, + GraphQLResolverStep: index_js_1.GraphQLResolverStep, + GraphQLItemHandler: index_js_1.GraphQLItemHandler, + graphqlItemHandler: index_js_1.graphqlItemHandler, + NodeStep: index_js_1.NodeStep, + FirstStep: index_js_1.FirstStep, + last: index_js_1.last, + LastStep: index_js_1.LastStep, + lambda: index_js_1.lambda, + LambdaStep: index_js_1.LambdaStep, + sideEffect: index_js_1.sideEffect, + SideEffectStep: index_js_1.SideEffectStep, + list: index_js_1.list, + ListStep: index_js_1.ListStep, + remapKeys: index_js_1.remapKeys, + RemapKeysStep: index_js_1.RemapKeysStep, + object: index_js_1.object, + ObjectStep: index_js_1.ObjectStep, + reverse: index_js_1.reverse, + reverseArray: index_js_1.reverseArray, + ReverseStep: index_js_1.ReverseStep, + setter: index_js_1.setter, + createObjectAndApplyChildren: index_js_1.createObjectAndApplyChildren, + Setter: index_js_1.Setter, + listen: index_js_1.listen, + ListenStep: index_js_1.ListenStep, + polymorphicWrap: polymorphic_js_1.polymorphicWrap, + stripAnsi: stripAnsi_js_1.stripAnsi, + arraysMatch: utils_js_1.arraysMatch, + inputObjectFieldSpec: utils_js_1.inputObjectFieldSpec, + newGrafastFieldConfigBuilder: utils_js_1.newGrafastFieldConfigBuilder, + newInputObjectTypeBuilder: utils_js_1.newInputObjectTypeBuilder, + newObjectTypeBuilder: utils_js_1.newObjectTypeBuilder, + objectFieldSpec: utils_js_1.objectFieldSpec, + objectSpec: utils_js_1.objectSpec, + arrayOfLength: utils_js_1.arrayOfLength, + stepADependsOnStepB: utils_js_1.stepADependsOnStepB, + stepAMayDependOnStepB: utils_js_1.stepAMayDependOnStepB, + stepsAreInSamePhase: utils_js_1.stepsAreInSamePhase, + isPromiseLike: utils_js_1.isPromiseLike, + isDev: dev_js_1.isDev, + noop: dev_js_1.noop, + getEnumValueConfig: utils_js_1.getEnumValueConfig, + getEnumValueConfigs: utils_js_1.getEnumValueConfigs, + loadOne: index_js_1.loadOne, + loadMany: index_js_1.loadMany, + loadOneCallback: index_js_1.loadOneCallback, + loadManyCallback: index_js_1.loadManyCallback, + LoadedRecordStep: index_js_1.LoadedRecordStep, + LoadStep: index_js_1.LoadStep, + isSafeError: error_js_1.isSafeError, + $$inhibit: error_js_1.$$inhibit, + flagError: error_js_1.flagError, + SafeError: error_js_1.SafeError, + isUnaryStep: withGlobalLayerPlan_js_1.isUnaryStep, + defaultPlanResolver: defaultPlanResolver_js_1.defaultPlanResolver, + multistep: multistep_js_1.multistep, +}); +var args_js_1 = require("./args.js"); +Object.defineProperty(exports, "hookArgs", { enumerable: true, get: function () { return args_js_1.hookArgs; } }); +var version_js_1 = require("./version.js"); +Object.defineProperty(exports, "version", { enumerable: true, get: function () { return version_js_1.version; } }); +/** @deprecated Renamed to 'applyTransforms' */ +exports.deepEval = index_js_1.applyTransforms; +/** @deprecated Renamed to 'ApplyTransformsStep' */ +exports.DeepEvalStep = index_js_1.ApplyTransformsStep; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/index.js.map b/grafast/grafast/dist/index.js.map new file mode 100644 index 0000000000..3f8a57b1a0 --- /dev/null +++ b/grafast/grafast/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/input.d.ts b/grafast/grafast/dist/input.d.ts new file mode 100644 index 0000000000..ed6ec84ca3 --- /dev/null +++ b/grafast/grafast/dist/input.d.ts @@ -0,0 +1,6 @@ +import type { GraphQLType, ListTypeNode, NamedTypeNode, NonNullTypeNode } from "graphql"; +import type { OperationPlan } from "./engine/OperationPlan.js"; +import type { AnyInputStep } from "./interfaces.js"; +export declare function assertInputStep(itemPlan: unknown): asserts itemPlan is AnyInputStep; +export declare function graphqlGetTypeForNode(operationPlan: OperationPlan, node: NamedTypeNode | ListTypeNode | NonNullTypeNode): GraphQLType; +//# sourceMappingURL=input.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/input.d.ts.map b/grafast/grafast/dist/input.d.ts.map new file mode 100644 index 0000000000..037c6e9820 --- /dev/null +++ b/grafast/grafast/dist/input.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EAEhB,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AA4BpD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,QAAQ,IAAI,YAAY,CAMlC;AAED,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,aAAa,GAAG,YAAY,GAAG,eAAe,GACnD,WAAW,CAwBb"} \ No newline at end of file diff --git a/grafast/grafast/dist/input.js b/grafast/grafast/dist/input.js new file mode 100644 index 0000000000..84362513ed --- /dev/null +++ b/grafast/grafast/dist/input.js @@ -0,0 +1,206 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.assertInputStep = assertInputStep; +exports.graphqlGetTypeForNode = graphqlGetTypeForNode; +exports.inputStep = inputStep; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const inspect_js_1 = require("./inspect.js"); +const __inputDefault_js_1 = require("./steps/__inputDefault.js"); +const __inputDynamicScalar_js_1 = require("./steps/__inputDynamicScalar.js"); +const __inputObject_js_1 = require("./steps/__inputObject.js"); +const index_js_1 = require("./steps/index.js"); +const utils_js_1 = require("./utils.js"); +const { assertScalarType, GraphQLError, GraphQLList, GraphQLNonNull, isInputType, isLeafType, isInputObjectType, Kind, } = graphql; +function assertInputStep(itemPlan) { + if (itemPlan instanceof index_js_1.__TrackedValueStep) + return; + if (itemPlan instanceof index_js_1.__InputListStep) + return; + if (itemPlan instanceof index_js_1.__InputStaticLeafStep) + return; + if (itemPlan instanceof __inputObject_js_1.__InputObjectStep) + return; + throw new Error(`Expected an InputStep, but found ${itemPlan}`); +} +function graphqlGetTypeForNode(operationPlan, node) { + switch (node.kind) { + case Kind.NAMED_TYPE: { + const type = operationPlan.schema.getType(node.name.value); + if (!type) { + // Should not happen since the GraphQL operation has already been + // validated against the schema. + throw new Error(`Could not find type with name '${node.name.value}' in the schema`); + } + return type; + } + case Kind.LIST_TYPE: + return new GraphQLList(graphqlGetTypeForNode(operationPlan, node.type)); + case Kind.NON_NULL_TYPE: + return new GraphQLNonNull(graphqlGetTypeForNode(operationPlan, node.type)); + default: { + const never = node; + throw new Error(`Unknown node kind; node: ${(0, inspect_js_1.inspect)(never)}`); + } + } +} +/** + * Returns a plan for the given `rawInputValue` AST node which could be a + * variable or a literal, and could be nested so that a variable (or more than + * one) appears somewhere. More than one plan may be created. + * + * @internal + */ +function inputStep(operationPlan, inputType, inputValue, defaultValue = undefined) { + const { valueNodeToStaticValueCache } = operationPlan; + if (inputValue === undefined) { + // Definitely can't be or contain a variable! + if (defaultValue === undefined) { + return (0, index_js_1.constant)(undefined); + } + else { + return valueNodeToCachedStaticValueConstantStep(valueNodeToStaticValueCache, defaultValue, inputType); + } + } + const isObj = isInputObjectType(inputType); + if (inputValue.kind === "Variable") { + // Note: this is the only other place where `defaultValue` might be used + // we know `inputValue` is not a variable. + const variableName = inputValue.name.value; + const variableDefinition = operationPlan.operation.variableDefinitions?.find((def) => def.variable.name.value === variableName); + if (!variableDefinition) { + // Should not happen since the GraphQL operation has already been + // validated. + throw new Error(`No definition for variable '${variableName}' found`); + } + const variableType = graphqlGetTypeForNode(operationPlan, variableDefinition.type); + if (!isInputType(variableType)) { + throw new Error(`Expected varible type to be an input type`); + } + const variableWillDefinitelyBeSet = variableType instanceof GraphQLNonNull || + variableDefinition.defaultValue != null; + return inputVariablePlan(operationPlan, variableName, variableType, inputType, defaultValue, variableWillDefinitelyBeSet); + } + else if (inputType instanceof GraphQLNonNull) { + const innerType = inputType.ofType; + if (inputValue.kind === Kind.NULL) { + throw new Error(`Null found in non-null position; this should have been prevented by validation.`); + } + const valuePlan = inputStep(operationPlan, innerType, inputValue, undefined); + return inputNonNullPlan(operationPlan, valuePlan); + } + else if (inputValue.kind === Kind.NULL) { + return (0, index_js_1.constant)(null); + } + else if (inputType instanceof GraphQLList) { + const variableNames = new Set(); + (0, utils_js_1.findVariableNamesUsedInValueNode)(inputValue, variableNames); + if (variableNames.size === 0) { + return valueNodeToCachedStaticValueConstantStep(valueNodeToStaticValueCache, inputValue, inputType); + } + return new index_js_1.__InputListStep(inputType, inputValue); + } + else if (isLeafType(inputType)) { + if (inputValue?.kind === Kind.OBJECT || inputValue?.kind === Kind.LIST) { + const scalarType = assertScalarType(inputType); + return new __inputDynamicScalar_js_1.__InputDynamicScalarStep(scalarType, inputValue); + } + else { + // Variable is already ruled out, so it must be one of: Kind.INT | Kind.FLOAT | Kind.STRING | Kind.BOOLEAN | Kind.NULL | Kind.ENUM + // none of which can contain a variable: + return new index_js_1.__InputStaticLeafStep(inputType, inputValue); + } + } + else if (isObj) { + return new __inputObject_js_1.__InputObjectStep(inputType, inputValue); + } + else { + const never = inputType; + throw new Error(`Unsupported type in inputPlan: '${(0, inspect_js_1.inspect)(never)}'`); + } +} +function doTypesMatch(variableType, expectedType) { + if (variableType instanceof GraphQLNonNull && + expectedType instanceof GraphQLNonNull) { + return doTypesMatch(variableType.ofType, expectedType.ofType); + } + else if (variableType instanceof GraphQLNonNull) { + // Variable is stricter than input type, that's fine + return doTypesMatch(variableType.ofType, expectedType); + } + else if (variableType instanceof GraphQLList && + expectedType instanceof GraphQLList) { + return doTypesMatch(variableType.ofType, expectedType.ofType); + } + else { + return variableType === expectedType; + } +} +/** + * Returns a step representing a variable's value. + * + * @param operationPlan - + * @param variableName - + * @param variableType - + * @param inputType - + * @param defaultValue - + * @param variableWillDefinitelyBeSet - If `true` the variable is either + * non-null _or_ it has a default value (including null). In this case, the + * variable will never be `undefined` and thus an input position's defaultValue + * will never be invoked where it is used. + */ +function inputVariablePlan(operationPlan, variableName, variableType, inputType, defaultValue, variableWillDefinitelyBeSet) { + if (variableType instanceof GraphQLNonNull && + !(inputType instanceof GraphQLNonNull)) { + const unwrappedVariableType = variableType.ofType; + return inputVariablePlan(operationPlan, variableName, unwrappedVariableType, inputType, defaultValue, variableWillDefinitelyBeSet); + } + const typesMatch = doTypesMatch(variableType, inputType); + if (!typesMatch) { + // REF: https://spec.graphql.org/draft/#IsVariableUsageAllowed() + if (inputType instanceof GraphQLNonNull && + !(variableType instanceof GraphQLNonNull)) { + const variablePlan = inputVariablePlan(operationPlan, variableName, variableType, inputType.ofType, defaultValue, variableWillDefinitelyBeSet); + // TODO: find a way to do this without doing eval. For example: track list of variables that may not be nullish. + if (variablePlan.evalIs(null) || + (!variableWillDefinitelyBeSet && variablePlan.evalIs(undefined))) { + throw new GraphQLError(`Expected non-null value of type ${inputType.ofType.toString()}`); + } + return variablePlan; + } + throw new Error("Expected variable and input types to match"); + } + const $variableValue = operationPlan.trackedVariableValuesStep.get(variableName); + if (defaultValue === undefined) { + // There's no default value and thus the default will not be used; use the variable. + return $variableValue; + } + else if (variableWillDefinitelyBeSet) { + // The variable will DEFINITELY be set (even if it is set to null, possibly + // by a default), so the input position's default value will never apply. + return $variableValue; + } + else { + // Here: + // - the variable is nullable, optional, and has no default value + // - the input position has a default value + // We thus need a step that results in `variableValue === undefined ? defaultValue : variableValue` + const runtimeDefaultValue = (0, utils_js_1.valueNodeToStaticValue)(defaultValue, inputType); + return new __inputDefault_js_1.__InputDefaultStep($variableValue, runtimeDefaultValue); + } +} +/** + * Implements `InputNonNullStep`. + */ +function inputNonNullPlan(_operationPlan, innerPlan) { + return innerPlan; +} +function valueNodeToCachedStaticValueConstantStep(cache, valueNode, inputType) { + let step = cache.get(valueNode); + if (!step) { + step = (0, index_js_1.constant)((0, utils_js_1.valueNodeToStaticValue)(valueNode, inputType), false); + cache.set(valueNode, step); + } + return step; +} +//# sourceMappingURL=input.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/input.js.map b/grafast/grafast/dist/input.js.map new file mode 100644 index 0000000000..014f9b61c0 --- /dev/null +++ b/grafast/grafast/dist/input.js.map @@ -0,0 +1 @@ +{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/inspect.d.ts b/grafast/grafast/dist/inspect.d.ts new file mode 100644 index 0000000000..055d98ae5a --- /dev/null +++ b/grafast/grafast/dist/inspect.d.ts @@ -0,0 +1,10 @@ +export declare let inspect: { + (obj: any, options?: { + colors?: boolean; + depth?: number; + compact?: boolean | number; + breakLength?: number; + }): string; + custom: symbol; +}; +//# sourceMappingURL=inspect.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/inspect.d.ts.map b/grafast/grafast/dist/inspect.d.ts.map new file mode 100644 index 0000000000..390b857b51 --- /dev/null +++ b/grafast/grafast/dist/inspect.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"AAAA,eAAO,IAAI,OAAO,EAAE;IAClB,CACE,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/inspect.js b/grafast/grafast/dist/inspect.js new file mode 100644 index 0000000000..35c376300a --- /dev/null +++ b/grafast/grafast/dist/inspect.js @@ -0,0 +1,20 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.inspect = void 0; +try { + exports.inspect = require("util").inspect; + if (typeof exports.inspect !== "function") { + throw new Error("Failed to load inspect"); + } +} +catch { + exports.inspect = Object.assign((obj) => { + return Array.isArray(obj) || + !obj || + Object.getPrototypeOf(obj) === null || + Object.getPrototypeOf(obj) === Object.prototype + ? String(JSON.stringify(obj)) + : String(obj); + }, { custom: Symbol.for("nodejs.util.inspect.custom") }); +} +//# sourceMappingURL=inspect.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/inspect.js.map b/grafast/grafast/dist/inspect.js.map new file mode 100644 index 0000000000..3c586db9d3 --- /dev/null +++ b/grafast/grafast/dist/inspect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":";;;AAaA,IAAI,CAAC;IACH,eAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;IAClC,IAAI,OAAO,eAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,eAAO,GAAG,MAAM,CAAC,MAAM,CACrB,CAAC,GAAQ,EAAE,EAAE;QACX,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACvB,CAAC,GAAG;YACJ,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,IAAI;YACnC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,SAAS;YAC/C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC,EACD,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,CACrD,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/interfaces.d.ts b/grafast/grafast/dist/interfaces.d.ts new file mode 100644 index 0000000000..ea9c7af594 --- /dev/null +++ b/grafast/grafast/dist/interfaces.d.ts @@ -0,0 +1,575 @@ +import type EventEmitter from "eventemitter3"; +import type { Middleware } from "graphile-config"; +import type { ASTNode, ExecutionArgs, FragmentDefinitionNode, GraphQLArgs, GraphQLArgument, GraphQLArgumentConfig, GraphQLField, GraphQLFieldConfig, GraphQLInputField, GraphQLInputFieldConfig, GraphQLInputObjectType, GraphQLInputType, GraphQLList, GraphQLNonNull, GraphQLOutputType, GraphQLScalarType, GraphQLSchema, GraphQLType, OperationDefinitionNode, Source, ValueNode, VariableNode } from "graphql"; +import type { ObjMap } from "graphql/jsutils/ObjMap.js"; +import type { Constraint } from "./constraints.js"; +import type { LayerPlanReasonListItemStream } from "./engine/LayerPlan.js"; +import type { OperationPlan } from "./engine/OperationPlan.js"; +import type { FlaggedValue, SafeError } from "./error.js"; +import type { ListCapableStep, Step } from "./step.js"; +import type { __InputDefaultStep } from "./steps/__inputDefault.js"; +import type { __InputDynamicScalarStep } from "./steps/__inputDynamicScalar.js"; +import type { ApplyableExecutableStep } from "./steps/applyInput.js"; +import type { __InputListStep, __InputObjectStepWithDollars, __InputStaticLeafStep, __TrackedValueStepWithDollars, ConstantStep, ObjectStep } from "./steps/index.js"; +import type { GrafastObjectType } from "./utils.js"; +export interface GrafastTimeouts { + /** + * How many milliseconds should we allow for planning. Remember: planning is + * synchronous, so whilst it is happening the event loop is blocked. + */ + planning?: number; + /** + * How many milliseconds should we allow for execution. We will only check + * this immediately before triggering the execution of an asynchronous step, + * and if it is exceeded it will only prevent the execution of asynchronous + * steps, not synchronous ones. + * + * IMPORTANT: since we only check this _before_ an asynchronous step + * executes, there's nothing to stop an asynchronous step from continuing to + * execute long after the timeout has expired - therefore it's the + * responsibility of each step to abort itself if it goes over the allocated + * time budget (which is detailed in `ExecutionExtra.stopTime`). + */ + execution?: number; +} +export declare const $$queryCache: unique symbol; +/** + * We store the cache directly onto the GraphQLSchema so that it gets garbage + * collected along with the schema when it's not needed any more. To do so, we + * attach it using this symbol. + */ +export declare const $$cacheByOperation: unique symbol; +export type Fragments = { + [key: string]: FragmentDefinitionNode; +}; +export interface IEstablishOperationPlanResult { + variableValuesConstraints: Constraint[]; + contextConstraints: Constraint[]; + rootValueConstraints: Constraint[]; +} +export interface EstablishOperationPlanResultSuccess extends IEstablishOperationPlanResult { + error?: never; + operationPlan: OperationPlan; +} +export interface EstablishOperationPlanResultError extends IEstablishOperationPlanResult { + error: Error | SafeError<{ + [$$timeout]: number; + [$$ts]: number; + } | { + [$$timeout]?: undefined; + [$$ts]?: undefined; + } | undefined>; + operationPlan?: never; +} +export type EstablishOperationPlanResult = EstablishOperationPlanResultSuccess | EstablishOperationPlanResultError; +/** + * This represents the list of possible operationPlans for a specific document. + * + * @remarks + * + * It also includes the fragments for validation, but generally we trust that + * if the OperationDefinitionNode is the same then the request is equivalent. + */ +export interface CacheByOperationEntry { + /** + * Implemented as a linked list so the hot operationPlans can be kept at the top of the + * list, and if the list grows beyond a maximum size we can drop the last + * element. + */ + possibleOperationPlans: LinkedList | null; + fragments: Fragments; +} +export interface LinkedList { + value: T; + next: LinkedList | null; +} +export declare const $$hooked: unique symbol; +export declare const $$grafastContext: unique symbol; +export declare const $$planResults: unique symbol; +export declare const $$id: unique symbol; +/** Return the value verbatim, don't execute */ +export declare const $$verbatim: unique symbol; +/** + * If we're sure the data is the right shape and valid, we can set this key and + * it can be returned directly + */ +export declare const $$bypassGraphQL: unique symbol; +export declare const $$data: unique symbol; +/** + * For attaching additional metadata to the GraphQL execution result, for + * example details of the plan or SQL queries or similar that were executed. + */ +export declare const $$extensions: unique symbol; +/** + * The "GraphQLObjectType" type name, useful when dealing with polymorphism. + */ +export declare const $$concreteType: unique symbol; +/** + * Set this key on a type if that type's serialization is idempotent (that is + * to say `serialize(serialize(thing)) === serialize(thing)`). This means we + * don't have to "roll-back" serialization if we need to fallback to graphql-js + * execution. + */ +export declare const $$idempotent: unique symbol; +/** + * The event emitter used for outputting execution events. + */ +export declare const $$eventEmitter: unique symbol; +/** + * Used to indicate that an array has more results available via a stream. + */ +export declare const $$streamMore: unique symbol; +export declare const $$proxy: unique symbol; +/** + * If an error has this property set then it's safe to send through to the user + * without being masked. + */ +export declare const $$safeError: unique symbol; +/** The layerPlan used as a subroutine for this step */ +export declare const $$subroutine: unique symbol; +/** For tracking the timeout a TimeoutError happened from */ +export declare const $$timeout: unique symbol; +/** For tracking _when_ the timeout happened (because once the JIT has warmed it might not need so long) */ +export declare const $$ts: unique symbol; +/** + * When dealing with a polymorphic thing we need to be able to determine what + * the concrete type of it is, we use the $$concreteType property for that. + */ +export interface PolymorphicData { + [$$concreteType]: TType; + [$$data]?: TData; +} +export interface IndexByListItemStepId { + [listItemStepId: number]: number; +} +export type GrafastValuesList = ReadonlyArray; +export type PromiseOrDirect = PromiseLike | T; +export type ExecutionResultValue = T | FlaggedValue | FlaggedValue; +export type GrafastResultsList = ReadonlyArray>>; +export type GrafastResultStreamList = ReadonlyArray>>> | PromiseLike>; +export type AwaitedExecutionResults = ReadonlyArray | AsyncIterable ? UStreamItem : never>>>>>; +export type ExecutionResults = PromiseOrDirect> | PromiseLike; +export type BaseGraphQLRootValue = any; +export interface BaseGraphQLVariables { + [key: string]: unknown; +} +export interface BaseGraphQLArguments { + [key: string]: any; +} +export type BaseGraphQLInputObject = BaseGraphQLArguments; +export type FieldArgs = { + /** @deprecated Use bakedInput() step instead. */ + get?: never; + getRaw(path?: string | ReadonlyArray): AnyInputStep | ObjectStep<{ + [argName: string]: AnyInputStep; + }>; + typeAt(path: string | ReadonlyArray): GraphQLInputType; + /** This also works (without path) to apply each list entry against $target */ + apply($target: ApplyableExecutableStep, path?: string | ReadonlyArray, getTargetFromParent?: (parent: TArg, inputValue: any) => object | undefined): void; + apply($target: ApplyableExecutableStep, getTargetFromParent: (parent: TArg, inputValue: any) => object | undefined, justTargetFromParent?: never): void; +} & AnyInputStepDollars; +export type FieldArg = { + /** @deprecated Use bakedInput() step instead. */ + get?: never; + getRaw(path?: string | ReadonlyArray): AnyInputStep; + typeAt(path: string | ReadonlyArray): GraphQLInputType; + /** This also works (without path) to apply each list entry against $target */ + apply($target: ApplyableExecutableStep, path?: string | ReadonlyArray, getTargetFromParent?: (parent: TArg, inputValue: any) => object | undefined): void; + apply($target: ApplyableExecutableStep, getTargetFromParent: (parent: TArg, inputValue: any) => object | undefined, justTargetFromParent?: never): void; +}; +export type AnyInputStep = __TrackedValueStepWithDollars | __InputListStep | __InputStaticLeafStep | __InputDynamicScalarStep | __InputObjectStepWithDollars | __InputDefaultStep | ConstantStep; +export type AnyInputStepWithDollars = AnyInputStep & AnyInputStepDollars; +/** + * Lies to make it easier to write TypeScript code like + * `{ $input: { $user: { $username } } }` without having to pass loads of + * generics. + */ +export type AnyInputStepDollars = { + [key in string as `$${key}`]: AnyInputStepWithDollars; +}; +export interface FieldInfo { + fieldName: string; + field: GraphQLField; + schema: GraphQLSchema; +} +/** + * Step resolvers are like regular resolvers except they're called beforehand, + * they return plans rather than values, and they only run once for lists + * rather than for each item in the list. + * + * The idea is that the plan resolver returns a plan object which later will + * process the data and feed that into the actual resolver functions + * (preferably using the default resolver function?). + * + * They are stored onto `.extensions.grafast.plan` + * + * @returns a plan for this field. + * + * @remarks + * We're using `TrackedObject<...>` so we can later consider caching these + * executions. + */ +export type FieldPlanResolver<_TArgs extends BaseGraphQLArguments, TParentStep extends Step | null, TResultStep extends Step | null> = ($parentPlan: TParentStep, args: FieldArgs, info: FieldInfo) => TResultStep; +export type InputObjectFieldApplyResolver = (target: TParent, input: any, // Don't use unknown here, otherwise users can't easily cast it +info: { + schema: GraphQLSchema; + fieldName: string; + field: GraphQLInputField; +}) => any; +export type InputObjectTypeBakedInfo = { + schema: GraphQLSchema; + type: GraphQLInputObjectType; + applyChildren(val: any): void; +}; +export type InputObjectTypeBakedResolver = (input: Record, info: InputObjectTypeBakedInfo) => any; +export type ArgumentApplyPlanResolver = ($parentPlan: TParentStep, $fieldPlan: TFieldStep, input: FieldArg, info: { + schema: GraphQLSchema; + arg: GraphQLArgument; + argName: string; +}) => void; +/** + * GraphQLScalarTypes can have plans, these are passed the field plan and must + * return an executable plan. + */ +export type ScalarPlanResolver = ($parentPlan: TParentStep, info: { + schema: GraphQLSchema; +}) => TResultStep; +/** + * GraphQLScalarTypes can have plans, these are passed the field plan and must + * return an executable plan. + */ +export type ScalarInputPlanResolver = ($inputValue: AnyInputStep, info: { + schema: GraphQLSchema; + type: GraphQLScalarType; +}) => TResultStep; +/** + * EXPERIMENTAL! + * + * NOTE: this is an `any` because we want to allow users to specify + * subclasses of ExecutableStep but TypeScript only wants to allow + * superclasses. + * + * @experimental + */ +export type EnumValueApplyResolver = (parent: TParent) => void; +type OutputPlanForNamedType = TType extends GrafastObjectType ? TStep : Step; +export type OutputPlanForType = TType extends GraphQLNonNull>> ? ListCapableStep> | Step> : TType extends GraphQLNonNull> ? ListCapableStep> | Step> : TType extends GraphQLList> ? ListCapableStep> | Step> : TType extends GraphQLList ? ListCapableStep> | Step> : TType extends GraphQLNonNull ? OutputPlanForNamedType : OutputPlanForNamedType; +/** + * Basically GraphQLFieldConfig but with an easy to access `plan` method. + */ +export type GrafastFieldConfig, but that results in everything thinking it should be a ListStep +TArgs extends BaseGraphQLArguments> = Omit, "args" | "type"> & { + type: TType; + plan?: FieldPlanResolver; + subscribePlan?: FieldPlanResolver; + args?: GrafastFieldConfigArgumentMap; +}; +/** + * Basically GraphQLFieldConfigArgumentMap but allowing for args to have plans. + */ +export type GrafastFieldConfigArgumentMap = { + [argName: string]: GrafastArgumentConfig; +}; +/** + * Basically GraphQLArgumentConfig but allowing for a plan. + */ +export type GrafastArgumentConfig = Omit & { + type: TInputType; + applyPlan?: ArgumentApplyPlanResolver; + applySubscribePlan?: ArgumentApplyPlanResolver; + inputPlan?: never; + autoApplyAfterParentPlan?: never; + autoApplyAfterParentSubscribePlan?: never; +}; +/** + * Basically GraphQLInputFieldConfig but allowing for the field to have a plan. + */ +export type GrafastInputFieldConfig = Omit & { + type: TInputType; + apply?: InputObjectFieldApplyResolver; + inputPlan?: never; + applyPlan?: never; + autoApplyAfterParentInputPlan?: never; + autoApplyAfterParentApplyPlan?: never; +}; +/** + * The args passed to a field plan resolver, the values are plans. + */ +export type TrackedArguments = { + get(key: TKey): AnyInputStep; +}; +/** + * `@stream` directive meta. + */ +export interface StepStreamOptions extends LayerPlanReasonListItemStream { +} +/** + * Additional details about the planning for a field; currently only relates to + * the `@stream` directive. + */ +export interface StepOptions { + /** + * Details for the `@stream` directive. + */ + stream: StepStreamOptions | null; + /** + * Should we walk an iterable if presented. This is important because we + * don't want to walk things like Map/Set except if we're doing it as part of + * a list step. + */ + walkIterable: boolean; +} +/** + * Options passed to the `optimize` method of a plan to give more context. + */ +export interface StepOptimizeOptions { + /** + * If null, this step will not stream. If non-null, this step _might_ stream, + * but it's not guaranteed - it may be dependent on user variables, e.g. the + * `if` parameter. + */ + stream: null | {}; + meta: Record | undefined; +} +/** + * A subscriber provides realtime data, a SubscribeStep can subscribe to a + * given topic (string) and will receive an AsyncIterableIterator with messages + * published to that topic (standard pub/sub semantics). + */ +export type GrafastSubscriber = { + subscribe(topic: TTopic): PromiseOrDirect>; + release?(): PromiseOrDirect; +}; +/** + * Specifically relates to the stringification of NodeIDs, e.g. `["User", 1]` + * to/from `WyJVc2VyIiwgMV0=` + */ +export interface NodeIdCodec { + name: string; + encode(value: T): string | null; + decode(value: string): T; +} +/** + * Determines if a NodeID relates to a given object type, and also relates to + * encoding the NodeID for that type. + */ +export type NodeIdHandler = NodeIdCodec, TNodeStep extends Step = Step, TSpec = any> = { + /** + * The name of the object type this handler is for. + */ + typeName: string; + /** + * Which codec are we using to encode/decode the NodeID string? + */ + codec: TCodec; + /** + * Returns true if the given decoded Node ID value represents this type. + */ + match(specifier: TCodec extends NodeIdCodec ? U : any): boolean; + /** + * Returns the underlying identifiers extracted from the decoded NodeID + * value. + */ + getIdentifiers(value: TCodec extends NodeIdCodec ? U : any): TIdentifiers; + /** + * Returns a plan that returns the value ready to be encoded. When the result + * of this plan is fed into `match`, it should return `true`. + */ + plan($thing: TNodeStep): Step ? U : any>; + /** + * Returns a specification based on the Node ID, this can be in any format + * you like. It is intended to then be fed into `get` or handled in your own + * code as you see fit. (When used directly, it's primarily useful for + * referencing a node without actually fetching it - e.g. allowing you to + * delete a node by its ID without first fetching it.) + */ + getSpec(plan: Step ? U : any>): TSpec; + /** + * Combined with `getSpec`, this forms the recprocal of `plan`; i.e. + * `get(getSpec( plan(node) ))` should return a plan that results in the + * original node. + */ + get(spec: TSpec): TNodeStep; + deprecationReason?: string; +}; +export type BaseEventMap = Record; +export type EventMapKey = string & keyof TEventMap; +export type EventCallback = (params: TPayload) => void; +export interface TypedEventEmitter extends EventEmitter { + addListener>(eventName: TEventName, callback: EventCallback): this; + on>(eventName: TEventName, callback: EventCallback): this; + once>(eventName: TEventName, callback: EventCallback): this; + removeListener>(eventName: TEventName, callback: EventCallback): this; + off>(eventName: TEventName, callback: EventCallback): this; + emit>(eventName: TEventName, params: TEventMap[TEventName]): boolean; +} +export type ExecutionEventMap = { + /** + * Something that can be added to the + * ExecutionResult.extensions.explain.operations list. + */ + explainOperation: { + operation: Record & { + type: string; + title: string; + }; + }; +}; +export type ExecutionEventEmitter = TypedEventEmitter; +export interface ExecutionExtraBase { + /** The `performance.now()` at which your step should stop executing */ + stopTime: number | null; + /** If you have set a `metaKey` on your step, the relevant meta object which you can write into (e.g. for caching) */ + meta: Record | undefined; + eventEmitter: ExecutionEventEmitter | undefined; +} +export interface ExecutionExtra extends ExecutionExtraBase { +} +export interface UnbatchedExecutionExtra extends ExecutionExtraBase { + stream: ExecutionDetailsStream | null; +} +/** + * A bitwise number representing a number of flags: + * + * - 0: normal execution value + * - 1: errored (trappable) + * - 2: null (trappable) + * - 4: inhibited (trappable) + * - 8: disabled due to polymorphism (untrappable) + * - 16: stopped (untrappable) - e.g. due to fatal (unrecoverable) error + * - 32: ... + */ +export type ExecutionEntryFlags = number & { + readonly tsBrand?: unique symbol; +}; +export declare const NO_FLAGS: ExecutionEntryFlags; +export declare const FLAG_ERROR: ExecutionEntryFlags; +export declare const FLAG_NULL: ExecutionEntryFlags; +export declare const FLAG_INHIBITED: ExecutionEntryFlags; +export declare const FLAG_POLY_SKIPPED: ExecutionEntryFlags; +export declare const FLAG_STOPPED: ExecutionEntryFlags; +export declare const ALL_FLAGS: ExecutionEntryFlags; +/** By default, accept null values as an input */ +export declare const DEFAULT_ACCEPT_FLAGS: ExecutionEntryFlags; +export declare const TRAPPABLE_FLAGS: ExecutionEntryFlags; +export declare const DEFAULT_FORBIDDEN_FLAGS: ExecutionEntryFlags; +export declare const FORBIDDEN_BY_NULLABLE_BOUNDARY_FLAGS: ExecutionEntryFlags; +export type ExecutionValue = BatchExecutionValue | UnaryExecutionValue; +interface ExecutionValueBase { + at(i: number): TData; + isBatch: boolean; + /** Returns this.value for a unary execution value; throws if non-unary */ + unaryValue(): TData; +} +export interface BatchExecutionValue extends ExecutionValueBase { + isBatch: true; + entries: ReadonlyArray; + /** Always throws, since this should only be called on unary execution values */ + unaryValue(): never; +} +export interface UnaryExecutionValue extends ExecutionValueBase { + isBatch: false; + value: TData; + /** Same as getting .value */ + unaryValue(): TData; +} +export type IndexMap = (callback: (i: number) => T) => ReadonlyArray; +export type IndexForEach = (callback: (i: number) => any) => void; +export interface ExecutionDetailsStream { + initialCount: number; +} +export interface ExecutionDetails { + count: number; + indexMap: IndexMap; + indexForEach: IndexForEach; + values: { + [DepIdx in keyof TDeps]: ExecutionValue; + } & { + length: TDeps["length"]; + map: ReadonlyArray>["map"]; + }; + extra: ExecutionExtra; + stream: ExecutionDetailsStream | null; +} +export interface LocationDetails { + node: ASTNode | readonly ASTNode[]; + /** This should only be null for the root selection */ + parentTypeName: string | null; + /** This should only be null for the root selection */ + fieldName: string | null; +} +export type UnwrapPlanTuple = { + [Index in keyof TIn]: DataFromStep; +}; +export type NotVariableValueNode = Exclude; +export type StreamMaybeMoreableArray = Array & { + [$$streamMore]?: AsyncIterator | Iterator; +}; +export type StreamMoreableArray = Array & { + [$$streamMore]: AsyncIterator | Iterator; +}; +export interface GrafastArgs extends GraphQLArgs { + resolvedPreset?: GraphileConfig.ResolvedPreset; + requestContext?: Partial; + middleware?: Middleware | null; +} +export type Maybe = T | null | undefined; +export * from "./planJSONInterfaces.js"; +export interface AddDependencyOptions { + step: TStep; + skipDeduplication?: boolean; + /** @defaultValue `FLAG_NULL` */ + acceptFlags?: ExecutionEntryFlags; + onReject?: Maybe; + nonUnaryMessage?: ($dependent: Step, $dependency: Step) => string; +} +export interface DependencyOptions { + step: TStep; + acceptFlags: ExecutionEntryFlags; + onReject: Maybe; +} +export type DataFromStep = TStep extends Step ? TData : never; +export interface GrafastExecutionArgs extends ExecutionArgs { + resolvedPreset?: GraphileConfig.ResolvedPreset; + middleware?: Middleware | null; + requestContext?: Partial; + outputDataAsString?: boolean; +} +export interface ValidateSchemaEvent { + resolvedPreset: GraphileConfig.ResolvedPreset; + schema: GraphQLSchema; +} +export interface ParseAndValidateEvent { + resolvedPreset: GraphileConfig.ResolvedPreset; + schema: GraphQLSchema; + source: string | Source; +} +export interface PrepareArgsEvent { + args: Grafast.ExecutionArgs; +} +export interface ExecuteEvent { + args: GrafastExecutionArgs; +} +export interface SubscribeEvent { + args: GrafastExecutionArgs; +} +export interface EstablishOperationPlanEvent { + schema: GraphQLSchema; + operation: OperationDefinitionNode; + fragments: ObjMap; + variableValues: Record; + context: any; + rootValue: any; + planningTimeout: number | undefined; + args: GrafastExecutionArgs; +} +export interface ExecuteStepEvent { + args: GrafastExecutionArgs; + step: Step; + executeDetails: ExecutionDetails; +} +//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/interfaces.d.ts.map b/grafast/grafast/dist/interfaces.d.ts.map new file mode 100644 index 0000000000..5b564f2a0e --- /dev/null +++ b/grafast/grafast/dist/interfaces.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/interfaces.js b/grafast/grafast/dist/interfaces.js new file mode 100644 index 0000000000..0f87dba226 --- /dev/null +++ b/grafast/grafast/dist/interfaces.js @@ -0,0 +1,80 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.$$deepDepSkip = exports.FORBIDDEN_BY_NULLABLE_BOUNDARY_FLAGS = exports.DEFAULT_FORBIDDEN_FLAGS = exports.TRAPPABLE_FLAGS = exports.DEFAULT_ACCEPT_FLAGS = exports.ALL_FLAGS = exports.FLAG_STOPPED = exports.FLAG_POLY_SKIPPED = exports.FLAG_INHIBITED = exports.FLAG_NULL = exports.FLAG_ERROR = exports.NO_FLAGS = exports.$$ts = exports.$$timeout = exports.$$subroutine = exports.$$safeError = exports.$$proxy = exports.$$streamMore = exports.$$eventEmitter = exports.$$idempotent = exports.$$concreteType = exports.$$extensions = exports.$$data = exports.$$bypassGraphQL = exports.$$verbatim = exports.$$id = exports.$$planResults = exports.$$grafastContext = exports.$$hooked = exports.$$cacheByOperation = exports.$$queryCache = void 0; +const tslib_1 = require("tslib"); +exports.$$queryCache = Symbol("queryCache"); +/** + * We store the cache directly onto the GraphQLSchema so that it gets garbage + * collected along with the schema when it's not needed any more. To do so, we + * attach it using this symbol. + */ +exports.$$cacheByOperation = Symbol("cacheByOperation"); +exports.$$hooked = Symbol("hookArgsApplied"); +exports.$$grafastContext = Symbol("context"); +exports.$$planResults = Symbol("planResults"); +exports.$$id = Symbol("id"); +/** Return the value verbatim, don't execute */ +exports.$$verbatim = Symbol("verbatim"); +/** + * If we're sure the data is the right shape and valid, we can set this key and + * it can be returned directly + */ +exports.$$bypassGraphQL = Symbol("bypassGraphQL"); +exports.$$data = Symbol("data"); +/** + * For attaching additional metadata to the GraphQL execution result, for + * example details of the plan or SQL queries or similar that were executed. + */ +exports.$$extensions = Symbol("extensions"); +/** + * The "GraphQLObjectType" type name, useful when dealing with polymorphism. + */ +exports.$$concreteType = Symbol("concreteType"); +/** + * Set this key on a type if that type's serialization is idempotent (that is + * to say `serialize(serialize(thing)) === serialize(thing)`). This means we + * don't have to "roll-back" serialization if we need to fallback to graphql-js + * execution. + */ +exports.$$idempotent = Symbol("idempotent"); +/** + * The event emitter used for outputting execution events. + */ +exports.$$eventEmitter = Symbol("executionEventEmitter"); +/** + * Used to indicate that an array has more results available via a stream. + */ +exports.$$streamMore = Symbol("streamMore"); +exports.$$proxy = Symbol("proxy"); +/** + * If an error has this property set then it's safe to send through to the user + * without being masked. + */ +exports.$$safeError = Symbol("safeError"); +/** The layerPlan used as a subroutine for this step */ +exports.$$subroutine = Symbol("subroutine"); +/** For tracking the timeout a TimeoutError happened from */ +exports.$$timeout = Symbol("timeout"); +/** For tracking _when_ the timeout happened (because once the JIT has warmed it might not need so long) */ +exports.$$ts = Symbol("timestamp"); +function flag(f) { + return f; +} +exports.NO_FLAGS = flag(0); +exports.FLAG_ERROR = flag(1 << 0); +exports.FLAG_NULL = flag(1 << 1); +exports.FLAG_INHIBITED = flag(1 << 2); +exports.FLAG_POLY_SKIPPED = flag(1 << 3); +exports.FLAG_STOPPED = flag(1 << 4); +exports.ALL_FLAGS = flag(exports.FLAG_ERROR | exports.FLAG_NULL | exports.FLAG_INHIBITED | exports.FLAG_POLY_SKIPPED | exports.FLAG_STOPPED); +/** By default, accept null values as an input */ +exports.DEFAULT_ACCEPT_FLAGS = flag(exports.FLAG_NULL); +exports.TRAPPABLE_FLAGS = flag(exports.FLAG_ERROR | exports.FLAG_NULL | exports.FLAG_INHIBITED); +exports.DEFAULT_FORBIDDEN_FLAGS = flag(exports.ALL_FLAGS & ~exports.DEFAULT_ACCEPT_FLAGS); +exports.FORBIDDEN_BY_NULLABLE_BOUNDARY_FLAGS = flag(exports.FLAG_NULL | exports.FLAG_POLY_SKIPPED); +tslib_1.__exportStar(require("./planJSONInterfaces.js"), exports); +/** + * @internal + */ +exports.$$deepDepSkip = Symbol("deepDepSkip_experimental"); +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/interfaces.js.map b/grafast/grafast/dist/interfaces.js.map new file mode 100644 index 0000000000..1c8a92c997 --- /dev/null +++ b/grafast/grafast/dist/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;;AA0Ea,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAEjD;;;;GAIG;AACU,QAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAoDhD,QAAA,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAErC,QAAA,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AACrC,QAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,QAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,+CAA+C;AAClC,QAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC7C;;;GAGG;AACU,QAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAC1C,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AACrC;;;GAGG;AACU,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAEjD;;GAEG;AACU,QAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAErD;;;;;GAKG;AACU,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAEjD;;GAEG;AACU,QAAA,cAAc,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAE9D;;GAEG;AACU,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAEpC,QAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAEvC;;;GAGG;AACU,QAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAE/C,uDAAuD;AAC1C,QAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAEjD,4DAA4D;AAC/C,QAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAE3C,2GAA2G;AAC9F,QAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAmhBxC,SAAS,IAAI,CAAC,CAAS;IACrB,OAAO,CAAwB,CAAC;AAClC,CAAC;AAEY,QAAA,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,QAAA,UAAU,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1B,QAAA,SAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzB,QAAA,cAAc,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,QAAA,iBAAiB,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACjC,QAAA,YAAY,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5B,QAAA,SAAS,GAAG,IAAI,CAC3B,kBAAU,GAAG,iBAAS,GAAG,sBAAc,GAAG,yBAAiB,GAAG,oBAAY,CAC3E,CAAC;AAEF,iDAAiD;AACpC,QAAA,oBAAoB,GAAG,IAAI,CAAC,iBAAS,CAAC,CAAC;AACvC,QAAA,eAAe,GAAG,IAAI,CAAC,kBAAU,GAAG,iBAAS,GAAG,sBAAc,CAAC,CAAC;AAChE,QAAA,uBAAuB,GAAG,IAAI,CAAC,iBAAS,GAAG,CAAC,4BAAoB,CAAC,CAAC;AAClE,QAAA,oCAAoC,GAAG,IAAI,CACtD,iBAAS,GAAG,yBAAiB,CAC9B,CAAC;AAqGF,kEAAwC;AAiBxC;;GAEG;AACU,QAAA,aAAa,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/makeGrafastSchema.d.ts b/grafast/grafast/dist/makeGrafastSchema.d.ts new file mode 100644 index 0000000000..7a5d3d39ca --- /dev/null +++ b/grafast/grafast/dist/makeGrafastSchema.d.ts @@ -0,0 +1,85 @@ +import type { GraphQLFieldResolver, GraphQLScalarLiteralParser, GraphQLScalarSerializer, GraphQLScalarValueParser } from "graphql"; +import { GraphQLSchema } from "graphql"; +import * as graphql from "graphql"; +import type { ArgumentApplyPlanResolver, EnumValueApplyResolver, FieldPlanResolver, InputObjectFieldApplyResolver, InputObjectTypeBakedResolver, ScalarPlanResolver } from "./interfaces.js"; +import type { Step } from "./step.js"; +/** + * When defining a field with `typeDefs/plans` you can declare the field plan + * directly, or you can define a configuration object that accepts the plan and + * more. + */ +export type FieldPlans = FieldPlanResolver | { + plan?: FieldPlanResolver; + subscribePlan?: FieldPlanResolver; + resolve?: GraphQLFieldResolver; + subscribe?: GraphQLFieldResolver; + args?: { + [argName: string]: ArgumentApplyPlanResolver | { + applyPlan?: ArgumentApplyPlanResolver; + applySubscribePlan?: ArgumentApplyPlanResolver; + extensions?: graphql.GraphQLArgumentExtensions; + }; + }; +}; +/** + * The plans/config for each field of a GraphQL object type. + */ +export type ObjectPlans = { + __assertStep?: ((step: Step) => asserts step is Step) | { + new (...args: any[]): Step; + }; +} & { + [fieldName: string]: FieldPlans; +}; +/** + * The plans for each field of a GraphQL input object type. + */ +export type InputObjectPlans = { + __baked?: InputObjectTypeBakedResolver; +} & { + [fieldName: string]: InputObjectFieldApplyResolver | { + apply?: InputObjectFieldApplyResolver; + extensions?: graphql.GraphQLInputFieldExtensions; + }; +}; +/** + * The plan config for an interface or union type. + */ +export type InterfaceOrUnionPlans = { + __resolveType?: (o: unknown) => string; +}; +/** + * The config for a GraphQL scalar type. + */ +export type ScalarPlans = { + serialize?: GraphQLScalarSerializer; + parseValue?: GraphQLScalarValueParser; + parseLiteral?: GraphQLScalarLiteralParser; + plan?: ScalarPlanResolver; +}; +/** + * The values/configs for the entries in a GraphQL enum type. + */ +export type EnumPlans = { + [enumValueName: string]: EnumValueApplyResolver | string | number | boolean | { + value?: unknown; + extensions?: graphql.GraphQLEnumValueExtensions; + apply?: EnumValueApplyResolver; + }; +}; +/** + * A map from GraphQL named type to the config for that type. + */ +export interface GrafastPlans { + [typeName: string]: ObjectPlans | InputObjectPlans | InterfaceOrUnionPlans | ScalarPlans | EnumPlans; +} +/** + * Takes a GraphQL schema definition in Interface Definition Language (IDL/SDL) + * syntax and configs for the types in it and returns a GraphQL schema. + */ +export declare function makeGrafastSchema(details: { + typeDefs: string; + plans: GrafastPlans; + enableDeferStream?: boolean; +}): GraphQLSchema; +//# sourceMappingURL=makeGrafastSchema.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/makeGrafastSchema.d.ts.map b/grafast/grafast/dist/makeGrafastSchema.d.ts.map new file mode 100644 index 0000000000..55f1c114e7 --- /dev/null +++ b/grafast/grafast/dist/makeGrafastSchema.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"makeGrafastSchema.d.ts","sourceRoot":"","sources":["../src/makeGrafastSchema.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/makeGrafastSchema.js b/grafast/grafast/dist/makeGrafastSchema.js new file mode 100644 index 0000000000..43a370d8d3 --- /dev/null +++ b/grafast/grafast/dist/makeGrafastSchema.js @@ -0,0 +1,394 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.makeGrafastSchema = makeGrafastSchema; +const tslib_1 = require("tslib"); +const graphql_1 = require("graphql"); +const graphql = tslib_1.__importStar(require("graphql")); +const utils_js_1 = require("./utils.js"); +const { buildASTSchema, isEnumType, isInputObjectType, isInterfaceType, isObjectType, isScalarType, isUnionType, parse, } = graphql; +/** + * Takes a GraphQL schema definition in Interface Definition Language (IDL/SDL) + * syntax and configs for the types in it and returns a GraphQL schema. + */ +function makeGrafastSchema(details) { + const { typeDefs, plans, enableDeferStream = false } = details; + const astSchema = buildASTSchema(parse(typeDefs), { + enableDeferStream, + }); + const schemaConfig = astSchema.toConfig(); + const typeByName = new Map(); + function mapType(type) { + if (graphql.isNonNullType(type)) { + return new graphql.GraphQLNonNull(mapType(type.ofType)); + } + else if (graphql.isListType(type)) { + return new graphql.GraphQLList(mapType(type.ofType)); + } + else { + const replacementType = typeByName.get(type.name); + if (!replacementType) { + throw new Error(`Failed to find replaced type '${type.name}'`); + } + return replacementType; + } + } + for (const [typeName, _spec] of Object.entries(plans)) { + const astTypeIndex = schemaConfig.types.findIndex((t) => t.name === typeName); + const astType = schemaConfig.types[astTypeIndex]; + if (!astType) { + console.warn(`'plans' specified configuration for type '${typeName}', but that type was not present in the schema`); + continue; + } + } + const BUILT_IN_TYPE_NAMES = ["String", "Int", "Float", "Boolean", "ID"]; + // Now mod the types + const rawTypes = schemaConfig.types; + schemaConfig.types = rawTypes.map((astType) => { + const typeName = astType.name; + const replacementType = (() => { + if (typeName.startsWith("__") || BUILT_IN_TYPE_NAMES.includes(typeName)) { + return astType; + } + if (isObjectType(astType)) { + const rawConfig = astType.toConfig(); + const objectPlans = plans[astType.name]; + const rawFields = rawConfig.fields; + const rawInterfaces = rawConfig.interfaces; + const config = { + ...rawConfig, + extensions: { + ...rawConfig.extensions, + }, + }; + if (objectPlans) { + for (const [fieldName, rawFieldSpec] of Object.entries(objectPlans)) { + if (fieldName === "__assertStep") { + (0, utils_js_1.exportNameHint)(rawFieldSpec, `${typeName}_assertStep`); + config.extensions.grafast = { assertStep: rawFieldSpec }; + continue; + } + else if (fieldName.startsWith("__")) { + throw new Error(`Unsupported field name '${fieldName}'; perhaps you meant '__assertStep'?`); + } + const fieldSpec = rawFieldSpec; + const field = rawFields[fieldName]; + if (!field) { + console.warn(`'plans' specified configuration for object type '${typeName}' field '${fieldName}', but that field was not present in the type`); + continue; + } + if ("args" in fieldSpec && + typeof fieldSpec.args === "object" && + fieldSpec.args != null) { + for (const [argName, _argSpec] of Object.entries(fieldSpec.args)) { + const arg = field.args?.[argName]; + if (!arg) { + console.warn(`'plans' specified configuration for object type '${typeName}' field '${fieldName}' arg '${argName}', but that arg was not present on the field`); + continue; + } + } + } + } + } + config.interfaces = function () { + return rawInterfaces.map((t) => mapType(t)); + }; + config.fields = function () { + const fields = Object.create(null); + for (const [fieldName, rawFieldSpec] of Object.entries(rawFields)) { + if (fieldName.startsWith("__")) { + continue; + } + const fieldSpec = objectPlans && Object.hasOwn(objectPlans, fieldName) + ? objectPlans[fieldName] + : undefined; + const fieldConfig = { + ...rawFieldSpec, + type: mapType(rawFieldSpec.type), + }; + fields[fieldName] = fieldConfig; + if (fieldConfig.args) { + for (const [_argName, arg] of Object.entries(fieldConfig.args)) { + arg.type = mapType(arg.type); + } + } + if (fieldSpec) { + if (typeof fieldSpec === "function") { + (0, utils_js_1.exportNameHint)(fieldSpec, `${typeName}_${fieldName}_plan`); + // it's a plan + fieldConfig.extensions.grafast = { + plan: fieldSpec, + }; + } + else { + // it's a spec + const grafastExtensions = Object.create(null); + fieldConfig.extensions.grafast = grafastExtensions; + if (typeof fieldSpec.resolve === "function") { + (0, utils_js_1.exportNameHint)(fieldSpec.resolve, `${typeName}_${fieldName}_resolve`); + fieldConfig.resolve = fieldSpec.resolve; + } + if (typeof fieldSpec.subscribe === "function") { + (0, utils_js_1.exportNameHint)(fieldSpec.subscribe, `${typeName}_${fieldName}_subscribe`); + fieldConfig.subscribe = fieldSpec.subscribe; + } + if (typeof fieldSpec.plan === "function") { + (0, utils_js_1.exportNameHint)(fieldSpec.plan, `${typeName}_${fieldName}_plan`); + grafastExtensions.plan = fieldSpec.plan; + } + if (typeof fieldSpec.subscribePlan === "function") { + (0, utils_js_1.exportNameHint)(fieldSpec.subscribePlan, `${typeName}_${fieldName}_subscribePlan`); + grafastExtensions.subscribePlan = fieldSpec.subscribePlan; + } + if (fieldConfig.args) { + for (const [argName, arg] of Object.entries(fieldConfig.args)) { + const argSpec = fieldSpec.args?.[argName]; + if (typeof argSpec === "function") { + const applyPlan = argSpec; + (0, utils_js_1.exportNameHint)(applyPlan, `${typeName}_${fieldName}_${argName}_applyPlan`); + Object.assign(arg.extensions, { + grafast: { applyPlan }, + }); + } + else if (typeof argSpec === "object" && + argSpec !== null) { + const { extensions, applyPlan, applySubscribePlan } = argSpec; + if (extensions) { + Object.assign(arg.extensions, extensions); + } + if (applyPlan || applySubscribePlan) { + (0, utils_js_1.exportNameHint)(applyPlan, `${typeName}_${fieldName}_${argName}_applyPlan`); + (0, utils_js_1.exportNameHint)(applySubscribePlan, `${typeName}_${fieldName}_${argName}_applySubscribePlan`); + Object.assign(arg.extensions, { + grafast: { + applyPlan, + applySubscribePlan, + }, + }); + } + } + } + } + } + } + } + return fields; + }; + return new graphql.GraphQLObjectType(config); + } + else if (isInputObjectType(astType)) { + const rawConfig = astType.toConfig(); + const config = { + ...rawConfig, + extensions: { + ...rawConfig.extensions, + grafast: { + ...rawConfig.extensions?.grafast, + }, + }, + }; + const inputObjectPlans = plans[astType.name]; + if (inputObjectPlans) { + for (const [fieldName, fieldSpec] of Object.entries(inputObjectPlans)) { + if (fieldName === "__baked") { + config.extensions.grafast.baked = + fieldSpec; + continue; + } + if (config.extensions?.grafast?.baked) { + (0, utils_js_1.exportNameHint)(config.extensions.grafast.baked, `${typeName}__baked`); + } + const field = rawConfig.fields[fieldName]; + if (!field) { + console.warn(`'plans' specified configuration for input object type '${typeName}' field '${fieldName}', but that field was not present in the type`); + continue; + } + } + } + const rawFields = rawConfig.fields; + config.fields = function () { + const fields = Object.create(null); + for (const [fieldName, rawFieldConfig] of Object.entries(rawFields)) { + const fieldSpec = inputObjectPlans && Object.hasOwn(inputObjectPlans, fieldName) + ? inputObjectPlans[fieldName] + : undefined; + const fieldConfig = { + ...rawFieldConfig, + type: mapType(rawFieldConfig.type), + }; + fields[fieldName] = fieldConfig; + if (fieldSpec) { + const grafastExtensions = Object.create(null); + fieldConfig.extensions.grafast = grafastExtensions; + if (typeof fieldSpec === "function") { + (0, utils_js_1.exportNameHint)(fieldSpec, `${typeName}_${fieldName}_apply`); + grafastExtensions.apply = fieldSpec; + } + else { + const { apply, extensions } = fieldSpec; + if (extensions) { + Object.assign(fieldConfig.extensions, extensions); + } + if (apply) { + (0, utils_js_1.exportNameHint)(fieldSpec.apply, `${typeName}_${fieldName}_apply`); + Object.assign(grafastExtensions, { apply }); + } + } + } + } + return fields; + }; + return new graphql.GraphQLInputObjectType(config); + } + else if (isInterfaceType(astType)) { + const rawConfig = astType.toConfig(); + const config = { + ...rawConfig, + }; + const rawFields = rawConfig.fields; + config.fields = function () { + const fields = Object.create(null); + for (const [fieldName, rawFieldSpec] of Object.entries(rawFields)) { + const fieldConfig = { + ...rawFieldSpec, + type: mapType(rawFieldSpec.type), + }; + fields[fieldName] = fieldConfig; + if (fieldConfig.args) { + for (const [_argName, arg] of Object.entries(fieldConfig.args)) { + arg.type = mapType(arg.type); + } + } + } + return fields; + }; + const rawInterfaces = rawConfig.interfaces; + config.interfaces = function () { + return rawInterfaces.map((t) => mapType(t)); + }; + const polyPlans = plans[astType.name]; + if (polyPlans?.__resolveType) { + (0, utils_js_1.exportNameHint)(polyPlans.__resolveType, `${typeName}_resolveType`); + config.resolveType = polyPlans.__resolveType; + } + return new graphql.GraphQLInterfaceType(config); + } + else if (isUnionType(astType)) { + const rawConfig = astType.toConfig(); + const config = { + ...rawConfig, + }; + const rawTypes = rawConfig.types; + config.types = function () { + return rawTypes.map((t) => mapType(t)); + }; + const polyPlans = plans[astType.name]; + if (polyPlans?.__resolveType) { + (0, utils_js_1.exportNameHint)(polyPlans.__resolveType, `${typeName}_resolveType`); + config.resolveType = polyPlans.__resolveType; + } + return new graphql.GraphQLUnionType(config); + } + else if (isScalarType(astType)) { + const rawConfig = astType.toConfig(); + const config = { + ...rawConfig, + extensions: { + ...rawConfig.extensions, + }, + }; + const scalarPlans = plans[astType.name]; + if (typeof scalarPlans?.serialize === "function") { + (0, utils_js_1.exportNameHint)(scalarPlans.serialize, `${typeName}_serialize`); + config.serialize = scalarPlans.serialize; + } + if (typeof scalarPlans?.parseValue === "function") { + (0, utils_js_1.exportNameHint)(scalarPlans.parseValue, `${typeName}_parseValue`); + config.parseValue = scalarPlans.parseValue; + } + if (typeof scalarPlans?.parseLiteral === "function") { + (0, utils_js_1.exportNameHint)(scalarPlans.parseLiteral, `${typeName}_parseLiteral`); + config.parseLiteral = scalarPlans.parseLiteral; + } + if (typeof scalarPlans?.plan === "function") { + (0, utils_js_1.exportNameHint)(scalarPlans.plan, `${typeName}_plan`); + config.extensions.grafast = { plan: scalarPlans.plan }; + } + return new graphql.GraphQLScalarType(config); + } + else if (isEnumType(astType)) { + const rawConfig = astType.toConfig(); + const config = { + ...rawConfig, + }; + const enumPlans = plans[astType.name]; + const enumValues = config.values; + if (enumPlans) { + for (const [enumValueName, enumValueSpec] of Object.entries(enumPlans)) { + const enumValue = enumValues[enumValueName]; + if (!enumValue) { + console.warn(`'plans' specified configuration for enum type '${typeName}' value '${enumValueName}', but that value was not present in the type`); + continue; + } + if (typeof enumValueSpec === "function") { + (0, utils_js_1.exportNameHint)(enumValueSpec, `${typeName}_${enumValueName}_apply`); + // It's a plan + if (!enumValue.extensions) { + enumValue.extensions = Object.create(null); + } + enumValue.extensions.grafast = { + apply: enumValueSpec, + }; + } + else if (typeof enumValueSpec === "object" && + enumValueSpec != null) { + // It's a full spec + if (enumValueSpec.extensions) { + (0, utils_js_1.exportNameHint)(enumValueSpec.extensions, `${typeName}_${enumValueName}_extensions`); + Object.assign(enumValue.extensions, enumValueSpec.extensions); + } + if (enumValueSpec.apply) { + (0, utils_js_1.exportNameHint)(enumValueSpec.apply, `${typeName}_${enumValueName}_apply`); + enumValue.extensions.grafast = { + apply: enumValueSpec.apply, + }; + } + if ("value" in enumValueSpec) { + enumValue.value = enumValueSpec.value; + } + } + else { + // It must be the value + enumValue.value = enumValueSpec; + } + } + } + return new graphql.GraphQLEnumType(config); + } + else { + const never = astType; + throw new Error(`Unhandled type ${never}`); + } + })(); + typeByName.set(typeName, replacementType); + return replacementType; + }); + if (schemaConfig.query) { + schemaConfig.query = mapType(schemaConfig.query); + } + if (schemaConfig.mutation) { + schemaConfig.mutation = mapType(schemaConfig.mutation); + } + if (schemaConfig.subscription) { + schemaConfig.subscription = mapType(schemaConfig.subscription); + } + if (schemaConfig.directives) { + for (const directiveConfig of schemaConfig.directives) { + for (const argConfig of directiveConfig.args) { + argConfig.type = mapType(argConfig.type); + } + } + } + const schema = new graphql_1.GraphQLSchema(schemaConfig); + return schema; +} +//# sourceMappingURL=makeGrafastSchema.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/makeGrafastSchema.js.map b/grafast/grafast/dist/makeGrafastSchema.js.map new file mode 100644 index 0000000000..2a3eb4ef65 --- /dev/null +++ b/grafast/grafast/dist/makeGrafastSchema.js.map @@ -0,0 +1 @@ +{"version":3,"file":"makeGrafastSchema.js","sourceRoot":"","sources":["../src/makeGrafastSchema.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/mermaid.d.ts b/grafast/grafast/dist/mermaid.d.ts new file mode 100644 index 0000000000..a77c30706d --- /dev/null +++ b/grafast/grafast/dist/mermaid.d.ts @@ -0,0 +1,17 @@ +import type { GrafastPlanJSON } from "./interfaces"; +/** + * An array of hex colour codes that we use for colouring the buckets/steps in + * the mermaid-js plan diagram. + * + * Generated by mokole.com/palette.html; re-ordered by Jem + */ +export declare const COLORS: string[]; +export interface PrintPlanGraphOptions { + printPathRelations?: boolean; + includePaths?: boolean; + concise?: boolean; + skipBuckets?: boolean; +} +export declare function planToMermaid(planJSON: GrafastPlanJSON, { concise, skipBuckets, }?: PrintPlanGraphOptions): string; +export * from "./planJSONInterfaces.js"; +//# sourceMappingURL=mermaid.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/mermaid.d.ts.map b/grafast/grafast/dist/mermaid.d.ts.map new file mode 100644 index 0000000000..6da18612b4 --- /dev/null +++ b/grafast/grafast/dist/mermaid.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,eAAe,EAGhB,MAAM,cAAc,CAAC;AAGtB;;;;;GAKG;AACH,eAAO,MAAM,MAAM,UAkBlB,CAAC;AAsCF,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAUD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,EACzB,EAEE,OAAe,EACf,WAAuE,GACxE,GAAE,qBAA0B,GAC5B,MAAM,CA2WR;AASD,cAAc,yBAAyB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/mermaid.js b/grafast/grafast/dist/mermaid.js new file mode 100644 index 0000000000..bc34d43041 --- /dev/null +++ b/grafast/grafast/dist/mermaid.js @@ -0,0 +1,402 @@ +"use strict"; +/* + * This file contains all our utilities for dealing with Mermaid-js + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mermaidEscape = exports.COLORS = void 0; +exports.planToMermaid = planToMermaid; +const tslib_1 = require("tslib"); +const stripAnsi_js_1 = require("./stripAnsi.js"); +/** + * An array of hex colour codes that we use for colouring the buckets/steps in + * the mermaid-js plan diagram. + * + * Generated by mokole.com/palette.html; re-ordered by Jem + */ +exports.COLORS = [ + "#696969", + "#00bfff", + "#7f007f", + "#ffa500", + "#0000ff", + "#7fff00", + "#ff1493", + "#808000", + "#dda0dd", + "#ff0000", + "#ffff00", + "#00ffff", + "#4169e1", + "#3cb371", + "#a52a2a", + "#ff00ff", + "#f5deb3", +]; +/** + * Given a string, escapes the string so that it can be embedded as the description of a node in a mermaid chart. + * + * 1. If it's already safe, returns it verbatim + * 2. If it contains disallowed characters, escape them by replacing them with similar-looking characters, + * 3. Wrap the string in quote marks. + * + * @remarks + * + * NOTE: rather than doing literal escapes, we replace with lookalike characters because: + * + * 1. Mermaid has a bug when calculating the width of the node that doesn't respect escapes, + * 2. It's easier to read the raw mermaid markup with substitutes rather than messy escapes. + * + * @internal + */ +const mermaidEscape = (str) => { + if (str.match(/^[a-z0-9 ]+$/i)) { + return str; + } + // Technically we should replace with escapes like this: + //.replace(/[#"]/g, (l) => ({ "#": "#35;", '"': "#quot;" }[l as any])) + // However there's a bug in Mermaid's rendering that causes the node to use + // the escaped string as the width for the node rather than the unescaped + // string. Thus we replace with similar looking characters. + return `"${(0, stripAnsi_js_1.stripAnsi)(str.trim()) + .replace(/[#"<>]/g, (l) => ({ "#": "ꖛ", '"': "”", "<": "ᐸ", ">": "ᐳ" })[l]) + .replace(/\r?\n/g, "
")}"`; +}; +exports.mermaidEscape = mermaidEscape; +function isGrafastPlanJSONv1(json) { + return json.version === "v1"; +} +function shouldHideStep(step) { + return step.extra?.constant?.type === "undefined"; +} +function planToMermaid(planJSON, { +// printPathRelations = false, +concise = false, skipBuckets = global.grafastExplainMermaidSkipBuckets ?? false, } = {}) { + if (!isGrafastPlanJSONv1(planJSON)) { + throw new Error("planToMermaid only supports v1 plan JSON"); + } + const stepById = Object.create(null); + const layerPlanById = Object.create(null); + const dependentsByStepId = Object.create(null); + const sortedSteps = []; + const extractSteps = (bucket) => { + layerPlanById[bucket.id] = bucket; + // Shallowest bucket first, then most dependencies + const sorted = [...bucket.steps].sort((a, z) => z.dependencyIds.length - a.dependencyIds.length); + for (const step of sorted) { + if (stepById[step.id]) { + throw new Error(`Step ${step.id} (${step.stepClass}/${step.metaString}) duplicated in plan?!`); + } + stepById[step.id] = step; + sortedSteps.push(step); + for (const depId of step.dependencyIds) { + if (!dependentsByStepId[depId]) { + dependentsByStepId[depId] = [step]; + } + else { + dependentsByStepId[depId].push(step); + } + } + } + for (const child of bucket.children) { + extractSteps(child); + } + }; + extractSteps(planJSON.rootBucket); + const color = (i) => { + return exports.COLORS[i % exports.COLORS.length]; + }; + const planStyle = `fill:#fff,stroke-width:1px,color:#000`; + const itemplanStyle = `fill:#fff,stroke-width:2px,color:#000`; + const unbatchedplanStyle = `fill:#dff,stroke-width:1px,color:#000`; + const sideeffectplanStyle = `fill:#fcc,stroke-width:2px,color:#000`; + const graph = [ + `%%{init: {'themeVariables': { 'fontSize': '12px'}}}%%`, + `${concise ? "flowchart" : "graph"} TD`, + ` classDef path fill:#eee,stroke:#000,color:#000`, + ` classDef plan ${planStyle}`, + ` classDef itemplan ${itemplanStyle}`, + ` classDef unbatchedplan ${unbatchedplanStyle}`, + ` classDef sideeffectplan ${sideeffectplanStyle}`, + ` classDef bucket fill:#f6f6f6,color:#000,stroke-width:2px,text-align:left`, + ``, + ]; + const squish = (str, start = 8, end = 8) => { + if (str.length > start + end + 4) { + return `${str.slice(0, start)}...${str.slice(str.length - end)}`; + } + return str; + }; + const planIdMap = Object.create(null); + const planId = (plan) => { + if (!planIdMap[plan.id]) { + if (shouldHideStep(plan)) { + console.warn(`Was expecting to hide step ${plan.id}, but we're rendering it anyway?`); + } + const planName = plan.stepClass.replace(/Step$/, ""); + const planNode = `${planName}${plan.id}`; + planIdMap[plan.id] = planNode; + const rawMeta = plan.metaString; + const strippedMeta = rawMeta != null ? (0, stripAnsi_js_1.stripAnsi)(rawMeta) : null; + const meta = concise && strippedMeta ? squish(strippedMeta) : strippedMeta; + const isUnbatched = plan.supportsUnbatched; + const polyPaths = pp(plan.polymorphicPaths); + const depIdsInSameBucket = plan.dependencyIds.filter((id) => stepById[id].bucketId === plan.bucketId); + const polyPathsAreSame = depIdsInSameBucket.length >= 1 && + depIdsInSameBucket.every((id) => pp(stepById[id].polymorphicPaths) === polyPaths); + const polyPathsIfDifferent = polyPathsAreSame ? "" : `\n${polyPaths}`; + const planString = `${planName}[${plan.id}${`∈${plan.bucketId}`}${plan.stream ? "@s" : ""}]${plan.isUnary ? " ➊" : ""}${polyPathsAreSame && polyPaths !== "" ? "^" : ""}${meta ? `\n<${meta}>` : ""}${polyPathsIfDifferent}`; + const [lBrace, rBrace] = plan.stepClass === "__ItemStep" + ? ["[/", "\\]"] + : plan.isSyncAndSafe + ? isUnbatched + ? ["{{", "}}"] + : ["[", "]"] + : ["[[", "]]"]; + const planClass = plan.hasSideEffects + ? "sideeffectplan" + : plan.stepClass === "__ItemStep" + ? "itemplan" + : isUnbatched && !plan.isSyncAndSafe + ? "unbatchedplan" + : "plan"; + graph.push(` ${planNode}${lBrace}${(0, exports.mermaidEscape)(planString)}${rBrace}:::${planClass}`); + } + return planIdMap[plan.id]; + }; + graph.push(""); + graph.push(" %% plan dependencies"); + const chainByDep = Object.create(null); + const depDeets = (step, idx) => { + const forbiddenFlags = step.dependencyForbiddenFlags[idx]; + const onReject = step.dependencyOnReject[idx]; + const info = []; + if (forbiddenFlags) { + if ((forbiddenFlags & 2) === 2) { + info.push("rejectNull"); + } + if ((forbiddenFlags & 1) === 0) { + info.push("trapError"); + } + if ((forbiddenFlags & 4) === 0) { + info.push("trapInhibited"); + } + if (onReject) { + info.push(`onReject=${trim((0, stripAnsi_js_1.stripAnsi)(onReject))}`); + } + } + const str = info.join(";"); + if (str) { + return `|${(0, exports.mermaidEscape)(str)}|`; + } + else { + return ""; + } + }; + sortedSteps.forEach( + // This comment is here purely to maintain the previous formatting to reduce a git diff. + (plan) => { + if (shouldHideStep(plan)) + return; + const planNode = planId(plan); + const depNodes = plan.dependencyIds + .map((depId) => { + const step = stepById[depId]; + if (shouldHideStep(step)) { + return null; + } + else { + return planId(step); + } + }) + .filter((n) => n !== null); + const transformItemPlanNode = null; + /* + plan.stepClass === '__ListTransformStep' + ? planId( + steps[operationPlan.transformDependencyPlanIdByTransformStepId[plan.id]], + ) + : null; + */ + if (depNodes.length > 0) { + if (plan.stepClass === "__ItemStep") { + const [firstDep, ...rest] = depNodes; + const arrow = plan.extra?.transformStepId == null ? "==>" : "-.->"; + graph.push(` ${firstDep} ${arrow}${depDeets(plan, 0)} ${planNode}`); + if (rest.length > 0) { + const normal = []; + for (let i = 0; i < rest.length; i++) { + const r = rest[i]; + const deets = depDeets(plan, i + 1); + if (deets) { + graph.push(` ${r} -->${deets} ${planNode}`); + } + else { + normal.push(r); + } + } + outputGroupedNormalLinks(graph, planNode, normal); + } + } + else { + if (concise && + !dependentsByStepId[plan.id] && + depNodes.length === 1) { + // Try alternating the nodes so they render closer together + const depNode = depNodes[0]; + if (chainByDep[depNode] === undefined) { + graph.push(` ${depNode} -->${depDeets(plan, 0)} ${planNode}`); + } + else { + graph.push(` ${chainByDep[depNode]} o--o${depDeets(plan, 0)} ${planNode}`); + } + chainByDep[depNode] = planNode; + } + else { + const normal = []; + for (let i = 0; i < depNodes.length; i++) { + const r = depNodes[i]; + const deets = depDeets(plan, i + 1); + if (deets) { + graph.push(` ${r} -->${deets} ${planNode}`); + } + else { + normal.push(r); + } + } + outputGroupedNormalLinks(graph, planNode, normal); + } + } + } + if (transformItemPlanNode) { + graph.push(` ${transformItemPlanNode} -.-> ${planNode}`); + } + return plan; + }); + graph.push(""); + graph.push(" %% define steps"); + sortedSteps.forEach((step) => { + if (!shouldHideStep(step)) { + planId(step); + } + }); + const stepToString = (step) => { + return `${step.stepClass.replace(/Step$/, "")}${step.bucketId === 0 ? "" : `{${step.bucketId}}`}${step.metaString ? `<${step.metaString}>` : ""}[${step.id}]`; + }; + let firstSideEffect = true; + sortedSteps.forEach((step) => { + if (step.implicitSideEffectStepId) { + if (firstSideEffect) { + graph.push(""); + graph.push(" %% implicit side effects"); + firstSideEffect = false; + } + const sideEffectStep = stepById[step.implicitSideEffectStepId]; + graph.push(` ${planId(sideEffectStep)} -.-o ${planId(step)}`); + } + }); + graph.push(""); + if (!concise && !skipBuckets) + graph.push(" subgraph Buckets"); + const layerPlans = Object.values(layerPlanById); + for (let i = 0, l = layerPlans.length; i < l; i++) { + const layerPlan = layerPlans[i]; + const steps = layerPlan.steps; + const raisonDEtre = ` (${layerPlan.reason.type})` + + (layerPlan.reason.type === "polymorphic" + ? `\n${layerPlan.reason.typeNames}` + : ``); + if (!skipBuckets) { + graph.push(` Bucket${layerPlan.id}(${(0, exports.mermaidEscape)(`Bucket ${layerPlan.id}${raisonDEtre}${layerPlan.parentSideEffectStepId != null + ? `\nParent side effect step: ${stepById[layerPlan.parentSideEffectStepId].id}` + : ""}${layerPlan.copyStepIds.length > 0 + ? `\nDeps: ${layerPlan.copyStepIds + .map((pId) => stepById[pId].id) + .join(", ")}` + : ""}${layerPlan.reason.type === "polymorphic" + ? "\n" + pp(layerPlan.reason.polymorphicPaths) + : ""}\n${layerPlan.rootStepId != null && layerPlan.reason.type !== "root" + ? `\nROOT ${stepToString(stepById[layerPlan.rootStepId])}` + : ""}${startSteps(layerPlan)}`)}):::bucket`); + } + graph.push(` classDef bucket${layerPlan.id} stroke:${color(layerPlan.id)}`); + graph.push(` class ${[ + `Bucket${layerPlan.id}`, + ...steps.filter((s) => !shouldHideStep(s)).map(planId), + ].join(",")} bucket${layerPlan.id}`); + } + if (!skipBuckets) { + for (let i = 0, l = layerPlans.length; i < l; i++) { + const layerPlan = layerPlans[i]; + const childNodes = layerPlan.children.map((c) => `Bucket${c.id}`); + if (childNodes.length > 0) { + graph.push(` Bucket${layerPlan.id} --> ${childNodes.join(" & ")}`); + } + } + } + if (!concise && !skipBuckets) + graph.push(" end"); + const graphString = graph.join("\n"); + return graphString; + function startSteps(layerPlan) { + function shortStep(step) { + return `${step.stepClass.replace(/Step$/, "") ?? ""}[${step.id}]`; + } + function shortSteps(steps) { + if (!steps) { + return ""; + } + const str = steps.map(shortStep).join(", "); + if (str.length < 40) { + return str; + } + else { + return steps.map((s) => s.id).join(", "); + } + } + return layerPlan.phases.length === 1 + ? `` + : `\n${layerPlan.phases + .map((phase, i) => `${i + 1}: ${shortSteps(phase.normalStepIds?.map((id) => stepById[id]))}${phase.unbatchedStepIds + ? `\n>: ${shortSteps(phase.unbatchedStepIds.map((id) => stepById[id]))}` + : ""}`) + .join("\n")}`; + } +} +function pp(polymorphicPaths) { + if (!polymorphicPaths) { + return ""; + } + return polymorphicPaths.map((p) => `${p}`).join("\n"); +} +tslib_1.__exportStar(require("./planJSONInterfaces.js"), exports); +function trim(string, length = 15) { + if (string.length > length) { + return string.substring(0, length - 2) + "…"; + } + else { + return string; + } +} +function outputGroupedNormalLinks(graph, planNode, normal) { + if (normal.length) { + const counts = Object.create(null); + for (const n of normal) { + if (counts[n]) { + counts[n]++; + } + else { + counts[n] = 1; + } + } + const oners = Object.keys(counts).filter((n) => counts[n] === 1); + if (oners.length >= 1) { + graph.push(` ${oners.join(" & ")} --> ${planNode}`); + } + for (const [n, c] of Object.entries(counts)) { + if (c !== 1) { + graph.push(` ${n} -- ${c} --> ${planNode}`); + } + } + } +} +//# sourceMappingURL=mermaid.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/mermaid.js.map b/grafast/grafast/dist/mermaid.js.map new file mode 100644 index 0000000000..f393c16628 --- /dev/null +++ b/grafast/grafast/dist/mermaid.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../src/mermaid.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/middleware.d.ts b/grafast/grafast/dist/middleware.d.ts new file mode 100644 index 0000000000..fc4b60af6e --- /dev/null +++ b/grafast/grafast/dist/middleware.d.ts @@ -0,0 +1,7 @@ +import { Middleware } from "graphile-config"; +declare const $$middleware: unique symbol; +export declare function getGrafastMiddleware(resolvedPreset: GraphileConfig.ResolvedPreset & { + [$$middleware]?: Middleware | null; +}): Middleware | null; +export {}; +//# sourceMappingURL=middleware.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/middleware.d.ts.map b/grafast/grafast/dist/middleware.d.ts.map new file mode 100644 index 0000000000..018c2c1045 --- /dev/null +++ b/grafast/grafast/dist/middleware.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAC;AAE3D,QAAA,MAAM,YAAY,eAAuB,CAAC;AAC1C,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,CAAC,cAAc,GAAG;IAC9C,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;CACtE,uDAoBF"} \ No newline at end of file diff --git a/grafast/grafast/dist/middleware.js b/grafast/grafast/dist/middleware.js new file mode 100644 index 0000000000..96065ae802 --- /dev/null +++ b/grafast/grafast/dist/middleware.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getGrafastMiddleware = getGrafastMiddleware; +const graphile_config_1 = require("graphile-config"); +const $$middleware = Symbol("middleware"); +function getGrafastMiddleware(resolvedPreset) { + if (resolvedPreset[$$middleware] !== undefined) { + return resolvedPreset[$$middleware]; + } + let middleware = null; + (0, graphile_config_1.orderedApply)(resolvedPreset.plugins, (p) => p.grafast?.middleware, (name, fn, _plugin) => { + if (!middleware) + middleware = new graphile_config_1.Middleware(); + middleware.register(name, fn); + }); + try { + resolvedPreset[$$middleware] = middleware; + } + catch { + // Ignore - preset must be readonly + } + return middleware; +} +//# sourceMappingURL=middleware.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/middleware.js.map b/grafast/grafast/dist/middleware.js.map new file mode 100644 index 0000000000..ae63263670 --- /dev/null +++ b/grafast/grafast/dist/middleware.js.map @@ -0,0 +1 @@ +{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":";;AAGA,oDAuBC;AA1BD,qDAA2D;AAE3D,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAC1C,SAAgB,oBAAoB,CAClC,cAEC;IAED,IAAI,cAAc,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/C,OAAO,cAAc,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,UAAU,GAAwD,IAAI,CAAC;IAC3E,IAAA,8BAAY,EACV,cAAc,CAAC,OAAO,EACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAC5B,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;QACpB,IAAI,CAAC,UAAU;YAAE,UAAU,GAAG,IAAI,4BAAU,EAAE,CAAC;QAC/C,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAS,CAAC,CAAC;IACvC,CAAC,CACF,CAAC;IACF,IAAI,CAAC;QACH,cAAc,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/multistep.d.ts b/grafast/grafast/dist/multistep.d.ts new file mode 100644 index 0000000000..b232b2d1b0 --- /dev/null +++ b/grafast/grafast/dist/multistep.d.ts @@ -0,0 +1,19 @@ +import { Step } from "./step.js"; +/** + * When using this, always use `const`! Otherwise tuples will show up as arrays + * and break things. + */ +export type Multistep = null | undefined | Step | readonly [...(readonly Step[])] | Record; +export type UnwrapMultistep = TMultistepSpec extends null ? null : TMultistepSpec extends undefined ? undefined : TMultistepSpec extends Step ? U : TMultistepSpec extends readonly [...(readonly any[])] ? { + [index in keyof TMultistepSpec]: TMultistepSpec[index] extends Step ? V : never; +} : { + [key in keyof TMultistepSpec]: TMultistepSpec[key] extends Step ? V : never; +}; +interface MultistepCacheConfig { + identifier: string; + cacheSize: number; +} +export declare function multistep(spec: TMultistepSpec, stable?: string | true | MultistepCacheConfig): Step>; +export declare function isMultistep(spec: any): spec is TMultistepSpec; +export {}; +//# sourceMappingURL=multistep.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/multistep.d.ts.map b/grafast/grafast/dist/multistep.d.ts.map new file mode 100644 index 0000000000..1b18ad6090 --- /dev/null +++ b/grafast/grafast/dist/multistep.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"multistep.d.ts","sourceRoot":"","sources":["../src/multistep.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC;;;GAGG;AACH,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,SAAS,GACT,IAAI,GACJ,SAAS,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAEzB,MAAM,MAAM,eAAe,CAAC,cAAc,SAAS,SAAS,IAC1D,cAAc,SAAS,IAAI,GACvB,IAAI,GACJ,cAAc,SAAS,SAAS,GAC9B,SAAS,GACT,cAAc,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAClC,CAAC,GACD,cAAc,SAAS,SAAS,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,GACnD;KACG,KAAK,IAAI,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,IAAI,CACjE,MAAM,CAAC,CACR,GACG,CAAC,GACD,KAAK;CACV,GACD;KACG,GAAG,IAAI,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,IAAI,CAC7D,MAAM,CAAC,CACR,GACG,CAAC,GACD,KAAK;CACV,CAAC;AAEd,UAAU,oBAAoB;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,SAAS,CAAC,KAAK,CAAC,cAAc,SAAS,SAAS,EAC9D,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,oBAAoB,GAC5C,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAwBvC;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,cAAc,SAAS,SAAS,EAChE,IAAI,EAAE,GAAG,GACR,IAAI,IAAI,cAAc,CAexB"} \ No newline at end of file diff --git a/grafast/grafast/dist/multistep.js b/grafast/grafast/dist/multistep.js new file mode 100644 index 0000000000..494007ddc0 --- /dev/null +++ b/grafast/grafast/dist/multistep.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.multistep = multistep; +exports.isMultistep = isMultistep; +const step_js_1 = require("./step.js"); +const constant_js_1 = require("./steps/constant.js"); +const list_js_1 = require("./steps/list.js"); +const object_js_1 = require("./steps/object.js"); +const utils_js_1 = require("./utils.js"); +function multistep(spec, stable) { + if (spec == null) { + return (0, constant_js_1.constant)(spec); + } + else if (spec instanceof step_js_1.Step) { + return spec; + } + else if ((0, utils_js_1.isTuple)(spec)) { + const config = stable === true + ? { identifier: `multistep` } + : typeof stable === "string" + ? { identifier: stable } + : stable; + const $step = (0, list_js_1.list)(spec, config); + return $step; + } + else { + const config = stable === true + ? { identifier: `multistep` } + : typeof stable === "string" + ? { identifier: stable } + : stable; + const $step = (0, object_js_1.object)(spec, config); + return $step; + } +} +function isMultistep(spec) { + if (spec == null) { + return true; + } + else if (spec instanceof step_js_1.Step) { + return true; + } + else if ((0, utils_js_1.isTuple)(spec) && spec.every((s) => s instanceof step_js_1.Step)) { + return true; + } + else if (typeof spec === "object" && + Object.values(spec).every((s) => s instanceof step_js_1.Step)) { + return true; + } + else { + return false; + } +} +//# sourceMappingURL=multistep.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/multistep.js.map b/grafast/grafast/dist/multistep.js.map new file mode 100644 index 0000000000..ac08ba2ad8 --- /dev/null +++ b/grafast/grafast/dist/multistep.js.map @@ -0,0 +1 @@ +{"version":3,"file":"multistep.js","sourceRoot":"","sources":["../src/multistep.ts"],"names":[],"mappings":";;AA6CA,8BA2BC;AAED,kCAiBC;AA3FD,uCAAiC;AACjC,qDAA+C;AAC/C,6CAAuC;AACvC,iDAA2C;AAC3C,yCAAqC;AAyCrC,SAAgB,SAAS,CACvB,IAAoB,EACpB,MAA6C;IAE7C,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,IAAA,sBAAQ,EAAC,IAAI,CAAQ,CAAC;IAC/B,CAAC;SAAM,IAAI,IAAI,YAAY,cAAI,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,IAAI,IAAA,kBAAO,EAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GACV,MAAM,KAAK,IAAI;YACb,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;YAC7B,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;gBAC1B,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;gBACxB,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,KAAK,GAAG,IAAA,cAAI,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO,KAAY,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GACV,MAAM,KAAK,IAAI;YACb,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE;YAC7B,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ;gBAC1B,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;gBACxB,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,KAAK,GAAG,IAAA,kBAAM,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,OAAO,KAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAgB,WAAW,CACzB,IAAS;IAET,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,IAAI,IAAI,YAAY,cAAI,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,IAAI,IAAA,kBAAO,EAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,cAAI,CAAC,EAAE,CAAC;QACjE,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,IACL,OAAO,IAAI,KAAK,QAAQ;QACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,cAAI,CAAC,EACnD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/operationPlan-input.d.ts b/grafast/grafast/dist/operationPlan-input.d.ts new file mode 100644 index 0000000000..c24ea49706 --- /dev/null +++ b/grafast/grafast/dist/operationPlan-input.d.ts @@ -0,0 +1,8 @@ +import type { GraphQLField, GraphQLInputType, GraphQLNullableType } from "graphql"; +import type { OperationPlan } from "./engine/OperationPlan.js"; +import type { FieldArgs, TrackedArguments } from "./interfaces.js"; +import type { Step } from "./step.js"; +export type ApplyAfterModeArg = "plan" | "subscribePlan"; +export declare function withFieldArgsForArguments(operationPlan: OperationPlan, $all: TrackedArguments, field: GraphQLField, $parent: Step, applyAfterMode: ApplyAfterModeArg, coordinate: string, callback: (fieldArgs: FieldArgs) => T | null | undefined): Exclude | null; +export declare function getNullableInputTypeAtPath(startType: GraphQLInputType, path: ReadonlyArray): GraphQLInputType & GraphQLNullableType; +//# sourceMappingURL=operationPlan-input.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/operationPlan-input.d.ts.map b/grafast/grafast/dist/operationPlan-input.d.ts.map new file mode 100644 index 0000000000..d0f68de284 --- /dev/null +++ b/grafast/grafast/dist/operationPlan-input.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"operationPlan-input.d.ts","sourceRoot":"","sources":["../src/operationPlan-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAS/D,OAAO,KAAK,EAGV,SAAS,EACT,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMtC,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,eAAe,CAAC;AAUzD,wBAAgB,yBAAyB,CAAC,CAAC,SAAS,IAAI,EACtD,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,EACtB,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAClC,OAAO,EAAE,IAAI,EACb,cAAc,EAAE,iBAAiB,EACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,GAAG,IAAI,GAAG,SAAS,GACvD,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,CA4KrC;AAiED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,GACnC,gBAAgB,GAAG,mBAAmB,CA8BxC"} \ No newline at end of file diff --git a/grafast/grafast/dist/operationPlan-input.js b/grafast/grafast/dist/operationPlan-input.js new file mode 100644 index 0000000000..f79b97904c --- /dev/null +++ b/grafast/grafast/dist/operationPlan-input.js @@ -0,0 +1,228 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.withFieldArgsForArguments = withFieldArgsForArguments; +exports.getNullableInputTypeAtPath = getNullableInputTypeAtPath; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const index_js_1 = require("./index.js"); +const inspect_js_1 = require("./inspect.js"); +const utils_js_1 = require("./utils.js"); +const { getNullableType, isInputObjectType, isListType } = graphql; +function assertNotRuntime(operationPlan, description) { + if (operationPlan.phase === "ready") { + throw new Error(`${description} may only be called at planning time; however you have code that has attempted to call it during execution time. Please revisit your plan resolvers to locate the issue.`); + } +} +function withFieldArgsForArguments(operationPlan, $all, field, $parent, applyAfterMode, coordinate, callback) { + if (operationPlan.loc !== null) + operationPlan.loc.push(`withFieldArgsForArguments(${field.name})`); + const args = Object.create(null); + for (const arg of field.args) { + args[arg.name] = arg; + } + const applied = new Map(); + let explicitlyApplied = false; + const fieldArgs = { + typeAt(path) { + if (typeof path === "string") { + return args[path].type; + } + else { + if (path.length === 0) { + throw new Error(`typeAt can only be used with a non-empty path since arguments themselves don't belong to a type but a field.`); + } + const argName = path[0]; + let type = args[argName]?.type; + if (!type) { + throw new Error(`Argument ${argName} does not exist`); + } + for (let i = 1, l = path.length; i < l; i++) { + const segment = path[i]; + type = graphql.isNonNullType(type) ? type.ofType : type; + if (typeof segment === "number") { + if (!isListType(type)) { + throw new Error(`Invalid path ${path.slice(1)} within argument ${argName}; expected a list at path index ${i - 1}`); + } + type = type.ofType; + } + else { + if (!isInputObjectType(type)) { + throw new Error(`Invalid path ${path.slice(1)} within argument ${argName}; expected an object at path index ${i - 1}`); + } + const arg = type.getFields()[segment]; + if (!arg) { + throw new Error(`Invalid path ${path.slice(1)} within argument ${argName}; ${type} does not have a field '${segment}'`); + } + type = arg.type; + } + } + return type; + } + }, + getRaw(path) { + assertNotRuntime(operationPlan, `fieldArgs.getRaw()`); + if (path === undefined) { + return (0, index_js_1.object)(Object.fromEntries(Object.keys(args).map((argName) => [argName, $all.get(argName)]))); + } + else if (typeof path === "string") { + return $all.get(path); + } + else if (Array.isArray(path)) { + const [first, ...rest] = path; + if (!first) { + throw new Error(`getRaw() must be called with a non-empty path`); + } + let $entry = $all.get(first); + for (const pathSegment of rest) { + if (typeof pathSegment === "number" && "at" in $entry) { + $entry = $entry.at(pathSegment); + } + else if ("get" in $entry) { + $entry = $entry.get(pathSegment); + } + else { + throw new Error(`'getRaw' path must only relate to input objects right now; path was: '${path}' (failed at '${pathSegment}')`); + } + } + return $entry; + } + else { + throw new Error(`Invalid path passed to FieldArgs.getRaw(); please check your code. Path: ${(0, inspect_js_1.inspect)(path)}`); + } + }, + apply($target, inPathOrGetTargetFromParent, maybeGetTargetFromParent) { + const inPath = typeof inPathOrGetTargetFromParent === "function" + ? undefined + : inPathOrGetTargetFromParent; + const getTargetFromParent = typeof inPathOrGetTargetFromParent === "function" + ? inPathOrGetTargetFromParent + : maybeGetTargetFromParent; + assertNotRuntime(operationPlan, `fieldArgs.apply()`); + const path = Array.isArray(inPath) ? inPath : inPath ? [inPath] : []; + const pathString = path.join("."); + const $existing = applied.get(pathString); + if ($existing) { + throw new Error(`Attempted to apply 'applyPlan' at input path ${pathString} more than once - first time to ${$existing}, second time to ${$target}. Multiple applications are not currently supported.`); + } + if (path.length === 0) { + explicitlyApplied = true; + // Auto-apply all the arguments + for (const argName of Object.keys(args)) { + fieldArgs.apply($target, [argName]); + } + } + else { + const [argName, ...rest] = path; + if (typeof argName !== "string") { + throw new Error(`Invalid path; argument '${argName}' is an invalid argument name`); + } + const arg = args[argName]; + if (!arg) { + throw new Error(`Invalid path; argument '${argName}' does not exist`); + } + const typeAtPath = getNullableInputTypeAtPath(arg.type, rest); + const $valueAtPath = fieldArgs.getRaw(inPath); + if ($valueAtPath instanceof index_js_1.ConstantStep && + $valueAtPath.data === undefined) { + // Skip applying! + } + else { + $target.apply((0, index_js_1.applyInput)(typeAtPath, $valueAtPath, getTargetFromParent)); + } + } + }, + }; + for (const argName of Object.keys(args)) { + let val; + Object.defineProperty(fieldArgs, `$${argName}`, { + get() { + return (val ??= fieldArgs.getRaw(argName)); + }, + }); + } + const result = callback(fieldArgs); + (0, utils_js_1.assertNotPromise)(result, callback, operationPlan.loc?.join(">") ?? "???"); + if (!explicitlyApplied && result != null) { + processAfter($parent, fieldArgs, result, args, applyAfterMode, coordinate); + } + if (operationPlan.loc !== null) + operationPlan.loc.pop(); + return (result ?? null); +} +function processAfter($parent, rootFieldArgs, $result, args, applyAfterMode, coordinate) { + const schema = $parent.operationPlan.schema; + for (const [argName, arg] of Object.entries(args)) { + const autoApply = applyAfterMode === "plan" + ? arg.extensions.grafast?.applyPlan + : applyAfterMode === "subscribePlan" + ? arg.extensions.grafast?.applySubscribePlan + : null; + if (autoApply) { + if (arg.defaultValue === undefined) { + const $argVal = rootFieldArgs.getRaw(argName); + if ($argVal instanceof index_js_1.ConstantStep && $argVal.data === undefined) { + // no action necessary + continue; + } + } + // TODO: should this have dollars on it for accessing subkeys? + const input = { + typeAt(path) { + return rootFieldArgs.typeAt(concatPath(argName, path)); + }, + getRaw(path) { + return rootFieldArgs.getRaw(concatPath(argName, path)); + }, + apply($target, pathOrTargetGetter, maybeTargetGetter) { + if (typeof pathOrTargetGetter === "function") { + return rootFieldArgs.apply($target, [argName], pathOrTargetGetter); + } + else { + return rootFieldArgs.apply($target, concatPath(argName, pathOrTargetGetter), maybeTargetGetter); + } + }, + }; + const result = autoApply($parent, $result, input, { + schema, + arg, + argName, + }); + if (result !== undefined) { + const fullCoordinate = `${coordinate}(${argName}:)`; + throw new Error(`Argument ${fullCoordinate}'s applyPlan returned a value. This may indicate a bug in that method, please see https://err.red/gaap#coord=${encodeURIComponent(fullCoordinate)}`); + } + } + } +} +function getNullableInputTypeAtPath(startType, path) { + let type = getNullableType(startType); + for (let i = 0, l = path.length; i < l; i++) { + const segment = path[i]; + if (typeof segment === "number") { + // Expect list + if (!isListType(type)) { + throw new Error(`Invalid path passed to fieldArgs.get(); expected list type, but found ${type}`); + } + type = getNullableType(type.ofType); + } + else { + // Must be a string + if (!isInputObjectType(type)) { + throw new Error(`Invalid path passed to fieldArgs.get(); expected object type, but found ${type}`); + } + const field = type.getFields()[segment]; + if (!field) { + throw new Error(`Invalid path passed to fieldArgs.get(); ${type} has no field named ${segment}`); + } + type = getNullableType(field.type); + } + } + return type; +} +function concatPath(argName, subpath) { + if (subpath == null) + return [argName]; + const localPath = Array.isArray(subpath) ? subpath : [subpath]; + return [argName, ...localPath]; +} +//# sourceMappingURL=operationPlan-input.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/operationPlan-input.js.map b/grafast/grafast/dist/operationPlan-input.js.map new file mode 100644 index 0000000000..8336eb632d --- /dev/null +++ b/grafast/grafast/dist/operationPlan-input.js.map @@ -0,0 +1 @@ +{"version":3,"file":"operationPlan-input.js","sourceRoot":"","sources":["../src/operationPlan-input.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/planJSONInterfaces.d.ts b/grafast/grafast/dist/planJSONInterfaces.d.ts new file mode 100644 index 0000000000..ef70f4bcd0 --- /dev/null +++ b/grafast/grafast/dist/planJSONInterfaces.d.ts @@ -0,0 +1,94 @@ +import type { ExecutionEntryFlags } from "./interfaces"; +export interface GrafastPlanJSON { + version: "v1" | "v2"; +} +export interface GrafastPlanStepJSONv1 { + id: string | number; + stepClass: string; + metaString: string | null; + isUnary: boolean; + bucketId: string | number; + implicitSideEffectStepId: string | number | null; + dependencyIds: ReadonlyArray; + dependencyForbiddenFlags: ReadonlyArray; + dependencyOnReject: ReadonlyArray; + polymorphicPaths: readonly string[] | undefined; + isSyncAndSafe: boolean | undefined; + supportsUnbatched: boolean | undefined; + hasSideEffects: boolean | undefined; + stream: { + initialCountStepId?: number; + } | undefined; + extra?: Record; +} +export interface GrafastPlanBucketPhaseJSONv1 { + normalStepIds?: ReadonlyArray; + unbatchedStepIds?: ReadonlyArray; +} +export type GrafastPlanBucketReasonJSONv1 = GrafastPlanBucketReasonRootJSONv1 | GrafastPlanBucketReasonNullableFieldJSONv1 | GrafastPlanBucketReasonListItemJSONv1 | GrafastPlanBucketReasonSubscriptionJSONv1 | GrafastPlanBucketReasonMutationFieldJSONv1 | GrafastPlanBucketReasonDeferJSONv1 | GrafastPlanBucketReasonPolymorphicJSONv1 | GrafastPlanBucketReasonSubroutineJSONv1; +export interface GrafastPlanBucketReasonRootJSONv1 { + type: "root"; +} +/** Non-branching, non-deferred */ +export interface GrafastPlanBucketReasonNullableFieldJSONv1 { + type: "nullableBoundary"; + parentStepId: string | number; +} +/** Non-branching, non-deferred */ +export interface GrafastPlanBucketReasonListItemJSONv1 { + type: "listItem"; + parentStepId: string | number; + /** If this listItem is to be streamed, the configuration for that streaming */ + stream?: { + initialCountStepId?: number; + ifStepId?: number; + labelStepId?: number; + }; +} +/** Non-branching, deferred */ +export interface GrafastPlanBucketReasonSubscriptionJSONv1 { + type: "subscription"; +} +/** Non-branching, deferred */ +export interface GrafastPlanBucketReasonMutationFieldJSONv1 { + type: "mutationField"; + mutationIndex: number; +} +/** Non-branching, deferred */ +export interface GrafastPlanBucketReasonDeferJSONv1 { + type: "defer"; + label?: string; +} +/** Branching, non-deferred */ +export interface GrafastPlanBucketReasonPolymorphicJSONv1 { + type: "polymorphic"; + typeNames: readonly string[]; + parentStepId: string | number; + polymorphicPaths: ReadonlyArray; +} +/** Non-branching, non-deferred */ +export interface GrafastPlanBucketReasonSubroutineJSONv1 { + type: "subroutine"; + parentStepId: string | number; +} +export interface GrafastPlanBucketJSONv1 { + id: number; + reason: GrafastPlanBucketReasonJSONv1; + parentSideEffectStepId: string | number | null; + copyStepIds: ReadonlyArray; + steps: ReadonlyArray; + rootStepId: string | number | null; + phases: ReadonlyArray; + children: ReadonlyArray; +} +export interface GrafastPlanJSONv1 extends GrafastPlanJSON { + version: "v1"; + rootBucket: GrafastPlanBucketJSONv1; +} +export type JSONValue = boolean | number | string | null | JSONObject | JSONArray; +export interface JSONObject { + [key: string]: JSONValue; +} +export interface JSONArray extends Array { +} +//# sourceMappingURL=planJSONInterfaces.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/planJSONInterfaces.d.ts.map b/grafast/grafast/dist/planJSONInterfaces.d.ts.map new file mode 100644 index 0000000000..c9962cc9cf --- /dev/null +++ b/grafast/grafast/dist/planJSONInterfaces.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"planJSONInterfaces.d.ts","sourceRoot":"","sources":["../src/planJSONInterfaces.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/planJSONInterfaces.js b/grafast/grafast/dist/planJSONInterfaces.js new file mode 100644 index 0000000000..7efe6f0690 --- /dev/null +++ b/grafast/grafast/dist/planJSONInterfaces.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=planJSONInterfaces.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/planJSONInterfaces.js.map b/grafast/grafast/dist/planJSONInterfaces.js.map new file mode 100644 index 0000000000..51f4f78ba7 --- /dev/null +++ b/grafast/grafast/dist/planJSONInterfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"planJSONInterfaces.js","sourceRoot":"","sources":["../src/planJSONInterfaces.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/grafast/dist/polymorphic.d.ts b/grafast/grafast/dist/polymorphic.d.ts new file mode 100644 index 0000000000..4bcb04f0fb --- /dev/null +++ b/grafast/grafast/dist/polymorphic.d.ts @@ -0,0 +1,14 @@ +import type { PolymorphicData } from "./interfaces.js"; +export declare function isPolymorphicData(data: unknown): data is PolymorphicData; +export declare function assertPolymorphicData(data: unknown): asserts data is PolymorphicData; +/** + * Returns an object with the given concrete type (and, optionally, associated + * data) + */ +export declare function polymorphicWrap(type: TType, data?: TData): PolymorphicData; +/** + * All polymorphic objects in Grafast have a $$concreteType property which + * contains the GraphQL object's type name; we simply return that. + */ +export declare function resolveType(o: unknown): string; +//# sourceMappingURL=polymorphic.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/polymorphic.d.ts.map b/grafast/grafast/dist/polymorphic.d.ts.map new file mode 100644 index 0000000000..1eb7e75437 --- /dev/null +++ b/grafast/grafast/dist/polymorphic.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"polymorphic.d.ts","sourceRoot":"","sources":["../src/polymorphic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAQxE;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,IAAI,IAAI,eAAe,CAIjC;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EACzD,IAAI,EAAE,KAAK,EAEX,IAAI,GAAE,KAA2B,GAChC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAyB/B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAG9C"} \ No newline at end of file diff --git a/grafast/grafast/dist/polymorphic.js b/grafast/grafast/dist/polymorphic.js new file mode 100644 index 0000000000..a7b1079466 --- /dev/null +++ b/grafast/grafast/dist/polymorphic.js @@ -0,0 +1,72 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isPolymorphicData = isPolymorphicData; +exports.assertPolymorphicData = assertPolymorphicData; +exports.polymorphicWrap = polymorphicWrap; +exports.resolveType = resolveType; +const inspect_js_1 = require("./inspect.js"); +const interfaces_js_1 = require("./interfaces.js"); +function isPolymorphicData(data) { + if (typeof data !== "object" || data === null) { + return false; + } + if (typeof data[interfaces_js_1.$$concreteType] !== "string") { + return false; + } + return true; +} +function assertPolymorphicData(data) { + if (!isPolymorphicData(data)) { + throw new Error(`Expected a polymorphic object, received ${(0, inspect_js_1.inspect)(data)}`); + } +} +// const EMPTY_OBJECT = Object.freeze(Object.create(null)); +/** + * Returns an object with the given concrete type (and, optionally, associated + * data) + */ +function polymorphicWrap(type, +// TODO: when we stop mutating `data` we can replace this with `EMPTY_OBJECT` +data = Object.create(null)) { + // ENHANCE: validate type further, e.g. that it's a valid object type + if (typeof type !== "string") { + throw new Error(`Expected a GraphQLObjectType name, but received ${(0, inspect_js_1.inspect)(type)}`); + } + if (data == null) { + throw new Error(`polymorphicWrap mustn't receive null-like data`); + } + Object.defineProperty(data, interfaces_js_1.$$concreteType, { + value: type, + enumerable: false, + writable: false, + configurable: false, + }); + // TODO: should NOT mutate `data`, instead use a wrapper object and rewire + // through the pipeline. + return data; + /* + return Object.assign(Object.create(null), { + [$$concreteType]: type, + [$$data]: data, + }); + */ +} +/** + * All polymorphic objects in Grafast have a $$concreteType property which + * contains the GraphQL object's type name; we simply return that. + */ +function resolveType(o) { + assertPolymorphicData(o); + return o[interfaces_js_1.$$concreteType]; +} +/* TODO: we should be extracting data from a subproperty when we rewrite how polymorphism works. +/* * + * All polymorphic objects in Grafast have a $$concreteType property which + * contains the GraphQL object's type name; we simply return that. + * / +export function resolveData(o: unknown): string { + assertPolymorphicData(o); + return o[$$data]; +} +*/ +//# sourceMappingURL=polymorphic.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/polymorphic.js.map b/grafast/grafast/dist/polymorphic.js.map new file mode 100644 index 0000000000..e391159315 --- /dev/null +++ b/grafast/grafast/dist/polymorphic.js.map @@ -0,0 +1 @@ +{"version":3,"file":"polymorphic.js","sourceRoot":"","sources":["../src/polymorphic.ts"],"names":[],"mappings":";;AAIA,8CAQC;AAED,sDAMC;AAQD,0CA6BC;AAMD,kCAGC;AAlED,6CAAuC;AAEvC,mDAAiD;AAEjD,SAAgB,iBAAiB,CAAC,IAAa;IAC7C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAQ,IAAY,CAAC,8BAAc,CAAC,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,qBAAqB,CACnC,IAAa;IAEb,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAA,oBAAO,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,2DAA2D;AAE3D;;;GAGG;AACH,SAAgB,eAAe,CAC7B,IAAW;AACX,6EAA6E;AAC7E,OAAc,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAEjC,qEAAqE;IACrE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,mDAAmD,IAAA,oBAAO,EAAC,IAAI,CAAC,EAAE,CACnE,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,8BAAc,EAAE;QAC1C,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,KAAK;QACjB,QAAQ,EAAE,KAAK;QACf,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,0EAA0E;IAC1E,wBAAwB;IACxB,OAAO,IAAgD,CAAC;IACxD;;;;;MAKE;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,CAAU;IACpC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,CAAC,CAAC,8BAAc,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;EASE"} \ No newline at end of file diff --git a/grafast/grafast/dist/prepare.d.ts b/grafast/grafast/dist/prepare.d.ts new file mode 100644 index 0000000000..7e64e67aee --- /dev/null +++ b/grafast/grafast/dist/prepare.d.ts @@ -0,0 +1,28 @@ +import type { GrafastPlanJSON } from "./index.js"; +import type { GrafastTimeouts } from "./interfaces.js"; +declare const $$contextPlanCache: unique symbol; +export interface GrafastPrepareOptions { + /** + * A list of 'explain' types that should be included in `extensions.explain`. + * + * - `plan` will cause the plan JSON to be included + * - other values are dependent on the plugins in play + * + * If set to `true` then all possible explain types will be exposed. + */ + explain?: boolean | string[]; + /** + * If true, the result will be returned as a string rather than an object - + * this is an optimization for returning the data over a network socket or + * similar. + */ + outputDataAsString?: boolean; + timeouts?: GrafastTimeouts; +} +declare module "./engine/OperationPlan.js" { + interface OperationPlan { + [$$contextPlanCache]?: GrafastPlanJSON; + } +} +export {}; +//# sourceMappingURL=prepare.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/prepare.d.ts.map b/grafast/grafast/dist/prepare.d.ts.map new file mode 100644 index 0000000000..222a77dbeb --- /dev/null +++ b/grafast/grafast/dist/prepare.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAEV,eAAe,EAKhB,MAAM,iBAAiB,CAAC;AAazB,QAAA,MAAM,kBAAkB,eAA6B,CAAC;AAGtD,MAAM,WAAW,qBAAqB;IACpC;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAAC;IAE7B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AA+cD,OAAO,QAAQ,2BAA2B,CAAC;IACzC,UAAU,aAAa;QACrB,CAAC,kBAAkB,CAAC,CAAC,EAAE,eAAe,CAAC;KACxC;CACF"} \ No newline at end of file diff --git a/grafast/grafast/dist/prepare.js b/grafast/grafast/dist/prepare.js new file mode 100644 index 0000000000..09d163a00e --- /dev/null +++ b/grafast/grafast/dist/prepare.js @@ -0,0 +1,792 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.grafastPrepare = grafastPrepare; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const execute_1 = require("graphql/execution/execute"); +const iterall_1 = require("iterall"); +const assert = tslib_1.__importStar(require("./assert.js")); +const deferred_js_1 = require("./deferred.js"); +const dev_js_1 = require("./dev.js"); +const executeBucket_js_1 = require("./engine/executeBucket.js"); +const executeOutputPlan_js_1 = require("./engine/executeOutputPlan.js"); +const OperationPlan_js_1 = require("./engine/OperationPlan.js"); +const OutputPlan_js_1 = require("./engine/OutputPlan.js"); +const establishOperationPlan_js_1 = require("./establishOperationPlan.js"); +const interfaces_js_1 = require("./interfaces.js"); +const timeSource_js_1 = require("./timeSource.js"); +const utils_js_1 = require("./utils.js"); +const { GraphQLError } = graphql; +const $$contextPlanCache = Symbol("contextPlanCache"); +const $$bypassGraphQL = Symbol("bypassGraphQL"); +const bypassGraphQLObj = Object.assign(Object.create(null), { + [$$bypassGraphQL]: true, +}); +function noop() { } +function processRoot( +// errors should already have been handled, and this ctx isn't suitable to be reused. +ctx, iterator, outputDataAsString) { + const { streams, queue } = ctx.root; + if (dev_js_1.isDev) { + // Cannot add to streams/queue now - we're finished. The streams/queue + // get their own new roots where addition streams/queue can be added. + Object.freeze(streams); + Object.freeze(queue); + } + const promises = []; + for (const stream of streams) { + promises.push(processStream(ctx.requestContext, iterator, stream, outputDataAsString)); + } + for (const deferred of queue) { + promises.push(processDeferred(ctx.requestContext, iterator, deferred, outputDataAsString)); + } + // Terminate the iterator when we're done + if (promises.length !== 0) { + return Promise.all(promises).then(noop); + } +} +function releaseUnusedIterators(bucket, bucketIndex, streams) { + const allStreams = bucket.iterators[bucketIndex]; + if (!allStreams) { + if (streams && streams.length > 0) { + console.error(`GrafastInternalError: Untracked stream detected!`); + } + return; + } + if (streams) { + for (const streamSpec of streams) { + const { stream } = streamSpec; + if (!allStreams.delete(stream)) { + console.error(`GrafastInternalError<1e43efdf-f901-43dd-8a82-768246e61478>: Stream was returned from an output plan, but that stream wasn't tracked via the bucket.`); + } + } + } + if (allStreams.size > 0) { + for (const stream of allStreams) { + if (stream.return) { + stream.return(); + } + else if (stream.throw) { + stream.throw(new Error(`Iterator no longer needed (due to OutputPlan branch being skipped)`)); + } + } + } +} +const finalize = (data, ctx, extensions, outputDataAsString) => { + if ((0, iterall_1.isAsyncIterable)(data)) { + // It's a subscription! Batch execute the child bucket for + // each entry in the stream, and then the output plan for that. + assert.strictEqual(ctx.root.queue.length, 0, "Subscription cannot also queue"); + throw new Error("TODO<172acb34-c9d4-48f5-a26f-1b37260ecc14>: subscription"); + } + else { + if (ctx.root.streams.length > 0 || ctx.root.queue.length > 0) { + // Return an async iterator + let _alive = true; + const iterator = newIterator(() => { + // ENHANCE: AbortSignal or similar, feed into `processRoot`? + _alive = false; + }); + const payload = Object.create(null); + if (data !== undefined) { + payload.data = data; + } + const errors = ctx.root.errors; + if (errors.length > 0) { + payload.errors = errors; + } + if (extensions != null) { + payload.extensions = extensions; + } + payload.hasNext = true; + iterator.push(payload); + const promise = processRoot(ctx, iterator, outputDataAsString); + if ((0, utils_js_1.isPromiseLike)(promise)) { + promise.then(() => { + iterator.push({ hasNext: false }); + iterator.return(undefined); + }, (e) => { + iterator.throw(e); + }); + } + else { + iterator.push({ hasNext: false }); + iterator.return(undefined); + } + return iterator; + } + else { + const result = Object.create(null); + if (data !== undefined) { + result.data = data; + } + const errors = ctx.root.errors; + if (errors.length > 0) { + result.errors = errors; + } + if (extensions !== undefined) { + result.extensions = extensions; + } + return result; + } + } +}; +function outputBucket(outputPlan, rootBucket, rootBucketIndex, requestContext, path, variables, asString) { + const operationPlan = rootBucket.layerPlan.operationPlan; + const root = { + insideGraphQL: false, + errors: [], + queue: [], + streams: [], + variables, + }; + const ctx = { + requestContext, + root, + path, + }; + let childBucket; + let childBucketIndex; + if (outputPlan.layerPlan === rootBucket.layerPlan) { + childBucket = rootBucket; + childBucketIndex = rootBucketIndex; + } + else { + const c = (0, OutputPlan_js_1.getChildBucketAndIndex)(outputPlan.layerPlan, null, rootBucket, rootBucketIndex, null); + if (!c) { + throw new Error(`GrafastInternalError<8bbf56c1-8e2a-4ee9-b5fc-724fd0ee222b>: could not find relevant bucket for output plan`); + } + [childBucket, childBucketIndex] = c; + } + try { + const result = (0, executeOutputPlan_js_1.executeOutputPlan)(ctx, outputPlan, childBucket, childBucketIndex, asString); + return [ctx, result ?? null]; + } + catch (e) { + const error = (0, OutputPlan_js_1.coerceError)(e, operationPlan.rootOutputPlan.locationDetails, []); + ctx.root.errors.push(error); + return [ctx, null]; + } + finally { + releaseUnusedIterators(rootBucket, rootBucketIndex, ctx.root.streams); + } +} +function executePreemptive(args, operationPlan, variableValues, context, rootValue, outputDataAsString, executionTimeout) { + const rootBucketIndex = 0; + const size = 1; + const polymorphicPathList = [OperationPlan_js_1.POLYMORPHIC_ROOT_PATH]; + const iterators = [new Set()]; + const store = new Map(); + store.set(operationPlan.variableValuesStep.id, (0, executeBucket_js_1.unaryExecutionValue)(variableValues)); + store.set(operationPlan.contextStep.id, (0, executeBucket_js_1.unaryExecutionValue)(context)); + store.set(operationPlan.rootValueStep.id, (0, executeBucket_js_1.unaryExecutionValue)(rootValue)); + const rootBucket = (0, executeBucket_js_1.newBucket)({ + layerPlan: operationPlan.rootLayerPlan, + size, + store, + flagUnion: 0, + polymorphicPathList, + iterators, + }, null); + const startTime = timeSource_js_1.timeSource.now(); + const stopTime = executionTimeout !== null ? startTime + executionTimeout : null; + const requestContext = { + args, + startTime, + stopTime, + // toSerialize: [], + eventEmitter: rootValue?.[interfaces_js_1.$$eventEmitter], + insideGraphQL: false, + }; + const bucketPromise = (0, executeBucket_js_1.executeBucket)(rootBucket, requestContext); + const subscriptionLayerPlan = rootBucket.layerPlan.children.find((c) => c.reason.type === "subscription"); + function executeStreamPayload(payload, index) { + const layerPlan = subscriptionLayerPlan; + const { rootStep } = layerPlan; + // PERF: we could consider batching this. + const store = new Map(); + const ZERO = 0; + for (const depId of layerPlan.copyStepIds) { + const executionVal = rootBucket.store.get(depId); + // Normally this would need scaling, but not this time since we know it only represents a single entry + store.set(depId, executionVal); + } + const rootExecutionValue = rootStep._isUnary + ? (0, executeBucket_js_1.unaryExecutionValue)(payload) + : (0, executeBucket_js_1.batchExecutionValue)([payload]); + store.set(rootStep.id, rootExecutionValue); + const subscriptionBucket = (0, executeBucket_js_1.newBucket)({ + layerPlan, + store, + flagUnion: rootBucket.flagUnion, + polymorphicPathList: [OperationPlan_js_1.POLYMORPHIC_ROOT_PATH], + iterators: [new Set()], + size: 1, //store.size + }, rootBucket.metaByMetaKey); + const bucketPromise = (0, executeBucket_js_1.executeBucket)(subscriptionBucket, requestContext); + function outputStreamBucket() { + const [ctx, result] = outputBucket(operationPlan.rootOutputPlan, subscriptionBucket, ZERO, requestContext, [], rootBucket.store + .get(operationPlan.variableValuesStep.id) + .at(rootBucketIndex), outputDataAsString); + return finalize(result, ctx, index === 0 ? (rootValue[interfaces_js_1.$$extensions] ?? undefined) : undefined, outputDataAsString); + } + if ((0, utils_js_1.isPromiseLike)(bucketPromise)) { + return bucketPromise.then(outputStreamBucket); + } + else { + return outputStreamBucket(); + } + } + function output() { + // Later we'll need to loop + // If it's a subscription we need to use the stream + const bucketRootEValue = rootBucket.layerPlan.rootStep != null && + rootBucket.layerPlan.rootStep.id != null + ? rootBucket.store.get(rootBucket.layerPlan.rootStep.id) + : null; + const bucketRootValue = bucketRootEValue?.at(rootBucketIndex); + const bucketRootFlags = bucketRootEValue?._flagsAt(rootBucketIndex) ?? interfaces_js_1.NO_FLAGS; + if (bucketRootFlags & interfaces_js_1.FLAG_ERROR) { + releaseUnusedIterators(rootBucket, rootBucketIndex, null); + // Something major went wrong! + const errors = [ + new GraphQLError(bucketRootValue.message, operationPlan.rootOutputPlan.locationDetails.node, // node + undefined, // source + null, // positions + null, // path + bucketRootValue, // originalError + null), + ]; + const payload = Object.create(null); + payload.errors = errors; + const extensions = bucketRootValue[interfaces_js_1.$$extensions]; + if (extensions != null) { + payload.extensions = extensions; + } + return payload; + } + // NOTE: this is where we determine whether to stream or not + if (bucketRootValue != null && + subscriptionLayerPlan != null && + Array.isArray(bucketRootValue) && + bucketRootValue[interfaces_js_1.$$streamMore]) { + // We expect exactly one streamable, we should not need to + // `releaseUnusedIterators(rootBucket, rootBucketIndex, null)` here. + const arr = bucketRootValue; + const stream = arr[interfaces_js_1.$$streamMore]; + // Do the async iterable + let stopped = false; + const abort = (0, deferred_js_1.defer)(); + const iterator = newIterator((e) => { + stopped = true; + abort.resolve(undefined); + if (e != null) { + stream.throw?.(e); + } + else { + stream.return?.(); + } + }); + (async () => { + let i = 0; + // eslint-disable-next-line no-constant-condition + while (true) { + const next = await Promise.race([abort, stream.next()]); + if (stopped || !next) { + break; + } + if (!next) { + iterator.throw(new Error("Invalid iteration")); + break; + } + const { done, value } = next; + if (done) { + break; + } + const payload = await Promise.race([ + abort, + executeStreamPayload(value, i), + ]); + if (payload === undefined) { + break; + } + if ((0, iterall_1.isAsyncIterable)(payload)) { + // FIXME: do we need to avoid 'for await' because it can cause the + // stream to exit late if we're waiting on a promise and the stream + // exits in the interrim? We're assuming that no promises will be + // sufficiently long-lived for this to be an issue right now. + // TODO: should probably tie all this into an AbortController/signal too + for await (const entry of payload) { + iterator.push(entry); + } + } + else { + iterator.push(payload); + } + i++; + } + })().then(() => iterator.return(), (e) => { + iterator.throw(e); + }); + return iterator; + } + const [ctx, result] = outputBucket(operationPlan.rootOutputPlan, rootBucket, rootBucketIndex, requestContext, [], rootBucket.store.get(operationPlan.variableValuesStep.id).at(0), outputDataAsString); + return finalize(result, ctx, rootValue[interfaces_js_1.$$extensions] ?? undefined, outputDataAsString); + } + if ((0, utils_js_1.isPromiseLike)(bucketPromise)) { + return bucketPromise.then(output); + } + else { + return output(); + } +} +function establishOperationPlanFromEvent(event) { + return (0, establishOperationPlan_js_1.establishOperationPlan)(event.schema, event.operation, event.fragments, event.variableValues, event.context, event.rootValue, event.planningTimeout); +} +/** + * @internal + */ +function grafastPrepare(args, options = {}) { + const { schema, contextValue: context, rootValue = Object.create(null), + // operationName, + // document, + middleware, } = args; + const exeContext = (0, execute_1.buildExecutionContext)(args); + // If a list of errors was returned, abort + if (Array.isArray(exeContext) || "length" in exeContext) { + return Object.assign(Object.create(bypassGraphQLObj), { + errors: exeContext, + extensions: rootValue[interfaces_js_1.$$extensions], + }); + } + const { operation, fragments, variableValues } = exeContext; + const planningTimeout = options.timeouts?.planning; + let operationPlan; + try { + if (middleware != null) { + operationPlan = middleware.runSync("establishOperationPlan", { + schema, + operation, + fragments, + variableValues, + context: context, + rootValue, + planningTimeout, + args, + }, establishOperationPlanFromEvent); + } + else { + operationPlan = (0, establishOperationPlan_js_1.establishOperationPlan)(schema, operation, fragments, variableValues, context, rootValue, planningTimeout); + } + } + catch (error) { + const graphqlError = error instanceof GraphQLError + ? error + : new GraphQLError(error.message, undefined, undefined, undefined, undefined, error, error.extensions ?? null); + return { errors: [graphqlError] }; + } + if (options.explain === true || + (options.explain && options.explain.includes("plan"))) { + // Only build the plan once + if (operationPlan[$$contextPlanCache] == null) { + operationPlan[$$contextPlanCache] = operationPlan.generatePlanJSON(); + } + rootValue[interfaces_js_1.$$extensions]?.explain?.operations.push({ + type: "plan", + title: "Plan", + plan: operationPlan[$$contextPlanCache], + }); + } + const executionTimeout = options.timeouts?.execution ?? null; + return executePreemptive(args, operationPlan, variableValues, context, rootValue, options.outputDataAsString ?? false, executionTimeout); +} +function newIterator(abort) { + const valueQueue = []; + const pullQueue = []; + let done = false; + return { + [Symbol.asyncIterator]() { + return this; + }, + async [Symbol.asyncDispose]() { + await this.return(); + }, + push(v) { + if (done) { + // LOGGING: should we raise this as a bigger issue? + console.warn("GrafastWarning<85e02385-d3d2-48a1-b791-b4cf87817899>: value pushed into iterable after done; ignoring"); + return; + } + const cbs = pullQueue.shift(); + if (cbs !== undefined) { + if ((0, utils_js_1.isPromiseLike)(v)) { + v.then((v) => cbs[0]({ done: false, value: v }), (e) => { + try { + const r = cbs[1](e); + if ((0, utils_js_1.isPromiseLike)(r)) { + r.then(null, noop); + } + } + catch (e) { + // ignore + } + this.throw(e); + }); + } + else { + cbs[0]({ done: false, value: v }); + } + } + else { + valueQueue.push(v); + } + }, + next() { + if (valueQueue.length > 0) { + return Promise.resolve(valueQueue.shift()).then((value) => ({ + done: false, + value, + })); + } + else if (done) { + return Promise.resolve({ + done: true, + value: undefined, + }); + } + else { + return new Promise((resolve, reject) => { + pullQueue.push([resolve, reject]); + }); + } + }, + return() { + if (!done) { + done = true; + abort(); + for (const entry of pullQueue) { + try { + entry[0]({ done: true, value: undefined }); + } + catch (e) { + // ignore + } + } + } + return Promise.resolve({ done: true, value: undefined }); + }, + throw(e) { + if (!done) { + done = true; + abort(e); + for (const entry of pullQueue) { + try { + entry[0]({ done, value: undefined }); + } + catch (e) { + // ignore + } + } + } + return Promise.reject(e); + }, + }; +} +async function processStream(requestContext, iterator, spec, outputDataAsString) { + /** Resolve this when finished */ + const whenDone = (0, deferred_js_1.defer)(); + let queue = null; + let timeout = null; + timeout; + const _processQueue = (entries) => { + const size = entries.length; + const store = new Map(); + const polymorphicPathList = []; + const iterators = []; + let directLayerPlanChild = spec.outputPlan.layerPlan; + while (directLayerPlanChild.parentLayerPlan !== spec.bucket.layerPlan) { + const parent = directLayerPlanChild.parentLayerPlan; + if (!parent) { + throw new Error(`GrafastInternalError: Invalid heirarchy - could not find direct layerPlan child of ${spec.bucket.layerPlan}`); + } + directLayerPlanChild = parent; + } + const { id: listItemStepId, _isUnary: isUnary } = directLayerPlanChild.rootStep; + for (const copyStepId of directLayerPlanChild.copyStepIds) { + const executionValue = spec.bucket.store.get(copyStepId); + if (!executionValue) { + throw new Error(`GrafastInternalError<2db7b749-399f-486b-bd12-7ca337b937e4>: ${spec.bucket.layerPlan} doesn't seem to include ${copyStepId} (required by ${directLayerPlanChild} via ${spec.outputPlan})`); + } + if (executionValue.isBatch) { + const values = (0, utils_js_1.arrayOfLength)(size, executionValue.at(spec.bucketIndex)); + store.set(copyStepId, (0, executeBucket_js_1.batchExecutionValue)(values)); + } + else { + store.set(copyStepId, executionValue); + } + } + if (isUnary) { + assert.ok(entries.length === 0, "Unary step should only have one index"); + store.set(listItemStepId, (0, executeBucket_js_1.unaryExecutionValue)(entries[0][0])); + } + else { + const listItemStepIdList = entries.map((e) => e[0]); + store.set(listItemStepId, (0, executeBucket_js_1.batchExecutionValue)(listItemStepIdList)); + } + for (let bucketIndex = 0; bucketIndex < size; bucketIndex++) { + polymorphicPathList[bucketIndex] = + spec.bucket.polymorphicPathList[spec.bucketIndex]; + iterators[bucketIndex] = new Set(); + } + // const childBucket = newBucket(directLayerPlanChild, noDepsList, store); + // const childBucketIndex = 0; + const rootBucket = (0, executeBucket_js_1.newBucket)({ + layerPlan: directLayerPlanChild, + size, + store, + flagUnion: 0, + polymorphicPathList, + iterators, + }, spec.bucket.metaByMetaKey); + const bucketPromise = (0, executeBucket_js_1.executeBucket)(rootBucket, requestContext); + const output = () => { + const promises = []; + for (let bucketIndex = 0; bucketIndex < size; bucketIndex++) { + const actualIndex = entries[bucketIndex][1]; + const [ctx, result] = outputBucket(spec.outputPlan, rootBucket, bucketIndex, requestContext, [...spec.path, actualIndex], spec.root.variables, outputDataAsString); + const iteratorPayload = Object.create(null); + if (result !== undefined) { + iteratorPayload.data = result; + } + iteratorPayload.hasNext = true; + if (spec.label != null) { + iteratorPayload.label = spec.label; + } + if (ctx.root.errors.length > 0) { + iteratorPayload.errors = ctx.root.errors; + } + iteratorPayload.path = ctx.path; + // TODO: extensions? + iterator.push(iteratorPayload); + const promise = processRoot(ctx, iterator, outputDataAsString); + if ((0, utils_js_1.isPromiseLike)(promise)) { + promises.push(promise); + } + } + if (promises.length !== 0) { + return Promise.all(promises).then(noop); + } + }; + if ((0, utils_js_1.isPromiseLike)(bucketPromise)) { + return bucketPromise.then(output); + } + else { + return output(); + } + }; + let pendingQueues = 0; + const queueComplete = () => { + pendingQueues--; + if (loopComplete && pendingQueues <= 0) { + whenDone.resolve(); + } + }; + const processQueue = () => { + timeout = null; + assert.ok(queue, "GrafastInternalError: processQueue called with no queue"); + // This is guaranteed to have at least one entry in it + const entries = queue; + queue = null; + try { + const result = _processQueue(entries); + if ((0, utils_js_1.isPromiseLike)(result)) { + result.then(queueComplete, (e) => { + whenDone.reject(e); + }); + } + else { + queueComplete(); + } + } + catch (e) { + whenDone.reject(e); + } + }; + const processResult = (result, payloadIndex) => { + if (queue !== null) { + queue.push([result, payloadIndex]); + } + else { + pendingQueues++; + queue = [[result, payloadIndex]]; + // OPTIMIZE: tune this delay + timeout = setTimeout(processQueue, 1); + } + }; + let loopComplete = false; + try { + let payloadIndex = spec.startIndex; + let nextValuePromise; + while ((nextValuePromise = spec.stream.next())) { + const iteratorResult = await nextValuePromise; + if (iteratorResult.done) { + break; + } + const result = iteratorResult.value; + processResult(result, payloadIndex); + payloadIndex++; + } + } + finally { + loopComplete = true; + if (pendingQueues === 0) { + whenDone.resolve(); + } + // TODO: cleanup + } + return whenDone; +} +function processSingleDeferred(requestContext, outputPlan, specs, asString) { + const size = specs.length; + const store = new Map(); + const polymorphicPathList = []; + const iterators = []; + // HACK: when we re-write stream/defer this needs fixing. + const firstBucket = specs[0][1].bucket; + if (dev_js_1.isDev) { + for (const spec of specs) { + if (spec[1].bucket !== firstBucket) { + throw new Error(`GrafastInternalError: sorry, it seems the unary dependencies feature broke our incremental delivery support. This incremental delivery is going to be fully rewritten at some point anyway, so we recommend you avoid using it for now (the spec itself has changed since we implemented it).`); + } + } + } + for (const copyStepId of outputPlan.layerPlan.copyStepIds) { + const executionValue = firstBucket.store.get(copyStepId); + if (executionValue.isBatch) { + const values = specs.map(([, spec]) => executionValue.at(spec.bucketIndex)); + store.set(copyStepId, (0, executeBucket_js_1.batchExecutionValue)(values)); + } + else { + store.set(copyStepId, executionValue); + } + } + for (let bucketIndex = 0; bucketIndex < size; bucketIndex++) { + const spec = specs[bucketIndex][1]; + polymorphicPathList[bucketIndex] = + spec.bucket.polymorphicPathList[spec.bucketIndex]; + iterators[bucketIndex] = new Set(); + } + // const childBucket = newBucket(spec.outputPlan.layerPlan, noDepsList, store); + // const childBucketIndex = 0; + const rootBucket = (0, executeBucket_js_1.newBucket)({ + layerPlan: outputPlan.layerPlan, + size, + store, + flagUnion: 0, + polymorphicPathList, + iterators, + }, null); + const bucketPromise = (0, executeBucket_js_1.executeBucket)(rootBucket, requestContext); + const output = () => { + const promises = []; + for (let bucketIndex = 0; bucketIndex < size; bucketIndex++) { + const [iterator, spec] = specs[bucketIndex]; + const [ctx, result] = outputBucket(spec.outputPlan, rootBucket, bucketIndex, requestContext, spec.path, spec.root.variables, asString); + const iteratorPayload = Object.create(null); + if (result !== undefined) { + iteratorPayload.data = result; + } + iteratorPayload.hasNext = true; + if (spec.label != null) { + iteratorPayload.label = spec.label; + } + if (ctx.root.errors.length > 0) { + iteratorPayload.errors = ctx.root.errors; + } + // TODO: extensions? + iteratorPayload.path = ctx.path; + iterator.push(iteratorPayload); + const promise = processRoot(ctx, iterator, asString); + if ((0, utils_js_1.isPromiseLike)(promise)) { + promises.push(promise); + } + } + if (promises.length !== 0) { + return Promise.all(promises).then(noop); + } + }; + if ((0, utils_js_1.isPromiseLike)(bucketPromise)) { + return bucketPromise.then(output); + } + else { + return output(); + } +} +function processBatches(batchesByRequestTools, whenDone, asString) { + // Key is only used for batching + const promises = []; + for (const [requestContext, batches] of batchesByRequestTools.entries()) { + for (const [outputPlan, specs] of batches.entries()) { + const promise = processSingleDeferred(requestContext, outputPlan, specs, asString); + if ((0, utils_js_1.isPromiseLike)(promise)) { + promises.push(promise); + } + } + } + if (promises.length > 0) { + Promise.all(promises).then(() => whenDone.resolve(), (e) => whenDone.reject(e)); + } + else { + whenDone.resolve(); + } +} +function processBatchAsString() { + const batchesByRequestContext = deferredBatchesByRequestToolsAsString; + deferredBatchesByRequestToolsAsString = new Map(); + const whenDone = nextBatchAsString; + nextBatchAsString = null; + processBatches(batchesByRequestContext, whenDone, true); +} +function processBatchNotAsString() { + const batchesByRequestContext = deferredBatchesByRequestToolsNotAsString; + deferredBatchesByRequestToolsNotAsString = new Map(); + const whenDone = nextBatchNotAsString; + nextBatchNotAsString = null; + processBatches(batchesByRequestContext, whenDone, false); +} +let deferredBatchesByRequestToolsAsString = new Map(); +let deferredBatchesByRequestToolsNotAsString = new Map(); +let nextBatchAsString = null; +let nextBatchNotAsString = null; +function processDeferred(requestContext, iterator, spec, outputDataAsString) { + const deferredBatchesByRequestTools = outputDataAsString + ? deferredBatchesByRequestToolsAsString + : deferredBatchesByRequestToolsNotAsString; + let deferredBatches = deferredBatchesByRequestTools.get(requestContext); + if (!deferredBatches) { + deferredBatches = new Map(); + deferredBatchesByRequestTools.set(requestContext, deferredBatches); + } + const list = deferredBatches.get(spec.outputPlan); + if (list !== undefined) { + list.push([iterator, spec]); + } + else { + deferredBatches.set(spec.outputPlan, [[iterator, spec]]); + } + if (outputDataAsString) { + if (!nextBatchAsString) { + nextBatchAsString = (0, deferred_js_1.defer)(); + setTimeout(processBatchAsString, 1); + } + return nextBatchAsString; + } + else { + if (!nextBatchNotAsString) { + nextBatchNotAsString = (0, deferred_js_1.defer)(); + setTimeout(processBatchNotAsString, 1); + } + return nextBatchNotAsString; + } +} +//# sourceMappingURL=prepare.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/prepare.js.map b/grafast/grafast/dist/prepare.js.map new file mode 100644 index 0000000000..5e41e37b6e --- /dev/null +++ b/grafast/grafast/dist/prepare.js.map @@ -0,0 +1 @@ +{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../src/prepare.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/step.d.ts b/grafast/grafast/dist/step.d.ts new file mode 100644 index 0000000000..0c413f4f68 --- /dev/null +++ b/grafast/grafast/dist/step.d.ts @@ -0,0 +1,243 @@ +import type { GraphQLObjectType } from "graphql"; +import type { LayerPlan, LayerPlanReasonSubroutine } from "./engine/LayerPlan.js"; +import type { OperationPlan } from "./engine/OperationPlan.js"; +import type { AddDependencyOptions, DependencyOptions, ExecutionDetails, ExecutionEntryFlags, ExecutionResults, GrafastResultsList, JSONValue, PromiseOrDirect, StepOptimizeOptions, UnbatchedExecutionExtra } from "./interfaces.js"; +import { $$subroutine } from "./interfaces.js"; +import type { __FlagStep, __ItemStep } from "./steps/index.js"; +declare function reallyAssertFinalized(plan: Step): void; +export declare const assertFinalized: typeof reallyAssertFinalized; +/** + * Executable plans are the plans associated with leaves on the GraphQL tree, + * they must be able to execute to return values. + */ +export declare class Step { + readonly operationPlan: OperationPlan; + [$$subroutine]: LayerPlan | null; + isArgumentsFinalized: boolean; + isFinalized: boolean; + debug: boolean; + static $$export: any; + /** + * Setting this true is a performance optimisation, but it comes with strong + * rules; we do not test you comply with these rules (as that would undo the + * performance gains) but should you break them the behaviour is undefined + * (and, basically, the schema may no longer be GraphQL compliant). + * + * Do not set this true unless the following hold: + * + * - The `execute` method must be a regular (not async) function + * - The `execute` method must NEVER return a promise + * - The values within the list returned from `execute` must NEVER include + * promises or FlaggedValue objects + * - The result of calling `execute` should not differ after a + * `step.hasSideEffects` has executed (i.e. it should be pure, only + * dependent on its deps and use no external state) + * + * It's acceptable for the `execute` method to throw if it needs to. + * + * This optimisation applies to the majority of the built in plans and allows + * the engine to execute without needing to resolve any promises which saves + * precious event-loop ticks. + */ + isSyncAndSafe: boolean; + /** + * (default = ALL_FLAGS & ~FLAG_NULL) + */ + protected readonly defaultForbiddenFlags: ExecutionEntryFlags; + /** + * The plan this plan will need data from in order to execute. + */ + protected readonly dependencies: ReadonlyArray; + /** + * Unique identifier for this step within the plan. + */ + readonly id: number; + /** + /** + * True when `optimize` has been called at least once. + */ + isOptimized: boolean; + /** + * Set this true if your plan's optimize method can be called a second time; + * note that in this situation it's likely that your dependencies will not be + * what you expect them to be (e.g. a PgSelectSingleStep might become an + * AccessStep). + */ + allowMultipleOptimizations: boolean; + /** + * Set the metaKey so `execute` will be passed a meta object to use. + * Depending on what you set it to, you can share execution meta between + * multiple steps of the same class (or even a family of step classes). + * + * A sensible value for it is `this.metaKey = this.id;`. + */ + metaKey: number | string | symbol | undefined; + /** + * Like `metaKey` but for the optimize phase + */ + optimizeMetaKey: number | string | symbol | undefined; + /** + * If the peerKey of two steps do not match, then they are definitely not + * peers. Use this to reduce the load on deduplicate by more quickly + * eradicating definitely-not-peers. + * + * Note: we may well change this to be a function in future, so it's advised + * that you don't use this unless you're working inside the graphile/crystal + * core codebase. + * + * @experimental + */ + peerKey: string | null; + /** + * Set this true for plans that implement mutations; this will prevent them + * from being tree-shaken. + */ + hasSideEffects: boolean; + constructor(); + /** + * Generally you should only use this once the dependencies of a step are + * established, if you use it beforehand and it returns `true` then adding a + * non-unary dependency later will result in an error. + */ + getAndFreezeIsUnary(): boolean; + protected withMyLayerPlan(callback: () => T): T; + /** @experimental */ + withLayerPlan(callback: () => T): T; + protected getStep(id: number): Step; + protected getDepOptions(depId: number): DependencyOptions; + protected getDep(_depId: number): TStep | __FlagStep; + protected getDep(_depId: number, throwOnFlagged: true): TStep; + protected maybeGetDep(depId: number | null | undefined): TStep | __FlagStep | null; + protected maybeGetDep(depId: number | null | undefined, throwOnFlagged: true): TStep | null; + protected getDepOrConstant(_depId: number | null, _fallback: TData): Step; + /** + * Like getDep, except it skips over __ItemStep and similar steps to get to + * where the parent really is. + * + * @experimental + */ + protected getDepDeep(depId: number): Step; + /** + * Cache a generated step by a given identifier (cacheKey) such that we don't + * need to regenerate it on future calls, significantly reducing the load on + * deduplication later. + * + * @experimental + */ + protected cacheStep(actionKey: string, cacheKey: symbol | string | number, cb: () => T): T; + toString(): string; + /** + * This metadata will be merged into toString when referencing this plan. + */ + toStringMeta(): string | null; + planJSONExtra(): Record | undefined; + protected canAddDependency(step: Step): boolean; + protected addDependency(stepOrOptions: Step | AddDependencyOptions): number; + /** + * Adds "unary" dependencies; in `execute({count, values})` you'll receive a + * `values[index]` (where `index` is the return value of this function) with + * `isBatch = false` so you can use the `values[index].value` property + * directly. + */ + protected addUnaryDependency(stepOrOptions: Step | AddDependencyOptions): number; + /** + * Given a list of "peer" steps, return a list of these `peers` that are + * equivalent to this step. + * + * NOTE: equivalence goes both ways: `a.deduplicate([b]).includes(b)` if and + * only if `b.deduplicate([a]).includes(a)`. + * + * If you need to transform the peer to be equivalent you should do so via + * the `deduplicatedWith` callback later. + */ + deduplicate?(_peers: readonly Step[]): readonly Step[]; + /** + * If this plan is replaced via deduplication, this method gives it a chance + * to hand over its responsibilities to its replacement. + */ + deduplicatedWith?(replacement: Step): void; + /** + * Our chance to optimise the plan (which could go as far as to inline the + * plan into the parent plan). + */ + optimize?(_options: StepOptimizeOptions): Step; + finalize(): void; + /** + * This function will be called with 'execution details', an object containing: + * + * - `count`: the number of entries in the batch that's being executed + * - `values`: a tuple representing the runtime values of the steps + * dependencies; each value in the tuple is an object, either a batch object + * containing a list of size `count` containing the values, or a unary + * object containing the single value common to all entries. + * - `indexMap`: helper function to map over each index from `0` to `count-1`, + * returning the resulting array. + * - `indexForEach`: as `indexMap`, but without the array result. + * - `meta`: [experimental] + * + * `execute` must return a list with `count` entries, where each value in the + * list relates to the result of executing this plan for the corresponding + * entry in each of the entries in the `values` tuple. + * + * IMPORTANT: it is up to the execute function to cache/memoize results as + * appropriate for performance, this can be done via the `meta` object. + * + * The `meta` object is an empty object stored to `grafastContext.metaByPlan` + * that can be used to store anything this plan needs. We recommend that you + * add attributes to meta for each purpose (e.g. use `meta.cache` for + * memoizing results) so that you can expand your usage of meta in future. + */ + execute(details: ExecutionDetails): ExecutionResults; + destroy(): void; +} +export declare abstract class UnbatchedStep extends Step { + static $$export: { + moduleName: string; + exportName: string; + }; + finalize(): void; + execute({ indexMap, values, extra, }: ExecutionDetails): PromiseOrDirect>; + abstract unbatchedExecute(extra: UnbatchedExecutionExtra, ...tuple: any[]): PromiseOrDirect; +} +export declare function isStep(step: unknown): step is Step; +export declare function assertStep(step: unknown): asserts step is Step; +export declare function isUnbatchedStep(step: unknown): step is UnbatchedStep; +export type ObjectLikeStep = Step<{ + [key in keyof TData]: TData[key] extends Step ? U : never; +}> & { + get(key: TKey): Step; +}; +export declare function isObjectLikeStep(plan: Step): plan is ObjectLikeStep; +export type ListLikeStep = Step<{ + [key in keyof TData]: TData[key] extends Step ? U : never; +}> & { + at(key: TKey): Step; +}; +export declare function isListLikeStep(plan: Step): plan is ListLikeStep; +export type PolymorphicStep = Step & { + planForType(objectType: GraphQLObjectType): Step; +}; +export declare function isPolymorphicStep(s: Step): s is PolymorphicStep; +export interface ListCapableStep = Step> extends Step> { + listItem(itemPlan: __ItemStep): TItemStep; +} +export declare function isListCapableStep>(plan: Step>): plan is ListCapableStep; +export declare function assertListCapableStep>(plan: Step>, pathDescription: string): asserts plan is ListCapableStep; +export { +/** @deprecated Use ExecutableStep instead */ +Step as ExecutableStep, +/** @deprecated Use UnbatchedStep instead */ +UnbatchedStep as UnbatchedExecutableStep, }; +/** @deprecated Use isStep instead */ +export declare const isExecutableStep: typeof isStep; +/** @deprecated Use isStep instead */ +export declare function assertExecutableStep(step: unknown): asserts step is Step; +//# sourceMappingURL=step.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/step.d.ts.map b/grafast/grafast/dist/step.d.ts.map new file mode 100644 index 0000000000..b134f64598 --- /dev/null +++ b/grafast/grafast/dist/step.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"step.d.ts","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/step.js b/grafast/grafast/dist/step.js new file mode 100644 index 0000000000..3f2f7b0dde --- /dev/null +++ b/grafast/grafast/dist/step.js @@ -0,0 +1,475 @@ +"use strict"; +var _a, _b; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isExecutableStep = exports.UnbatchedExecutableStep = exports.ExecutableStep = exports.UnbatchedStep = exports.Step = exports.assertFinalized = exports.$$noExec = void 0; +exports.isStep = isStep; +exports.assertStep = assertStep; +exports.isUnbatchedStep = isUnbatchedStep; +exports.isObjectLikeStep = isObjectLikeStep; +exports.isListLikeStep = isListLikeStep; +exports.isPolymorphicStep = isPolymorphicStep; +exports.isListCapableStep = isListCapableStep; +exports.assertListCapableStep = assertListCapableStep; +exports.assertExecutableStep = assertExecutableStep; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const tamedevil_1 = tslib_1.__importDefault(require("tamedevil")); +const dev_js_1 = require("./dev.js"); +const withGlobalLayerPlan_js_1 = require("./engine/lib/withGlobalLayerPlan.js"); +const lock_js_1 = require("./engine/lock.js"); +const error_js_1 = require("./error.js"); +const global_js_1 = require("./global.js"); +const inspect_js_1 = require("./inspect.js"); +const interfaces_js_1 = require("./interfaces.js"); +const utils_js_1 = require("./utils.js"); +/** + * This indicates that a step never executes (e.g. __ItemStep and __ValueStep) + * and thus when executed skips direct to reallyCompletedStep. + * + * @internal + */ +exports.$$noExec = Symbol("noExec"); +const ref_flagError = tamedevil_1.default.ref(error_js_1.flagError, "flagError"); +function throwDestroyed() { + let message; + try { + message = `${this} has been destroyed; calling methods on it is no longer possible`; + } + catch (e) { + message = `Step ${this?.id} has been destroyed; calling methods on it is no longer possible`; + } + throw new Error(message); +} +function isDeepDepSkippable($dep) { + return interfaces_js_1.$$deepDepSkip in $dep && typeof $dep[interfaces_js_1.$$deepDepSkip] === "function"; +} +function reallyAssertFinalized(plan) { + if (!plan.isFinalized) { + throw new Error(`Step ${plan} is not finalized; did you forget to call \`super.finalize()\` from its \`finalize()\` method?`); + } +} +// Optimise this away in production. +exports.assertFinalized = !dev_js_1.isDev ? dev_js_1.noop : reallyAssertFinalized; +/** + * Executable plans are the plans associated with leaves on the GraphQL tree, + * they must be able to execute to return values. + */ +class Step { + static { _a = interfaces_js_1.$$subroutine, _b = lock_js_1.$$unlock; } + constructor() { + this[_a] = null; + /** + * For input values, set `true` if it comes from variables/arguments since + * they cannot be modified (even by mutations), set `false` otherwise. + * + * @internal + */ + this._isImmutable = false; + /** @internal */ + this[_b] = undefined; + /** + * (default = ALL_FLAGS & ~FLAG_NULL) + */ + this.defaultForbiddenFlags = interfaces_js_1.DEFAULT_FORBIDDEN_FLAGS; + /** + * If the peerKey of two steps do not match, then they are definitely not + * peers. Use this to reduce the load on deduplicate by more quickly + * eradicating definitely-not-peers. + * + * Note: we may well change this to be a function in future, so it's advised + * that you don't use this unless you're working inside the graphile/crystal + * core codebase. + * + * @experimental + */ + this.peerKey = null; + this.isArgumentsFinalized = false; + this.isFinalized = false; + this.debug = (0, global_js_1.getDebug)(); + const layerPlan = (0, withGlobalLayerPlan_js_1.currentLayerPlan)(); + this.layerPlan = layerPlan; + this.operationPlan = layerPlan.operationPlan; + this._isUnary = true; + this._isUnaryLocked = false; + this.implicitSideEffectStep = null; + this.hasSideEffects ??= false; + let hasSideEffects = false; + const stepTracker = this.layerPlan.operationPlan.stepTracker; + Object.defineProperty(this, "hasSideEffects", { + get() { + return hasSideEffects; + }, + set(value) { + /** + * If steps were created after this step, an this step doesn't depend + * on them, then it's no longer safe to change hasSideEffects. + */ + let nonDependentSteps = null; + const maxStepId = stepTracker.stepCount - 1; + if (this.id === maxStepId) { + // All good - no more steps were created + } + else { + // If the step created them during initialization and is dependent on + // them, that's fine too. + for (let id = this.id + 1; id <= maxStepId; id++) { + const step = stepTracker.getStepById(id); + if ((0, utils_js_1.stepADependsOnStepB)(this, step)) + continue; + if (nonDependentSteps === null) { + nonDependentSteps = [step]; + } + else { + nonDependentSteps.push(step); + } + } + } + if (nonDependentSteps === null) { + hasSideEffects = value; + if (value === true) { + this.layerPlan.latestSideEffectStep = this; + this.operationPlan.resetCache(); + } + else if (value !== true && hasSideEffects === true) { + throw new Error(`Cannot mark ${this} as having no side effects after having set it to have side effects.`); + } + } + else { + throw new Error(`Attempted to mark ${this} as having side effects, but other non-dependent steps (${nonDependentSteps + .map(String) + .join(", ")}) have already been created.`); + } + }, + enumerable: true, + configurable: false, + }); + this.dependencies = []; + this.dependencyForbiddenFlags = []; + this.dependencyOnReject = []; + this.dependents = []; + this.isOptimized = false; + this.allowMultipleOptimizations = false; + this._stepOptions = { stream: null, walkIterable: false }; + this.store = true; + this.polymorphicPaths = (0, withGlobalLayerPlan_js_1.currentPolymorphicPaths)(); + // Important: MUST come after `this.layerPlan = ...` + this.id = this.layerPlan._addStep(this); + } + /** + * Generally you should only use this once the dependencies of a step are + * established, if you use it beforehand and it returns `true` then adding a + * non-unary dependency later will result in an error. + */ + getAndFreezeIsUnary() { + this._isUnaryLocked = true; + return this._isUnary; + } + withMyLayerPlan(callback) { + return (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.layerPlan, this.polymorphicPaths, callback); + } + /** @experimental */ + withLayerPlan(callback) { + return (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.layerPlan, this.polymorphicPaths, callback); + } + getStep(id) { + return this.layerPlan.getStep(id, this); + } + getDepOptions(depId) { + const step = this.dependencies[depId]; + const forbiddenFlags = this.dependencyForbiddenFlags[depId]; + const onReject = this.dependencyOnReject[depId]; + const acceptFlags = interfaces_js_1.ALL_FLAGS & ~forbiddenFlags; + return { step, acceptFlags, onReject }; + } + getDep(_depId, _throwOnFlagged = false) { + // This gets replaced when `__FlagStep` is loaded. Were we on ESM we could + // just put the code here, but since we're not we have to avoid the + // circular dependency. + throw new Error(`Grafast failed to load correctly`); + } + maybeGetDep(depId, throwOnFlagged = false) { + return depId == null + ? null + : throwOnFlagged + ? this.getDep(depId, true) + : this.getDep(depId); + } + getDepOrConstant(_depId, _fallback) { + // This gets replaced when `constant` is loaded. Were we on ESM we could + // just put the code here, but since we're not we have to avoid the + // circular dependency. + throw new Error(`Grafast failed to load correctly`); + } + /** + * Like getDep, except it skips over __ItemStep and similar steps to get to + * where the parent really is. + * + * @experimental + */ + getDepDeep(depId) { + let $dep = this.getDep(depId); + // Walk up the tree, looking for the source of this record. We know that + // __ItemStep and __ListTransformStep are safe to walk through, but other + // classes may not be. + while (isDeepDepSkippable($dep)) { + $dep = $dep[interfaces_js_1.$$deepDepSkip](); + } + return $dep; + } + /** + * Cache a generated step by a given identifier (cacheKey) such that we don't + * need to regenerate it on future calls, significantly reducing the load on + * deduplication later. + * + * @experimental + */ + cacheStep(actionKey, cacheKey, cb) { + return this.operationPlan.cacheStep(this, actionKey, cacheKey, cb); + } + toString() { + let meta; + try { + // If we log out too early, the meta function might fail. + meta = this.toStringMeta(); + } + catch (e) { + // Ignore + } + return chalk_1.default.bold.blue(`${this.constructor.name.replace(/Step$/, "")}${this.layerPlan.id === 0 ? "" : chalk_1.default.grey(`{${this.layerPlan.id}}`)}${this._isUnary ? "➊" : ""}${this._stepOptions.stream != null ? "@s" : ""}${meta != null && meta.length ? chalk_1.default.grey(`<${meta}>`) : ""}[${(0, inspect_js_1.inspect)(this.id, { colors: true })}]`); + } + /** + * This metadata will be merged into toString when referencing this plan. + */ + toStringMeta() { + return null; + } + planJSONExtra() { + return undefined; + } + canAddDependency(step) { + return (0, utils_js_1.stepAMayDependOnStepB)(this, step); + } + addDependency(stepOrOptions) { + const options = stepOrOptions instanceof Step + ? { step: stepOrOptions, skipDeduplication: false } + : stepOrOptions; + if (options.step.layerPlan.id > this.layerPlan.id) { + throw new Error(`Cannot add dependency ${options.step} to ${this} since the former is in a deeper layerPlan (creates a catch-22)`); + } + return this.operationPlan.stepTracker.addStepDependency(this, options); + } + /** + * Adds "unary" dependencies; in `execute({count, values})` you'll receive a + * `values[index]` (where `index` is the return value of this function) with + * `isBatch = false` so you can use the `values[index].value` property + * directly. + */ + addUnaryDependency(stepOrOptions) { + const options = stepOrOptions instanceof Step ? { step: stepOrOptions } : stepOrOptions; + if (options.step.layerPlan.id > this.layerPlan.id) { + throw new Error(`Cannot add dependency ${options.step} to ${this} since the former is in a deeper layerPlan (creates a catch-22)`); + } + return this.operationPlan.stepTracker.addStepUnaryDependency(this, options); + } + finalize() { + if (typeof this.isSyncAndSafe !== "boolean") { + // Take a guess + if (!dev_js_1.isDev) { + this.isSyncAndSafe = false; + } + else if (this.execute.constructor.name === "AsyncFunction") { + this.isSyncAndSafe = false; + } + else { + console.warn(`${this} uses a regular (non-async) function for 'execute'; if it never returns a promise and the list it returns never includes a promise then setting \`${this}.isSyncAndSafe = true\` will improve performance. If this is not true, set \`${this}.isSyncAndSafe = false\` to dismiss this message.`); + this.isSyncAndSafe = false; + } + } + if (this.isSyncAndSafe === true && + this.execute.constructor.name === "AsyncFunction") { + throw new Error(`${this} claims to be synchronous, however the execute method is asynchronous`); + } + if (!this.isFinalized) { + this.isFinalized = true; + } + else { + throw new Error(`Step ${this} has already been finalized - do not call \`finalize()\` from user code!`); + } + } + /** + * This function will be called with 'execution details', an object containing: + * + * - `count`: the number of entries in the batch that's being executed + * - `values`: a tuple representing the runtime values of the steps + * dependencies; each value in the tuple is an object, either a batch object + * containing a list of size `count` containing the values, or a unary + * object containing the single value common to all entries. + * - `indexMap`: helper function to map over each index from `0` to `count-1`, + * returning the resulting array. + * - `indexForEach`: as `indexMap`, but without the array result. + * - `meta`: [experimental] + * + * `execute` must return a list with `count` entries, where each value in the + * list relates to the result of executing this plan for the corresponding + * entry in each of the entries in the `values` tuple. + * + * IMPORTANT: it is up to the execute function to cache/memoize results as + * appropriate for performance, this can be done via the `meta` object. + * + * The `meta` object is an empty object stored to `grafastContext.metaByPlan` + * that can be used to store anything this plan needs. We recommend that you + * add attributes to meta for each purpose (e.g. use `meta.cache` for + * memoizing results) so that you can expand your usage of meta in future. + */ + /* abstract */ + execute(details) { + // ESLint/TS: ignore not used. + details; + throw new Error(`${this} has not implemented an 'execute' method`); + } + destroy() { + // Break ourself enough that if lifecycle methods are attempted an error + // will be thrown. This should help weed out bugs where steps are processed + // even after they have been removed/deduped. + this.addDependency = throwDestroyed; + this.deduplicate = throwDestroyed; + this.deduplicatedWith = throwDestroyed; + this.optimize = throwDestroyed; + this.finalize = throwDestroyed; + this.execute = throwDestroyed; + } +} +exports.Step = Step; +exports.ExecutableStep = Step; +function _buildOptimizedExecuteV2Expression(depCount, isSyncAndSafe) { + const identifiers = []; + for (let i = 0; i < depCount; i++) { + identifiers.push(tamedevil_1.default.identifier(`value${i}`)); + } + const tryOrNot = (inFrag) => { + if (isSyncAndSafe) { + return inFrag; + } + else { + return (0, tamedevil_1.default) `\ + try { + ${tamedevil_1.default.indent(inFrag)} + } catch (e) { + results[i] = ${ref_flagError}(e); + }\ +`; + } + }; + return (0, tamedevil_1.default) `\ +(function execute({ + count, + values: [${tamedevil_1.default.join(identifiers, ", ")}], + extra, +}) { + const results = []; + for (let i = 0; i < count; i++) { +${tryOrNot((0, tamedevil_1.default) `\ + results[i] = this.unbatchedExecute(extra, ${tamedevil_1.default.join(identifiers.map((identifier) => (0, tamedevil_1.default) `${identifier}.at(i)`), ", ")});\ +`)} + } + return results; +})`; +} +const MAX_DEPENDENCIES_TO_CACHE = 10; +const unsafeCache = []; +const safeCache = []; +tamedevil_1.default.batch(() => { + for (let i = 0; i <= MAX_DEPENDENCIES_TO_CACHE; i++) { + const depCount = i; + const unsafeExpression = _buildOptimizedExecuteV2Expression(depCount, false); + tamedevil_1.default.runInBatch(unsafeExpression, (fn) => { + unsafeCache[depCount] = fn; + }); + const safeExpression = _buildOptimizedExecuteV2Expression(depCount, true); + tamedevil_1.default.runInBatch(safeExpression, (fn) => { + safeCache[depCount] = fn; + }); + } +}); +function buildOptimizedExecute(depCount, isSyncAndSafe, callback) { + // Try and satisfy from cache + const cache = isSyncAndSafe ? safeCache : unsafeCache; + if (depCount <= MAX_DEPENDENCIES_TO_CACHE) { + callback(cache[depCount]); + return; + } + // Build it + const expression = _buildOptimizedExecuteV2Expression(depCount, isSyncAndSafe); + tamedevil_1.default.runInBatch(expression, (fn) => { + callback(fn); + }); +} +class UnbatchedStep extends Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "UnbatchedStep", + }; } + finalize() { + if (this.execute === UnbatchedStep.prototype.execute) { + // If they've not replaced 'execute', use our optimized form + buildOptimizedExecute(this.dependencies.length, this.isSyncAndSafe, (fn) => { + this.execute = fn; + }); + } + super.finalize(); + } + execute({ indexMap, values, extra, }) { + console.warn(`${this} didn't call 'super.finalize()' in the finalize method.`); + const depCount = this.dependencies.length; + return indexMap((i) => { + try { + const tuple = []; + for (let j = 0; j < depCount; j++) { + tuple[j] = values[j].at(i); + } + return this.unbatchedExecute(extra, ...tuple); + } + catch (e) { + return (0, error_js_1.flagError)(e); + } + }); + } +} +exports.UnbatchedStep = UnbatchedStep; +exports.UnbatchedExecutableStep = UnbatchedStep; +function isStep(step) { + return step instanceof Step; +} +function assertStep(step) { + if (!isStep(step)) { + throw new Error(`Expected a step, but received something else: ${(0, inspect_js_1.inspect)(step)}`); + } +} +function isUnbatchedStep(step) { + return isStep(step) && typeof step.unbatchedExecute === "function"; +} +function isObjectLikeStep(plan) { + return "get" in plan && typeof plan.get === "function"; +} +function isListLikeStep(plan) { + return "at" in plan && typeof plan.at === "function"; +} +function isPolymorphicStep(s) { + return ("planForType" in s && + typeof s.planForType === "function"); +} +function isListCapableStep(plan) { + return "listItem" in plan && typeof plan.listItem === "function"; +} +function assertListCapableStep(plan, pathDescription) { + if (!isListCapableStep(plan)) { + throw new Error(`The plan returned from '${pathDescription}' should be a list capable plan, but ${plan} does not implement the 'listItem' method.`); + } +} +/** @deprecated Use isStep instead */ +exports.isExecutableStep = isStep; +/** @deprecated Use isStep instead */ +function assertExecutableStep(step) { + return assertStep(step); +} +//# sourceMappingURL=step.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/step.js.map b/grafast/grafast/dist/step.js.map new file mode 100644 index 0000000000..f18fc1b69e --- /dev/null +++ b/grafast/grafast/dist/step.js.map @@ -0,0 +1 @@ +{"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__flag.d.ts b/grafast/grafast/dist/steps/__flag.d.ts new file mode 100644 index 0000000000..016cf69ef5 --- /dev/null +++ b/grafast/grafast/dist/steps/__flag.d.ts @@ -0,0 +1,65 @@ +import type { DataFromStep, ExecutionDetails, ExecutionEntryFlags, GrafastResultsList } from "../interfaces.js"; +import { $$deepDepSkip } from "../interfaces.js"; +import type { ListCapableStep } from "../step.js"; +import { Step } from "../step.js"; +import type { __ItemStep } from "./__item.js"; +export declare const TRAP_ERROR: ExecutionEntryFlags; +export declare const TRAP_INHIBITED: ExecutionEntryFlags; +export declare const TRAP_ERROR_OR_INHIBITED: ExecutionEntryFlags; +declare const TRAP_VALUES: readonly ["NULL", "EMPTY_LIST", "PASS_THROUGH"]; +/** @defaultValue `'PASS_THROUGH'` */ +export type TrapValue = (typeof TRAP_VALUES)[number]; +/** `false` means pass-through; all others are literal */ +export type ResolvedTrapValue = false | null | undefined | readonly never[]; +export interface FlagStepOptions { + acceptFlags?: ExecutionEntryFlags; + onReject?: Error | null; + if?: Step; + valueForInhibited?: TrapValue; + valueForError?: TrapValue; +} +export declare class __FlagStep extends Step> { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private ifDep; + private forbiddenFlags; + private onRejectReturnValue; + private valueForInhibited; + private valueForError; + private canBeInlined; + constructor(step: TStep, options: FlagStepOptions); + toStringMeta(): string | null; + [$$deepDepSkip](): Step; + listItem?: ($item: __ItemStep>>) => Step; + _listItem($item: __ItemStep>>): Step; + deduplicate(_peers: readonly Step[]): readonly Step[]; + execute(_details: ExecutionDetails<[data: DataFromStep, cond?: boolean]>): GrafastResultsList>; + finalize(): void; + private fancyExecute; + private passThroughExecute; +} +/** + * Example use case: get user by id, but id is null: no need to fetch the user + * since we know they won't exist. + */ +export declare function inhibitOnNull($step: TStep, options?: { + if?: FlagStepOptions["if"]; +}): __FlagStep; +/** + * Example use case: expecting a node ID that represents a User, but get one + * that represents a Post instead: throw error to tell user they've sent invalid + * data. + */ +export declare function assertNotNull($step: TStep, message: string, options?: { + if?: FlagStepOptions["if"]; +}): __FlagStep; +export declare function trap($step: TStep, acceptFlags: ExecutionEntryFlags, options?: { + valueForInhibited?: FlagStepOptions["valueForInhibited"]; + valueForError?: FlagStepOptions["valueForError"]; + if?: FlagStepOptions["if"]; +}): __FlagStep; +export {}; +//# sourceMappingURL=__flag.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__flag.d.ts.map b/grafast/grafast/dist/steps/__flag.d.ts.map new file mode 100644 index 0000000000..4d1e795080 --- /dev/null +++ b/grafast/grafast/dist/steps/__flag.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__flag.d.ts","sourceRoot":"","sources":["../../src/steps/__flag.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__flag.js b/grafast/grafast/dist/steps/__flag.js new file mode 100644 index 0000000000..c82d9533db --- /dev/null +++ b/grafast/grafast/dist/steps/__flag.js @@ -0,0 +1,261 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__FlagStep = exports.TRAP_ERROR_OR_INHIBITED = exports.TRAP_INHIBITED = exports.TRAP_ERROR = void 0; +exports.inhibitOnNull = inhibitOnNull; +exports.assertNotNull = assertNotNull; +exports.trap = trap; +const error_js_1 = require("../error.js"); +const inspect_js_1 = require("../inspect.js"); +const interfaces_js_1 = require("../interfaces.js"); +const step_js_1 = require("../step.js"); +// PUBLIC FLAGS +exports.TRAP_ERROR = interfaces_js_1.FLAG_ERROR; +exports.TRAP_INHIBITED = interfaces_js_1.FLAG_INHIBITED; +exports.TRAP_ERROR_OR_INHIBITED = (interfaces_js_1.FLAG_ERROR | + interfaces_js_1.FLAG_INHIBITED); +function digestAcceptFlags(acceptFlags) { + const parts = []; + if ((acceptFlags & interfaces_js_1.FLAG_NULL) === 0) { + parts.push("rejectNull"); + } + if ((acceptFlags & interfaces_js_1.FLAG_ERROR) !== 0) { + parts.push("trapError"); + } + if ((acceptFlags & interfaces_js_1.FLAG_INHIBITED) !== 0) { + parts.push("trapInhibited"); + } + return parts.join("&"); +} +const TRAP_VALUES = [ + "NULL", + "EMPTY_LIST", + "PASS_THROUGH", + // "UNDEFINED", // waiting for a need +]; +const EMPTY_LIST = Object.freeze([]); +function trim(string, length = 15) { + if (string.length > length) { + return string.substring(0, length - 2) + "…"; + } + else { + return string; + } +} +function resolveTrapValue(tv) { + switch (tv) { + case "NULL": + return null; + case "EMPTY_LIST": + return EMPTY_LIST; + case "PASS_THROUGH": + return false; + default: { + const never = tv; + throw new Error(`TrapValue '${never}' not understood; please use one of: ${TRAP_VALUES.join(", ")}`); + } + } +} +class __FlagStep extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "__FlagStep", + }; } + constructor(step, options) { + super(); + this.isSyncAndSafe = false; + this.ifDep = null; + const { acceptFlags = interfaces_js_1.DEFAULT_ACCEPT_FLAGS, onReject, if: $cond, valueForInhibited = "PASS_THROUGH", valueForError = "PASS_THROUGH", } = options; + this.forbiddenFlags = interfaces_js_1.ALL_FLAGS & ~acceptFlags; + this.onRejectReturnValue = + onReject == null ? error_js_1.$$inhibit : (0, error_js_1.flagError)(onReject, step.id); + this.valueForInhibited = resolveTrapValue(valueForInhibited); + this.valueForError = resolveTrapValue(valueForError); + this.canBeInlined = + !$cond && + valueForInhibited === "PASS_THROUGH" && + valueForError === "PASS_THROUGH" && + // Can't PASS_THROUGH errors since they need to be converted into TRAPPED + // error. + // TODO: should we be handling this in Grafast core? + (acceptFlags & interfaces_js_1.FLAG_ERROR) === 0; + if (!this.canBeInlined) { + this.addDependency({ step, acceptFlags: interfaces_js_1.TRAPPABLE_FLAGS }); + if ($cond) { + this.ifDep = this.addDependency($cond); + } + } + else { + this.addDependency({ step, acceptFlags, onReject }); + } + if ((0, step_js_1.isListCapableStep)(step)) { + this.listItem = this._listItem; + } + } + toStringMeta() { + const acceptFlags = interfaces_js_1.ALL_FLAGS & ~this.forbiddenFlags; + const rej = this.onRejectReturnValue + ? trim(String(this.onRejectReturnValue)) + : (0, inspect_js_1.inspect)(this.onRejectReturnValue); + const $if = this.ifDep !== null ? this.getDepOptions(this.ifDep).step : null; + return `${this.dependencies[0].id}, ${$if ? `if(${$if.id}), ` : ``}${digestAcceptFlags(acceptFlags)}, onReject: ${rej}`; + } + [interfaces_js_1.$$deepDepSkip]() { + return this.getDepOptions(0).step; + } + // Copied over listItem if the dependent step is a list capable step + _listItem($item) { + const $dep = this.dependencies[0]; + return (0, step_js_1.isListCapableStep)($dep) ? $dep.listItem($item) : $item; + } + /** Return inlining instructions if we can be inlined. @internal */ + inline(options) { + if (!this.canBeInlined) { + return null; + } + const step = this.dependencies[0]; + const forbiddenFlags = this.dependencyForbiddenFlags[0]; + const onReject = this.dependencyOnReject[0]; + const acceptFlags = interfaces_js_1.ALL_FLAGS & ~forbiddenFlags; + if ( + // TODO: this logic could be improved so that more flag checks were + // inlined, e.g. `trap(inhibitOnNull($foo), TRAP_INHIBIT)` should just + // become `$foo`. + // + // However, we must be careful that we don't optimize away flags, e.g. + // `trap(inhibitOnNull($foo), TRAP_INHIBIT, { if: $cond })` needs to see + // the inhibit flag to know what to do, so in this case we shouldn't be + // inlined. This may only apply to __FlagStep and might be something we + // want to optimize later. + options.onReject === undefined || + options.onReject === onReject) { + if (options.acceptFlags === undefined || + options.acceptFlags === interfaces_js_1.DEFAULT_ACCEPT_FLAGS || + options.acceptFlags === acceptFlags || + false) { + return { step, acceptFlags, onReject }; + } + } + return null; + } + deduplicate(_peers) { + return _peers.filter((p) => { + // ifDep has already been tested by Grafast (it's a dependency) + if (p.forbiddenFlags !== this.forbiddenFlags) + return false; + if (p.onRejectReturnValue !== this.onRejectReturnValue) + return false; + if (p.valueForInhibited !== this.valueForInhibited) + return false; + if (p.valueForError !== this.valueForError) + return false; + if (p.canBeInlined !== this.canBeInlined) + return false; + return true; + }); + } + execute(_details) { + throw new Error(`${this} not finalized?`); + } + finalize() { + if (this.canBeInlined) { + this.execute = this.passThroughExecute; + } + else { + this.execute = this.fancyExecute; + } + super.finalize(); + } + fancyExecute(details) { + const dataEv = details.values[0]; + const condEv = this.ifDep === null ? null : details.values[this.ifDep]; + const { forbiddenFlags: thisForbiddenFlags, onRejectReturnValue, valueForError, valueForInhibited, } = this; + return details.indexMap((i) => { + const cond = condEv ? condEv.at(i) : true; + const forbiddenFlags = cond + ? thisForbiddenFlags + : interfaces_js_1.DEFAULT_FORBIDDEN_FLAGS; + // Search for "f2b3b1b3" for similar block + const flags = dataEv._flagsAt(i); + const disallowedFlags = flags & forbiddenFlags; + if (disallowedFlags) { + if (disallowedFlags & interfaces_js_1.FLAG_INHIBITED) { + // We were already rejected, maintain this + return error_js_1.$$inhibit; + } + else if (disallowedFlags & interfaces_js_1.FLAG_ERROR) { + // We were already rejected, maintain this + return (0, error_js_1.flagError)(dataEv.at(i)); + } + else { + // We weren't already inhibited + return onRejectReturnValue; + } + } + else { + if (flags & interfaces_js_1.FLAG_ERROR && this.valueForError !== false) { + return valueForError; + } + if (flags & interfaces_js_1.FLAG_INHIBITED && this.valueForInhibited !== false) { + return valueForInhibited; + } + // Assume pass-through + return dataEv.at(i); + } + }); + } + // Checks already performed via addDependency, just pass everything through. Should have been inlined! + passThroughExecute(details) { + const ev = details.values[0]; + if (ev.isBatch) { + return ev.entries; + } + else { + const val = ev.value; + return details.indexMap(() => val); + } + } +} +exports.__FlagStep = __FlagStep; +/** + * Example use case: get user by id, but id is null: no need to fetch the user + * since we know they won't exist. + */ +function inhibitOnNull($step, options) { + return new __FlagStep($step, { + ...options, + acceptFlags: interfaces_js_1.DEFAULT_ACCEPT_FLAGS & ~interfaces_js_1.FLAG_NULL, + }); +} +/** + * Example use case: expecting a node ID that represents a User, but get one + * that represents a Post instead: throw error to tell user they've sent invalid + * data. + */ +function assertNotNull($step, message, options) { + return new __FlagStep($step, { + ...options, + acceptFlags: interfaces_js_1.DEFAULT_ACCEPT_FLAGS & ~interfaces_js_1.FLAG_NULL, + onReject: new error_js_1.SafeError(message), + }); +} +function trap($step, acceptFlags, options) { + return new __FlagStep($step, { + ...options, + acceptFlags: (acceptFlags & interfaces_js_1.TRAPPABLE_FLAGS) | interfaces_js_1.FLAG_NULL, + }); +} +// Have to overwrite the getDep method due to circular dependency +step_js_1.Step.prototype.getDep = function (depId, throwOnFlagged = false) { + const { step, acceptFlags, onReject } = this.getDepOptions(depId); + if (acceptFlags === interfaces_js_1.DEFAULT_ACCEPT_FLAGS && onReject == null) { + return step; + } + else { + if (throwOnFlagged) { + throw new Error(`When retrieving dependency ${step} of ${this}, the dependency is flagged as ${digestAcceptFlags(acceptFlags)}/onReject=${String(onReject)}. Please use \`this.getDepOptions(depId)\` instead, and handle the flags`); + } + // Return a __FlagStep around options.step so that all the options are preserved. + return new __FlagStep(step, { acceptFlags, onReject }); + } +}; +//# sourceMappingURL=__flag.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__flag.js.map b/grafast/grafast/dist/steps/__flag.js.map new file mode 100644 index 0000000000..a80470a305 --- /dev/null +++ b/grafast/grafast/dist/steps/__flag.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__flag.js","sourceRoot":"","sources":["../../src/steps/__flag.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDefault.d.ts b/grafast/grafast/dist/steps/__inputDefault.d.ts new file mode 100644 index 0000000000..bb07ace0db --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDefault.d.ts @@ -0,0 +1,14 @@ +import type { UnbatchedExecutionExtra } from "../interfaces.js"; +import { UnbatchedStep } from "../step.js"; +import type { __TrackedValueStep } from "./__trackedValue.js"; +export declare class __InputDefaultStep extends UnbatchedStep { + private defaultValue; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + constructor($variableValue: __TrackedValueStep, defaultValue: unknown); + unbatchedExecute(_extra: UnbatchedExecutionExtra, variableValue: unknown): unknown; +} +//# sourceMappingURL=__inputDefault.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDefault.d.ts.map b/grafast/grafast/dist/steps/__inputDefault.d.ts.map new file mode 100644 index 0000000000..f639ad750e --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDefault.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputDefault.d.ts","sourceRoot":"","sources":["../../src/steps/__inputDefault.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,qBAAa,kBAAmB,SAAQ,aAAa;IASjD,OAAO,CAAC,YAAY;IARtB,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;gBAGnB,cAAc,EAAE,kBAAkB,EAC1B,YAAY,EAAE,OAAO;IAM/B,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,aAAa,EAAE,OAAO;CAgCzE"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDefault.js b/grafast/grafast/dist/steps/__inputDefault.js new file mode 100644 index 0000000000..2f0445509f --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDefault.js @@ -0,0 +1,48 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__InputDefaultStep = void 0; +const step_js_1 = require("../step.js"); +class __InputDefaultStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "__InputDefaultStep", + }; } + constructor($variableValue, defaultValue) { + super(); + this.defaultValue = defaultValue; + this.isSyncAndSafe = true; + this.addUnaryDependency($variableValue); + } + unbatchedExecute(_extra, variableValue) { + return variableValue === undefined ? this.defaultValue : variableValue; + } + /** @internal */ + eval() { + const $variable = this.getDep(0); + const variableValue = $variable.eval(); + return variableValue === undefined ? this.defaultValue : variableValue; + } + /** @internal */ + evalIs(value) { + if (value === undefined) { + return false; + } + else { + const $variable = this.getDep(0); + return $variable.evalIs(undefined) + ? this.defaultValue === value + : $variable.evalIs(value); + } + } + /** @internal */ + evalLength() { + const $variable = this.getDep(0); + return $variable.evalIs(undefined) + ? Array.isArray(this.defaultValue) + ? this.defaultValue.length + : null + : $variable.evalLength(); + } +} +exports.__InputDefaultStep = __InputDefaultStep; +//# sourceMappingURL=__inputDefault.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDefault.js.map b/grafast/grafast/dist/steps/__inputDefault.js.map new file mode 100644 index 0000000000..a8cc732132 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDefault.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputDefault.js","sourceRoot":"","sources":["../../src/steps/__inputDefault.ts"],"names":[],"mappings":";;;AACA,wCAA2C;AAG3C,MAAa,kBAAmB,SAAQ,uBAAa;aAC5C,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,oBAAoB;KACjC,AAHc,CAGb;IAGF,YACE,cAAkC,EAC1B,YAAqB;QAE7B,KAAK,EAAE,CAAC;QAFA,iBAAY,GAAZ,YAAY,CAAS;QAJ/B,kBAAa,GAAG,IAAI,CAAC;QAOnB,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED,gBAAgB,CAAC,MAA+B,EAAE,aAAsB;QACtE,OAAO,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IACzE,CAAC;IAED,gBAAgB;IAChB,IAAI;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAuB,CAAC;QACvD,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,OAAO,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;IACzE,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,KAA2B;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAuB,CAAC;YACvD,OAAO,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,KAAK;gBAC7B,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,UAAU;QACR,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAuB,CAAC;QACvD,OAAO,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;YAChC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM;gBAC1B,CAAC,CAAC,IAAI;YACR,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;;AA9CH,gDA+CC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDynamicScalar.d.ts b/grafast/grafast/dist/steps/__inputDynamicScalar.d.ts new file mode 100644 index 0000000000..083a73a848 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDynamicScalar.d.ts @@ -0,0 +1,19 @@ +import type { GraphQLScalarType, ListValueNode, ObjectValueNode } from "graphql"; +import type { UnbatchedExecutionExtra } from "../interfaces.js"; +import { UnbatchedStep } from "../step.js"; +/** + * Handles "leaves" (scalars) + */ +export declare class __InputDynamicScalarStep extends UnbatchedStep { + private value; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private variableNames; + constructor(inputType: GraphQLScalarType, value: ListValueNode | ObjectValueNode); + valueFromValues(variableValues: any[]): any; + unbatchedExecute: (_extra: UnbatchedExecutionExtra, ...variableValues: any[]) => TLeaf; +} +//# sourceMappingURL=__inputDynamicScalar.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDynamicScalar.d.ts.map b/grafast/grafast/dist/steps/__inputDynamicScalar.d.ts.map new file mode 100644 index 0000000000..49af1e8b9e --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDynamicScalar.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputDynamicScalar.d.ts","sourceRoot":"","sources":["../../src/steps/__inputDynamicScalar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EAEhB,MAAM,SAAS,CAAC;AAIjB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C;;GAEG;AACH,qBAAa,wBAAwB,CACnC,KAAK,GAAG,GAAG,CACX,SAAQ,aAAa,CAAC,KAAK,CAAC;IAU1B,OAAO,CAAC,KAAK;IATf,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,OAAO,CAAC,aAAa,CAAgB;gBAGnC,SAAS,EAAE,iBAAiB,EACpB,KAAK,EAAE,aAAa,GAAG,eAAe;IA8ChD,eAAe,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,GAAG;IA+C3C,gBAAgB,GACd,QAAQ,uBAAuB,EAC/B,GAAG,gBAAgB,GAAG,EAAE,KACvB,KAAK,CAGN;CAwBH"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDynamicScalar.js b/grafast/grafast/dist/steps/__inputDynamicScalar.js new file mode 100644 index 0000000000..354db3a11c --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDynamicScalar.js @@ -0,0 +1,127 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__InputDynamicScalarStep = void 0; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const error_js_1 = require("../error.js"); +const step_js_1 = require("../step.js"); +const { Kind } = graphql; +/** + * Handles "leaves" (scalars) + */ +class __InputDynamicScalarStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "__InputDynamicScalarStep", + }; } + constructor(inputType, value) { + super(); + this.value = value; + this.isSyncAndSafe = true; + this.variableNames = []; + this.unbatchedExecute = (_extra, ...variableValues) => { + const converted = this.valueFromValues(variableValues); + return converted; + }; + // Walk value and add any variable references as dependencies + const walk = (inputValue) => { + switch (inputValue.kind) { + case Kind.VARIABLE: { + const variableName = inputValue.name.value; + this.variableNames.push(variableName); + const variableValuePlan = this.operationPlan.trackedVariableValuesStep.get(variableName); + this.addDependency(variableValuePlan); + return; + } + case Kind.INT: + case Kind.FLOAT: + case Kind.STRING: + case Kind.BOOLEAN: + case Kind.NULL: { + // No need to take action + return; + } + case Kind.LIST: { + inputValue.values.map(walk); + return; + } + case Kind.OBJECT: { + for (const field of inputValue.fields) { + walk(field.value); + } + return; + } + case Kind.ENUM: { + throw new error_js_1.SafeError("Enum values cannot be included within scalars"); + } + default: { + const never = inputValue; + throw new error_js_1.SafeError(`Unsupported kind '${never.kind}'`); + } + } + }; + walk(value); + } + valueFromValues(variableValues) { + const convert = (inputValue) => { + switch (inputValue.kind) { + case Kind.VARIABLE: { + const variableName = inputValue.name.value; + const variableIndex = this.variableNames.indexOf(variableName); + return variableValues[variableIndex]; + } + case Kind.INT: { + return parseInt(inputValue.value, 10); + } + case Kind.FLOAT: { + return parseFloat(inputValue.value); + } + case Kind.STRING: { + return inputValue.value; + } + case Kind.BOOLEAN: { + return inputValue.value; + } + case Kind.NULL: { + return null; + } + case Kind.LIST: { + return inputValue.values.map(convert); + } + case Kind.OBJECT: { + const obj = Object.create(null); + for (const field of inputValue.fields) { + obj[field.name.value] = convert(field.value); + } + return obj; + } + case Kind.ENUM: { + throw new error_js_1.SafeError("Enum values cannot be included within scalars"); + } + default: { + const never = inputValue; + throw new error_js_1.SafeError(`Unsupported kind '${never.kind}'`); + } + } + }; + return convert(this.value); + } + /** @internal */ + eval() { + const variableValues = this.variableNames.map((variableName, i) => this.getDep(i, true).eval()); + return this.valueFromValues(variableValues); + } + /** @internal */ + evalIs(expectedValue) { + if (expectedValue === undefined || + expectedValue === null || + expectedValue === 0) { + return false; + } + else { + throw new Error("__InputDynamicScalarStep doesn't support evalIs on non-null, non-undefined, non-0 values"); + } + } +} +exports.__InputDynamicScalarStep = __InputDynamicScalarStep; +//# sourceMappingURL=__inputDynamicScalar.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputDynamicScalar.js.map b/grafast/grafast/dist/steps/__inputDynamicScalar.js.map new file mode 100644 index 0000000000..2fd39cf702 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputDynamicScalar.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputDynamicScalar.js","sourceRoot":"","sources":["../../src/steps/__inputDynamicScalar.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputList.d.ts b/grafast/grafast/dist/steps/__inputList.d.ts new file mode 100644 index 0000000000..4fccaa2d73 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputList.d.ts @@ -0,0 +1,22 @@ +import type { GraphQLInputType } from "graphql"; +import * as graphql from "graphql"; +import type { AnyInputStep, NotVariableValueNode } from "../interfaces.js"; +import { Step } from "../step.js"; +/** + * Implements `__InputListStep`. + */ +export declare class __InputListStep = graphql.GraphQLList> extends Step { + private readonly inputValues; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private itemCount; + constructor(inputType: TInputType, inputValues: NotVariableValueNode | undefined); + optimize(): Step; + execute(): any[]; + unbatchedExecute: () => any; + at(index: number): AnyInputStep; +} +//# sourceMappingURL=__inputList.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputList.d.ts.map b/grafast/grafast/dist/steps/__inputList.d.ts.map new file mode 100644 index 0000000000..5116c6ad85 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputList.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputList.d.ts","sourceRoot":"","sources":["../../src/steps/__inputList.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAInC,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMlC;;GAEG;AACH,qBAAa,eAAe,CAC1B,UAAU,SACR,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAC/E,SAAQ,IAAI;IAWV,OAAO,CAAC,QAAQ,CAAC,WAAW;IAV9B,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,OAAO,CAAC,SAAS,CAAK;gBAGpB,SAAS,EAAE,UAAU,EACJ,WAAW,EAAE,oBAAoB,GAAG,SAAS;IAoChE,QAAQ,IAAI,IAAI;IAchB,OAAO,IAAI,GAAG,EAAE;IAKhB,gBAAgB,QAAO,GAAG,CAIxB;IAEF,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY;CAoDhC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputList.js b/grafast/grafast/dist/steps/__inputList.js new file mode 100644 index 0000000000..d53665aa65 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputList.js @@ -0,0 +1,113 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__InputListStep = void 0; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const assert = tslib_1.__importStar(require("../assert.js")); +const input_js_1 = require("../input.js"); +const step_js_1 = require("../step.js"); +const constant_js_1 = require("./constant.js"); +const list_js_1 = require("./list.js"); +const { GraphQLList, Kind } = graphql; +/** + * Implements `__InputListStep`. + */ +class __InputListStep extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "__InputListStep", + }; } + constructor(inputType, inputValues) { + super(); + this.inputValues = inputValues; + this.isSyncAndSafe = true; + this.itemCount = 0; + this.unbatchedExecute = () => { + throw new Error("__InputListStep should never execute; it should have been optimized away."); + }; + assert.ok(inputType instanceof GraphQLList, "Expected inputType to be a List"); + const innerType = inputType.ofType; + const values = inputValues === undefined + ? undefined + : inputValues.kind === Kind.LIST + ? inputValues.values + : inputValues.kind === Kind.NULL + ? undefined // Really it's `null` but we don't care here + : // Coerce to list + [inputValues]; + if (values !== undefined) { + for (let inputValueIndex = 0, inputValuesLength = values.length; inputValueIndex < inputValuesLength; inputValueIndex++) { + const inputValue = values[inputValueIndex]; + const innerPlan = (0, input_js_1.inputStep)(this.operationPlan, innerType, inputValue, undefined); + this.addDependency(innerPlan); + this.itemCount++; + } + } + } + optimize() { + const { inputValues } = this; + if (inputValues?.kind === "NullValue") { + return (0, constant_js_1.constant)(null); + } + else { + const arr = []; + for (let idx = 0; idx < this.itemCount; idx++) { + const itemPlan = this.getDep(idx); + arr[idx] = itemPlan; + } + return (0, list_js_1.list)(arr); + } + } + execute() { + throw new Error("__InputListStep should never execute; it should have been optimized away."); + } + at(index) { + const itemPlan = index < this.itemCount ? this.getDep(index) : (0, constant_js_1.constant)(undefined); + (0, input_js_1.assertInputStep)(itemPlan); + return itemPlan; + } + /** @internal */ + eval() { + if (this.inputValues?.kind === "NullValue") { + return null; + } + const list = []; + for (let itemPlanIndex = 0; itemPlanIndex < this.itemCount; itemPlanIndex++) { + const itemPlan = this.getDep(itemPlanIndex); + (0, input_js_1.assertInputStep)(itemPlan); + const value = itemPlan.eval(); + list[itemPlanIndex] = value; + } + return list; + } + /** @internal */ + evalIs(value) { + if (value === undefined) { + return this.inputValues === value; + } + else if (value === null) { + return this.inputValues?.kind === "NullValue"; + } + else { + throw new Error("__InputListStep cannot evalIs values other than null and undefined currently"); + } + } + /** @internal */ + evalLength() { + if (this.inputValues === undefined) { + return null; + } + else if (this.inputValues.kind === Kind.NULL) { + return null; + } + else if (this.inputValues.kind === Kind.LIST) { + return this.inputValues.values.length; + } + else { + // Coercion to list + return 1; + } + } +} +exports.__InputListStep = __InputListStep; +//# sourceMappingURL=__inputList.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputList.js.map b/grafast/grafast/dist/steps/__inputList.js.map new file mode 100644 index 0000000000..e1280cc72b --- /dev/null +++ b/grafast/grafast/dist/steps/__inputList.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputList.js","sourceRoot":"","sources":["../../src/steps/__inputList.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputObject.d.ts b/grafast/grafast/dist/steps/__inputObject.d.ts new file mode 100644 index 0000000000..301cd19e5d --- /dev/null +++ b/grafast/grafast/dist/steps/__inputObject.d.ts @@ -0,0 +1,25 @@ +import type { GraphQLInputObjectType } from "graphql"; +import type { AnyInputStep, NotVariableValueNode, UnbatchedExecutionExtra } from "../interfaces.js"; +import { UnbatchedStep } from "../step.js"; +/** + * Implements `InputObjectStep` + */ +export declare class __InputObjectStep extends UnbatchedStep { + private inputObjectType; + private inputValues; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private inputFields; + constructor(inputObjectType: TInputType, inputValues: NotVariableValueNode | undefined); + optimize(): import("./constant.js").ConstantStep | this; + finalize(): void; + unbatchedExecute(_extra: UnbatchedExecutionExtra, ...values: any[]): any; + get(attrName: string): AnyInputStep; +} +export type __InputObjectStepWithDollars = __InputObjectStep & { + [key in keyof ReturnType & string as `$${key}`]: AnyInputStep; +}; +//# sourceMappingURL=__inputObject.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputObject.d.ts.map b/grafast/grafast/dist/steps/__inputObject.d.ts.map new file mode 100644 index 0000000000..35ddffcd5d --- /dev/null +++ b/grafast/grafast/dist/steps/__inputObject.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputObject.d.ts","sourceRoot":"","sources":["../../src/steps/__inputObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAKtD,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM3C;;GAEG;AACH,qBAAa,iBAAiB,CAC5B,UAAU,SAAS,sBAAsB,GAAG,sBAAsB,CAClE,SAAQ,aAAa;IAWnB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,WAAW;IAXrB,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,OAAO,CAAC,WAAW,CAEK;gBAEd,eAAe,EAAE,UAAU,EAC3B,WAAW,EAAE,oBAAoB,GAAG,SAAS;IAmCvD,QAAQ;IAOR,QAAQ;IAiCR,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE;IAelE,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;CAmGpC;AAED,MAAM,MAAM,4BAA4B,CACtC,UAAU,SAAS,sBAAsB,GAAG,sBAAsB,IAChE,iBAAiB,CAAC,UAAU,CAAC,GAAG;KACjC,GAAG,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,GAC/C,MAAM,IAAI,IAAI,GAAG,EAAE,GAAG,YAAY;CACrC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputObject.js b/grafast/grafast/dist/steps/__inputObject.js new file mode 100644 index 0000000000..3873dd799e --- /dev/null +++ b/grafast/grafast/dist/steps/__inputObject.js @@ -0,0 +1,174 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__InputObjectStep = void 0; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const tamedevil_1 = tslib_1.__importDefault(require("tamedevil")); +const input_js_1 = require("../input.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +const constant_js_1 = require("./constant.js"); +const { Kind } = graphql; +/** + * Implements `InputObjectStep` + */ +class __InputObjectStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "__InputObjectStep", + }; } + constructor(inputObjectType, inputValues) { + super(); + this.inputObjectType = inputObjectType; + this.inputValues = inputValues; + this.isSyncAndSafe = true; + this.inputFields = Object.create(null); + const inputFieldDefinitions = inputObjectType.getFields(); + const inputFields = inputValues?.kind === "ObjectValue" ? inputValues.fields : undefined; + for (const inputFieldName in inputFieldDefinitions) { + const inputFieldDefinition = inputFieldDefinitions[inputFieldName]; + const inputFieldType = inputFieldDefinition.type; + const defaultValue = inputFieldDefinition.defaultValue !== undefined + ? (0, utils_js_1.defaultValueToValueNode)(inputFieldType, inputFieldDefinition.defaultValue) + : undefined; + const inputFieldValue = inputFields?.find((val) => val.name.value === inputFieldName); + const step = (0, input_js_1.inputStep)(this.operationPlan, inputFieldType, inputFieldValue?.value, defaultValue); + this.inputFields[inputFieldName] = { + step, + dependencyIndex: this.addDependency(step), + }; + Object.defineProperty(this, `$${inputFieldName}`, { + value: step, + }); + } + } + optimize() { + if (this.inputValues?.kind === "NullValue") { + return (0, constant_js_1.constant)(null); + } + return this; + } + finalize() { + tamedevil_1.default.runInBatch((0, tamedevil_1.default) `(function (extra, ${tamedevil_1.default.join(this.dependencies.map((_, dependencyIndex) => tamedevil_1.default.identifier(`val${dependencyIndex}`)), ", ")}) { + const resultValues = Object.create(null); + ${tamedevil_1.default.join(Object.entries(this.inputFields).map(([inputFieldName, { dependencyIndex }]) => { + if (dependencyIndex == null) { + throw new Error("inputFieldPlan has gone missing."); + } + const teVal = tamedevil_1.default.identifier(`val${dependencyIndex}`); + return (0, tamedevil_1.default) `\ + if (${teVal} !== undefined) { + resultValues${tamedevil_1.default.set(inputFieldName, true)} = ${teVal}; + }`; + }), "\n")} + return resultValues; +})`, (fn) => { + this.unbatchedExecute = fn; + }); + super.finalize(); + } + unbatchedExecute(_extra, ...values) { + const resultValues = Object.create(null); + for (const inputFieldName in this.inputFields) { + const dependencyIndex = this.inputFields[inputFieldName].dependencyIndex; + if (dependencyIndex == null) { + throw new Error("inputFieldPlan has gone missing."); + } + const value = values[dependencyIndex]; + if (value !== undefined) { + resultValues[inputFieldName] = value; + } + } + return resultValues; + } + get(attrName) { + const step = this.inputFields[attrName]?.step; + if (step === undefined) { + throw new Error(`Tried to '.get("${attrName}")', but no such attribute exists on ${this.inputObjectType.name}`); + } + return step; + } + /** @internal */ + eval() { + if (this.inputValues?.kind === "NullValue") { + return null; + } + const resultValues = Object.create(null); + for (const inputFieldName in this.inputFields) { + const inputFieldPlan = this.inputFields[inputFieldName].step; + resultValues[inputFieldName] = inputFieldPlan.eval(); + } + return resultValues; + } + /** @internal */ + evalIs(value) { + if (value === undefined) { + return this.inputValues === value; + } + else if (value === null) { + return this.inputValues?.kind === "NullValue"; + } + else if (value === 0) { + return (this.inputValues?.kind === "IntValue" && this.inputValues.value === "0"); + } + else { + throw new Error("__InputObjectStep cannot evalIs values other than null and undefined currently"); + } + } + /** @internal */ + evalIsEmpty() { + return (this.inputValues?.kind === "ObjectValue" && + this.inputValues.fields.length === 0); + } + // Written without consulting spec. + /** @internal */ + evalHas(attrName) { + if (!this.inputValues) { + return false; + } + if (this.inputValues.kind === "NullValue") { + return false; + } + if (!(attrName in this.inputFields)) { + return false; + } + return !this.inputFields[attrName].step.evalIs(undefined); + } + /** @internal */ + evalKeys() { + if (this.inputValues === undefined) { + return null; + } + else if (this.inputValues.kind === Kind.NULL) { + return null; + } + else if (this.inputValues.kind !== Kind.OBJECT) { + throw new Error("evalKeys must only be called for object types"); + } + const keys = []; + const inputFieldKeys = Object.keys(this.inputFields); + for (let i = 0; i < inputFieldKeys.length; i++) { + const key = inputFieldKeys[i]; + const inputFieldPlan = this.inputFields[key].step; + // This evalIs() is required. With __inputObject we know that it's an + // explicit input object (not variable) in the GraphQL document, but the + // values of each key may still be undefined if they're a variable that + // isn't supplied and has no default. In these cases we do not wish to + // return these keys (since the input object is not seen as having those + // keys set), but that will differ on an operation-to-operation basis, + // and thus we must evaluate whether or not they are undefined. Note that + // this implicitly adds constraints for these values; we do not need to + // explicitly add any constraint for the object itself because the + // document itself guarantees it will always be present. + // + // PERF: We should not need to .evalIs(undefined) for any input field + // that is declared as non-nullable, I think? + if (!inputFieldPlan.evalIs(undefined)) { + keys.push(key); + } + } + return keys; + } +} +exports.__InputObjectStep = __InputObjectStep; +//# sourceMappingURL=__inputObject.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputObject.js.map b/grafast/grafast/dist/steps/__inputObject.js.map new file mode 100644 index 0000000000..677e61fcaf --- /dev/null +++ b/grafast/grafast/dist/steps/__inputObject.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputObject.js","sourceRoot":"","sources":["../../src/steps/__inputObject.ts"],"names":[],"mappings":";;;;AACA,yDAAmC;AACnC,kEAA2B;AAE3B,0CAAwC;AAMxC,wCAA2C;AAC3C,0CAAsD;AACtD,+CAAyC;AAEzC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAEzB;;GAEG;AACH,MAAa,iBAEX,SAAQ,uBAAa;aACd,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,mBAAmB;KAChC,AAHc,CAGb;IAMF,YACU,eAA2B,EAC3B,WAA6C;QAErD,KAAK,EAAE,CAAC;QAHA,oBAAe,GAAf,eAAe,CAAY;QAC3B,gBAAW,GAAX,WAAW,CAAkC;QAPvD,kBAAa,GAAG,IAAI,CAAC;QAEb,gBAAW,GAEf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAMtB,MAAM,qBAAqB,GAAG,eAAe,CAAC,SAAS,EAAE,CAAC;QAC1D,MAAM,WAAW,GACf,WAAW,EAAE,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,KAAK,MAAM,cAAc,IAAI,qBAAqB,EAAE,CAAC;YACnD,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;YACnE,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC;YACjD,MAAM,YAAY,GAChB,oBAAoB,CAAC,YAAY,KAAK,SAAS;gBAC7C,CAAC,CAAC,IAAA,kCAAuB,EACrB,cAAc,EACd,oBAAoB,CAAC,YAAY,CAClC;gBACH,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,eAAe,GAAG,WAAW,EAAE,IAAI,CACvC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,cAAc,CAC3C,CAAC;YACF,MAAM,IAAI,GAAG,IAAA,oBAAS,EACpB,IAAI,CAAC,aAAa,EAClB,cAAc,EACd,eAAe,EAAE,KAAK,EACtB,YAAY,CACb,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG;gBACjC,IAAI;gBACJ,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;aAC1C,CAAC;YACF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,cAAc,EAAE,EAAE;gBAChD,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3C,OAAO,IAAA,sBAAQ,EAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,mBAAE,CAAC,UAAU,CACX,IAAA,mBAAE,EAAA,qBAAqB,mBAAE,CAAC,IAAI,CAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAC3C,mBAAE,CAAC,UAAU,CAAC,MAAM,eAAe,EAAE,CAAC,CACvC,EACD,IAAI,CACL;;IAEH,mBAAE,CAAC,IAAI,CACP,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAClC,CAAC,CAAC,cAAc,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE;YACxC,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,KAAK,GAAG,mBAAE,CAAC,UAAU,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC;YACrD,OAAO,IAAA,mBAAE,EAAA;QACT,KAAK;kBACK,mBAAE,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,KAAK;IACrD,CAAC;QACC,CAAC,CACF,EACD,IAAI,CACL;;GAEA,EACG,CAAC,EAAE,EAAE,EAAE;YACL,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC7B,CAAC,CACF,CAAC;QACF,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED,gBAAgB,CAAC,MAA+B,EAAE,GAAG,MAAa;QAChE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC;YACzE,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YACD,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;YACtC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,YAAY,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,mBAAmB,QAAQ,wCAAwC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAC/F,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,IAAI;QACF,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;YAC7D,YAAY,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,KAA2B;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC;QACpC,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,WAAW,CAAC;QAChD,CAAC;aAAM,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,GAAG,CACxE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,gFAAgF,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,WAAW;QACT,OAAO,CACL,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,aAAa;YACxC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CACrC,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,gBAAgB;IAChB,OAAO,CAAC,QAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,gBAAgB;IAChB,QAAQ;QACN,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAElD,qEAAqE;YACrE,wEAAwE;YACxE,uEAAuE;YACvE,sEAAsE;YACtE,wEAAwE;YACxE,sEAAsE;YACtE,yEAAyE;YACzE,uEAAuE;YACvE,kEAAkE;YAClE,wDAAwD;YACxD,EAAE;YACF,qEAAqE;YACrE,6CAA6C;YAC7C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,IAAgD,CAAC;IAC1D,CAAC;;AA1MH,8CA2MC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputStaticLeaf.d.ts b/grafast/grafast/dist/steps/__inputStaticLeaf.d.ts new file mode 100644 index 0000000000..5d63b5c757 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputStaticLeaf.d.ts @@ -0,0 +1,19 @@ +import type { BooleanValueNode, EnumValueNode, FloatValueNode, GraphQLLeafType, IntValueNode, NullValueNode, StringValueNode } from "graphql"; +import { UnbatchedStep } from "../step.js"; +/** + * Implements `InputStaticLeafStep` + * + * @see __InputDynamicScalarStep + */ +export declare class __InputStaticLeafStep extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private readonly coercedValue; + constructor(inputType: GraphQLLeafType, value: IntValueNode | FloatValueNode | StringValueNode | BooleanValueNode | NullValueNode | EnumValueNode | undefined); + unbatchedExecute(): TLeaf; + optimize(): import("./constant.js").ConstantStep; +} +//# sourceMappingURL=__inputStaticLeaf.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputStaticLeaf.d.ts.map b/grafast/grafast/dist/steps/__inputStaticLeaf.d.ts.map new file mode 100644 index 0000000000..5d971abc86 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputStaticLeaf.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputStaticLeaf.d.ts","sourceRoot":"","sources":["../../src/steps/__inputStaticLeaf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EAChB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C;;;;GAIG;AACH,qBAAa,qBAAqB,CAAC,KAAK,GAAG,GAAG,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IAC1E,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAM;gBAEjC,SAAS,EAAE,eAAe,EAC1B,KAAK,EACD,YAAY,GACZ,cAAc,GACd,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,SAAS;IAWf,gBAAgB,IAAI,KAAK;IAIzB,QAAQ;CAaT"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputStaticLeaf.js b/grafast/grafast/dist/steps/__inputStaticLeaf.js new file mode 100644 index 0000000000..8d80a022aa --- /dev/null +++ b/grafast/grafast/dist/steps/__inputStaticLeaf.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__InputStaticLeafStep = void 0; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const step_js_1 = require("../step.js"); +const constant_js_1 = require("./constant.js"); +const { valueFromAST } = graphql; +/** + * Implements `InputStaticLeafStep` + * + * @see __InputDynamicScalarStep + */ +class __InputStaticLeafStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "__InputStaticLeafStep", + }; } + constructor(inputType, value) { + super(); + this.isSyncAndSafe = true; + // `coerceInputValue` throws on coercion failure. NOTE: it's only safe for + // us to call coerceInputValue because we already know this is a scalar, + // *not* a variable, and not an object/list therefore cannot _contain_ a + // variable. Otherwise we'd need to process it via + // operationPlan.trackedVariableValuesStep. + this.coercedValue = value != null ? valueFromAST(value, inputType) : value; + } + unbatchedExecute() { + return this.coercedValue; + } + optimize() { + return (0, constant_js_1.constant)(this.coercedValue, false); + } + /** @internal */ + eval() { + return this.coercedValue; + } + /** @internal */ + evalIs(expectedValue) { + return this.coercedValue === expectedValue; + } +} +exports.__InputStaticLeafStep = __InputStaticLeafStep; +//# sourceMappingURL=__inputStaticLeaf.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__inputStaticLeaf.js.map b/grafast/grafast/dist/steps/__inputStaticLeaf.js.map new file mode 100644 index 0000000000..f10510e604 --- /dev/null +++ b/grafast/grafast/dist/steps/__inputStaticLeaf.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__inputStaticLeaf.js","sourceRoot":"","sources":["../../src/steps/__inputStaticLeaf.ts"],"names":[],"mappings":";;;;AASA,yDAAmC;AAEnC,wCAA2C;AAC3C,+CAAyC;AAEzC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;AAEjC;;;;GAIG;AACH,MAAa,qBAAmC,SAAQ,uBAAoB;aACnE,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,uBAAuB;KACpC,AAHc,CAGb;IAIF,YACE,SAA0B,EAC1B,KAOa;QAEb,KAAK,EAAE,CAAC;QAdV,kBAAa,GAAG,IAAI,CAAC;QAenB,0EAA0E;QAC1E,wEAAwE;QACxE,wEAAwE;QACxE,kDAAkD;QAClD,2CAA2C;QAC3C,IAAI,CAAC,YAAY,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7E,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,OAAO,IAAA,sBAAQ,EAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,gBAAgB;IAChB,IAAI;QACF,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,aAAsB;QAC3B,OAAO,IAAI,CAAC,YAAY,KAAK,aAAa,CAAC;IAC7C,CAAC;;AA5CH,sDA6CC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__item.d.ts b/grafast/grafast/dist/steps/__item.d.ts new file mode 100644 index 0000000000..196e179c37 --- /dev/null +++ b/grafast/grafast/dist/steps/__item.d.ts @@ -0,0 +1,27 @@ +import type { GrafastResultsList, JSONValue } from "../index.js"; +import { $$deepDepSkip } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { $$noExec, UnbatchedStep } from "../step.js"; +/** + * An __ItemStep is an internal plan (users must never construct it + * themselves!) that Grafast uses to refer to an individual item within a list + * or stream. + */ +export declare class __ItemStep extends UnbatchedStep { + readonly depth: number; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + [$$noExec]: boolean; + constructor(parentPlan: Step | Step, depth?: number); + toStringMeta(): string; + planJSONExtra(): Record | undefined; + getParentStep(): Step; + [$$deepDepSkip](): Step; + execute(): GrafastResultsList; + unbatchedExecute(): TData; + finalize(): void; +} +//# sourceMappingURL=__item.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__item.d.ts.map b/grafast/grafast/dist/steps/__item.d.ts.map new file mode 100644 index 0000000000..240aa2227d --- /dev/null +++ b/grafast/grafast/dist/steps/__item.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__item.d.ts","sourceRoot":"","sources":["../../src/steps/__item.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErD;;;;GAIG;AACH,qBAAa,UAAU,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;aAevC,KAAK;IAdvB,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,CAAC,QAAQ,CAAC,UAAQ;gBAQhB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EACvB,KAAK,SAAI;IAQ3B,YAAY,IAAI,MAAM;IAIf,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC,GAAG,SAAS;IAMzE,aAAa,IAAI,IAAI;IAGrB,CAAC,aAAa,CAAC,IAAI,IAAI;IAIvB,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC;IAGpC,gBAAgB,IAAI,KAAK;IAIlB,QAAQ,IAAI,IAAI;CAQxB"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__item.js b/grafast/grafast/dist/steps/__item.js new file mode 100644 index 0000000000..5d903bd563 --- /dev/null +++ b/grafast/grafast/dist/steps/__item.js @@ -0,0 +1,56 @@ +"use strict"; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__ItemStep = void 0; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const interfaces_js_1 = require("../interfaces.js"); +const step_js_1 = require("../step.js"); +/** + * An __ItemStep is an internal plan (users must never construct it + * themselves!) that Grafast uses to refer to an individual item within a list + * or stream. + */ +class __ItemStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "__ItemStep", + }; } + constructor(parentPlan, depth = 0) { + super(); + this.depth = depth; + this.isSyncAndSafe = true; + this[_a] = true; + this.addDependency(parentPlan); + this._isUnary = false; + this._isUnaryLocked = true; + } + toStringMeta() { + return chalk_1.default.bold.yellow(String(this.dependencies[0].id)); + } + planJSONExtra() { + return { + transformStepId: this.transformStepId, + }; + } + getParentStep() { + return this.getDep(0); + } + [(_a = step_js_1.$$noExec, interfaces_js_1.$$deepDepSkip)]() { + return this.getDep(0); + } + execute() { + throw new Error("__ItemStep must never execute"); + } + unbatchedExecute() { + throw new Error("__ItemStep must never execute"); + } + finalize() { + super.finalize(); + if (this.transformStepId != null) { + this.transformStepId = this.operationPlan.dangerouslyGetStep(this.transformStepId).id; + } + } +} +exports.__ItemStep = __ItemStep; +//# sourceMappingURL=__item.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__item.js.map b/grafast/grafast/dist/steps/__item.js.map new file mode 100644 index 0000000000..b28dd1fa3a --- /dev/null +++ b/grafast/grafast/dist/steps/__item.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__item.js","sourceRoot":"","sources":["../../src/steps/__item.ts"],"names":[],"mappings":";;;;;AAAA,0DAA0B;AAG1B,oDAAiD;AAEjD,wCAAqD;AAErD;;;;GAIG;AACH,MAAa,UAAkB,SAAQ,uBAAoB;aAClD,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,YAAY;KACzB,AAHc,CAGb;IASF,YACE,UAAuC,EACvB,QAAQ,CAAC;QAEzB,KAAK,EAAE,CAAC;QAFQ,UAAK,GAAL,KAAK,CAAI;QAV3B,kBAAa,GAAG,IAAI,CAAC;QACrB,QAAU,GAAG,IAAI,CAAC;QAYhB,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,YAAY;QACV,OAAO,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEM,aAAa;QAClB,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC;IACJ,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OA9BC,kBAAQ,EA8BR,6BAAa,EAAC;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IACD,gBAAgB;QACd,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;IAEM,QAAQ;QACb,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAC1D,IAAI,CAAC,eAAe,CACrB,CAAC,EAAE,CAAC;QACP,CAAC;IACH,CAAC;;AAtDH,gCAuDC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__trackedValue.d.ts b/grafast/grafast/dist/steps/__trackedValue.d.ts new file mode 100644 index 0000000000..49e3b8e091 --- /dev/null +++ b/grafast/grafast/dist/steps/__trackedValue.d.ts @@ -0,0 +1,64 @@ +import type { GraphQLInputObjectType, GraphQLInputType, VariableDefinitionNode } from "graphql"; +import { GraphQLList, GraphQLNonNull } from "graphql"; +import type { Constraint } from "../constraints.js"; +import type { ExecutionDetails, GrafastResultsList, UnbatchedExecutionExtra } from "../interfaces.js"; +import { UnbatchedStep } from "../step.js"; +import type { __ValueStep } from "./__value.js"; +import type { AccessStep } from "./access.js"; +/** + * Implements the `__TrackedValueStep(operationPlan, object, constraints, path)` + * algorithm used to allow runtime AND plan-time access to the three special + * entities: `variableValues`, `rootValue` and `context`. + * + * ExecutableStep-time access can evaluate the `object` passed to the constructor, and + * will add constraints to the relevant operationPlan.variableValuesConstraints, + * operationPlan.rootValueConstraints or operationPlan.contextConstraints to + * ensure that all future variableValues, rootValues and context will match the + * assumptions made. + * + * Run-time access will see the runtime values of these properties, it will + * **NOT** reference the `object` passed to the constructor. + * + * In core this will be used for evaluating `@skip`, `@include`, `@defer` and + * `@stream` directives so that a different OpPlan will be used if these would + * change the query plan, but it can also be used within plan resolvers to + * branch the logic of a plan based on something in these entities. + */ +export declare class __TrackedValueStep | undefined = undefined> extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + /** + * Could be anything. In the case of context it could even have exotic + * entries such as `pgClient`. + */ + private readonly value; + /** + * The path that we are through the original value (the one that + * `constraints` relates to). + */ + private readonly path; + static withGraphQLType(value: TData | undefined, valuePlan: __ValueStep | AccessStep, constraints: Constraint[], path: Array | undefined, graphqlType: TInputType): __TrackedValueStepWithDollars; + private nullableGraphQLType; + private variableDefinitions; + execute({ count, values: [values0], }: ExecutionDetails<[TData]>): GrafastResultsList; + unbatchedExecute(_extra: UnbatchedExecutionExtra, v: TData): TData; + private getValuePlan; + /** + * Get the named property of an object. + */ + get(attrName: TAttribute): __TrackedValueStepWithDollars[TAttribute]["type"] : undefined>; + /** + * Get the entry at the given index in an array. + */ + at(index: TIndex): __TrackedValueStepWithDollars ? U & GraphQLInputType : TInputType extends GraphQLNonNull> ? U & GraphQLInputType : undefined>; + optimize(): import("../step.js").Step | import("./__flag.js").__FlagStep>; +} +export type __TrackedValueStepWithDollars = __TrackedValueStep & (TInputType extends GraphQLInputObjectType ? { + [key in keyof ReturnType & string as `$${key}`]: __TrackedValueStepWithDollars[key]["type"]>; +} : Record); +//# sourceMappingURL=__trackedValue.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__trackedValue.d.ts.map b/grafast/grafast/dist/steps/__trackedValue.d.ts.map new file mode 100644 index 0000000000..f83036bd96 --- /dev/null +++ b/grafast/grafast/dist/steps/__trackedValue.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__trackedValue.d.ts","sourceRoot":"","sources":["../../src/steps/__trackedValue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__trackedValue.js b/grafast/grafast/dist/steps/__trackedValue.js new file mode 100644 index 0000000000..6b8ba2331f --- /dev/null +++ b/grafast/grafast/dist/steps/__trackedValue.js @@ -0,0 +1,318 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__TrackedValueStep = void 0; +const graphql_1 = require("graphql"); +const index_js_1 = require("../index.js"); +const step_js_1 = require("../step.js"); +/** + * Implements the `__TrackedValueStep(operationPlan, object, constraints, path)` + * algorithm used to allow runtime AND plan-time access to the three special + * entities: `variableValues`, `rootValue` and `context`. + * + * ExecutableStep-time access can evaluate the `object` passed to the constructor, and + * will add constraints to the relevant operationPlan.variableValuesConstraints, + * operationPlan.rootValueConstraints or operationPlan.contextConstraints to + * ensure that all future variableValues, rootValues and context will match the + * assumptions made. + * + * Run-time access will see the runtime values of these properties, it will + * **NOT** reference the `object` passed to the constructor. + * + * In core this will be used for evaluating `@skip`, `@include`, `@defer` and + * `@stream` directives so that a different OpPlan will be used if these would + * change the query plan, but it can also be used within plan resolvers to + * branch the logic of a plan based on something in these entities. + */ +class __TrackedValueStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "__TrackedValueStep", + }; } + static withGraphQLType(value, valuePlan, constraints, path = [], graphqlType) { + return (0, index_js_1.operationPlan)().withRootLayerPlan(() => new __TrackedValueStep(value, valuePlan, constraints, path, true, graphqlType)); + } + /** + * @internal + */ + constructor(value, valuePlan, constraints, path = [], isImmutable, graphqlTypeOrVariableDefinitions) { + super(); + this.isSyncAndSafe = true; + this._isImmutable = isImmutable; + this.addDependency(valuePlan); + this.value = value; + this.constraints = constraints; + this.path = path; + this.nullableGraphQLType = + graphqlTypeOrVariableDefinitions && + !isArray(graphqlTypeOrVariableDefinitions) + ? (0, graphql_1.getNullableType)(graphqlTypeOrVariableDefinitions) + : undefined; + this.variableDefinitions = + graphqlTypeOrVariableDefinitions && + isArray(graphqlTypeOrVariableDefinitions) + ? graphqlTypeOrVariableDefinitions + : undefined; + if ((0, graphql_1.isInputObjectType)(this.nullableGraphQLType)) { + const fields = this.nullableGraphQLType.getFields(); + for (const fieldName of Object.keys(fields)) { + let step; + Object.defineProperty(this, `$${fieldName}`, { + get: () => { + if (!step) { + step = this.get(fieldName); + } + return step; + }, + }); + } + } + else if (this.variableDefinitions) { + for (const def of this.variableDefinitions) { + const varName = def.variable.name.value; + let step; + Object.defineProperty(this, `$${varName}`, { + get: () => { + if (!step) { + step = this.get(varName); + } + return step; + }, + }); + } + } + } + execute({ count, values: [values0], }) { + // We have only one dependency, return the value of that. + return values0.isBatch + ? values0.entries + : (0, index_js_1.arrayOfLength)(count, values0.value); + } + unbatchedExecute(_extra, v) { + return v; + } + getValuePlan() { + return this.getDep(0, true); + } + /** + * Get the named property of an object. + */ + get(attrName) { + const { value, path, constraints } = this; + const newValue = value?.[attrName]; + const newValuePlan = this.getValuePlan().get(attrName); + const newPath = [...path, attrName]; + if (this.nullableGraphQLType) { + if ((0, graphql_1.isInputObjectType)(this.nullableGraphQLType)) { + const fields = this.nullableGraphQLType.getFields(); + const field = fields[attrName]; + if (!field) { + throw new Error(`'${this.nullableGraphQLType}' has no attribute '${attrName}'`); + } + return __TrackedValueStep.withGraphQLType(newValue, newValuePlan, constraints, newPath, field.type); + } + else { + throw new Error(`Cannot get field '${attrName}' on non-input-object type '${this.nullableGraphQLType}'`); + } + } + else if (this.variableDefinitions) { + const def = this.variableDefinitions.find((d) => d.variable.name.value === attrName); + if (!def) { + throw new Error(`No variable named '$${attrName}' exists in this operation`); + } + const getType = (t) => { + if (t.kind === graphql_1.Kind.NON_NULL_TYPE) { + return new graphql_1.GraphQLNonNull(getType(t.type)); + } + else if (t.kind === graphql_1.Kind.LIST_TYPE) { + return new graphql_1.GraphQLList(getType(t.type)); + } + else { + const name = t.name.value; + return this.operationPlan.schema.getType(name); + } + }; + const type = getType(def.type); + return __TrackedValueStep.withGraphQLType(newValue, newValuePlan, constraints, newPath, type); + } + else if (this._isImmutable) { + return this.operationPlan.withRootLayerPlan(() => new __TrackedValueStep(newValue, newValuePlan, constraints, newPath, this._isImmutable)); + } + else { + return new __TrackedValueStep(newValue, newValuePlan, constraints, newPath, this._isImmutable); + } + } + /** + * Get the entry at the given index in an array. + */ + at(index) { + const { value, path, constraints } = this; + const newValue = value?.[index]; + const newValuePlan = this.getValuePlan().at(index); + const newPath = [...path, index]; + if (this.nullableGraphQLType) { + if ((0, graphql_1.isListType)(this.nullableGraphQLType)) { + return __TrackedValueStep.withGraphQLType(newValue, newValuePlan, constraints, newPath, this.nullableGraphQLType.ofType); + } + else { + throw new Error(`'${this.nullableGraphQLType}' is not a list type, cannot access array index '${index}' on it`); + } + } + else if (this._isImmutable) { + return this.operationPlan.withRootLayerPlan(() => new __TrackedValueStep(newValue, newValuePlan, constraints, newPath, this._isImmutable)); + } + else { + return new __TrackedValueStep(newValue, newValuePlan, constraints, newPath, this._isImmutable); + } + } + /** + * Evaluates the current value, and adds a constraint to the OpPlan to ensure + * that all future evaluations of this property will always return the same + * value. + * + * **WARNING**: avoid using this where possible, it causes OpPlans to split. + * + * **WARNING**: this is the most expensive eval, if you need to eval, prefer evalIs, evalHas, etc instead. + * + * @internal + */ + eval() { + const { path, value } = this; + this.constraints.push({ + type: "value", + path, + value, + }); + return value; + } + /** + * Evaluates if the current value is equal to this specific value, and adds a + * constraint to the OpPlan to ensure that all future evaluations of this + * check will always return the same (boolean) result. + * + * Should only be used on scalars. + * + * **WARNING**: avoid using this where possible, it causes OpPlans to split. + * + * @internal + */ + evalIs(expectedValue) { + const { value, path } = this; + const pass = value === expectedValue; + this.constraints.push({ + type: "equal", + path, + expectedValue, + pass, + }); + return pass; + } + /** @internal */ + evalIsEmpty() { + const { value, path } = this; + const isEmpty = typeof value === "object" && + value !== null && + Object.keys(value).length === 0; + this.constraints.push({ + type: "isEmpty", + path, + isEmpty, + }); + return isEmpty; + } + /** + * Evaluates if the current value is an object with the given key, and adds a + * constraint to the OpPlan to ensure that all future evaluations of this + * check will always return the same (boolean) result. + * + * **WARNING**: avoid using this where possible, it causes OpPlans to split. + * + * @internal + */ + evalHas(key) { + const { value, path } = this; + const newPath = [...path, key]; + // NOTE: `key in value` would be more performant here, but we cannot trust + // users not to pass `{foo: undefined}` so we must do the more expensive + // `value[key] !== undefined` check. + const exists = (typeof value === "object" && + value && + value[key] !== undefined) || + false; + this.constraints.push({ + type: "exists", + path: newPath, + exists, + }); + return exists; + } + /** + * Evaluates the keys of the current value, and adds a + * constraint to the OpPlan to ensure that all future evaluations of this + * check will always return the same result. + * + * **WARNING**: avoid using this where possible, it causes OpPlans to split. + * + * @internal + */ + evalKeys() { + const { value, path } = this; + if (!(0, graphql_1.isInputObjectType)(this.nullableGraphQLType)) { + throw new Error("evalKeys must only be called for object types"); + } + if (value == null) { + this.constraints.push({ + type: "keys", + path, + keys: null, + }); + return null; + } + const keys = []; + const keysOfType = Object.keys(this.nullableGraphQLType.getFields()); + // NOTE: it's important that we loop through the fields in their defined + // order, this ensures the `keys` array always has consistent ordering. + for (let i = 0; i < keysOfType.length; i++) { + const key = keysOfType[i]; + // NOTE: `key in value` would be more performant here, but we cannot trust + // users not to pass `{foo: undefined}` so we must do the more expensive + // `value[key] !== undefined` check. + if (value[key] !== undefined) { + keys.push(key); + } + } + this.constraints.push({ + type: "keys", + path, + keys, + }); + return keys; + } + /** + * Evaluates the length of the current value (assumed to be an array), and + * adds a constraint to the OpPlan to ensure that all future values will have + * the same length. + * + * **WARNING**: avoid using this where possible, it causes OpPlans to split. + * + * @internal + */ + evalLength() { + const { value, path } = this; + const length = Array.isArray(value) ? value.length : null; + this.constraints.push({ + type: "length", + path, + expectedLength: length, + }); + return length; + } + // At runtime, __TrackedValueStep doesn't need to exist + optimize() { + return this.getDep(0); + } +} +exports.__TrackedValueStep = __TrackedValueStep; +function isArray(t) { + return Array.isArray(t); +} +//# sourceMappingURL=__trackedValue.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__trackedValue.js.map b/grafast/grafast/dist/steps/__trackedValue.js.map new file mode 100644 index 0000000000..0e1697d16d --- /dev/null +++ b/grafast/grafast/dist/steps/__trackedValue.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__trackedValue.js","sourceRoot":"","sources":["../../src/steps/__trackedValue.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__value.d.ts b/grafast/grafast/dist/steps/__value.d.ts new file mode 100644 index 0000000000..e09871e334 --- /dev/null +++ b/grafast/grafast/dist/steps/__value.d.ts @@ -0,0 +1,22 @@ +import type { GrafastResultsList } from "../index.js"; +import { $$noExec, Step } from "../step.js"; +import type { AccessStep } from "./access.js"; +/** + * Implements `__ValueStep(operationPlan)` which is never executed; it's purely + * internal - we populate the value as part of the algorithm - see + * `GetValueStepId` and `PopulateValueStep`. + */ +export declare class __ValueStep extends Step { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + [$$noExec]: boolean; + constructor(isImmutable: boolean); + toStringMeta(): string | null; + execute(): GrafastResultsList; + get(attrName: TAttr): AccessStep; + at(index: TIndex): AccessStep; +} +//# sourceMappingURL=__value.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__value.d.ts.map b/grafast/grafast/dist/steps/__value.d.ts.map new file mode 100644 index 0000000000..67686a29c1 --- /dev/null +++ b/grafast/grafast/dist/steps/__value.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"__value.d.ts","sourceRoot":"","sources":["../../src/steps/__value.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C;;;;GAIG;AACH,qBAAa,WAAW,CAAC,KAAK,CAAE,SAAQ,IAAI,CAAC,KAAK,CAAC;IACjD,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,CAAC,QAAQ,CAAC,UAAQ;gBAEN,WAAW,EAAE,OAAO;IAKhC,YAAY,IAAI,MAAM,GAAG,IAAI;IAa7B,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC;IAOpC,GAAG,CAAC,KAAK,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAMzE,EAAE,CAAC,MAAM,SAAS,MAAM,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;CAGzE"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__value.js b/grafast/grafast/dist/steps/__value.js new file mode 100644 index 0000000000..38f3ebc081 --- /dev/null +++ b/grafast/grafast/dist/steps/__value.js @@ -0,0 +1,48 @@ +"use strict"; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__ValueStep = void 0; +const step_js_1 = require("../step.js"); +const access_js_1 = require("./access.js"); +/** + * Implements `__ValueStep(operationPlan)` which is never executed; it's purely + * internal - we populate the value as part of the algorithm - see + * `GetValueStepId` and `PopulateValueStep`. + */ +class __ValueStep extends step_js_1.Step { + static { _a = step_js_1.$$noExec; } + static { this.$$export = { + moduleName: "grafast", + exportName: "__ValueStep", + }; } + constructor(isImmutable) { + super(); + this.isSyncAndSafe = true; + this[_a] = true; + this._isImmutable = isImmutable; + } + toStringMeta() { + switch (this) { + case this.operationPlan.rootValueStep: + return "rootValue"; + case this.operationPlan.variableValuesStep: + return "variableValues"; + case this.operationPlan.contextStep: + return "context"; + default: + return null; + } + } + execute() { + // This is still an "executable plan"; we just side-step execution internally. + throw new Error(`GrafastInternalError<7696a514-f452-4d47-92d3-85aeb5b23f48>: ${this} is a __ValueStep and thus must never execute`); + } + get(attrName) { + return this.cacheStep("get", attrName, () => (0, access_js_1.access)(this, [attrName])); + } + at(index) { + return this.cacheStep("at", index, () => (0, access_js_1.access)(this, [index])); + } +} +exports.__ValueStep = __ValueStep; +//# sourceMappingURL=__value.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/__value.js.map b/grafast/grafast/dist/steps/__value.js.map new file mode 100644 index 0000000000..745e135153 --- /dev/null +++ b/grafast/grafast/dist/steps/__value.js.map @@ -0,0 +1 @@ +{"version":3,"file":"__value.js","sourceRoot":"","sources":["../../src/steps/__value.ts"],"names":[],"mappings":";;;;AACA,wCAA4C;AAE5C,2CAAqC;AAErC;;;;GAIG;AACH,MAAa,WAAmB,SAAQ,cAAW;kBAMhD,kBAAQ;aALF,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,aAAa;KAC1B,AAHc,CAGb;IAIF,YAAY,WAAoB;QAC9B,KAAK,EAAE,CAAC;QAJV,kBAAa,GAAG,IAAI,CAAC;QACrB,QAAU,GAAG,IAAI,CAAC;QAIhB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IAClC,CAAC;IAED,YAAY;QACV,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,aAAa,CAAC,aAAa;gBACnC,OAAO,WAAW,CAAC;YACrB,KAAK,IAAI,CAAC,aAAa,CAAC,kBAA0C;gBAChE,OAAO,gBAAgB,CAAC;YAC1B,KAAK,IAAI,CAAC,aAAa,CAAC,WAAmC;gBACzD,OAAO,SAAS,CAAC;YACnB;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO;QACL,8EAA8E;QAC9E,MAAM,IAAI,KAAK,CACb,+DAA+D,IAAI,+CAA+C,CACnH,CAAC;IACJ,CAAC;IAED,GAAG,CAA4B,QAAe;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAC1C,IAAA,kBAAM,EAAC,IAAI,EAAE,CAAC,QAAkB,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC;IAED,EAAE,CAA6B,KAAa;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAA,kBAAM,EAAC,IAAI,EAAE,CAAC,KAAe,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;;AAzCH,kCA0CC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/access.d.ts b/grafast/grafast/dist/steps/access.d.ts new file mode 100644 index 0000000000..c1e5986042 --- /dev/null +++ b/grafast/grafast/dist/steps/access.d.ts @@ -0,0 +1,43 @@ +import type { UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +/** + * Accesses a (potentially nested) property from the result of a plan. + * + * NOTE: this could lead to unexpected results (which could introduce security + * issues) if it is not used carefully; only use it on JSON-like data, + * preferably where the objects have null prototypes, and be sure to adhere to + * the naming conventions detailed in assertSafeToAccessViaBraces. + */ +export declare class AccessStep extends UnbatchedStep { + readonly fallback?: any | undefined; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + readonly path: (string | number | symbol)[]; + private readonly hasSymbols; + constructor(parentPlan: Step, path: (string | number | symbol)[], fallback?: any | undefined); + toStringMeta(): string; + getParentStep(): Step | import("./__flag.js").__FlagStep>; + /** + * Get the named property of an object. + */ + get(attrName: TAttr): AccessStep; + /** + * Get the entry at the given index in an array. + */ + at(index: TIndex): AccessStep; + optimize(): AccessStep; + finalize(): void; + unbatchedExecute(_extra: UnbatchedExecutionExtra, ..._values: any[]): any; + deduplicate(peers: AccessStep[]): AccessStep[]; +} +/** + * Access the property at path `path` in the value returned from `parentPlan`, + * falling back to `fallback` if it were null-ish. + */ +export declare function access(parentPlan: Step, rawPath?: (string | number | symbol)[] | string | number | symbol, fallback?: any): AccessStep; +//# sourceMappingURL=access.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/access.d.ts.map b/grafast/grafast/dist/steps/access.d.ts.map new file mode 100644 index 0000000000..b16816180d --- /dev/null +++ b/grafast/grafast/dist/steps/access.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/steps/access.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAkB,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwH3C;;;;;;;GAOG;AACH,qBAAa,UAAU,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;aAcvC,QAAQ,CAAC,EAAE,GAAG;IAbhC,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,0BAA0B,UAAQ;IAClC,SAAgB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAGnC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EACzB,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,EAClB,QAAQ,CAAC,EAAE,GAAG,YAAA;IAahC,YAAY,IAAI,MAAM;IAMtB,aAAa;IAIb;;OAEG;IACH,GAAG,CAAC,KAAK,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAOzE;;OAEG;IACH,EAAE,CAAC,MAAM,SAAS,MAAM,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAQxE,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC;IAY7B,QAAQ;IASR,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG;IAMzE,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE;CAoB/D;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAC1B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EACzB,OAAO,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EACjE,QAAQ,CAAC,EAAE,GAAG,GACb,UAAU,CAAC,KAAK,CAAC,CA8BnB"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/access.js b/grafast/grafast/dist/steps/access.js new file mode 100644 index 0000000000..b73984d506 --- /dev/null +++ b/grafast/grafast/dist/steps/access.js @@ -0,0 +1,216 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AccessStep = exports.expressionSymbol = void 0; +exports.access = access; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const tamedevil_1 = tslib_1.__importDefault(require("tamedevil")); +const inspect_js_1 = require("../inspect.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +/** @internal */ +exports.expressionSymbol = Symbol("expression"); +const makeDestructureCache = Object.create(null); +const makingDestructureCache = Object.create(null); +/** + * Returns a function that will extract the value at the given path from an + * incoming object. If possible it will return a dynamically constructed + * function which will enable V8 to optimise the function over time via the + * JIT. + */ +function constructDestructureFunction(path, fallback, callback) { + const n = path.length; + /** 0 - slow mode; 1 - middle mode; 2 - turbo mode */ + let mode = n > 50 || n < 1 ? 0 : n > 5 ? 1 : 2; + for (let i = 0; i < n; i++) { + const pathItem = path[i]; + const t = typeof pathItem; + if (t === "symbol") { + // Cannot use in superfast mode (because cannot create signature) + if (mode === 2) + mode = 1; + } + else if (t === "string") { + // Cannot use in superfast mode (because signature becomes ambiguous) + if (mode === 2 && pathItem.includes("|")) + mode = 1; + } + else if (t === "number") { + if (!Number.isFinite(pathItem)) { + mode = 0; + } + } + else if (pathItem == null) { + // Slow mode required + mode = 0; + } + else { + throw new Error(`Invalid path item: ${(0, inspect_js_1.inspect)(pathItem)} in path '${JSON.stringify(path)}'`); + } + } + if (mode === 0) { + // Slow mode + callback(function slowlyExtractValueAtPath(_meta, value) { + let current = value; + for (let i = 0, l = path.length; i < l && current != null; i++) { + const pathItem = path[i]; + current = current[pathItem]; + } + return current ?? fallback; + }); + } + else { + const signature = (fallback !== undefined ? "f" : "n") + n; + const done = mode === 2 + ? (factory) => { + const fn = factory(fallback, ...path); + // ?.blah?.bog?.["!!!"]?.[0] + const expressionDetail = [path, fallback]; + fn[exports.expressionSymbol] = expressionDetail; + callback(fn); + } + : (factory) => callback(factory(fallback, ...path)); + const fn = makeDestructureCache[signature]; + if (fn !== undefined) { + done(fn); + return; + } + const making = makingDestructureCache[signature]; + if (making !== undefined) { + making.push(done); + return; + } + const doneHandlers = [done]; + makingDestructureCache[signature] = doneHandlers; + // DO NOT REFERENCE 'path' BELOW HERE! + const names = []; + const access = []; + for (let i = 0; i < n; i++) { + const te_name = tamedevil_1.default.identifier(`p${i}`); + names.push(te_name); + access.push((0, tamedevil_1.default) `[${te_name}]`); + } + tamedevil_1.default.runInBatch((0, tamedevil_1.default) `function (fallback, ${tamedevil_1.default.join(names, ", ")}) { +return (_meta, value) => value?.${tamedevil_1.default.join(access, "?.")}${fallback === undefined ? tamedevil_1.default.blank : tamedevil_1.default.cache ` ?? fallback`}; +}`, (factory) => { + makeDestructureCache[signature] = factory; + delete makingDestructureCache[signature]; + for (const doneHandler of doneHandlers) { + doneHandler(factory); + } + }); + } +} +/** + * Accesses a (potentially nested) property from the result of a plan. + * + * NOTE: this could lead to unexpected results (which could introduce security + * issues) if it is not used carefully; only use it on JSON-like data, + * preferably where the objects have null prototypes, and be sure to adhere to + * the naming conventions detailed in assertSafeToAccessViaBraces. + */ +class AccessStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "AccessStep", + }; } + constructor(parentPlan, path, fallback) { + super(); + this.fallback = fallback; + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this._isImmutable = parentPlan._isImmutable; + this.path = path; + this.hasSymbols = this.path.some((k) => typeof k === "symbol"); + this.peerKey = + (this.fallback === "undefined" ? "U" : "D") + + (this.hasSymbols ? "§" : ".") + + (0, utils_js_1.digestKeys)(this.path); + this.addDependency(parentPlan); + } + toStringMeta() { + return `${chalk_1.default.bold.yellow(String(this.getDepOptions(0).step.id))}.${this.path.map((p) => String(p)).join(".")}`; + } + getParentStep() { + return this.getDep(0); + } + /** + * Get the named property of an object. + */ + get(attrName) { + if (typeof attrName !== "string") { + throw new Error(`AccessStep::get can only be called with string values`); + } + return access(this.getDep(0), [...this.path, attrName]); + } + /** + * Get the entry at the given index in an array. + */ + at(index) { + if (typeof index !== "number") { + throw new Error(`AccessStep::get can only be called with string values`); + } + return access(this.getDep(0), [...this.path, index]); + } + // An access of an access can become a single access + optimize() { + const $dep = this.getDep(0); + if ($dep instanceof AccessStep && $dep.fallback === undefined) { + return access($dep.getDep(0), [...$dep.path, ...this.path], this.fallback); + } + return this; + } + finalize() { + // Note that `OutputPlan.optimize` depends on this. + constructDestructureFunction(this.path, this.fallback, (fn) => { + this.unbatchedExecute = fn; + }); + super.finalize(); + } + unbatchedExecute(_extra, ..._values) { + throw new Error(`${this}: should have had unbatchedExecute method replaced`); + } + deduplicate(peers) { + if (peers.length === 0) { + return peers; + } + else if (!this.hasSymbols && this.fallback === undefined) { + // Rely entirely on peerKey + return peers; + } + else if (!this.hasSymbols) { + // Rely on peerKey for path, but check fallback + const { fallback } = this; + return peers.filter((p) => p.fallback === fallback); + } + else { + // Check both fallback and path + const { fallback, path } = this; + return peers.filter((p) => p.fallback === fallback && (0, utils_js_1.arraysMatch)(p.path, path)); + } + } +} +exports.AccessStep = AccessStep; +/** + * Access the property at path `path` in the value returned from `parentPlan`, + * falling back to `fallback` if it were null-ish. + */ +function access(parentPlan, rawPath, fallback) { + const path = Array.isArray(rawPath) + ? rawPath + : rawPath != null + ? [rawPath] + : []; + if (typeof fallback === "undefined" && + !path.some((k) => typeof k === "symbol")) { + const pathKey = (0, utils_js_1.digestKeys)(path); + if (parentPlan._isImmutable) { + return parentPlan.operationPlan.withRootLayerPlan(() => parentPlan.operationPlan.cacheStep(parentPlan, "GrafastInternal:access()", pathKey, () => new AccessStep(parentPlan, path))); + } + else { + return parentPlan.operationPlan.cacheStep(parentPlan, "GrafastInternal:access()", pathKey, () => new AccessStep(parentPlan, path)); + } + } + return new AccessStep(parentPlan, path, fallback); +} +//# sourceMappingURL=access.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/access.js.map b/grafast/grafast/dist/steps/access.js.map new file mode 100644 index 0000000000..8171b96223 --- /dev/null +++ b/grafast/grafast/dist/steps/access.js.map @@ -0,0 +1 @@ +{"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/steps/access.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyInput.d.ts b/grafast/grafast/dist/steps/applyInput.d.ts new file mode 100644 index 0000000000..e970e24990 --- /dev/null +++ b/grafast/grafast/dist/steps/applyInput.d.ts @@ -0,0 +1,44 @@ +import type { GraphQLInputType, GraphQLSchema } from "graphql"; +import type { AnyInputStep, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +import { ConstantStep } from "./index.js"; +export declare class ApplyInputStep extends UnbatchedStep<(arg: TParent) => void> { + private inputType; + private getTargetFromParent; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + valueDepId: 0; + constructor(inputType: GraphQLInputType, $value: AnyInputStep, getTargetFromParent: ((parent: TParent, inputValue: any) => TTarget | undefined | (() => TTarget)) | undefined); + deduplicate(peers: readonly ApplyInputStep[]): ApplyInputStep[]; + optimize(): this | ConstantStep<(parent: TParent) => void>; + unbatchedExecute(extra: UnbatchedExecutionExtra, value: any): (parentThing: TParent) => void; +} +export declare function inputArgsApply(schema: GraphQLSchema, inputType: GraphQLInputType, parent: TArg, inputValue: unknown, getTargetFromParent: ((parent: TArg, inputValue: any) => TTarget | undefined | (() => TTarget)) | undefined): void; +export declare function applyInput(inputType: GraphQLInputType, $value: AnyInputStep, getTargetFromParent?: (parent: TParent, inputValue: any) => TTarget | undefined): ConstantStep<(parent: TParent) => void> | ApplyInputStep; +/** + * Modifiers modify their parent (which may be another modifier or anything + * else). First they gather all the requirements from their children (if any) + * being applied to them, then they apply themselves to their parent. This + * application is done through the `apply()` method. + */ +export declare abstract class Modifier { + protected readonly parent: TParent; + static $$export: any; + constructor(parent: TParent); + /** + * In this method, you should apply the changes to your `this.parent` plan + */ + abstract apply(): void; +} +export declare function isModifier(plan: any): plan is Modifier; +export declare function assertModifier(plan: any, pathDescription: string): asserts plan is Modifier; +export type ApplyableExecutableStep = Step & { + apply($apply: Step<(arg: TArg) => void>): void; +}; +export declare function isApplyableStep(s: Step): s is ApplyableExecutableStep; +//# sourceMappingURL=applyInput.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyInput.d.ts.map b/grafast/grafast/dist/steps/applyInput.d.ts.map new file mode 100644 index 0000000000..c2fedceef7 --- /dev/null +++ b/grafast/grafast/dist/steps/applyInput.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"applyInput.d.ts","sourceRoot":"","sources":["../../src/steps/applyInput.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyInput.js b/grafast/grafast/dist/steps/applyInput.js new file mode 100644 index 0000000000..7569ca625e --- /dev/null +++ b/grafast/grafast/dist/steps/applyInput.js @@ -0,0 +1,206 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Modifier = exports.ApplyInputStep = void 0; +exports.inputArgsApply = inputArgsApply; +exports.applyInput = applyInput; +exports.isModifier = isModifier; +exports.assertModifier = assertModifier; +exports.isApplyableStep = isApplyableStep; +const graphql_1 = require("graphql"); +const step_js_1 = require("../step.js"); +const index_js_1 = require("./index.js"); +let currentModifiers = []; +let applyingModifiers = false; +let inputArgsApplyDepth = 0; +class ApplyInputStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ApplyInputStep", + }; } + constructor(inputType, $value, getTargetFromParent) { + super(); + this.inputType = inputType; + this.getTargetFromParent = getTargetFromParent; + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.valueDepId = this.addUnaryDependency($value); + if (!this._isUnary) { + throw new Error(`applyInput() must be unary`); + } + this._isUnaryLocked = true; + } + deduplicate(peers) { + return peers.filter((p) => p.inputType === this.inputType && + p.getTargetFromParent === this.getTargetFromParent); + } + optimize() { + const $value = this.getDep(this.valueDepId); + if ($value instanceof index_js_1.ConstantStep) { + // Replace myself with a constant! + const { operationPlan: { schema }, inputType, getTargetFromParent, } = this; + const { data } = $value; + return (0, index_js_1.constant)(function applyInputConstant(parent) { + inputArgsApply(schema, inputType, parent, data, getTargetFromParent); + }, false); + } + return this; + } + unbatchedExecute(extra, value) { + const { getTargetFromParent } = this; + return (parentThing) => inputArgsApply(this.operationPlan.schema, this.inputType, parentThing, value, getTargetFromParent); + } +} +exports.ApplyInputStep = ApplyInputStep; +function inputArgsApply(schema, inputType, parent, inputValue, getTargetFromParent) { + try { + inputArgsApplyDepth++; + const target = getTargetFromParent + ? getTargetFromParent(parent, inputValue) + : parent; + if (target != null) { + _inputArgsApply(schema, inputType, target, inputValue); + } + } + finally { + inputArgsApplyDepth--; + } + let l; + if (inputArgsApplyDepth === 0 && (l = currentModifiers.length) > 0) { + applyingModifiers = true; + try { + for (let i = l - 1; i >= 0; i--) { + currentModifiers[i].apply(); + } + } + finally { + applyingModifiers = false; + currentModifiers = []; + } + } +} +function applyInput(inputType, $value, getTargetFromParent) { + const opPlan = (0, index_js_1.operationPlan)(); + const { schema } = opPlan; + return opPlan.withRootLayerPlan(() => { + if ($value instanceof index_js_1.ConstantStep) { + // Replace us with a constant + const { data } = $value; + return (0, index_js_1.constant)(function applyInputConstant(parent) { + inputArgsApply(schema, inputType, parent, data, getTargetFromParent); + }, false); + } + else { + return new ApplyInputStep(inputType, $value, getTargetFromParent); + } + }); +} +/* +const defaultInputObjectTypeInputPlanResolver: InputObjectTypeInputPlanResolver = + (input, info) => { + const fields = info.type.getFields(); + const obj: { [key: string]: ExecutableStep } = Object.create(null); + for (const fieldName in fields) { + obj[fieldName] = input.get(fieldName); + } + return object(obj); + }; +*/ +function _inputArgsApply(schema, inputType, target, inputValue) { + // PERF: we should have the plan generate a digest of `inputType` so that we + // can jump right to the relevant parts without too much traversal cost. + if (inputValue === undefined) { + return; + } + if ((0, graphql_1.isNonNullType)(inputType)) { + if (inputValue === null) { + throw new Error(`null value found in non-null position`); + } + _inputArgsApply(schema, inputType.ofType, target, inputValue); + } + else if ((0, graphql_1.isListType)(inputType)) { + if (inputValue == null) + return; + if (!Array.isArray(inputValue)) { + throw new Error(`Expected list in list position`); + } + for (const item of inputValue) { + const itemTarget = typeof target === "function" ? target() : target; + _inputArgsApply(schema, inputType.ofType, itemTarget, item); + } + } + else if (typeof target === "function") { + throw new Error("Functions may only be used as the target for list types (the function is called once per list item)"); + } + else if ((0, graphql_1.isInputObjectType)(inputType)) { + if (inputValue === null) { + return; + } + const fields = inputType.getFields(); + for (const [fieldName, field] of Object.entries(fields)) { + const val = inputValue[fieldName]; + if (val === undefined) + continue; + if (field.extensions.grafast?.apply) { + const newTarget = field.extensions.grafast.apply(target, val, { + schema, + field, + fieldName, + }); + if (newTarget != null) { + _inputArgsApply(schema, field.type, newTarget, val); + } + } + } + } + else if ((0, graphql_1.isScalarType)(inputType)) { + // if (inputType.extensions.grafast?.apply) { + // } + } + else if ((0, graphql_1.isEnumType)(inputType)) { + if (inputValue === null) { + return; + } + const values = inputType.getValues(); + const value = values.find((v) => v.value === inputValue); + if (value) { + if (value.extensions.grafast?.apply) { + value.extensions.grafast.apply(target); + } + } + else { + throw new Error(`Couldn't find value in ${inputType} for ${inputValue}`); + } + } + else { + const never = inputType; + throw new Error(`Input type expected, but found ${never}`); + } +} +/** + * Modifiers modify their parent (which may be another modifier or anything + * else). First they gather all the requirements from their children (if any) + * being applied to them, then they apply themselves to their parent. This + * application is done through the `apply()` method. + */ +class Modifier { + constructor(parent) { + this.parent = parent; + if (applyingModifiers) { + throw new Error(`Must not create new modifier whilst modifiers are being applied!`); + } + currentModifiers.push(this); + } +} +exports.Modifier = Modifier; +function isModifier(plan) { + return plan instanceof Modifier; +} +function assertModifier(plan, pathDescription) { + if (!isModifier(plan)) { + throw new Error(`The plan returned from '${pathDescription}' should be a modifier plan, but it does not implement the 'apply' method.`); + } +} +function isApplyableStep(s) { + return typeof s.apply === "function"; +} +//# sourceMappingURL=applyInput.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyInput.js.map b/grafast/grafast/dist/steps/applyInput.js.map new file mode 100644 index 0000000000..d953ff43e8 --- /dev/null +++ b/grafast/grafast/dist/steps/applyInput.js.map @@ -0,0 +1 @@ +{"version":3,"file":"applyInput.js","sourceRoot":"","sources":["../../src/steps/applyInput.ts"],"names":[],"mappings":";;;AAsFA,wCAmCC;AAED,gCA4BC;AA6GD,gCAEC;AAED,wCASC;AASD,0CAIC;AA7RD,qCAMiB;AAIjB,wCAA2C;AAC3C,yCAAmE;AAEnE,IAAI,gBAAgB,GAAoB,EAAE,CAAC;AAC3C,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAC9B,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAE5B,MAAa,cAGX,SAAQ,uBAAqC;aACtC,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,gBAAgB;KAC7B,AAHc,CAGb;IAKF,YACU,SAA2B,EACnC,MAAoB,EACZ,mBAKK;QAEb,KAAK,EAAE,CAAC;QATA,cAAS,GAAT,SAAS,CAAkB;QAE3B,wBAAmB,GAAnB,mBAAmB,CAKd;QAZR,kBAAa,GAAG,IAAI,CAAC;QACrB,+BAA0B,GAAG,IAAI,CAAC;QAcvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAM,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAEM,WAAW,CAAC,KAAgC;QACjD,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;YAC9B,CAAC,CAAC,mBAAmB,KAAK,IAAI,CAAC,mBAAmB,CACrD,CAAC;IACJ,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,MAAM,YAAY,uBAAY,EAAE,CAAC;YACnC,kCAAkC;YAClC,MAAM,EACJ,aAAa,EAAE,EAAE,MAAM,EAAE,EACzB,SAAS,EACT,mBAAmB,GACpB,GAAG,IAAI,CAAC;YACT,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;YACxB,OAAO,IAAA,mBAAQ,EAAC,SAAS,kBAAkB,CAAC,MAAe;gBACzD,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;YACvE,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,KAA8B,EAAE,KAAU;QACzD,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC;QACrC,OAAO,CAAC,WAAoB,EAAE,EAAE,CAC9B,cAAc,CACZ,IAAI,CAAC,aAAa,CAAC,MAAM,EACzB,IAAI,CAAC,SAAS,EACd,WAAW,EACX,KAAK,EACL,mBAAmB,CACpB,CAAC;IACN,CAAC;;AAjEH,wCAkEC;AAED,SAAgB,cAAc,CAI5B,MAAqB,EACrB,SAA2B,EAC3B,MAAY,EACZ,UAAmB,EACnB,mBAEa;IAEb,IAAI,CAAC;QACH,mBAAmB,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,mBAAmB;YAChC,CAAC,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC;YACzC,CAAC,CAAE,MAA6B,CAAC;QACnC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,eAAe,CAAU,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,mBAAmB,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,CAAS,CAAC;IACd,IAAI,mBAAmB,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,iBAAiB,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,iBAAiB,GAAG,KAAK,CAAC;YAC1B,gBAAgB,GAAG,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CAIxB,SAA2B,EAC3B,MAAoB,EACpB,mBAGwB;IAExB,MAAM,MAAM,GAAG,IAAA,wBAAa,GAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1B,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE;QACnC,IAAI,MAAM,YAAY,uBAAY,EAAE,CAAC;YACnC,6BAA6B;YAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;YACxB,OAAO,IAAA,mBAAQ,EAAC,SAAS,kBAAkB,CAAC,MAAe;gBACzD,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;YACvE,CAAC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,cAAc,CACvB,SAAS,EACT,MAAM,EACN,mBAAmB,CACpB,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;EAUE;AAEF,SAAS,eAAe,CACtB,MAAqB,EACrB,SAA2B,EAC3B,MAA2B,EAC3B,UAAmB;IAEnB,4EAA4E;IAC5E,wEAAwE;IACxE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO;IACT,CAAC;IACD,IAAI,IAAA,uBAAa,EAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QACjC,IAAI,UAAU,IAAI,IAAI;YAAE,OAAO;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACpE,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAC;IACJ,CAAC;SAAM,IAAI,IAAA,2BAAiB,EAAC,SAAS,CAAC,EAAE,CAAC;QACxC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAI,UAAkB,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,GAAG,KAAK,SAAS;gBAAE,SAAS;YAChC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE;oBAC5D,MAAM;oBACN,KAAK;oBACL,SAAS;iBACV,CAAC,CAAC;gBACH,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;oBACtB,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,IAAA,sBAAY,EAAC,SAAS,CAAC,EAAE,CAAC;QACnC,6CAA6C;QAC7C,IAAI;IACN,CAAC;SAAM,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QACjC,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;QACzD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;gBACpC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,QAAQ,UAAU,EAAE,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAU,SAAS,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAsB,QAAQ;IAI5B,YAA+B,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;QAC5C,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;QACJ,CAAC;QACD,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;CAMF;AAjBD,4BAiBC;AAED,SAAgB,UAAU,CAAU,IAAS;IAC3C,OAAO,IAAI,YAAY,QAAQ,CAAC;AAClC,CAAC;AAED,SAAgB,cAAc,CAC5B,IAAS,EACT,eAAuB;IAEvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,2BAA2B,eAAe,4EAA4E,CACvH,CAAC;IACJ,CAAC;AACH,CAAC;AASD,SAAgB,eAAe,CAC7B,CAAc;IAEd,OAAO,OAAQ,CAAS,CAAC,KAAK,KAAK,UAAU,CAAC;AAChD,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyTransforms.d.ts b/grafast/grafast/dist/steps/applyTransforms.d.ts new file mode 100644 index 0000000000..fb52cad440 --- /dev/null +++ b/grafast/grafast/dist/steps/applyTransforms.d.ts @@ -0,0 +1,9 @@ +import { Step } from "../step.js"; +/** + * If you want to use a step that might represent a list and you need all of + * the `listItem` transforms to have already taken place (e.g. you're going to + * send the result to an external service) rather than processing them through + * the GraphQL response, then you may need to call `applyTransforms` on it. + */ +export declare function applyTransforms($step: Step): Step; +//# sourceMappingURL=applyTransforms.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyTransforms.d.ts.map b/grafast/grafast/dist/steps/applyTransforms.d.ts.map new file mode 100644 index 0000000000..cd8f4b4aac --- /dev/null +++ b/grafast/grafast/dist/steps/applyTransforms.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"applyTransforms.d.ts","sourceRoot":"","sources":["../../src/steps/applyTransforms.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAqB,IAAI,EAAE,MAAM,YAAY,CAAC;AAuMrD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,aAY1C"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyTransforms.js b/grafast/grafast/dist/steps/applyTransforms.js new file mode 100644 index 0000000000..0aee75c57c --- /dev/null +++ b/grafast/grafast/dist/steps/applyTransforms.js @@ -0,0 +1,173 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ApplyTransformsStep = void 0; +exports.applyTransforms = applyTransforms; +const tslib_1 = require("tslib"); +const assert = tslib_1.__importStar(require("../assert.js")); +const dev_js_1 = require("../dev.js"); +const executeBucket_js_1 = require("../engine/executeBucket.js"); +const LayerPlan_js_1 = require("../engine/LayerPlan.js"); +const withGlobalLayerPlan_js_1 = require("../engine/lib/withGlobalLayerPlan.js"); +const error_js_1 = require("../error.js"); +const interfaces_js_1 = require("../interfaces.js"); +const step_js_1 = require("../step.js"); +const __item_js_1 = require("./__item.js"); +const connection_js_1 = require("./connection.js"); +/** + * @internal + */ +class ApplyTransformsStep extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "ApplyTransformsStep", + }; } + constructor($step) { + super(); + // OPTIMIZE: if all the steps in the inner bucket are synchronous then theoretically we can be synchronous too + this.isSyncAndSafe = false; + const listPlan = (0, connection_js_1.itemsOrStep)($step); + this.addDependency(listPlan); + // Plan this subroutine + this.subroutineLayer = new LayerPlan_js_1.LayerPlan(this.operationPlan, this.layerPlan, { + type: "subroutine", + parentStep: this, + }); + const itemPlan = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.subroutineLayer, listPlan.polymorphicPaths, () => { + // This does NOT use `itemPlanFor` because __ListTransformPlans are special. + const $__listItem = new __item_js_1.__ItemStep(listPlan); + $__listItem.transformStepId = this.id; + this.itemStepId = $__listItem.id; + const $listItem = (0, step_js_1.isListCapableStep)(listPlan) + ? listPlan.listItem($__listItem) + : $__listItem; + const $newListItem = applyTransforms($listItem); + if (this.isSyncAndSafe && + (!$__listItem.isSyncAndSafe || + !$listItem.isSyncAndSafe || + !$newListItem.isSyncAndSafe)) { + this.isSyncAndSafe = false; + } + return $newListItem; + }); + this.subroutineLayer.setRootStep(itemPlan); + this.operationPlan.finishSubroutine(this, this.subroutineLayer); + } + async execute({ indexMap, values: [values0], extra, }) { + const bucket = extra._bucket; + const childLayerPlan = this.subroutineLayer; + const { copyStepIds, rootStep } = childLayerPlan; + const store = new Map(); + const polymorphicPathList = []; + const iterators = []; + const map = new Map(); + let size = 0; + // ENHANCE: do this better! + const itemStep = this.operationPlan.dangerouslyGetStep(this.itemStepId); + const itemStepId = itemStep.id; + if (itemStepId == null) { + throw new Error("GrafastInternalError: listItem layer plan has no rootStepId"); + } + if (itemStep._isUnary) { + store.set(itemStepId, (0, executeBucket_js_1.unaryExecutionValue)(values0.unaryValue())); + } + else { + store.set(itemStepId, (0, executeBucket_js_1.batchExecutionValue)([])); + } + for (const stepId of copyStepIds) { + const ev = bucket.store.get(stepId); + if (!ev) { + throw new Error(`GrafastInternalError<68675bbd-bc15-4c4a-902a-61c0de616325>: unary step '${stepId}' (${this.operationPlan.dangerouslyGetStep(stepId)}) listed in copyStepIds but not available in parent bucket for ${this}`); + } + if (ev.isBatch) { + // Prepare store with an empty list for each copyBatchPlanId + store.set(stepId, (0, executeBucket_js_1.batchExecutionValue)([])); + } + else { + store.set(stepId, ev); + } + } + // We'll typically be creating more listItem bucket entries than we + // have parent buckets, so we must "multiply up" the store entries. + indexMap((originalIndex) => { + const list = values0.at(originalIndex); + if (Array.isArray(list)) { + const newIndexes = []; + map.set(originalIndex, newIndexes); + for (let j = 0, l = list.length; j < l; j++) { + const newIndex = size++; + newIndexes.push(newIndex); + polymorphicPathList[newIndex] = + bucket.polymorphicPathList[originalIndex]; + // Copying across the iterators because we do NOT call outputBucket, + // so we need to ensure any streams are cleaned up. + iterators[newIndex] = bucket.iterators[originalIndex]; + const ev = store.get(itemStepId); + if (ev.isBatch) { + // TODO: check for error? + ev._setResult(newIndex, list[j], 0); + } + for (const copyStepId of copyStepIds) { + const ev = store.get(copyStepId); + if (ev.isBatch) { + const orig = bucket.store.get(copyStepId); + ev._setResult(newIndex, orig.at(originalIndex), orig._flagsAt(originalIndex)); + } + } + } + } + }); + if (size > 0) { + const childBucket = (0, executeBucket_js_1.newBucket)({ + layerPlan: childLayerPlan, + size, + store, + flagUnion: bucket.flagUnion, + polymorphicPathList, + iterators, + }, bucket.metaByMetaKey); + await (0, executeBucket_js_1.executeBucket)(childBucket, extra._requestContext); + } + const depResults = store.get(rootStep.id); + return indexMap((originalIndex) => { + const list = values0.at(originalIndex); + if (list == null) { + return list; + } + const indexes = map.get(originalIndex); + if (!Array.isArray(list) || !Array.isArray(indexes)) { + // Not a list value; just pass it straight through + return list; + } + const values = indexes.map((idx) => { + const val = depResults.at(idx); + if (depResults._flagsAt(idx) & interfaces_js_1.FLAG_ERROR) { + return (0, error_js_1.flagError)(val); + } + return val; + }); + if (dev_js_1.isDev) { + assert.strictEqual(list.length, values.length, "GrafastInternalError<43cb302e-673b-4881-8c4c-f2d00fe5a3d7>: The list and values length must match for a ApplyTransformsStep"); + } + return values; + }); + } +} +exports.ApplyTransformsStep = ApplyTransformsStep; +// TODO: document this better. (Had to do it for `each($items, $item => +// object({...}))` JSON transform in pg-many-to-many +/** + * If you want to use a step that might represent a list and you need all of + * the `listItem` transforms to have already taken place (e.g. you're going to + * send the result to an external service) rather than processing them through + * the GraphQL response, then you may need to call `applyTransforms` on it. + */ +function applyTransforms($step) { + if ((0, step_js_1.isListCapableStep)($step)) { + return $step.operationPlan.cacheStep($step, "GrafastInternal:applyTransforms()", "", () => new ApplyTransformsStep($step)); + } + else { + // No eval necessary + return $step; + } +} +//# sourceMappingURL=applyTransforms.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/applyTransforms.js.map b/grafast/grafast/dist/steps/applyTransforms.js.map new file mode 100644 index 0000000000..430f774d86 --- /dev/null +++ b/grafast/grafast/dist/steps/applyTransforms.js.map @@ -0,0 +1 @@ +{"version":3,"file":"applyTransforms.js","sourceRoot":"","sources":["../../src/steps/applyTransforms.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/bakedInput.d.ts b/grafast/grafast/dist/steps/bakedInput.d.ts new file mode 100644 index 0000000000..8bcbdfe2d2 --- /dev/null +++ b/grafast/grafast/dist/steps/bakedInput.d.ts @@ -0,0 +1,23 @@ +import type { GraphQLInputObjectType, GraphQLInputType, GraphQLList, GraphQLSchema } from "graphql"; +import type { UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +export declare class BakedInputStep extends UnbatchedStep { + private inputType; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + valueDepId: 0; + constructor(inputType: GraphQLInputObjectType | GraphQLList, $value: Step); + deduplicate(peers: readonly BakedInputStep[]): BakedInputStep[]; + unbatchedExecute(extra: UnbatchedExecutionExtra, value: unknown): TData; +} +/** + * Takes a input type and matching value and performs runtime conversion of + * that type to the internal representation (if any). + */ +export declare function bakedInput(inputType: GraphQLInputType, $value: Step): Step; +export declare function bakedInputRuntime(schema: GraphQLSchema, inputType: GraphQLInputType, value: unknown): unknown; +//# sourceMappingURL=bakedInput.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/bakedInput.d.ts.map b/grafast/grafast/dist/steps/bakedInput.d.ts.map new file mode 100644 index 0000000000..e8cf8adfce --- /dev/null +++ b/grafast/grafast/dist/steps/bakedInput.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"bakedInput.d.ts","sourceRoot":"","sources":["../../src/steps/bakedInput.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACd,MAAM,SAAS,CAAC;AAGjB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,qBAAa,cAAc,CAAC,KAAK,GAAG,GAAG,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IASjE,OAAO,CAAC,SAAS;IARnB,MAAM,CAAC,QAAQ;;;MAGb;IACK,aAAa,UAAQ;IAE5B,UAAU,EAAE,CAAC,CAAC;gBAEJ,SAAS,EAAE,sBAAsB,GAAG,WAAW,CAAC,GAAG,CAAC,EAC5D,MAAM,EAAE,IAAI;IAUP,WAAW,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE;IAInD,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO;CAQhE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAG,GAAG,EACnC,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,IAAI,aAiBb;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,OAAO,GACb,OAAO,CAqCT"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/bakedInput.js b/grafast/grafast/dist/steps/bakedInput.js new file mode 100644 index 0000000000..c06580164d --- /dev/null +++ b/grafast/grafast/dist/steps/bakedInput.js @@ -0,0 +1,90 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BakedInputStep = void 0; +exports.bakedInput = bakedInput; +exports.bakedInputRuntime = bakedInputRuntime; +const graphql_1 = require("graphql"); +const step_js_1 = require("../step.js"); +const applyInput_js_1 = require("./applyInput.js"); +const index_js_1 = require("./index.js"); +class BakedInputStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "BakedInputStep", + }; } + constructor(inputType, $value) { + super(); + this.inputType = inputType; + this.isSyncAndSafe = true; + this.valueDepId = this.addUnaryDependency($value); + if (!this._isUnary) { + throw new Error(`bakedInput() must be unary`); + } + this._isUnaryLocked = true; + } + deduplicate(peers) { + return peers.filter((p) => p.inputType === this.inputType); + } + unbatchedExecute(extra, value) { + if (value == null) + return value; + return bakedInputRuntime(this.operationPlan.schema, this.inputType, value); + } +} +exports.BakedInputStep = BakedInputStep; +/** + * Takes a input type and matching value and performs runtime conversion of + * that type to the internal representation (if any). + */ +function bakedInput(inputType, $value) { + const nullableInputType = (0, graphql_1.getNullableType)(inputType); + // Could have done this in `optimize()` but faster to do it here. + if ((0, graphql_1.isListType)(nullableInputType) || + ((0, graphql_1.isInputObjectType)(nullableInputType) && + typeof nullableInputType.extensions?.grafast?.baked === "function")) { + // Ooo, we're fancy! Do the thing! + return (0, index_js_1.operationPlan)().withRootLayerPlan(() => new BakedInputStep(nullableInputType, $value)); + } + else { + // Nothing special, we just return the input. + return $value; + } +} +function bakedInputRuntime(schema, inputType, value) { + if (value == null) + return value; + const nullableInputType = (0, graphql_1.getNullableType)(inputType); + if ((0, graphql_1.isListType)(nullableInputType)) { + if (Array.isArray(value)) { + return value.map((v) => bakedInputRuntime(schema, nullableInputType.ofType, v)); + } + else { + throw new Error(`Failed to process input for type ${inputType} - expected array`); + } + } + // Could have done this in `optimize()` but faster to do it here. + const baked = (0, graphql_1.isInputObjectType)(nullableInputType) + ? nullableInputType.extensions?.grafast?.baked + : null; + if (typeof baked !== "function") { + // Nothing special, we just return the input. + return value; + } + else { + // Ooo, we're fancy! Do the thing! + let applied = false; + const bakedObj = baked(value, { + type: nullableInputType, + schema, + applyChildren(parent) { + applied = true; + (0, applyInput_js_1.inputArgsApply)(schema, nullableInputType, parent, value, undefined); + }, + }); + if (!applied) { + (0, applyInput_js_1.inputArgsApply)(schema, nullableInputType, bakedObj, value, undefined); + } + return bakedObj; + } +} +//# sourceMappingURL=bakedInput.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/bakedInput.js.map b/grafast/grafast/dist/steps/bakedInput.js.map new file mode 100644 index 0000000000..9d84343d20 --- /dev/null +++ b/grafast/grafast/dist/steps/bakedInput.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bakedInput.js","sourceRoot":"","sources":["../../src/steps/bakedInput.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/condition.d.ts b/grafast/grafast/dist/steps/condition.d.ts new file mode 100644 index 0000000000..bb589a7046 --- /dev/null +++ b/grafast/grafast/dist/steps/condition.d.ts @@ -0,0 +1,31 @@ +import type { UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +declare const unaryOperators: readonly ["null", "not null", "exists", "not exists"]; +type UnaryOperator = (typeof unaryOperators)[number]; +declare const binaryOperators: readonly ["===", "!=="]; +type BinaryOperator = (typeof binaryOperators)[number]; +type Operator = UnaryOperator | BinaryOperator; +export declare class ConditionStep extends UnbatchedStep { + private op; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + constructor(op: Operator, step1: Step, step2?: Step); + toStringMeta(): string | null; + finalize(): void; + private makeUnbatchedExecute; + unbatchedExecute(_extra: UnbatchedExecutionExtra, _value1: any, _value2: any): boolean; +} +type $Boolean = Step; +declare function condition(op: "null", step: Step): $Boolean; +declare function condition(op: "not null", step: Step): $Boolean; +declare function condition(op: "exists", step: Step): $Boolean; +declare function condition(op: "not exists", step: Step): $Boolean; +declare function condition(op: "===", step1: Step, step2: Step): $Boolean; +declare function condition(op: "!==", step1: Step, step2: Step): $Boolean; +export { condition }; +//# sourceMappingURL=condition.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/condition.d.ts.map b/grafast/grafast/dist/steps/condition.d.ts.map new file mode 100644 index 0000000000..78101bc8d3 --- /dev/null +++ b/grafast/grafast/dist/steps/condition.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../src/steps/condition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,QAAA,MAAM,cAAc,uDAAwD,CAAC;AAC7E,KAAK,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,MAAM,eAAe,yBAA0B,CAAC;AAChD,KAAK,cAAc,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,KAAK,QAAQ,GAAG,aAAa,GAAG,cAAc,CAAC;AAE/C,qBAAa,aAAc,SAAQ,aAAa,CAAC,OAAO,CAAC;IAQrD,OAAO,CAAC,EAAE;IAPZ,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,0BAA0B,UAAQ;gBAExB,EAAE,EAAE,QAAQ,EACpB,KAAK,EAAE,IAAI,EACX,KAAK,CAAC,EAAE,IAAI;IA0BP,YAAY,IAAI,MAAM,GAAG,IAAI;IAUpC,QAAQ;IAIR,OAAO,CAAC,oBAAoB;IAqB5B,gBAAgB,CACd,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,GAAG,GACX,OAAO;CAGX;AA4BD,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,iBAAS,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC;AACrD,iBAAS,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC;AACzD,iBAAS,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC;AACvD,iBAAS,SAAS,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC;AAC3D,iBAAS,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC;AAClE,iBAAS,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC;AAKlE,OAAO,EAAE,SAAS,EAAE,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/condition.js b/grafast/grafast/dist/steps/condition.js new file mode 100644 index 0000000000..b6ec3b7233 --- /dev/null +++ b/grafast/grafast/dist/steps/condition.js @@ -0,0 +1,94 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ConditionStep = void 0; +exports.condition = condition; +const step_js_1 = require("../step.js"); +const unaryOperators = ["null", "not null", "exists", "not exists"]; +const binaryOperators = ["===", "!=="]; +class ConditionStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ConditionStep", + }; } + constructor(op, step1, step2) { + super(); + this.op = op; + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + if (!step2) { + // unary + if (!unaryOperators.includes(op)) { + throw new Error(`Unary operator '${op}' is not known; supported operators: ${unaryOperators.join(", ")}`); + } + this.addDependency(step1); + } + else { + // binary + if (!binaryOperators.includes(op)) { + throw new Error(`Unary operator '${op}' is not known; supported operators: ${binaryOperators.join(", ")}`); + } + this.addDependency(step1); + this.addDependency(step2); + } + } + toStringMeta() { + if (unaryOperators.includes(this.op)) { + return `${this.op}`; + } + else { + const $dep1 = this.getDepOptions(0).step; + const $dep2 = this.getDepOptions(1).step; + return `${$dep1.id} ${this.op} ${$dep2.id}`; + } + } + finalize() { + this.unbatchedExecute = this.makeUnbatchedExecute(); + super.finalize(); + } + makeUnbatchedExecute() { + switch (this.op) { + case "null": + return isNull; + case "not null": + return isNotNull; + case "exists": + return isNotNullish; + case "not exists": + return isNullish; + case "===": + return isEqual; + case "!==": + return isNotEqual; + default: { + const never = this.op; + throw new Error(`Operator ${never} is not supported`); + } + } + } + unbatchedExecute(_extra, _value1, _value2) { + throw new Error(`${this} was not finalized?`); + } +} +exports.ConditionStep = ConditionStep; +function isNull(_extra, value1) { + return value1 === null; +} +function isNotNull(_extra, value1) { + return value1 !== null; +} +function isNullish(_extra, value1) { + return value1 == null; +} +function isNotNullish(_extra, value1) { + return value1 != null; +} +function isEqual(_extra, value1, value2) { + return value1 === value2; +} +function isNotEqual(_extra, value1, value2) { + return value1 !== value2; +} +function condition(op, step1, step2) { + return new ConditionStep(op, step1, step2); +} +//# sourceMappingURL=condition.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/condition.js.map b/grafast/grafast/dist/steps/condition.js.map new file mode 100644 index 0000000000..28af03e497 --- /dev/null +++ b/grafast/grafast/dist/steps/condition.js.map @@ -0,0 +1 @@ +{"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/steps/condition.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/connection.d.ts b/grafast/grafast/dist/steps/connection.d.ts new file mode 100644 index 0000000000..014cc9ce04 --- /dev/null +++ b/grafast/grafast/dist/steps/connection.d.ts @@ -0,0 +1,147 @@ +import type { ExecutionDetails, GrafastResultsList, Maybe, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +type ParametersExceptFirst = F extends (arg0: any, ...rest: infer R) => any ? R : never[]; +/** + * Describes what a plan needs to implement in order to be suitable for + * supplying what the `PageInfo` type requires. + */ +export interface PageInfoCapableStep extends Step { + hasNextPage(): Step; + hasPreviousPage(): Step; + startCursor(): Step; + endCursor(): Step; +} +export declare function assertPageInfoCapableStep($step: Step | PageInfoCapableStep): asserts $step is PageInfoCapableStep; +/** + * Describes what a plan needs to implement in order to be suitable for + * supplying what a ConnectionStep requires. + */ +export interface ConnectionCapableStep extends Step { + /** + * Clone the plan; it's recommended that you add `$connection` as a + * dependency so that you can abort execution early in the case of errors + * (e.g. if the cursors cannot be parsed). + */ + connectionClone($connection: ConnectionStep, ...args: any[]): ConnectionCapableStep; + pageInfo($connection: ConnectionStep, any>): PageInfoCapableStep; + setFirst($first: Step>): void; + setLast($last: Step>): void; + setOffset($offset: Step>): void; + parseCursor($cursor: Step>): TCursorStep; + setBefore($before: TCursorStep): void; + setAfter($after: TCursorStep): void; + items(): Step ? U : any>>; +} +/** + * Handles GraphQL cursor pagination in a standard and consistent way + * indepdenent of data source. + */ +export declare class ConnectionStep, TEdgeDataStep extends Step = TItemStep, TNodeStep extends Step = Step> extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private subplanId; + private _firstDepId; + private _lastDepId; + private _offsetDepId; + private _beforeDepId; + private _afterDepId; + /** Plan for data to associate with the edge */ + readonly edgeDataPlan?: ($item: TItemStep) => TEdgeDataStep; + /** The node plan */ + readonly itemPlan?: ($item: TItemStep) => TNodeStep; + readonly cursorPlan?: ($item: TItemStep) => Step | undefined; + constructor(subplan: TStep, config?: ConnectionConfig); + toStringMeta(): string; + getFirst(): Step | null; + setFirst(first: Step | number): void; + getLast(): Step | null; + setLast(last: Step | number): void; + getOffset(): Step | null; + setOffset(offset: Step | number): void; + getBefore(): TCursorStep | null; + setBefore($beforePlan: Step): void; + getAfter(): TCursorStep | null; + setAfter($afterPlan: Step): void; + /** + * This should not be called after the arguments have been finalized. + */ + getSubplan(): TStep; + /** + * This represents the entire collection with conditions and ordering + * applied, but without any pagination constraints (before, after, first, + * last, offset) applied. It's useful for the following: + * + * - performing aggregates e.g. totalCount across the entire collection + * - determining fields for pageInfo, e.g. is there a next/previous page + * + * This cannot be called before the arguments have been finalized. + */ + cloneSubplanWithoutPagination(...args: ParametersExceptFirst): TStep; + /** + * This represents a single page from the collection - not only have + * conditions and ordering been applied but we've also applied the pagination + * constraints (before, after, first, last, offset). It's useful for + * returning the actual edges and nodes of the connection. + * + * This cannot be called before the arguments have been finalized. + */ + cloneSubplanWithPagination(...args: ParametersExceptFirst | []): TStep; + /** + * Subplans may call this from their `setBefore`/`setAfter`/etc plans in order + * to add a dependency to us, which is typically useful for adding validation + * functions so that they are thrown "earlier", avoiding error bubbling. + */ + addValidation(callback: () => Step): void; + get(fieldName: string): Step | undefined; + edges(): Step; + nodes(): import("./listTransform.js").__ListTransformStep | TStep; + wrapEdge($edge: TItemStep): EdgeStep; + pageInfo(): PageInfoCapableStep; + execute({ count, }: ExecutionDetails): GrafastResultsList>; + unbatchedExecute(): any; +} +export interface EdgeCapableStep extends Step { + node(): TNodeStep; + cursor(): Step; +} +export declare function assertEdgeCapableStep($step: Step | EdgeCapableStep): asserts $step is EdgeCapableStep; +export declare class EdgeStep, TEdgeDataStep extends Step = TItemStep, TNodeStep extends Step = Step> extends UnbatchedStep implements EdgeCapableStep { + private skipCursor; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private connectionDepId; + private readonly cursorDepId; + private needCursor; + constructor($connection: ConnectionStep, $item: TItemStep, skipCursor?: boolean); + get(fieldName: string): Step | TNodeStep | undefined; + private getConnectionStep; + private getItemStep; + data(): TEdgeDataStep; + node(): TNodeStep; + cursor(): Step; + optimize(): EdgeStep>; + deduplicate(_peers: EdgeStep[]): EdgeStep[]; + deduplicatedWith(replacement: EdgeStep): void; + unbatchedExecute(_extra: UnbatchedExecutionExtra, record: any, cursor: any): any; +} +interface ConnectionConfig { + nodePlan?: ($item: TItemStep) => TNodeStep; + edgeDataPlan?: ($item: TItemStep) => TEdgeDataStep; + cursorPlan?: ($item: TItemStep) => Step; +} +/** + * Wraps a collection fetch to provide the utilities for working with GraphQL + * cursor connections. + */ +export declare function connection, TEdgeDataStep extends Step = TItemStep, TNodeStep extends Step = Step>(step: TStep, config?: ConnectionConfig): ConnectionStep; +export type ItemsStep | ConnectionCapableStep> = T extends ConnectionCapableStep ? ReturnType : T; +export declare function itemsOrStep | ConnectionCapableStep>($step: T): Step; +export {}; +//# sourceMappingURL=connection.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/connection.d.ts.map b/grafast/grafast/dist/steps/connection.d.ts.map new file mode 100644 index 0000000000..6e1ee69253 --- /dev/null +++ b/grafast/grafast/dist/steps/connection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/steps/connection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,EACL,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C,KAAK,qBAAqB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAC1E,CAAC,GACD,KAAK,EAAE,CAAC;AAEZ;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,IAAI;IAC/C,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAClC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,GAAG,mBAAmB,GAChC,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAetC;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB,CACpC,SAAS,SAAS,IAAI,EACtB,WAAW,SAAS,IAAI,CACxB,SAAQ,IAAI;IACZ;;;;OAIG;IACH,eAAe,CACb,WAAW,EAAE,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC,EAC7D,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,QAAQ,CACN,WAAW,EAAE,cAAc,CACzB,SAAS,EACT,WAAW,EACX,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC7C,GAAG,CACJ,GACA,mBAAmB,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAE9C,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC;IACvD,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAEpC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;CACzE;AAID;;;GAGG;AACH,qBAAa,cAAc,CACzB,SAAS,SAAS,IAAI,EACtB,WAAW,SAAS,IAAI,EACxB,KAAK,SAAS,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,aAAa,SAAS,IAAI,GAAG,SAAS,EACtC,SAAS,SAAS,IAAI,GAAG,IAAI,CAC7B,SAAQ,aAAa,CAAC,OAAO,CAAC;IAC9B,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAwC;IAC5D,OAAO,CAAC,WAAW,CAAwC;IAK3D,+CAA+C;IAC/C,SAAgB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,aAAa,CAAC;IACnE,oBAAoB;IACpB,SAAgB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;IAC3D,SAAgB,UAAU,CAAC,EAAE,CAC3B,KAAK,EAAE,SAAS,KACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;gBAInC,OAAO,EAAE,KAAK,EACd,MAAM,GAAE,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,CAAM;IAgB7D,YAAY,IAAI,MAAM;IAItB,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI;IAGlD,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM;IAWxD,OAAO,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI;IAGjD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM;IAWtD,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI;IAGnD,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM;IAW1D,SAAS,IAAI,WAAW,GAAG,IAAI;IAG/B,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IActD,QAAQ,IAAI,WAAW,GAAG,IAAI;IAG9B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAe3D;;OAEG;IACI,UAAU,IAAI,KAAK;IAU1B;;;;;;;;;OASG;IACI,6BAA6B,CAClC,GAAG,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GACvD,KAAK;IAWR;;;;;;;OAOG;IACI,0BAA0B,CAE/B,GAAG,IAAI,EAAE,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,EAAE,GAC5D,KAAK;IAqCR;;;;OAIG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,IAAI;IAMlC,GAAG,CAAC,SAAS,EAAE,MAAM;IAWrB,KAAK,IAAI,IAAI;IAWb,KAAK;IAUL,QAAQ,CACb,KAAK,EAAE,SAAS,GACf,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC;IAI7D,QAAQ,IAAI,mBAAmB;IAc/B,OAAO,CAAC,EACb,KAAK,GACN,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAKxD,gBAAgB;CAGxB;AAED,MAAM,WAAW,eAAe,CAAC,SAAS,SAAS,IAAI,CAAE,SAAQ,IAAI;IACnE,IAAI,IAAI,SAAS,CAAC;IAClB,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,SAAS,SAAS,IAAI,EAC1D,KAAK,EAAE,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,GACvC,OAAO,CAAC,KAAK,IAAI,eAAe,CAAC,SAAS,CAAC,CAW7C;AAED,qBAAa,QAAQ,CACjB,SAAS,SAAS,IAAI,EACtB,WAAW,SAAS,IAAI,EACxB,KAAK,SAAS,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,aAAa,SAAS,IAAI,GAAG,SAAS,EACtC,SAAS,SAAS,IAAI,GAAG,IAAI,CAE/B,SAAQ,aACR,YAAW,eAAe,CAAC,SAAS,CAAC;IAqBnC,OAAO,CAAC,UAAU;IAnBpB,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,UAAU,CAAS;gBAGzB,WAAW,EAAE,cAAc,CACzB,SAAS,EACT,WAAW,EACX,KAAK,EACL,aAAa,EACb,SAAS,CACV,EACD,KAAK,EAAE,SAAS,EACR,UAAU,UAAQ;IA4BrB,GAAG,CAAC,SAAS,EAAE,MAAM;IAS5B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,WAAW;IAIZ,IAAI,IAAI,aAAa;IAK5B,IAAI,IAAI,SAAS;IAKjB,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAK7B,QAAQ;IAOR,WAAW,CACT,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GACrC,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE;IAIvD,gBAAgB,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAM1D,gBAAgB,CACd,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,GAAG,GACV,GAAG;CAMP;AAID,UAAU,gBAAgB,CACxB,SAAS,SAAS,IAAI,EACtB,aAAa,SAAS,IAAI,GAAG,SAAS,EACtC,SAAS,SAAS,IAAI,GAAG,IAAI;IAE7B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,SAAS,CAAC;IAC3C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,aAAa,CAAC;IACnD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACxD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,SAAS,SAAS,IAAI,EACtB,WAAW,SAAS,IAAI,EACxB,KAAK,SAAS,qBAAqB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,aAAa,SAAS,IAAI,GAAG,SAAS,EACtC,SAAS,SAAS,IAAI,GAAG,IAAI,EAE7B,IAAI,EAAE,KAAK,EACX,MAAM,CAAC,EAAE,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,CAAC,GAC7D,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAgBzE;AAED,MAAM,MAAM,SAAS,CACnB,CAAC,SAAS,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,IAC9D,CAAC,SAAS,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AAE3E,wBAAgB,WAAW,CACzB,CAAC,SAAS,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EAChE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAIhC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/connection.js b/grafast/grafast/dist/steps/connection.js new file mode 100644 index 0000000000..31f7d4b058 --- /dev/null +++ b/grafast/grafast/dist/steps/connection.js @@ -0,0 +1,368 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.EdgeStep = exports.ConnectionStep = void 0; +exports.assertPageInfoCapableStep = assertPageInfoCapableStep; +exports.assertEdgeCapableStep = assertEdgeCapableStep; +exports.connection = connection; +exports.itemsOrStep = itemsOrStep; +const tslib_1 = require("tslib"); +const assert = tslib_1.__importStar(require("../assert.js")); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +const constant_js_1 = require("./constant.js"); +const each_js_1 = require("./each.js"); +function assertPageInfoCapableStep($step) { + const $typed = $step; + if (typeof $typed.hasNextPage !== "function" || + typeof $typed.hasPreviousPage !== "function" || + typeof $typed.startCursor !== "function" || + typeof $typed.endCursor !== "function") { + throw new Error(`Expected a PageInfoCapableStep, but found '${$step}'`); + } +} +const EMPTY_OBJECT = Object.freeze(Object.create(null)); +/** + * Handles GraphQL cursor pagination in a standard and consistent way + * indepdenent of data source. + */ +class ConnectionStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ConnectionStep", + }; } + // TYPES: if subplan is `ConnectionCapableStep>` then `nodePlan`/`cursorPlan` aren't needed; otherwise `cursorPlan` is required. + constructor(subplan, config = {}) { + super(); + this.isSyncAndSafe = true; + // Pagination stuff + this._firstDepId = null; + this._lastDepId = null; + this._offsetDepId = null; + this._beforeDepId = undefined; + this._afterDepId = undefined; + const { edgeDataPlan, nodePlan, cursorPlan } = config; + this.edgeDataPlan = edgeDataPlan; + this.itemPlan = nodePlan; + this.cursorPlan = cursorPlan; + if (!cursorPlan) { + // ENHANCE: Assert that the `nodePlan` has a `.cursor()` method. + } + // This is a _soft_ reference to the plan; we're not adding it as a + // dependency since we do not actually need it to execute; it's our + // children that need access to it. + this.subplanId = subplan.id; + } + toStringMeta() { + return String(this.subplanId); + } + getFirst() { + return this.maybeGetDep(this._firstDepId); + } + setFirst(first) { + if (this._firstDepId != null) { + throw new Error(`${this}->setFirst already called`); + } + const $first = typeof first === "number" ? (0, constant_js_1.constant)(first) : first; + this._firstDepId = this.addUnaryDependency({ + step: $first, + nonUnaryMessage: () => `${this}.setFirst(...) must be passed a _unary_ step, but ${$first} is not unary. See: https://err.red/gud#connection`, + }); + } + getLast() { + return this.maybeGetDep(this._lastDepId); + } + setLast(last) { + if (this._lastDepId != null) { + throw new Error(`${this}->setLast already called`); + } + const $last = typeof last === "number" ? (0, constant_js_1.constant)(last) : last; + this._lastDepId = this.addUnaryDependency({ + step: $last, + nonUnaryMessage: () => `${this}.setLast(...) must be passed a _unary_ step, but ${$last} is not unary. See: https://err.red/gud#connection`, + }); + } + getOffset() { + return this.maybeGetDep(this._offsetDepId); + } + setOffset(offset) { + if (this._offsetDepId != null) { + throw new Error(`${this}->setOffset already called`); + } + const $offset = typeof offset === "number" ? (0, constant_js_1.constant)(offset) : offset; + this._offsetDepId = this.addUnaryDependency({ + step: $offset, + nonUnaryMessage: () => `${this}.setOffset(...) must be passed a _unary_ step, but ${$offset} is not unary. See: https://err.red/gud#connection`, + }); + } + getBefore() { + return this.maybeGetDep(this._beforeDepId, true); + } + setBefore($beforePlan) { + if ($beforePlan instanceof constant_js_1.ConstantStep && $beforePlan.data == null) { + return; + } + if (this._beforeDepId !== undefined) { + throw new Error(`${this}->setBefore already called`); + } + const $parsedBeforePlan = this.getSubplan().parseCursor($beforePlan); + this._beforeDepId = this.addUnaryDependency({ + step: $parsedBeforePlan, + nonUnaryMessage: () => `${this}.setBefore(...) must be passed a _unary_ step, but ${$parsedBeforePlan} (and presumably ${$beforePlan}) is not unary. See: https://err.red/gud#connection`, + }); + } + getAfter() { + return this.maybeGetDep(this._afterDepId, true); + } + setAfter($afterPlan) { + if ($afterPlan instanceof constant_js_1.ConstantStep && $afterPlan.data == null) { + return; + } + if (this._afterDepId !== undefined) { + throw new Error(`${this}->setAfter already called`); + } + const $parsedAfterPlan = this.getSubplan().parseCursor($afterPlan); + this._afterDepId = this.addUnaryDependency({ + step: $parsedAfterPlan, + nonUnaryMessage: () => `${this}.setAfter(...) must be passed a _unary_ step, but ${$parsedAfterPlan} (and presumably ${$afterPlan}) is not unary. See: https://err.red/gud#connection`, + }); + } + /** + * This should not be called after the arguments have been finalized. + */ + getSubplan() { + if (this.isArgumentsFinalized) { + throw new Error("Forbidden to call ConnectionStep.getSubplan after arguments finalize"); + } + const plan = this.getStep(this.subplanId); + return plan; + } + /** + * This represents the entire collection with conditions and ordering + * applied, but without any pagination constraints (before, after, first, + * last, offset) applied. It's useful for the following: + * + * - performing aggregates e.g. totalCount across the entire collection + * - determining fields for pageInfo, e.g. is there a next/previous page + * + * This cannot be called before the arguments have been finalized. + */ + cloneSubplanWithoutPagination(...args) { + if (!this.isArgumentsFinalized) { + throw new Error("Forbidden to call ConnectionStep.nodes before arguments finalize"); + } + const plan = this.getStep(this.subplanId); + const clonedPlan = plan.connectionClone(this, ...args); + return clonedPlan; + } + /** + * This represents a single page from the collection - not only have + * conditions and ordering been applied but we've also applied the pagination + * constraints (before, after, first, last, offset). It's useful for + * returning the actual edges and nodes of the connection. + * + * This cannot be called before the arguments have been finalized. + */ + cloneSubplanWithPagination( + // TYPES: ugh. The `|[]` shouldn't be needed. + ...args) { + const clonedPlan = this.cloneSubplanWithoutPagination(...args); + { + const plan = this.getBefore(); + if (plan !== null) { + clonedPlan.setBefore(plan); + } + } + { + const plan = this.getAfter(); + if (plan !== null) { + clonedPlan.setAfter(plan); + } + } + { + const plan = this.getFirst(); + if (plan !== null) { + clonedPlan.setFirst(plan); + } + } + { + const plan = this.getLast(); + if (plan !== null) { + clonedPlan.setLast(plan); + } + } + { + const plan = this.getOffset(); + if (plan !== null) { + clonedPlan.setOffset(plan); + } + } + return clonedPlan; + } + /** + * Subplans may call this from their `setBefore`/`setAfter`/etc plans in order + * to add a dependency to us, which is typically useful for adding validation + * functions so that they are thrown "earlier", avoiding error bubbling. + */ + addValidation(callback) { + this.withMyLayerPlan(() => { + this.addDependency(callback()); + }); + } + get(fieldName) { + switch (fieldName) { + case "edges": + return this.edges(); + case "nodes": + return this.nodes(); + case "pageInfo": + return this.pageInfo(); + } + } + edges() { + if (this.cursorPlan || this.itemPlan || this.edgeDataPlan) { + return (0, each_js_1.each)(this.cloneSubplanWithPagination(), ($intermediate) => this.wrapEdge($intermediate)); + } + else { + // Assuming the subplan is an EdgeCapableStep + return this.cloneSubplanWithPagination(); + } + } + nodes() { + if (this.itemPlan !== undefined) { + return (0, each_js_1.each)(this.cloneSubplanWithPagination(), ($intermediate) => this.itemPlan($intermediate)); + } + else { + return this.cloneSubplanWithPagination(); + } + } + wrapEdge($edge) { + return new EdgeStep(this, $edge); + } + pageInfo() { + return this.cloneSubplanWithPagination().pageInfo(this); + } + /* + + **IMPORTANT**: we cannot optimize this by replacing ourself with a constant + because otherwise errors in cursors/etc will be pushed down a level. + + public optimize() { + return constant(EMPTY_OBJECT, false); + } + */ + execute({ count, }) { + // Fake execution; data actually comes from the child plans + return (0, utils_js_1.arrayOfLength)(count, EMPTY_OBJECT); + } + unbatchedExecute() { + return EMPTY_OBJECT; + } +} +exports.ConnectionStep = ConnectionStep; +function assertEdgeCapableStep($step) { + const $typed = $step; + if (typeof $typed.node !== "function" || + typeof $typed.cursor !== "function") { + throw new Error(`Expected a EdgeCapableStep, but found '${$step}'`); + } +} +class EdgeStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "EdgeStep", + }; } + constructor($connection, $item, skipCursor = false) { + super(); + this.skipCursor = skipCursor; + this.isSyncAndSafe = true; + this.needCursor = false; + const itemDepId = this.addDependency($item); + assert.strictEqual(itemDepId, 0, "GrafastInternalError<89cc75cd-ccaf-4b7e-873f-a629c36d55f7>: item must be first dependency"); + if (!skipCursor) { + const $cursor = $connection.cursorPlan?.($item) ?? + $item.cursor?.(); + if (!$cursor) { + throw new Error(`No cursor plan known for '${$item}'`); + } + this.cursorDepId = this.addDependency($cursor); + assert.strictEqual(this.cursorDepId, 1, "GrafastInternalError<46e4b5ca-0c11-4737-973d-0edd0be060c9>: cursor must be second dependency"); + } + else { + this.cursorDepId = null; + } + this.connectionDepId = this.addDependency($connection); + } + get(fieldName) { + switch (fieldName) { + case "node": + return this.node(); + case "cursor": + return this.cursor(); + } + } + getConnectionStep() { + return this.getDep(this.connectionDepId); + } + getItemStep() { + return this.getDep(0); + } + data() { + const $item = this.getItemStep(); + return this.getConnectionStep().edgeDataPlan?.($item) ?? $item; + } + node() { + const $item = this.getItemStep(); + return this.getConnectionStep().itemPlan?.($item) ?? $item; + } + cursor() { + this.needCursor = true; + return this.getDep(this.cursorDepId); + } + optimize() { + if (!this.needCursor && this.cursorDepId !== null) { + return new EdgeStep(this.getConnectionStep(), this.getItemStep(), true); + } + return this; + } + deduplicate(_peers) { + return _peers; + } + deduplicatedWith(replacement) { + if (this.needCursor) { + replacement.needCursor = true; + } + } + unbatchedExecute(_extra, record, cursor) { + // Handle nulls; everything else comes from the child plans + return record == null && (this.cursorDepId == null || cursor == null) + ? null + : EMPTY_OBJECT; + } +} +exports.EdgeStep = EdgeStep; +let warned = false; +/** + * Wraps a collection fetch to provide the utilities for working with GraphQL + * cursor connections. + */ +function connection(step, config) { + if (typeof config === "function") { + if (!warned) { + warned = true; + console.warn(`The call signature for connection() has changed, arguments after the first argument should be specified via a config object`); + } + return connection(step, { + // eslint-disable-next-line prefer-rest-params + nodePlan: arguments[1], + // eslint-disable-next-line prefer-rest-params + cursorPlan: arguments[2], + }); + } + return new ConnectionStep(step, config); +} +function itemsOrStep($step) { + return "items" in $step && typeof $step.items === "function" + ? $step.items() + : $step; +} +//# sourceMappingURL=connection.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/connection.js.map b/grafast/grafast/dist/steps/connection.js.map new file mode 100644 index 0000000000..6480eed3a5 --- /dev/null +++ b/grafast/grafast/dist/steps/connection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/steps/connection.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/constant.d.ts b/grafast/grafast/dist/steps/constant.d.ts new file mode 100644 index 0000000000..b8e217e5ec --- /dev/null +++ b/grafast/grafast/dist/steps/constant.d.ts @@ -0,0 +1,31 @@ +import type { ExecutionDetails, GrafastResultsList, JSONValue } from "../interfaces.js"; +import { UnbatchedStep } from "../step.js"; +/** + * Converts a constant value (e.g. a string/number/etc) into a plan + */ +export declare class ConstantStep extends UnbatchedStep { + readonly data: TData; + readonly isSensitive: boolean; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + constructor(data: TData, isSensitive?: boolean); + toStringMeta(): string; + planJSONExtra(): undefined | Record; + deduplicate(peers: readonly ConstantStep[]): ConstantStep[]; + execute({ count }: ExecutionDetails): GrafastResultsList; + unbatchedExecute(): TData; + isNull(): boolean; + isUndefined(): boolean; + get(key: string): ConstantStep; + at(index: number): ConstantStep; +} +/** + * Call this as a template string or as a function. Only intended for handling + * scalar values, not arrays/objects/etc. + */ +export declare function constant(strings: TemplateStringsArray & [TString]): ConstantStep; +export declare function constant(data: TData, isSecret?: boolean): ConstantStep; +//# sourceMappingURL=constant.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/constant.d.ts.map b/grafast/grafast/dist/steps/constant.d.ts.map new file mode 100644 index 0000000000..d260c86eb2 --- /dev/null +++ b/grafast/grafast/dist/steps/constant.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constant.d.ts","sourceRoot":"","sources":["../../src/steps/constant.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAIjD;;GAEG;AACH,qBAAa,YAAY,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;aAQzC,IAAI,EAAE,KAAK;aACX,WAAW;IAR7B,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;gBAGH,IAAI,EAAE,KAAK,EACX,WAAW,UAA4C;IAazE,YAAY;IAaL,aAAa,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAuB7D,WAAW,CAAC,KAAK,EAAE,SAAS,YAAY,CAAC,GAAG,CAAC,EAAE;IAI/C,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,KAAK,CAAC;IAwC/D,gBAAgB;IAIhB,MAAM;IAGN,WAAW;IAIX,GAAG,CAAC,GAAG,EAAE,MAAM;IAUf,EAAE,CAAC,KAAK,EAAE,MAAM;CAIjB;AAUD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,OAAO,SAAS,MAAM,EACnD,OAAO,EAAE,oBAAoB,GAAG,CAAC,OAAO,CAAC,GACxC,YAAY,CAAC,OAAO,CAAC,CAAC;AACzB,wBAAgB,QAAQ,CAAC,KAAK,EAC5B,IAAI,EAAE,KAAK,EACX,QAAQ,CAAC,EAAE,OAAO,GACjB,YAAY,CAAC,KAAK,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/constant.js b/grafast/grafast/dist/steps/constant.js new file mode 100644 index 0000000000..42d8e7cd7b --- /dev/null +++ b/grafast/grafast/dist/steps/constant.js @@ -0,0 +1,151 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ConstantStep = void 0; +exports.constant = constant; +const inspect_js_1 = require("../inspect.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +const index_js_1 = require("./index.js"); +/** + * Converts a constant value (e.g. a string/number/etc) into a plan + */ +class ConstantStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ConstantStep", + }; } + constructor(data, isSensitive = typeof data !== "boolean" && data != null) { + super(); + this.data = data; + this.isSensitive = isSensitive; + this.isSyncAndSafe = true; + const t = typeof data; + if (data == null || + t === "boolean" || + t === "number" || + (t === "string" && t.length < 200)) { + this.peerKey = t + "|" + String(data); + } + } + toStringMeta() { + // ENHANCE: use nicer simplification + return this.isSensitive + ? `[HIDDEN]` + : (0, inspect_js_1.inspect)(this.data, { + compact: Infinity, + breakLength: Infinity, + }) + .replace(/[\r\n]/g, " ") + .replaceAll("[Object: null prototype] ", "§") + .slice(0, 60); + } + planJSONExtra() { + if (this.isSensitive) + return; + const data = this.data; + if (data === null) { + return { + constant: { + type: "null", + }, + }; + } + else if (data === undefined || + typeof data === "boolean" || + typeof data === "number" || + typeof data === "string") { + return { + constant: { + type: typeof data, + }, + }; + } + } + deduplicate(peers) { + return peers.filter((p) => p.data === this.data); + } + execute({ count }) { + return (0, utils_js_1.arrayOfLength)(count, this.data); + } + /** @internal */ + eval() { + return this.data; + } + /** @internal */ + evalIs(value) { + return this.data === value; + } + /** @internal */ + evalIsEmpty() { + return (typeof this.data === "object" && + this.data !== null && + Object.keys(this.data).length === 0); + } + /** @internal */ + evalLength() { + return Array.isArray(this.data) ? this.data.length : null; + } + /** @internal */ + evalKeys() { + if (this.data == null || typeof this.data !== "object") { + return null; + } + else { + const data = this.data; + return Object.keys(data).filter((k) => data[k] !== undefined); + } + } + unbatchedExecute() { + return this.data; + } + isNull() { + return this.data === null; + } + isUndefined() { + return this.data === undefined; + } + get(key) { + const value = typeof this.data === "object" && + this.data !== null && + Object.hasOwn(this.data, key) + ? this.data[key] + : undefined; + return constant(value); + } + at(index) { + const value = Array.isArray(this.data) ? this.data[index] : undefined; + return constant(value); + } +} +exports.ConstantStep = ConstantStep; +function isTemplateStringsArray(data) { + return (Array.isArray(data) && + "raw" in data && + Array.isArray(data.raw)); +} +function constant(data, isSecret) { + if (isTemplateStringsArray(data)) { + if (data.length !== 1) { + throw new Error("constant`...` doesn't currently support placeholders; please use 'constant(`...`)' instead"); + } + return constant(data[0], false); + } + const opPlan = (0, index_js_1.operationPlan)(); + const makeConst = () => (0, index_js_1.operationPlan)().withRootLayerPlan(() => new ConstantStep(data, isSecret)); + const t = typeof data; + if (data == null || + t === "boolean" || + t === "string" || + t === "number" || + t === "symbol") { + return opPlan.cacheStep(opPlan.contextStep, isSecret ? `constant-secret` : `constant`, data, makeConst); + } + else { + return makeConst(); + } +} +// Have to overwrite the getDepOrConstant method due to circular dependency +step_js_1.Step.prototype.getDepOrConstant = function (depId, fallback) { + return this.maybeGetDep(depId) ?? constant(fallback, false); +}; +//# sourceMappingURL=constant.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/constant.js.map b/grafast/grafast/dist/steps/constant.js.map new file mode 100644 index 0000000000..2985691da1 --- /dev/null +++ b/grafast/grafast/dist/steps/constant.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constant.js","sourceRoot":"","sources":["../../src/steps/constant.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/each.d.ts b/grafast/grafast/dist/steps/each.d.ts new file mode 100644 index 0000000000..ae4ae01f88 --- /dev/null +++ b/grafast/grafast/dist/steps/each.d.ts @@ -0,0 +1,9 @@ +import type { ListCapableStep, Step } from "../step.js"; +import { __ItemStep } from "./__item.js"; +import type { ConnectionCapableStep, ItemsStep } from "./connection.js"; +import type { __ListTransformStep } from "./listTransform.js"; +/** + * Transforms a list by wrapping each element in the list with the given mapper. + */ +export declare function each & Partial>) | ConnectionCapableStep, TResultItemStep extends Step>(listStep: TListStep, mapper: (itemPlan: ItemsStep extends ListCapableStep ? ReturnType["listItem"]> : __ItemStep) => TResultItemStep): __ListTransformStep; +//# sourceMappingURL=each.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/each.d.ts.map b/grafast/grafast/dist/steps/each.d.ts.map new file mode 100644 index 0000000000..01ae4046f8 --- /dev/null +++ b/grafast/grafast/dist/steps/each.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"each.d.ts","sourceRoot":"","sources":["../../src/steps/each.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EACV,qBAAqB,EAErB,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AA6B9D;;GAEG;AACH,wBAAgB,IAAI,CAClB,SAAS,SACL,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GACjE,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EACnC,eAAe,SAAS,IAAI,EAE5B,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,CACN,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,GAC5D,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,GAC5C,UAAU,CAAC,GAAG,CAAC,KAChB,eAAe,GACnB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CA2CzC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/each.js b/grafast/grafast/dist/steps/each.js new file mode 100644 index 0000000000..433a5a0afd --- /dev/null +++ b/grafast/grafast/dist/steps/each.js @@ -0,0 +1,63 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.each = each; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const step_js_1 = require("../step.js"); +const __item_js_1 = require("./__item.js"); +const listTransform_js_1 = require("./listTransform.js"); +const eachReduceCallback = (memo, item) => { + memo.push(item); + return memo; +}; +const eachItemPlanCallback = (itemPlan) => itemPlan; +const eachInitialState = () => []; +const outerCache = new WeakMap(); +const eachCallbackForListPlan = (listPlan, mapper) => { + let innerCache = outerCache.get(listPlan); + if (!innerCache) { + innerCache = new WeakMap(); + outerCache.set(listPlan, innerCache); + } + let result = innerCache.get(mapper); + if (!result) { + result = (itemPlan) => mapper(listPlan.listItem(itemPlan)); + innerCache.set(mapper, result); + } + return result; +}; +/** + * Transforms a list by wrapping each element in the list with the given mapper. + */ +function each(listStep, mapper) { + return (0, listTransform_js_1.listTransform)({ + listStep, + itemPlanCallback: eachItemPlanCallback, + initialState: eachInitialState, + reduceCallback: eachReduceCallback, + listItem: (0, step_js_1.isListCapableStep)(listStep) + ? eachCallbackForListPlan(listStep, mapper) + : mapper, + meta: `each:${chalk_1.default.yellow(listStep.id)}${mapper.name ? `/${mapper.name}` : ""}`, + optimize() { + const layerPlan = this.subroutineLayer; + const rootStep = layerPlan.rootStep; + if (rootStep instanceof __item_js_1.__ItemStep && + rootStep.getParentStep().layerPlan !== layerPlan) { + // We don't do anything; replace ourself with our parent + return this.getListStep(); + } + return this; + }, + ...(listStep.connectionClone != null + ? { + connectionClone($connection, ...args) { + const $list = this.getListStep(); + const $clonedList = $list.connectionClone($connection, ...args); + return each($clonedList, mapper); + }, + } + : null), + }); +} +//# sourceMappingURL=each.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/each.js.map b/grafast/grafast/dist/steps/each.js.map new file mode 100644 index 0000000000..2b88840e35 --- /dev/null +++ b/grafast/grafast/dist/steps/each.js.map @@ -0,0 +1 @@ +{"version":3,"file":"each.js","sourceRoot":"","sources":["../../src/steps/each.ts"],"names":[],"mappings":";;AA0CA,oBAuDC;;AAjGD,0DAA0B;AAG1B,wCAA+C;AAC/C,2CAAyC;AAOzC,yDAAmD;AAEnD,MAAM,kBAAkB,GAAG,CAAC,IAAW,EAAE,IAAS,EAAE,EAAE;IACpD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AACF,MAAM,oBAAoB,GAAG,CAAC,QAAc,EAAE,EAAE,CAAC,QAAQ,CAAC;AAC1D,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,EAAS,CAAC;AAEzC,MAAM,UAAU,GAAG,IAAI,OAAO,EAA0B,CAAC;AACzD,MAAM,uBAAuB,GAAG,CAC9B,QAA8B,EAC9B,MAAW,EACN,EAAE;IACP,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,IAAI,OAAO,EAAE,CAAC;QAC3B,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,CAAC,QAAa,EAAE,EAAE,CACzB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAe,CAAQ,CAAC,CAAC;QACpD,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;GAEG;AACH,SAAgB,IAAI,CAMlB,QAAmB,EACnB,MAIoB;IAEpB,OAAO,IAAA,gCAAa,EAAqB;QACvC,QAAQ;QACR,gBAAgB,EAAE,oBAAoB;QACtC,YAAY,EAAE,gBAAgB;QAC9B,cAAc,EAAE,kBAAkB;QAClC,QAAQ,EAAE,IAAA,2BAAiB,EAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC3C,CAAC,CAAC,MAAM;QACV,IAAI,EAAE,QAAQ,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EACpC,EAAE;QACF,QAAQ;YACN,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;YACvC,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;YACpC,IACE,QAAQ,YAAY,sBAAU;gBAC9B,QAAQ,CAAC,aAAa,EAAE,CAAC,SAAS,KAAK,SAAS,EAChD,CAAC;gBACD,wDAAwD;gBACxD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI;YAClC,CAAC,CAAC;gBACE,eAAe,CAEb,WAA+C,EAC/C,GAAG,IAAW;oBAEd,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EACG,CAAC;oBAClC,MAAM,WAAW,GAAG,KAAK,CAAC,eAAe,CACvC,WAAW,EACX,GAAG,IAAI,CACuC,CAAC;oBACjD,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CACE,CAAC;gBACpC,CAAC;aACF;YACH,CAAC,CAAC,IAAI,CAAC;KACV,CAAC,CAAC;AACL,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/error.d.ts b/grafast/grafast/dist/steps/error.d.ts new file mode 100644 index 0000000000..d1283b439f --- /dev/null +++ b/grafast/grafast/dist/steps/error.d.ts @@ -0,0 +1,15 @@ +import type { ExecutionDetails, GrafastResultsList } from "../interfaces.js"; +import { UnbatchedStep } from "../step.js"; +export declare class ErrorStep extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + error: TError; + constructor(error: TError); + execute({ count }: ExecutionDetails): GrafastResultsList; + unbatchedExecute(): any; +} +export declare function error(error: TError): ErrorStep; +//# sourceMappingURL=error.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/error.d.ts.map b/grafast/grafast/dist/steps/error.d.ts.map new file mode 100644 index 0000000000..bf1842f8bd --- /dev/null +++ b/grafast/grafast/dist/steps/error.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/steps/error.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,qBAAa,SAAS,CAAC,MAAM,SAAS,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IACvE,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAS;IACtB,KAAK,EAAE,MAAM,CAAC;gBACF,KAAK,EAAE,MAAM;IAQzB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC;IAG7D,gBAAgB,IAAI,GAAG;CAGxB;AAED,wBAAgB,KAAK,CAAC,MAAM,SAAS,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAE5E"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/error.js b/grafast/grafast/dist/steps/error.js new file mode 100644 index 0000000000..e491420eed --- /dev/null +++ b/grafast/grafast/dist/steps/error.js @@ -0,0 +1,33 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ErrorStep = void 0; +exports.error = error; +const error_js_1 = require("../error.js"); +const inspect_js_1 = require("../inspect.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +class ErrorStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ErrorStep", + }; } + constructor(error) { + super(); + this.isSyncAndSafe = false; + if (!(error instanceof Error)) { + throw new Error(`${this} called with non-Error ${(0, inspect_js_1.inspect)(error)}`); + } + this.error = error; + } + execute({ count }) { + return (0, utils_js_1.arrayOfLength)(count, (0, error_js_1.flagError)(this.error)); + } + unbatchedExecute() { + return (0, error_js_1.flagError)(this.error); + } +} +exports.ErrorStep = ErrorStep; +function error(error) { + return new ErrorStep(error); +} +//# sourceMappingURL=error.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/error.js.map b/grafast/grafast/dist/steps/error.js.map new file mode 100644 index 0000000000..16e9e60619 --- /dev/null +++ b/grafast/grafast/dist/steps/error.js.map @@ -0,0 +1 @@ +{"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/steps/error.ts"],"names":[],"mappings":";;;AA6BA,sBAEC;AA/BD,0CAAwC;AACxC,8CAAwC;AAExC,wCAA2C;AAC3C,0CAA4C;AAE5C,MAAa,SAAgC,SAAQ,uBAAoB;aAChE,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,WAAW;KACxB,AAHc,CAGb;IAGF,YAAY,KAAa;QACvB,KAAK,EAAE,CAAC;QAHV,kBAAa,GAAG,KAAK,CAAC;QAIpB,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,IAAA,oBAAO,EAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,OAAO,CAAC,EAAE,KAAK,EAAoB;QACjC,OAAO,IAAA,wBAAa,EAAC,KAAK,EAAE,IAAA,oBAAS,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,gBAAgB;QACd,OAAO,IAAA,oBAAS,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;;AApBH,8BAqBC;AAED,SAAgB,KAAK,CAAuB,KAAa;IACvD,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/filter.d.ts b/grafast/grafast/dist/steps/filter.d.ts new file mode 100644 index 0000000000..f4f378cdce --- /dev/null +++ b/grafast/grafast/dist/steps/filter.d.ts @@ -0,0 +1,11 @@ +import type { ListCapableStep, Step } from "../step.js"; +import type { __ItemStep } from "./__item.js"; +import type { ConnectionCapableStep, ItemsStep } from "./connection.js"; +import type { __ListTransformStep, ListTransformItemPlanCallback } from "./listTransform.js"; +export type FilterPlanMemo = unknown[]; +/** + * Filters a list plan to only include entries for which the `filterCallback` + * plan results in a truthy value. + */ +export declare function filter | ConnectionCapableStep, TItemStep extends Step>(listStep: TListStep, filterCallback: ListTransformItemPlanCallback, TItemStep>): __ListTransformStep ? ReturnType : __ItemStep>; +//# sourceMappingURL=filter.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/filter.d.ts.map b/grafast/grafast/dist/steps/filter.d.ts.map new file mode 100644 index 0000000000..8054139068 --- /dev/null +++ b/grafast/grafast/dist/steps/filter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/steps/filter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,KAAK,EACV,mBAAmB,EACnB,6BAA6B,EAE9B,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,cAAc,GAAG,OAAO,EAAE,CAAC;AAevC;;;GAGG;AACH,wBAAgB,MAAM,CACpB,SAAS,SAAS,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EACxE,SAAS,SAAS,IAAI,CAAC,OAAO,CAAC,EAE/B,QAAQ,EAAE,SAAS,EACnB,cAAc,EAAE,6BAA6B,CAC3C,SAAS,CAAC,SAAS,CAAC,EACpB,SAAS,CACV,GACA,mBAAmB,CACpB,SAAS,EACT,SAAS,EACT,cAAc,EACd,SAAS,SAAS,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,GACvC,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GACjC,UAAU,CAAC,GAAG,CAAC,CACpB,CAaA"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/filter.js b/grafast/grafast/dist/steps/filter.js new file mode 100644 index 0000000000..fc29c557eb --- /dev/null +++ b/grafast/grafast/dist/steps/filter.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.filter = filter; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const step_js_1 = require("../step.js"); +const listTransform_js_1 = require("./listTransform.js"); +const reduceCallback = (memo, entireItemValue, include) => { + if (include) { + memo.push(entireItemValue); + } + return memo; +}; +const initialState = () => []; +/** + * Filters a list plan to only include entries for which the `filterCallback` + * plan results in a truthy value. + */ +function filter(listStep, filterCallback) { + return (0, listTransform_js_1.listTransform)({ + listStep, + itemPlanCallback: filterCallback, + initialState, + reduceCallback: reduceCallback, + listItem: (0, step_js_1.isListCapableStep)(listStep) + ? (itemPlan) => listStep.listItem(itemPlan) + : undefined, + meta: `filter:${chalk_1.default.yellow(listStep.id)}${filterCallback.name ? `/${filterCallback.name}` : ""}`, + }); +} +//# sourceMappingURL=filter.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/filter.js.map b/grafast/grafast/dist/steps/filter.js.map new file mode 100644 index 0000000000..5263c76b6f --- /dev/null +++ b/grafast/grafast/dist/steps/filter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/steps/filter.ts"],"names":[],"mappings":";;AAgCA,wBA6BC;;AA7DD,0DAA0B;AAG1B,wCAA+C;AAQ/C,yDAAmD;AAInD,MAAM,cAAc,GAAiD,CACnE,IAAI,EACJ,eAAe,EACf,OAAO,EACP,EAAE;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,GAAmB,EAAE,CAAC,EAAE,CAAC;AAE9C;;;GAGG;AACH,SAAgB,MAAM,CAIpB,QAAmB,EACnB,cAGC;IASD,OAAO,IAAA,gCAAa,EAA4C;QAC9D,QAAQ;QACR,gBAAgB,EAAE,cAAc;QAChC,YAAY;QACZ,cAAc,EAAE,cAAc;QAC9B,QAAQ,EAAE,IAAA,2BAAiB,EAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAe,CAAC;YAClD,CAAC,CAAC,SAAS;QACb,IAAI,EAAE,UAAU,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GACvC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EACpD,EAAE;KACH,CAAC,CAAC;AACL,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/first.d.ts b/grafast/grafast/dist/steps/first.d.ts new file mode 100644 index 0000000000..ff44eeb9ee --- /dev/null +++ b/grafast/grafast/dist/steps/first.d.ts @@ -0,0 +1,23 @@ +import type { ExecutionDetails, GrafastResultsList, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +import type { ConnectionCapableStep } from "./connection.js"; +export declare class FirstStep extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + constructor(parentPlan: Step> | ConnectionCapableStep, any>); + execute({ indexMap, values: [values0], }: ExecutionDetails<[ReadonlyArray]>): GrafastResultsList; + unbatchedExecute(_extra: UnbatchedExecutionExtra, list: any[]): any; + deduplicate(peers: FirstStep[]): FirstStep[]; + optimize(): any; +} +/** + * A plan that resolves to the first entry in the list returned by the given + * plan. + */ +export declare function first(plan: Step> | ConnectionCapableStep, any>): FirstStep; +//# sourceMappingURL=first.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/first.d.ts.map b/grafast/grafast/dist/steps/first.d.ts.map new file mode 100644 index 0000000000..9ad379c9b1 --- /dev/null +++ b/grafast/grafast/dist/steps/first.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"first.d.ts","sourceRoot":"","sources":["../../src/steps/first.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAI7D,qBAAa,SAAS,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IACxD,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,0BAA0B,UAAQ;gBAGhC,UAAU,EACN,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAC1B,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAM7C,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,OAAO,CAAC,GAClB,EAAE,gBAAgB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;IAIvE,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,IAAI,EAAE,GAAG,EAAE;IAI7D,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE;IAI1D,QAAQ;CAQT;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,KAAK,EACzB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GACzE,SAAS,CAAC,KAAK,CAAC,CAOlB"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/first.js b/grafast/grafast/dist/steps/first.js new file mode 100644 index 0000000000..c36d10f5e6 --- /dev/null +++ b/grafast/grafast/dist/steps/first.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FirstStep = void 0; +exports.first = first; +const step_js_1 = require("../step.js"); +const connection_js_1 = require("./connection.js"); +const list_js_1 = require("./list.js"); +class FirstStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "FirstStep", + }; } + constructor(parentPlan) { + super(); + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.addDependency((0, connection_js_1.itemsOrStep)(parentPlan)); + } + execute({ indexMap, values: [values0], }) { + return indexMap((i) => values0.at(i)?.[0]); + } + unbatchedExecute(_extra, list) { + return list?.[0]; + } + deduplicate(peers) { + return peers; + } + optimize() { + const parent = this.getDep(0); + // The first of a list plan is just the first dependency of the list plan. + if (parent instanceof list_js_1.ListStep) { + return parent.first(); + } + return this; + } +} +exports.FirstStep = FirstStep; +/** + * A plan that resolves to the first entry in the list returned by the given + * plan. + */ +function first(plan) { + return plan.operationPlan.cacheStep(plan, "GrafastInternal:first()", "", () => new FirstStep(plan)); +} +//# sourceMappingURL=first.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/first.js.map b/grafast/grafast/dist/steps/first.js.map new file mode 100644 index 0000000000..6f59cdc39f --- /dev/null +++ b/grafast/grafast/dist/steps/first.js.map @@ -0,0 +1 @@ +{"version":3,"file":"first.js","sourceRoot":"","sources":["../../src/steps/first.ts"],"names":[],"mappings":";;;AAyDA,sBASC;AA5DD,wCAA2C;AAE3C,mDAA8C;AAC9C,uCAAqC;AAErC,MAAa,SAAiB,SAAQ,uBAAoB;aACjD,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,WAAW;KACxB,AAHc,CAGb;IAIF,YACE,UAE2C;QAE3C,KAAK,EAAE,CAAC;QARV,kBAAa,GAAG,IAAI,CAAC;QACrB,+BAA0B,GAAG,IAAI,CAAC;QAQhC,IAAI,CAAC,aAAa,CAAC,IAAA,2BAAW,EAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,OAAO,CAAC,GACwB;QACzC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB,CAAC,MAA+B,EAAE,IAAW;QAC3D,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,KAAyB;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,0EAA0E;QAC1E,IAAI,MAAM,YAAY,kBAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AAvCH,8BAwCC;AAED;;;GAGG;AACH,SAAgB,KAAK,CACnB,IAA0E;IAE1E,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CACjC,IAAI,EACJ,yBAAyB,EACzB,EAAE,EACF,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAC1B,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/graphqlResolver.d.ts b/grafast/grafast/dist/steps/graphqlResolver.d.ts new file mode 100644 index 0000000000..6f81e5861a --- /dev/null +++ b/grafast/grafast/dist/steps/graphqlResolver.d.ts @@ -0,0 +1,4 @@ +import type { GraphQLNullableType, GraphQLOutputType } from "graphql"; +import { Step } from "../step.js"; +export declare function graphqlItemHandler($item: Step, nullableType: GraphQLNullableType & GraphQLOutputType): GraphQLItemHandler; +//# sourceMappingURL=graphqlResolver.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/graphqlResolver.d.ts.map b/grafast/grafast/dist/steps/graphqlResolver.d.ts.map new file mode 100644 index 0000000000..8d1bab6e25 --- /dev/null +++ b/grafast/grafast/dist/steps/graphqlResolver.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"graphqlResolver.d.ts","sourceRoot":"","sources":["../../src/steps/graphqlResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,SAAS,CAAC;AAajB,OAAO,EAAE,IAAI,EAAiB,MAAM,YAAY,CAAC;AA8UjD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EACX,YAAY,EAAE,mBAAmB,GAAG,iBAAiB,sBAGtD"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/graphqlResolver.js b/grafast/grafast/dist/steps/graphqlResolver.js new file mode 100644 index 0000000000..46f00c93e5 --- /dev/null +++ b/grafast/grafast/dist/steps/graphqlResolver.js @@ -0,0 +1,277 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GraphQLItemHandler = exports.GraphQLResolverStep = void 0; +exports.graphqlItemHandler = graphqlItemHandler; +exports.graphqlResolver = graphqlResolver; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const iterall_1 = require("iterall"); +const index_js_1 = require("../index.js"); +const polymorphic_js_1 = require("../polymorphic.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +const { defaultTypeResolver, getNamedType, getNullableType, isAbstractType, isListType, isNonNullType, } = graphql; +function dcr(data, // but not a promise +context, resolveInfo) { + if (data == null) { + return data; + } + else if (data instanceof Error) { + return (0, index_js_1.flagError)(data); + } + else if ((0, utils_js_1.isPromiseLike)(data)) { + return data.then((data) => dcr(data, context, resolveInfo)); + } + if ((0, iterall_1.isIterable)(data)) { + const list = Array.isArray(data) ? data : [...data]; + if (list.some(utils_js_1.isPromiseLike)) { + const resolved = Promise.all(list.map((entry) => (0, utils_js_1.isPromiseLike)(entry) ? entry.then(null, index_js_1.flagError) : entry)); + // TODO: this does recursion which is inefficient and also incorrect. We + // should only traverse as deep as the GraphQL type has lists. + return dcr(resolved, context, resolveInfo); + } + } + // TODO: support async iterables + return { data, context, resolveInfo }; +} +/** + * Calls the given GraphQL resolver for each input - emulates GraphQL + * resolution. + * + * @internal + */ +class GraphQLResolverStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "GraphQLResolverStep", + }; } + constructor(resolver, subscriber, $plan, $args, resolveInfoBase, returnContextAndResolveInfo = false) { + super(); + this.resolver = resolver; + this.subscriber = subscriber; + this.resolveInfoBase = resolveInfoBase; + this.returnContextAndResolveInfo = returnContextAndResolveInfo; + this.isSyncAndSafe = false; + this.allowMultipleOptimizations = false; + this.planDep = this.addDependency($plan); + this.argsDep = this.addDependency($args); + this.contextDep = this.addDependency((0, index_js_1.context)()); + this.variableValuesDep = this.addDependency(this.operationPlan.variableValuesStep); + this.rootValueDep = this.addDependency(this.operationPlan.rootValueStep); + this.isNotRoot = ![ + this.operationPlan.queryType, + this.operationPlan.mutationType, + this.operationPlan.subscriptionType, + ].includes(resolveInfoBase.parentType); + } + toStringMeta() { + return (this.resolver?.displayName || + this.resolver?.name || + this.subscriber?.displayName || + this.subscriber?.name || + null); + } + unbatchedExecute(extra, source, args, context, variableValues, rootValue) { + if (!extra.stream) { + if (this.isNotRoot && source == null) { + return source; + } + const resolveInfo = Object.assign(Object.create(this.resolveInfoBase), { + variableValues, + rootValue, + path: { + typename: this.resolveInfoBase.parentType.name, + key: this.resolveInfoBase.fieldName, + // ENHANCE: add full support for path (requires runtime indexes) + prev: undefined, + }, + }); + const data = this.resolver?.(source, args, context, resolveInfo); + if (this.returnContextAndResolveInfo) { + return dcr(data, context, resolveInfo); + } + else { + return flagErrorIfErrorAsync(data); + } + } + else { + if (this.isNotRoot) { + return Promise.reject(new Error(`Invalid non-root subscribe`)); + } + if (this.subscriber == null) { + return Promise.reject(new Error(`Cannot subscribe to field`)); + } + if (this.returnContextAndResolveInfo) { + return Promise.reject(new Error(`Subscription with returnContextAndResolveInfo is not supported`)); + } + const resolveInfo = Object.assign(Object.create(this.resolveInfoBase), { + // ENHANCE: add support for path + variableValues, + rootValue, + }); + // TODO: we also need to call the resolver on each result? + const data = this.subscriber(source, args, context, resolveInfo); + // TODO: should apply flagErrorIfError to each value data yields + return flagErrorIfErrorAsync(data); + } + } +} +exports.GraphQLResolverStep = GraphQLResolverStep; +/** @internal */ +class GraphQLItemHandler extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "GraphQLItemHandler", + }; } + constructor($parent, nullableType) { + super(); + this.nullableInnerType = null; + this.isSyncAndSafe = false; + this.addDependency($parent); + if (isListType(nullableType)) { + const innerType = nullableType.ofType; + if (isNonNullType(innerType)) { + this.nullableInnerType = innerType.ofType; + } + else { + this.nullableInnerType = innerType; + } + } + else { + if (!isAbstractType(nullableType)) { + throw new Error(`GrafastInternalError<0a293e88-0f38-43f6-9179-f3ef9a720872>: Expected nullableType to be a list or abstract type, instead found ${nullableType}`); + } + this.abstractType = nullableType; + } + } + planForType() { + return this; + } + listItem($item) { + if (!this.nullableInnerType) { + throw new Error(`GrafastInternalError<83f3533a-db8e-4eb9-9251-2a165ae6147b>: did not expect ${this}.listItem() to be called since it wasn't handling a list type`); + } + return graphqlItemHandler($item, this.nullableInnerType); + } + /** + * Akin to graphql-js' completeAbstractValue... but just the typeName + * resolution part. + */ + figureOutTheTypeOf(data, context, resolveInfo) { + const abstractType = this.abstractType; + if (!abstractType) { + throw new Error("GrafastInternalError<5ea0892a-e9f6-479c-9b0b-2b09e46eecb6>: No abstract type? How can this be?"); + } + if (abstractType.resolveType != null) { + return abstractType.resolveType(data, context, resolveInfo, abstractType); + } + else { + return defaultTypeResolver(data, context, resolveInfo, abstractType); + } + } + actuallyWrapData(typeName, data) { + if (typeName !== undefined) { + return (0, polymorphic_js_1.polymorphicWrap)(typeName, data); + } + else { + return new Error("Could not determine type of data"); + } + } + polymorphicWrapData(data, // but not a promise + context, resolveInfo) { + if (data == null) { + return null; + } + const typeName = this.figureOutTheTypeOf(data, context, resolveInfo); + if ((0, utils_js_1.isPromiseLike)(typeName)) { + return typeName.then((name) => this.actuallyWrapData(name, data)); + } + else { + return this.actuallyWrapData(typeName, data); + } + } + wrapListData(data, context, resolveInfo) { + if (data == null) { + return null; + } + if (!Array.isArray(data)) { + console.warn(`${this}: data wasn't an array, so we're returning null`); + return null; + } + return data.map((data) => dcr(data, context, resolveInfo)); + } + execute({ indexMap, values: [values0], }) { + if (this.abstractType !== undefined) { + return indexMap((i) => { + const data = values0.at(i); + if (data == null) { + return data; + } + else if ((0, utils_js_1.isPromiseLike)(data.data)) { + return data.data.then((resolvedData) => this.polymorphicWrapData(resolvedData, data.context, data.resolveInfo)); + } + else { + return this.polymorphicWrapData(data.data, data.context, data.resolveInfo); + } + }); + } + else if (this.nullableInnerType != null) { + return indexMap((i) => { + const d = values0.at(i); + if (d == null) { + return null; + } + else { + const { data, context, resolveInfo } = d; + if ((0, utils_js_1.isPromiseLike)(data)) { + return data.then((data) => this.wrapListData(data, context, resolveInfo)); + } + else { + return this.wrapListData(data, context, resolveInfo); + } + } + }); + } + else { + throw new Error(`GrafastInternalError<6a3ed701-6b53-41e6-9a64-fbea57c76ae7>: has to be abstract or list`); + } + } +} +exports.GraphQLItemHandler = GraphQLItemHandler; +function graphqlItemHandler($item, nullableType) { + return new GraphQLItemHandler($item, nullableType); +} +/** + * Emulates what GraphQL does when calling a resolver, including handling of + * polymorphism. + * + * @internal + */ +function graphqlResolver(resolver, subscriber, $step, $args, resolveInfoBase) { + const { returnType } = resolveInfoBase; + const namedType = getNamedType(returnType); + const isAbstract = isAbstractType(namedType); + const $resolverResult = new GraphQLResolverStep(resolver, subscriber, $step, $args, resolveInfoBase, isAbstract); + if (isAbstract) { + if (subscriber != null) { + throw new index_js_1.SafeError(`GraphQL subscribe function emulation currently doesn't support polymorphism`); + } + const nullableType = getNullableType(returnType); + return graphqlItemHandler($resolverResult, nullableType); + } + else { + return $resolverResult; + } +} +function flagErrorIfError(data) { + return data instanceof Error ? (0, index_js_1.flagError)(data) : data; +} +function flagErrorIfErrorAsync(data) { + if ((0, utils_js_1.isPromiseLike)(data)) { + return data.then(flagErrorIfError); + } + else { + return flagErrorIfError(data); + } +} +//# sourceMappingURL=graphqlResolver.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/graphqlResolver.js.map b/grafast/grafast/dist/steps/graphqlResolver.js.map new file mode 100644 index 0000000000..a1f5cb96d4 --- /dev/null +++ b/grafast/grafast/dist/steps/graphqlResolver.js.map @@ -0,0 +1 @@ +{"version":3,"file":"graphqlResolver.js","sourceRoot":"","sources":["../../src/steps/graphqlResolver.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/groupBy.d.ts b/grafast/grafast/dist/steps/groupBy.d.ts new file mode 100644 index 0000000000..004aed5fc6 --- /dev/null +++ b/grafast/grafast/dist/steps/groupBy.d.ts @@ -0,0 +1,12 @@ +import type { Step } from "../step.js"; +import type { ConnectionCapableStep, ItemsStep } from "./connection.js"; +import type { __ListTransformStep, ListTransformItemPlanCallback } from "./listTransform.js"; +export type GroupByPlanMemo = Map; +/** + * Takes a single dimensional list plan and a mapper that returns a grouping + * key. Returns a plan that results in a Map where the keys are the grouping + * keys and the values are lists of the original entries that match these + * grouping keys. + */ +export declare function groupBy | ConnectionCapableStep, TItemStep extends Step>(listStep: TListStep, mapper: ListTransformItemPlanCallback, TItemStep>): __ListTransformStep; +//# sourceMappingURL=groupBy.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/groupBy.d.ts.map b/grafast/grafast/dist/steps/groupBy.d.ts.map new file mode 100644 index 0000000000..2bb129e4d6 --- /dev/null +++ b/grafast/grafast/dist/steps/groupBy.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"groupBy.d.ts","sourceRoot":"","sources":["../../src/steps/groupBy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,KAAK,EACV,mBAAmB,EACnB,6BAA6B,EAE9B,MAAM,oBAAoB,CAAC;AAG5B,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAkBtD;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,SAAS,SAAS,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EACxE,SAAS,SAAS,IAAI,CAAC,MAAM,CAAC,EAE9B,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,6BAA6B,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,GACrE,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,CAAC,CAiBjE"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/groupBy.js b/grafast/grafast/dist/steps/groupBy.js new file mode 100644 index 0000000000..32a6f99cc3 --- /dev/null +++ b/grafast/grafast/dist/steps/groupBy.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.groupBy = groupBy; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const step_js_1 = require("../step.js"); +const each_js_1 = require("./each.js"); +const listTransform_js_1 = require("./listTransform.js"); +const reduceCallback = (memo, entireItemValue, idx) => { + let list = memo.get(idx); + if (!list) { + list = []; + memo.set(idx, list); + } + list.push(entireItemValue); + return memo; +}; +const initialState = () => new Map(); +/** + * Takes a single dimensional list plan and a mapper that returns a grouping + * key. Returns a plan that results in a Map where the keys are the grouping + * keys and the values are lists of the original entries that match these + * grouping keys. + */ +function groupBy(listStep, mapper) { + return (0, listTransform_js_1.listTransform)({ + listStep, + itemPlanCallback: mapper, + initialState, + reduceCallback: reduceCallback, + listItem: (0, step_js_1.isListCapableStep)(listStep) + ? (itemPlan) => { + return (0, each_js_1.each)(itemPlan, ($item) => listStep.listItem($item)); + } + : undefined, + meta: `groupBy:${chalk_1.default.yellow(listStep.id)}${mapper.name ? `/${mapper.name}` : ""}`, + }); +} +//# sourceMappingURL=groupBy.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/groupBy.js.map b/grafast/grafast/dist/steps/groupBy.js.map new file mode 100644 index 0000000000..6d504e6707 --- /dev/null +++ b/grafast/grafast/dist/steps/groupBy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"groupBy.js","sourceRoot":"","sources":["../../src/steps/groupBy.ts"],"names":[],"mappings":";;AAsCA,0BAuBC;;AA7DD,0DAA0B;AAG1B,wCAA+C;AAG/C,uCAAiC;AAMjC,yDAAmD;AAInD,MAAM,cAAc,GAA8C,CAChE,IAAI,EACJ,eAAe,EACf,GAAG,EACH,EAAE;IACF,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,EAAE,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,GAAoB,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;AAEtD;;;;;GAKG;AACH,SAAgB,OAAO,CAIrB,QAAmB,EACnB,MAAsE;IAEtE,OAAO,IAAA,gCAAa,EAA6C;QAC/D,QAAQ;QACR,gBAAgB,EAAE,MAAM;QACxB,YAAY;QACZ,cAAc,EAAE,cAAc;QAC9B,QAAQ,EAAE,IAAA,2BAAiB,EAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACX,OAAO,IAAA,cAAI,EAAC,QAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CACrC,QAAQ,CAAC,QAAQ,CAAC,KAAY,CAAC,CAChC,CAAC;YACJ,CAAC;YACH,CAAC,CAAC,SAAS;QACb,IAAI,EAAE,WAAW,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GACxC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EACpC,EAAE;KACH,CAAC,CAAC;AACL,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/index.d.ts b/grafast/grafast/dist/steps/index.d.ts new file mode 100644 index 0000000000..5a870a66f5 --- /dev/null +++ b/grafast/grafast/dist/steps/index.d.ts @@ -0,0 +1,48 @@ +import type { __TrackedValueStep, OperationPlan } from "../index.js"; +import type { __ValueStep } from "./__value.js"; +export declare function operationPlan(): OperationPlan; +export declare function context(): __ValueStep; +export declare function rootValue(): __ValueStep>; +export declare function trackedContext(): __TrackedValueStep; +export declare function trackedRootValue(): __TrackedValueStep>; +/** + * Turns on debug mode, calls the callback, and then turns debug mode back off + * again. + */ +export declare function debugPlans(callback: () => T): T; +export { __FlagStep, assertNotNull, inhibitOnNull, trap, TRAP_ERROR, TRAP_ERROR_OR_INHIBITED, TRAP_INHIBITED, } from "./__flag.js"; +export { access, AccessStep } from "./access.js"; +export { assertEdgeCapableStep, assertPageInfoCapableStep, connection, ConnectionCapableStep, ConnectionStep, EdgeCapableStep, EdgeStep, PageInfoCapableStep, } from "./connection.js"; +export { constant, ConstantStep } from "./constant.js"; +export { each } from "./each.js"; +export { error, ErrorStep } from "./error.js"; +export { filter, FilterPlanMemo } from "./filter.js"; +export { first, FirstStep } from "./first.js"; +export { groupBy, GroupByPlanMemo } from "./groupBy.js"; +export { lambda, LambdaStep } from "./lambda.js"; +export { last, LastStep } from "./last.js"; +export { list, ListStep } from "./list.js"; +export { listen, ListenStep } from "./listen.js"; +export { __ListTransformStep, listTransform, ListTransformItemPlanCallback, ListTransformOptions, ListTransformReduce, } from "./listTransform.js"; +export { makeDecodeNodeId, makeDecodeNodeIdRuntime, node, nodeIdFromNode, NodeStep, specFromNodeId, } from "./node.js"; +export { object, ObjectPlanMeta, ObjectStep } from "./object.js"; +export { partitionByIndex } from "./partitionByIndex.js"; +export { ActualKeyByDesiredKey, remapKeys, RemapKeysStep, } from "./remapKeys.js"; +export { reverse, reverseArray, ReverseStep } from "./reverse.js"; +export { createObjectAndApplyChildren, Setter, setter, SetterCapable, } from "./setter.js"; +export { sideEffect, SideEffectStep } from "./sideEffect.js"; +export { __InputListStep } from "./__inputList.js"; +export { __InputObjectStep, __InputObjectStepWithDollars, } from "./__inputObject.js"; +export { __InputStaticLeafStep } from "./__inputStaticLeaf.js"; +export { __ItemStep } from "./__item.js"; +export { __TrackedValueStep, __TrackedValueStepWithDollars, } from "./__trackedValue.js"; +export { __ValueStep } from "./__value.js"; +export { applyInput, ApplyInputStep, assertModifier, isModifier, Modifier, } from "./applyInput.js"; +export { applyTransforms, ApplyTransformsStep } from "./applyTransforms.js"; +export { bakedInput, bakedInputRuntime, BakedInputStep } from "./bakedInput.js"; +export { condition, ConditionStep } from "./condition.js"; +export { GraphQLItemHandler, graphqlItemHandler, graphqlResolver, GraphQLResolverStep, } from "./graphqlResolver.js"; +export { LoadedRecordStep, loadMany, LoadManyCallback, loadManyCallback, loadOne, LoadOneCallback, loadOneCallback, LoadOptions, LoadStep, } from "./load.js"; +export { polymorphicBranch, PolymorphicBranchMatcher, PolymorphicBranchMatchers, PolymorphicBranchStep, } from "./polymorphicBranch.js"; +export { proxy, ProxyStep } from "./proxy.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/index.d.ts.map b/grafast/grafast/dist/steps/index.d.ts.map new file mode 100644 index 0000000000..7f54bfc300 --- /dev/null +++ b/grafast/grafast/dist/steps/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/index.js b/grafast/grafast/dist/steps/index.js new file mode 100644 index 0000000000..d36582673e --- /dev/null +++ b/grafast/grafast/dist/steps/index.js @@ -0,0 +1,159 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.setter = exports.Setter = exports.createObjectAndApplyChildren = exports.ReverseStep = exports.reverseArray = exports.reverse = exports.RemapKeysStep = exports.remapKeys = exports.partitionByIndex = exports.ObjectStep = exports.object = exports.specFromNodeId = exports.NodeStep = exports.nodeIdFromNode = exports.node = exports.makeDecodeNodeIdRuntime = exports.makeDecodeNodeId = exports.listTransform = exports.__ListTransformStep = exports.ListenStep = exports.listen = exports.ListStep = exports.list = exports.LastStep = exports.last = exports.LambdaStep = exports.lambda = exports.groupBy = exports.FirstStep = exports.first = exports.filter = exports.ErrorStep = exports.error = exports.each = exports.ConstantStep = exports.constant = exports.EdgeStep = exports.ConnectionStep = exports.connection = exports.assertPageInfoCapableStep = exports.assertEdgeCapableStep = exports.AccessStep = exports.access = exports.TRAP_INHIBITED = exports.TRAP_ERROR_OR_INHIBITED = exports.TRAP_ERROR = exports.trap = exports.inhibitOnNull = exports.assertNotNull = exports.__FlagStep = void 0; +exports.ProxyStep = exports.proxy = exports.PolymorphicBranchStep = exports.polymorphicBranch = exports.LoadStep = exports.loadOneCallback = exports.loadOne = exports.loadManyCallback = exports.loadMany = exports.LoadedRecordStep = exports.GraphQLResolverStep = exports.graphqlResolver = exports.graphqlItemHandler = exports.GraphQLItemHandler = exports.ConditionStep = exports.condition = exports.BakedInputStep = exports.bakedInputRuntime = exports.bakedInput = exports.ApplyTransformsStep = exports.applyTransforms = exports.Modifier = exports.isModifier = exports.assertModifier = exports.ApplyInputStep = exports.applyInput = exports.__ValueStep = exports.__TrackedValueStep = exports.__ItemStep = exports.__InputStaticLeafStep = exports.__InputObjectStep = exports.__InputListStep = exports.SideEffectStep = exports.sideEffect = void 0; +exports.operationPlan = operationPlan; +exports.context = context; +exports.rootValue = rootValue; +exports.trackedContext = trackedContext; +exports.trackedRootValue = trackedRootValue; +exports.debugPlans = debugPlans; +const withGlobalLayerPlan_js_1 = require("../engine/lib/withGlobalLayerPlan.js"); +const global_js_1 = require("../global.js"); +function operationPlan() { + return (0, withGlobalLayerPlan_js_1.currentLayerPlan)().operationPlan; +} +function context() { + return operationPlan().contextStep; +} +function rootValue() { + return operationPlan().rootValueStep; +} +function trackedContext() { + return operationPlan().trackedContextStep; +} +function trackedRootValue() { + return operationPlan().trackedRootValueStep; +} +/** + * Turns on debug mode, calls the callback, and then turns debug mode back off + * again. + */ +function debugPlans(callback) { + const oldDebug = (0, global_js_1.getDebug)(); + (0, global_js_1.setDebug)(true); + const result = callback(); + (0, global_js_1.setDebug)(oldDebug); + return result; +} +var __flag_js_1 = require("./__flag.js"); +Object.defineProperty(exports, "__FlagStep", { enumerable: true, get: function () { return __flag_js_1.__FlagStep; } }); +Object.defineProperty(exports, "assertNotNull", { enumerable: true, get: function () { return __flag_js_1.assertNotNull; } }); +Object.defineProperty(exports, "inhibitOnNull", { enumerable: true, get: function () { return __flag_js_1.inhibitOnNull; } }); +Object.defineProperty(exports, "trap", { enumerable: true, get: function () { return __flag_js_1.trap; } }); +Object.defineProperty(exports, "TRAP_ERROR", { enumerable: true, get: function () { return __flag_js_1.TRAP_ERROR; } }); +Object.defineProperty(exports, "TRAP_ERROR_OR_INHIBITED", { enumerable: true, get: function () { return __flag_js_1.TRAP_ERROR_OR_INHIBITED; } }); +Object.defineProperty(exports, "TRAP_INHIBITED", { enumerable: true, get: function () { return __flag_js_1.TRAP_INHIBITED; } }); +var access_js_1 = require("./access.js"); +Object.defineProperty(exports, "access", { enumerable: true, get: function () { return access_js_1.access; } }); +Object.defineProperty(exports, "AccessStep", { enumerable: true, get: function () { return access_js_1.AccessStep; } }); +var connection_js_1 = require("./connection.js"); +Object.defineProperty(exports, "assertEdgeCapableStep", { enumerable: true, get: function () { return connection_js_1.assertEdgeCapableStep; } }); +Object.defineProperty(exports, "assertPageInfoCapableStep", { enumerable: true, get: function () { return connection_js_1.assertPageInfoCapableStep; } }); +Object.defineProperty(exports, "connection", { enumerable: true, get: function () { return connection_js_1.connection; } }); +Object.defineProperty(exports, "ConnectionStep", { enumerable: true, get: function () { return connection_js_1.ConnectionStep; } }); +Object.defineProperty(exports, "EdgeStep", { enumerable: true, get: function () { return connection_js_1.EdgeStep; } }); +var constant_js_1 = require("./constant.js"); +Object.defineProperty(exports, "constant", { enumerable: true, get: function () { return constant_js_1.constant; } }); +Object.defineProperty(exports, "ConstantStep", { enumerable: true, get: function () { return constant_js_1.ConstantStep; } }); +var each_js_1 = require("./each.js"); +Object.defineProperty(exports, "each", { enumerable: true, get: function () { return each_js_1.each; } }); +var error_js_1 = require("./error.js"); +Object.defineProperty(exports, "error", { enumerable: true, get: function () { return error_js_1.error; } }); +Object.defineProperty(exports, "ErrorStep", { enumerable: true, get: function () { return error_js_1.ErrorStep; } }); +var filter_js_1 = require("./filter.js"); +Object.defineProperty(exports, "filter", { enumerable: true, get: function () { return filter_js_1.filter; } }); +var first_js_1 = require("./first.js"); +Object.defineProperty(exports, "first", { enumerable: true, get: function () { return first_js_1.first; } }); +Object.defineProperty(exports, "FirstStep", { enumerable: true, get: function () { return first_js_1.FirstStep; } }); +var groupBy_js_1 = require("./groupBy.js"); +Object.defineProperty(exports, "groupBy", { enumerable: true, get: function () { return groupBy_js_1.groupBy; } }); +var lambda_js_1 = require("./lambda.js"); +Object.defineProperty(exports, "lambda", { enumerable: true, get: function () { return lambda_js_1.lambda; } }); +Object.defineProperty(exports, "LambdaStep", { enumerable: true, get: function () { return lambda_js_1.LambdaStep; } }); +var last_js_1 = require("./last.js"); +Object.defineProperty(exports, "last", { enumerable: true, get: function () { return last_js_1.last; } }); +Object.defineProperty(exports, "LastStep", { enumerable: true, get: function () { return last_js_1.LastStep; } }); +var list_js_1 = require("./list.js"); +Object.defineProperty(exports, "list", { enumerable: true, get: function () { return list_js_1.list; } }); +Object.defineProperty(exports, "ListStep", { enumerable: true, get: function () { return list_js_1.ListStep; } }); +var listen_js_1 = require("./listen.js"); +Object.defineProperty(exports, "listen", { enumerable: true, get: function () { return listen_js_1.listen; } }); +Object.defineProperty(exports, "ListenStep", { enumerable: true, get: function () { return listen_js_1.ListenStep; } }); +var listTransform_js_1 = require("./listTransform.js"); +Object.defineProperty(exports, "__ListTransformStep", { enumerable: true, get: function () { return listTransform_js_1.__ListTransformStep; } }); +Object.defineProperty(exports, "listTransform", { enumerable: true, get: function () { return listTransform_js_1.listTransform; } }); +var node_js_1 = require("./node.js"); +Object.defineProperty(exports, "makeDecodeNodeId", { enumerable: true, get: function () { return node_js_1.makeDecodeNodeId; } }); +Object.defineProperty(exports, "makeDecodeNodeIdRuntime", { enumerable: true, get: function () { return node_js_1.makeDecodeNodeIdRuntime; } }); +Object.defineProperty(exports, "node", { enumerable: true, get: function () { return node_js_1.node; } }); +Object.defineProperty(exports, "nodeIdFromNode", { enumerable: true, get: function () { return node_js_1.nodeIdFromNode; } }); +Object.defineProperty(exports, "NodeStep", { enumerable: true, get: function () { return node_js_1.NodeStep; } }); +Object.defineProperty(exports, "specFromNodeId", { enumerable: true, get: function () { return node_js_1.specFromNodeId; } }); +var object_js_1 = require("./object.js"); +Object.defineProperty(exports, "object", { enumerable: true, get: function () { return object_js_1.object; } }); +Object.defineProperty(exports, "ObjectStep", { enumerable: true, get: function () { return object_js_1.ObjectStep; } }); +var partitionByIndex_js_1 = require("./partitionByIndex.js"); +Object.defineProperty(exports, "partitionByIndex", { enumerable: true, get: function () { return partitionByIndex_js_1.partitionByIndex; } }); +var remapKeys_js_1 = require("./remapKeys.js"); +Object.defineProperty(exports, "remapKeys", { enumerable: true, get: function () { return remapKeys_js_1.remapKeys; } }); +Object.defineProperty(exports, "RemapKeysStep", { enumerable: true, get: function () { return remapKeys_js_1.RemapKeysStep; } }); +var reverse_js_1 = require("./reverse.js"); +Object.defineProperty(exports, "reverse", { enumerable: true, get: function () { return reverse_js_1.reverse; } }); +Object.defineProperty(exports, "reverseArray", { enumerable: true, get: function () { return reverse_js_1.reverseArray; } }); +Object.defineProperty(exports, "ReverseStep", { enumerable: true, get: function () { return reverse_js_1.ReverseStep; } }); +var setter_js_1 = require("./setter.js"); +Object.defineProperty(exports, "createObjectAndApplyChildren", { enumerable: true, get: function () { return setter_js_1.createObjectAndApplyChildren; } }); +Object.defineProperty(exports, "Setter", { enumerable: true, get: function () { return setter_js_1.Setter; } }); +Object.defineProperty(exports, "setter", { enumerable: true, get: function () { return setter_js_1.setter; } }); +var sideEffect_js_1 = require("./sideEffect.js"); +Object.defineProperty(exports, "sideEffect", { enumerable: true, get: function () { return sideEffect_js_1.sideEffect; } }); +Object.defineProperty(exports, "SideEffectStep", { enumerable: true, get: function () { return sideEffect_js_1.SideEffectStep; } }); +// Internal plans +var __inputList_js_1 = require("./__inputList.js"); +Object.defineProperty(exports, "__InputListStep", { enumerable: true, get: function () { return __inputList_js_1.__InputListStep; } }); +var __inputObject_js_1 = require("./__inputObject.js"); +Object.defineProperty(exports, "__InputObjectStep", { enumerable: true, get: function () { return __inputObject_js_1.__InputObjectStep; } }); +var __inputStaticLeaf_js_1 = require("./__inputStaticLeaf.js"); +Object.defineProperty(exports, "__InputStaticLeafStep", { enumerable: true, get: function () { return __inputStaticLeaf_js_1.__InputStaticLeafStep; } }); +var __item_js_1 = require("./__item.js"); +Object.defineProperty(exports, "__ItemStep", { enumerable: true, get: function () { return __item_js_1.__ItemStep; } }); +var __trackedValue_js_1 = require("./__trackedValue.js"); +Object.defineProperty(exports, "__TrackedValueStep", { enumerable: true, get: function () { return __trackedValue_js_1.__TrackedValueStep; } }); +var __value_js_1 = require("./__value.js"); +Object.defineProperty(exports, "__ValueStep", { enumerable: true, get: function () { return __value_js_1.__ValueStep; } }); +var applyInput_js_1 = require("./applyInput.js"); +Object.defineProperty(exports, "applyInput", { enumerable: true, get: function () { return applyInput_js_1.applyInput; } }); +Object.defineProperty(exports, "ApplyInputStep", { enumerable: true, get: function () { return applyInput_js_1.ApplyInputStep; } }); +Object.defineProperty(exports, "assertModifier", { enumerable: true, get: function () { return applyInput_js_1.assertModifier; } }); +Object.defineProperty(exports, "isModifier", { enumerable: true, get: function () { return applyInput_js_1.isModifier; } }); +Object.defineProperty(exports, "Modifier", { enumerable: true, get: function () { return applyInput_js_1.Modifier; } }); +var applyTransforms_js_1 = require("./applyTransforms.js"); +Object.defineProperty(exports, "applyTransforms", { enumerable: true, get: function () { return applyTransforms_js_1.applyTransforms; } }); +Object.defineProperty(exports, "ApplyTransformsStep", { enumerable: true, get: function () { return applyTransforms_js_1.ApplyTransformsStep; } }); +var bakedInput_js_1 = require("./bakedInput.js"); +Object.defineProperty(exports, "bakedInput", { enumerable: true, get: function () { return bakedInput_js_1.bakedInput; } }); +Object.defineProperty(exports, "bakedInputRuntime", { enumerable: true, get: function () { return bakedInput_js_1.bakedInputRuntime; } }); +Object.defineProperty(exports, "BakedInputStep", { enumerable: true, get: function () { return bakedInput_js_1.BakedInputStep; } }); +var condition_js_1 = require("./condition.js"); +Object.defineProperty(exports, "condition", { enumerable: true, get: function () { return condition_js_1.condition; } }); +Object.defineProperty(exports, "ConditionStep", { enumerable: true, get: function () { return condition_js_1.ConditionStep; } }); +var graphqlResolver_js_1 = require("./graphqlResolver.js"); +Object.defineProperty(exports, "GraphQLItemHandler", { enumerable: true, get: function () { return graphqlResolver_js_1.GraphQLItemHandler; } }); +Object.defineProperty(exports, "graphqlItemHandler", { enumerable: true, get: function () { return graphqlResolver_js_1.graphqlItemHandler; } }); +Object.defineProperty(exports, "graphqlResolver", { enumerable: true, get: function () { return graphqlResolver_js_1.graphqlResolver; } }); +Object.defineProperty(exports, "GraphQLResolverStep", { enumerable: true, get: function () { return graphqlResolver_js_1.GraphQLResolverStep; } }); +var load_js_1 = require("./load.js"); +Object.defineProperty(exports, "LoadedRecordStep", { enumerable: true, get: function () { return load_js_1.LoadedRecordStep; } }); +Object.defineProperty(exports, "loadMany", { enumerable: true, get: function () { return load_js_1.loadMany; } }); +Object.defineProperty(exports, "loadManyCallback", { enumerable: true, get: function () { return load_js_1.loadManyCallback; } }); +Object.defineProperty(exports, "loadOne", { enumerable: true, get: function () { return load_js_1.loadOne; } }); +Object.defineProperty(exports, "loadOneCallback", { enumerable: true, get: function () { return load_js_1.loadOneCallback; } }); +Object.defineProperty(exports, "LoadStep", { enumerable: true, get: function () { return load_js_1.LoadStep; } }); +var polymorphicBranch_js_1 = require("./polymorphicBranch.js"); +Object.defineProperty(exports, "polymorphicBranch", { enumerable: true, get: function () { return polymorphicBranch_js_1.polymorphicBranch; } }); +Object.defineProperty(exports, "PolymorphicBranchStep", { enumerable: true, get: function () { return polymorphicBranch_js_1.PolymorphicBranchStep; } }); +var proxy_js_1 = require("./proxy.js"); +Object.defineProperty(exports, "proxy", { enumerable: true, get: function () { return proxy_js_1.proxy; } }); +Object.defineProperty(exports, "ProxyStep", { enumerable: true, get: function () { return proxy_js_1.ProxyStep; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/index.js.map b/grafast/grafast/dist/steps/index.js.map new file mode 100644 index 0000000000..e9e5464711 --- /dev/null +++ b/grafast/grafast/dist/steps/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/steps/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/lambda.d.ts b/grafast/grafast/dist/steps/lambda.d.ts new file mode 100644 index 0000000000..8a24f0e1cf --- /dev/null +++ b/grafast/grafast/dist/steps/lambda.d.ts @@ -0,0 +1,29 @@ +import type { PromiseOrDirect, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Multistep, UnwrapMultistep } from "../multistep.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +/** + * Calls the given lambda function for each tuple + */ +export declare class LambdaStep extends UnbatchedStep { + private fn; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + private depId; + constructor($plan: Step | null | undefined, fn: (value: TIn) => PromiseOrDirect); + toStringMeta(): any; + deduplicate(peers: LambdaStep[]): LambdaStep[]; + unbatchedExecute(_extra: UnbatchedExecutionExtra, value: TIn): PromiseOrDirect; +} +/** + * A plan that takes the input `$plan` and feeds each value through the `fn` + * callback. Note: if you need to pass more than one value, pass a `ListStep` + * as the `$plan` argument. + */ +declare function lambda(spec: TInMultistep, fn: (value: UnwrapMultistep) => PromiseOrDirect, isSyncAndSafe?: boolean): LambdaStep, TOut>; +export { lambda }; +//# sourceMappingURL=lambda.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/lambda.d.ts.map b/grafast/grafast/dist/steps/lambda.d.ts.map new file mode 100644 index 0000000000..a5191732d8 --- /dev/null +++ b/grafast/grafast/dist/steps/lambda.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"lambda.d.ts","sourceRoot":"","sources":["../../src/steps/lambda.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C;;GAEG;AACH,qBAAa,UAAU,CAAC,GAAG,EAAE,IAAI,CAAE,SAAQ,aAAa,CAAC,IAAI,CAAC;IAY1D,OAAO,CAAC,EAAE;IAXZ,MAAM,CAAC,QAAQ;;;MAGb;IAEF,aAAa,UAAS;IACtB,0BAA0B,UAAQ;IAElC,OAAO,CAAC,KAAK,CAAgB;gBAE3B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3B,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,eAAe,CAAC,IAAI,CAAC;IAgBnD,YAAY;IAIZ,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;IAInE,gBAAgB,CACd,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,GAAG,GACT,eAAe,CAAC,IAAI,CAAC;CAGzB;AAED;;;;GAIG;AACH,iBAAS,MAAM,CAAC,KAAK,CAAC,YAAY,SAAS,SAAS,EAAE,IAAI,EACxD,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC,KAAK,eAAe,CAAC,IAAI,CAAC,EACnE,aAAa,UAAQ,GACpB,UAAU,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAuBjD;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/lambda.js b/grafast/grafast/dist/steps/lambda.js new file mode 100644 index 0000000000..e810bf1b9d --- /dev/null +++ b/grafast/grafast/dist/steps/lambda.js @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LambdaStep = void 0; +exports.lambda = lambda; +const multistep_js_1 = require("../multistep.js"); +const step_js_1 = require("../step.js"); +const sideEffect_js_1 = require("./sideEffect.js"); +/** + * Calls the given lambda function for each tuple + */ +class LambdaStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "LambdaStep", + }; } + constructor($plan, fn) { + super(); + this.fn = fn; + // Lambda is only sync and safe if the callback is; so default to false + this.isSyncAndSafe = false; + this.allowMultipleOptimizations = true; + this.depId = $plan != null ? this.addDependency($plan) : null; + if (fn.hasSideEffects) { + this.hasSideEffects = true; + } + else if (fn.isSyncAndSafe) { + if (fn.constructor.name === "AsyncFunction") { + throw new Error(`${this}'s callback claims to be syncAndSafe, however it is asynchronous`); + } + this.isSyncAndSafe = true; + } + } + toStringMeta() { + return this.fn.displayName || this.fn.name; + } + deduplicate(peers) { + return peers.filter((peer) => peer.fn === this.fn); + } + unbatchedExecute(_extra, value) { + return this.fn(value); + } +} +exports.LambdaStep = LambdaStep; +/** + * A plan that takes the input `$plan` and feeds each value through the `fn` + * callback. Note: if you need to pass more than one value, pass a `ListStep` + * as the `$plan` argument. + */ +function lambda(spec, fn, isSyncAndSafe = false) { + if (fn.length > 1) { + throw new Error("lambda callback should accept one argument, perhaps you forgot to destructure the arguments?"); + } + const $in = (0, multistep_js_1.multistep)(spec); + const $lambda = new LambdaStep($in, fn); + if (fn.hasSideEffects) { + console.trace(`You passed a function with \`hasSideEffects = true\` to \`lambda()\`, you should use \`sideEffect()\` instead (it has the same signature). We've automatically corrected this, but you should fix it in your code so the types are correct.`); + return (0, sideEffect_js_1.sideEffect)(spec, fn); + } + if (isSyncAndSafe) { + if (fn.constructor.name === "AsyncFunction") { + throw new Error(`lambda call claims to be syncAndSafe, however the callback function is asynchronous`); + } + $lambda.isSyncAndSafe = true; + } + return $lambda; +} +//# sourceMappingURL=lambda.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/lambda.js.map b/grafast/grafast/dist/steps/lambda.js.map new file mode 100644 index 0000000000..1202037da8 --- /dev/null +++ b/grafast/grafast/dist/steps/lambda.js.map @@ -0,0 +1 @@ +{"version":3,"file":"lambda.js","sourceRoot":"","sources":["../../src/steps/lambda.ts"],"names":[],"mappings":";;;AA2FS,wBAAM;AAtFf,kDAA4C;AAE5C,wCAA2C;AAC3C,mDAA6C;AAE7C;;GAEG;AACH,MAAa,UAAsB,SAAQ,uBAAmB;aACrD,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,YAAY;KACzB,AAHc,CAGb;IAMF,YACE,KAAmC,EAC3B,EAAyC;QAEjD,KAAK,EAAE,CAAC;QAFA,OAAE,GAAF,EAAE,CAAuC;QAPnD,uEAAuE;QACvE,kBAAa,GAAG,KAAK,CAAC;QACtB,+BAA0B,GAAG,IAAI,CAAC;QAQhC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,IAAK,EAAU,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;aAAM,IAAK,EAAU,CAAC,aAAa,EAAE,CAAC;YACrC,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,kEAAkE,CAC1E,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,YAAY;QACV,OAAQ,IAAI,CAAC,EAAU,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;IACtD,CAAC;IAED,WAAW,CAAC,KAA6B;QACvC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,gBAAgB,CACd,MAA+B,EAC/B,KAAU;QAEV,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;;AAzCH,gCA0CC;AAED;;;;GAIG;AACH,SAAS,MAAM,CACb,IAAkB,EAClB,EAAmE,EACnE,aAAa,GAAG,KAAK;IAErB,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,wBAAS,EAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,UAAU,CAAsC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7E,IAAK,EAAU,CAAC,cAAc,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CACX,6OAA6O,CAC9O,CAAC;QACF,OAAO,IAAA,0BAAU,EAAC,IAAW,EAAE,EAAE,CAAQ,CAAC;IAC5C,CAAC;IACD,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/last.d.ts b/grafast/grafast/dist/steps/last.d.ts new file mode 100644 index 0000000000..f638c13081 --- /dev/null +++ b/grafast/grafast/dist/steps/last.d.ts @@ -0,0 +1,22 @@ +import type { UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +import type { ConnectionCapableStep } from "./connection.js"; +export declare class LastStep extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + constructor(parentPlan: Step> | ConnectionCapableStep, any>); + unbatchedExecute: (_extra: UnbatchedExecutionExtra, list: ReadonlyArray) => TData; + deduplicate(peers: LastStep[]): LastStep[]; + optimize(): any; +} +/** + * A plan that resolves to the last entry in the list returned by the given + * plan. + */ +export declare function last(plan: Step> | ConnectionCapableStep, any>): LastStep; +//# sourceMappingURL=last.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/last.d.ts.map b/grafast/grafast/dist/steps/last.d.ts.map new file mode 100644 index 0000000000..0ad53ac376 --- /dev/null +++ b/grafast/grafast/dist/steps/last.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"last.d.ts","sourceRoot":"","sources":["../../src/steps/last.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAI7D,qBAAa,QAAQ,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,KAAK,CAAC;IACvD,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,0BAA0B,UAAQ;gBAGhC,UAAU,EACN,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAC1B,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAM7C,gBAAgB,GACd,QAAQ,uBAAuB,EAC/B,MAAM,aAAa,CAAC,KAAK,CAAC,KACzB,KAAK,CAEN;IAEF,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE;IAIxD,QAAQ;CAQT;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,EACxB,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GACzE,QAAQ,CAAC,KAAK,CAAC,CAOjB"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/last.js b/grafast/grafast/dist/steps/last.js new file mode 100644 index 0000000000..c5468e8537 --- /dev/null +++ b/grafast/grafast/dist/steps/last.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LastStep = void 0; +exports.last = last; +const step_js_1 = require("../step.js"); +const connection_js_1 = require("./connection.js"); +const list_js_1 = require("./list.js"); +class LastStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "LastStep", + }; } + constructor(parentPlan) { + super(); + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.unbatchedExecute = (_extra, list) => { + return list?.[list?.length - 1]; + }; + this.addDependency((0, connection_js_1.itemsOrStep)(parentPlan)); + } + deduplicate(peers) { + return peers; + } + optimize() { + const parent = this.getDep(0); + // The last of a list plan is just the last dependency of the list plan. + if (parent instanceof list_js_1.ListStep) { + return parent.last(); + } + return this; + } +} +exports.LastStep = LastStep; +/** + * A plan that resolves to the last entry in the list returned by the given + * plan. + */ +function last(plan) { + return plan.operationPlan.cacheStep(plan, "GrafastInternal:last()", "", () => new LastStep(plan)); +} +//# sourceMappingURL=last.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/last.js.map b/grafast/grafast/dist/steps/last.js.map new file mode 100644 index 0000000000..c50f83ca8e --- /dev/null +++ b/grafast/grafast/dist/steps/last.js.map @@ -0,0 +1 @@ +{"version":3,"file":"last.js","sourceRoot":"","sources":["../../src/steps/last.ts"],"names":[],"mappings":";;;AAiDA,oBASC;AAxDD,wCAA2C;AAE3C,mDAA8C;AAC9C,uCAAqC;AAErC,MAAa,QAAgB,SAAQ,uBAAoB;aAChD,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,UAAU;KACvB,AAHc,CAGb;IAIF,YACE,UAE2C;QAE3C,KAAK,EAAE,CAAC;QARV,kBAAa,GAAG,IAAI,CAAC;QACrB,+BAA0B,GAAG,IAAI,CAAC;QAWlC,qBAAgB,GAAG,CACjB,MAA+B,EAC/B,IAA0B,EACnB,EAAE;YACT,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC;QARA,IAAI,CAAC,aAAa,CAAC,IAAA,2BAAW,EAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,CAAC;IASD,WAAW,CAAC,KAAwB;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9B,wEAAwE;QACxE,IAAI,MAAM,YAAY,kBAAQ,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;;AAnCH,4BAoCC;AAED;;;GAGG;AACH,SAAgB,IAAI,CAClB,IAA0E;IAE1E,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CACjC,IAAI,EACJ,wBAAwB,EACxB,EAAE,EACF,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CACzB,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/list.d.ts b/grafast/grafast/dist/steps/list.d.ts new file mode 100644 index 0000000000..d5034a3a38 --- /dev/null +++ b/grafast/grafast/dist/steps/list.d.ts @@ -0,0 +1,40 @@ +import type { ExecutionDetails, StepOptimizeOptions, UnbatchedExecutionExtra, UnwrapPlanTuple } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +import { ConstantStep } from "./constant.js"; +interface ListStepCacheConfig { + identifier?: string; + cacheSize?: number; +} +export declare class ListStep extends UnbatchedStep> { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + optimizeMetaKey: string; + private cacheSize; + private valueCount; + constructor(list: TPlanTuple, cacheConfig?: ListStepCacheConfig); + toStringMeta(): string; + execute({ indexMap, values }: ExecutionDetails): readonly UnwrapPlanTuple[]; + unbatchedExecute(_extra: UnbatchedExecutionExtra, ...values: any[]): UnwrapPlanTuple; + deduplicatedUnbatchedExecute({ meta: inMeta }: UnbatchedExecutionExtra, ...values: any[]): UnwrapPlanTuple; + deduplicate(peers: ListStep[]): ListStep[]; + optimize(opts: StepOptimizeOptions): this | ConstantStep; + finalize(): void; + /** + * Get the original plan at the given index back again. + */ + at(index: TIndex): TPlanTuple[TIndex]; + first(): TPlanTuple[0] | import("./__flag.js").__FlagStep; + last(): TPlanTuple[number] | import("./__flag.js").__FlagStep; +} +/** + * Takes a list of plans and turns it into a single plan that represents the + * list of their values. + */ +export declare function list(list: TPlanTuple, cacheConfig?: ListStepCacheConfig): ListStep; +export {}; +//# sourceMappingURL=list.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/list.d.ts.map b/grafast/grafast/dist/steps/list.d.ts.map new file mode 100644 index 0000000000..fb5aab55ad --- /dev/null +++ b/grafast/grafast/dist/steps/list.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/steps/list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAY,YAAY,EAAE,MAAM,eAAe,CAAC;AAIvD,UAAU,mBAAmB;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,QAAQ,CACnB,KAAK,CAAC,UAAU,SAAS,SAAS,IAAI,EAAE,CACxC,SAAQ,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,0BAA0B,UAAQ;IAClC,eAAe,SAAc;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,mBAAmB;IAiB/D,YAAY;IAIZ,OAAO,CACL,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,gBAAgB;IAOxC,gBAAgB,CACd,MAAM,EAAE,uBAAuB,EAC/B,GAAG,MAAM,EAAE,GAAG,EAAE,GACf,eAAe,CAAC,UAAU,CAAC;IAI9B,4BAA4B,CAC1B,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,uBAAuB,EACzC,GAAG,MAAM,EAAE,GAAG,EAAE,GACf,eAAe,CAAC,UAAU,CAAC;IA0B9B,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC,EAAE;IAIlE,QAAQ,CAAC,IAAI,EAAE,mBAAmB;IA8BlC,QAAQ;IAOR;;OAEG;IACI,EAAE,CAAC,MAAM,SAAS,MAAM,UAAU,GAAG,MAAM,EAChD,KAAK,EAAE,MAAM,GACZ,UAAU,CAAC,MAAM,CAAC;IAId,KAAK;IAIL,IAAI;CAGZ;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,UAAU,SAAS,SAAS,IAAI,EAAE,EAC3D,IAAI,EAAE,UAAU,EAChB,WAAW,CAAC,EAAE,mBAAmB,GAChC,QAAQ,CAAC,UAAU,CAAC,CAEtB"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/list.js b/grafast/grafast/dist/steps/list.js new file mode 100644 index 0000000000..cded26c47e --- /dev/null +++ b/grafast/grafast/dist/steps/list.js @@ -0,0 +1,118 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ListStep = void 0; +exports.list = list; +const step_js_1 = require("../step.js"); +const constant_js_1 = require("./constant.js"); +const DEFAULT_CACHE_SIZE = 100; +class ListStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ListStep", + }; } + constructor(list, cacheConfig) { + super(); + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.optimizeMetaKey = "ListStep"; + this.valueCount = list.length; + this.cacheSize = + cacheConfig?.cacheSize ?? + (cacheConfig?.identifier ? DEFAULT_CACHE_SIZE : 0); + this.metaKey = + this.cacheSize <= 0 + ? undefined + : cacheConfig?.identifier + ? `list|${list.length}|${cacheConfig.identifier}` + : this.id; + for (let i = 0, l = list.length; i < l; i++) { + this.addDependency({ step: list[i], skipDeduplication: true }); + } + } + toStringMeta() { + return this.dependencies.map(($dep) => $dep.id).join(","); + } + execute({ indexMap, values }) { + return indexMap((i) => values.map((value) => value.at(i))); + } + unbatchedExecute(_extra, ...values //UnwrapPlanTuple, + ) { + return values; + } + deduplicatedUnbatchedExecute({ meta: inMeta }, ...values //UnwrapPlanTuple, + ) { + const meta = inMeta; + if (meta.nextIndex !== undefined) { + outer: for (let i = 0, l = meta.results.length; i < l; i++) { + const cachedValues = meta.results[i]; + for (let j = 0, c = this.valueCount; j < c; j++) { + if (values[j] !== cachedValues[j]) { + continue outer; + } + } + return cachedValues; + } + } + else { + meta.nextIndex = 0; + meta.results = []; + } + meta.results[meta.nextIndex] = values; + // Only cache this.cacheSize results, use a round-robin + const maxIndex = this.cacheSize - 1; + meta.nextIndex = meta.nextIndex === maxIndex ? 0 : meta.nextIndex + 1; + return values; + } + deduplicate(peers) { + return peers; + } + optimize(opts) { + if (this.dependencies.every((dep) => dep instanceof constant_js_1.ConstantStep)) { + const meta = opts.meta; + // Used to validate the lists have the same length + const cardinality = this.dependencies.length; + if (!meta[cardinality]) { + meta[cardinality] = []; + } + const existing = meta[cardinality].find((l) => l.every((v, i) => v === this.dependencies[i].data)); + const isSensitive = this.dependencies.some((d) => d.isSensitive); + if (existing !== undefined) { + return (0, constant_js_1.constant)(existing, isSensitive); + } + else { + // Replace self with constant + const arr = this.dependencies.map((dep) => dep.data); + meta[cardinality].push(arr); + return (0, constant_js_1.constant)(arr, isSensitive); + } + } + return this; + } + finalize() { + if (this.cacheSize > 0) { + this.unbatchedExecute = this.deduplicatedUnbatchedExecute; + } + super.finalize(); + } + /** + * Get the original plan at the given index back again. + */ + at(index) { + return this.getDep(index); + } + first() { + return this.getDep(0); + } + last() { + return this.getDep(this.dependencies.length - 1); + } +} +exports.ListStep = ListStep; +/** + * Takes a list of plans and turns it into a single plan that represents the + * list of their values. + */ +function list(list, cacheConfig) { + return new ListStep(list, cacheConfig); +} +//# sourceMappingURL=list.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/list.js.map b/grafast/grafast/dist/steps/list.js.map new file mode 100644 index 0000000000..1b0528ac7e --- /dev/null +++ b/grafast/grafast/dist/steps/list.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/steps/list.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listTransform.d.ts b/grafast/grafast/dist/steps/listTransform.d.ts new file mode 100644 index 0000000000..b013927586 --- /dev/null +++ b/grafast/grafast/dist/steps/listTransform.d.ts @@ -0,0 +1,65 @@ +import type { ConnectionCapableStep, ExecutionDetails } from "../index.js"; +import type { GrafastResultsList } from "../interfaces.js"; +import { $$deepDepSkip } from "../interfaces.js"; +import type { ListCapableStep } from "../step.js"; +import { Step } from "../step.js"; +import { __ItemStep } from "./__item.js"; +import type { ItemsStep } from "./connection.js"; +export type ListTransformReduce = (memo: TMemo, entireItemValue: unknown, itemPlanData: TItemPlanData) => TMemo; +export type ListTransformItemPlanCallback, TDepsStep extends Step> = (listItemPlan: ItemsStep extends ListCapableStep ? ReturnType["listItem"]> : __ItemStep) => TDepsStep; +export interface ListTransformOptions | ConnectionCapableStep, any>, TDepsStep extends Step, TMemo, TItemStep extends Step | undefined = undefined> { + listStep: TListStep; + itemPlanCallback: ListTransformItemPlanCallback, TDepsStep>; + initialState(): TMemo; + reduceCallback: ListTransformReduce ? U : never>; + listItem?(itemPlan: Step): TItemStep; + finalizeCallback?(data: TMemo): TMemo; + meta?: string; + optimize?: (this: __ListTransformStep) => Step; + connectionClone?: ConnectionCapableStep["connectionClone"]; +} +/** + * **Experimental.** + * + * A "special" plan that has custom handling in Grafast. Used for turning lists + * into other things (or maybe more lists!). + * + * It's recommended that you don't use this directly, please use one of the + * functions that uses this under the hood such as `filter()`. + */ +export declare class __ListTransformStep | ConnectionCapableStep = Step | ConnectionCapableStep, TDepsStep extends Step = Step, TMemo = any, TItemStep extends Step | undefined = Step | undefined> extends Step { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private listStepDepId; + private rawListStepDepId; + itemPlanCallback: ListTransformItemPlanCallback, TDepsStep>; + initialState: () => TMemo; + reduceCallback: ListTransformReduce ? U : never>; + finalizeCallback?: (data: TMemo) => TMemo; + listItem?: (itemPlan: __ItemStep) => TItemStep; + private meta; + connectionClone?: ConnectionCapableStep["connectionClone"]; + /** Set during query planning. */ + itemStepId: number; + constructor(options: ListTransformOptions); + toStringMeta(): string | null; + getListStep(): TListStep; + [$$deepDepSkip](): TListStep; + dangerouslyGetListPlan(): TListStep; + deduplicate(peers: __ListTransformStep[]): __ListTransformStep[]; + optimize(): Step; + execute({ indexForEach, indexMap, values, extra, }: ExecutionDetails<[any[] | null | undefined | Error]>): Promise>; +} +/** + * **Experimental.** + * + * A "special" plan that has custom handling in Grafast. Used for turning lists + * into other things (or maybe more lists!). + * + * {@page ~grafast/steps/listTransform.md} + */ +export declare function listTransform | ConnectionCapableStep, TDepsStep extends Step, TMemo, TItemStep extends Step | undefined = undefined>(options: ListTransformOptions): __ListTransformStep; +//# sourceMappingURL=listTransform.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listTransform.d.ts.map b/grafast/grafast/dist/steps/listTransform.d.ts.map new file mode 100644 index 0000000000..aa5db622db --- /dev/null +++ b/grafast/grafast/dist/steps/listTransform.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"listTransform.d.ts","sourceRoot":"","sources":["../../src/steps/listTransform.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listTransform.js b/grafast/grafast/dist/steps/listTransform.js new file mode 100644 index 0000000000..02b803419f --- /dev/null +++ b/grafast/grafast/dist/steps/listTransform.js @@ -0,0 +1,216 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.__ListTransformStep = void 0; +exports.listTransform = listTransform; +const tslib_1 = require("tslib"); +const assert = tslib_1.__importStar(require("../assert.js")); +const dev_js_1 = require("../dev.js"); +const executeBucket_js_1 = require("../engine/executeBucket.js"); +const LayerPlan_js_1 = require("../engine/LayerPlan.js"); +const withGlobalLayerPlan_js_1 = require("../engine/lib/withGlobalLayerPlan.js"); +const interfaces_js_1 = require("../interfaces.js"); +const step_js_1 = require("../step.js"); +const __item_js_1 = require("./__item.js"); +const connection_js_1 = require("./connection.js"); +/** + * **Experimental.** + * + * A "special" plan that has custom handling in Grafast. Used for turning lists + * into other things (or maybe more lists!). + * + * It's recommended that you don't use this directly, please use one of the + * functions that uses this under the hood such as `filter()`. + */ +class __ListTransformStep extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "__ListTransformStep", + }; } + constructor(options) { + super(); + // OPTIMIZE: if all the steps in the inner bucket are synchronous then theoretically we can be synchronous too + this.isSyncAndSafe = false; + const { listStep: rawListStep, itemPlanCallback, initialState, reduceCallback, finalizeCallback, listItem, meta, optimize, connectionClone, } = options; + const listStep = (0, connection_js_1.itemsOrStep)(rawListStep); + this.listStepDepId = this.addDependency(listStep); + // PERF: This is just so we can populate getListStep() correctly... Ideally we could mark this as a "plan-time-only" dependency. + this.rawListStepDepId = + rawListStep === listStep + ? this.listStepDepId + : this.addDependency(rawListStep); + this.itemPlanCallback = itemPlanCallback; + this.initialState = initialState; + this.reduceCallback = reduceCallback; + this.finalizeCallback = finalizeCallback; + this.listItem = listItem; + this.meta = meta ?? null; + if (optimize !== undefined) { + this.optimize = optimize; + } + this.connectionClone = connectionClone; + // Plan this subroutine + this.subroutineLayer = new LayerPlan_js_1.LayerPlan(this.operationPlan, this.layerPlan, { + type: "subroutine", + parentStep: this, + }); + const itemPlan = (0, withGlobalLayerPlan_js_1.withGlobalLayerPlan)(this.subroutineLayer, listStep.polymorphicPaths, () => { + // This does NOT use `itemPlanFor` because __ListTransformPlans are special. + const $__listItem = new __item_js_1.__ItemStep(listStep); + $__listItem.transformStepId = this.id; + this.itemStepId = $__listItem.id; + const $listItem = (0, step_js_1.isListCapableStep)(listStep) + ? listStep.listItem($__listItem) + : $__listItem; + const $newListItem = this.itemPlanCallback($listItem); + if (this.isSyncAndSafe && + (!$__listItem.isSyncAndSafe || + !$listItem.isSyncAndSafe || + !$newListItem.isSyncAndSafe)) { + this.isSyncAndSafe = false; + } + return $newListItem; + }); + this.subroutineLayer.setRootStep(itemPlan); + this.operationPlan.finishSubroutine(this, this.subroutineLayer); + } + toStringMeta() { + return this.meta; + } + getListStep() { + return this.getDepOptions(this.rawListStepDepId).step; + } + [interfaces_js_1.$$deepDepSkip]() { + return this.getListStep(); + } + dangerouslyGetListPlan() { + return this.dependencies[this.rawListStepDepId]; + } + deduplicate(peers) { + return peers.filter((peer) => peer.itemPlanCallback === this.itemPlanCallback && + peer.initialState === this.initialState && + peer.reduceCallback === this.reduceCallback && + peer.finalizeCallback === this.finalizeCallback && + peer.listItem === this.listItem); + } + // ListTransform plans must _NOT_ optimize away. They must persist (unless + // the options overrides this) + optimize() { + return this; + } + async execute({ indexForEach, indexMap, values, extra, }) { + const bucket = extra._bucket; + const childLayerPlan = this.subroutineLayer; + const { copyStepIds, rootStep } = childLayerPlan; + if (rootStep === null) { + throw new Error(`rootStep of ${childLayerPlan} must not be null.`); + } + const store = new Map(); + const polymorphicPathList = []; + const iterators = []; + const map = new Map(); + let size = 0; + // ENHANCE: do this better! + const itemStep = this.operationPlan.dangerouslyGetStep(this.itemStepId); + const itemStepId = itemStep.id; + if (itemStepId == null) { + throw new Error("GrafastInternalError: listItem layer plan has no rootStepId"); + } + const listStepValue = values[this.listStepDepId]; + if (itemStep._isUnary) { + const list = listStepValue.unaryValue(); + store.set(itemStepId, (0, executeBucket_js_1.unaryExecutionValue)(Array.isArray(list) ? list[0] : list)); + } + else { + store.set(itemStepId, (0, executeBucket_js_1.batchExecutionValue)([])); + } + for (const stepId of copyStepIds) { + const ev = bucket.store.get(stepId); + if (!ev) { + throw new Error(`GrafastInternalError<2be5c2c6-a7f8-4002-93a0-6ace5a89a962>: unary step '${stepId}' (${this.operationPlan.dangerouslyGetStep(stepId)}) listed in copyStepIds but not available in parent bucket for ${this}`); + } + if (ev.isBatch) { + // Prepare store with an empty list for each copyPlanId + store.set(stepId, (0, executeBucket_js_1.batchExecutionValue)([])); + } + else { + store.set(stepId, ev); + } + } + // We'll typically be creating more listItem bucket entries than we + // have parent buckets, so we must "multiply up" the store entries. + indexForEach((originalIndex) => { + const list = listStepValue.at(originalIndex); + if (Array.isArray(list)) { + const newIndexes = []; + map.set(originalIndex, newIndexes); + for (let j = 0, l = list.length; j < l; j++) { + const newIndex = size++; + newIndexes.push(newIndex); + polymorphicPathList[newIndex] = + bucket.polymorphicPathList[originalIndex]; + // Copying across the iterators because we do NOT call outputBucket, + // so we need to ensure any streams are cleaned up. + iterators[newIndex] = bucket.iterators[originalIndex]; + const ev = store.get(itemStepId); + if (ev.isBatch) { + ev._setResult(newIndex, list[j], 0); + } + for (const planId of copyStepIds) { + const ev = store.get(planId); + if (ev.isBatch) { + const orig = bucket.store.get(planId); + ev._setResult(newIndex, orig.at(originalIndex), orig._flagsAt(originalIndex)); + } + } + } + } + }); + if (size > 0) { + const childBucket = (0, executeBucket_js_1.newBucket)({ + layerPlan: childLayerPlan, + size, + store, + flagUnion: bucket.flagUnion, + polymorphicPathList, + iterators, + }, bucket.metaByMetaKey); + await (0, executeBucket_js_1.executeBucket)(childBucket, extra._requestContext); + } + const depResults = store.get(rootStep.id); + return indexMap((originalIndex) => { + const list = listStepValue.at(originalIndex); + if (list == null) { + return list; + } + const indexes = map.get(originalIndex); + if (!Array.isArray(list) || !Array.isArray(indexes)) { + // ERRORS: should this be an error? + console.warn(`Either list or values was not an array when processing ${this}`); + return null; + } + const values = indexes.map((idx) => depResults.at(idx)); + if (dev_js_1.isDev) { + assert.strictEqual(list.length, values.length, "GrafastInternalError: The list and values length must match for a __ListTransformStep"); + } + const initialState = this.initialState(); + const reduceResult = list.reduce((memo, entireItemValue, listEntryIndex) => this.reduceCallback(memo, entireItemValue, values[listEntryIndex]), initialState); + const finalResult = this.finalizeCallback + ? this.finalizeCallback(reduceResult) + : reduceResult; + return finalResult; + }); + } +} +exports.__ListTransformStep = __ListTransformStep; +/** + * **Experimental.** + * + * A "special" plan that has custom handling in Grafast. Used for turning lists + * into other things (or maybe more lists!). + * + * {@page ~grafast/steps/listTransform.md} + */ +function listTransform(options) { + return new __ListTransformStep(options); +} +//# sourceMappingURL=listTransform.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listTransform.js.map b/grafast/grafast/dist/steps/listTransform.js.map new file mode 100644 index 0000000000..e73cc89d2b --- /dev/null +++ b/grafast/grafast/dist/steps/listTransform.js.map @@ -0,0 +1 @@ +{"version":3,"file":"listTransform.js","sourceRoot":"","sources":["../../src/steps/listTransform.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listen.d.ts b/grafast/grafast/dist/steps/listen.d.ts new file mode 100644 index 0000000000..7166d64b76 --- /dev/null +++ b/grafast/grafast/dist/steps/listen.d.ts @@ -0,0 +1,37 @@ +import type { ExecutionDetails, GrafastResultStreamList, GrafastSubscriber } from "../interfaces.js"; +import { Step } from "../step.js"; +import type { __ItemStep } from "./__item.js"; +/** + * Subscribes to the given `pubsubOrPlan` to get realtime updates on a given + * topic (`topicOrPlan`), mapping the resulting event via the `itemPlan` + * callback. + */ +export declare class ListenStep extends Step { + itemPlan: (itemPlan: __ItemStep) => TPayloadStep; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + /** + * The id for the PostgreSQL context plan. + */ + private pubsubDep; + /** + * The plan that will tell us which topic we're subscribing to. + */ + private topicDep; + constructor(pubsubOrPlan: Step | null> | GrafastSubscriber | null, topicOrPlan: Step | string, itemPlan?: (itemPlan: __ItemStep) => TPayloadStep); + execute({ indexMap, values, stream, }: ExecutionDetails, TTopic]>): GrafastResultStreamList; +} +/** + * Subscribes to the given `pubsubOrPlan` to get realtime updates on a given + * topic (`topicOrPlan`), mapping the resulting event via the `itemPlan` + * callback. + */ +export declare function listen(pubsubOrPlan: Step | null> | GrafastSubscriber | null, topicOrPlan: Step | string, itemPlan?: (itemPlan: __ItemStep) => TPayloadStep): ListenStep; +//# sourceMappingURL=listen.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listen.d.ts.map b/grafast/grafast/dist/steps/listen.d.ts.map new file mode 100644 index 0000000000..d432e6de74 --- /dev/null +++ b/grafast/grafast/dist/steps/listen.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"listen.d.ts","sourceRoot":"","sources":["../../src/steps/listen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAoB,IAAI,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C;;;;GAIG;AACH,qBAAa,UAAU,CACrB,OAAO,SAAS;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EACxC,MAAM,SAAS,MAAM,OAAO,EAC5B,YAAY,SAAS,IAAI,CACzB,SAAQ,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAuBtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,YAAY;IAtB1E,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IAErB;;OAEG;IACH,OAAO,CAAC,SAAS,CAAS;IAE1B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAS;gBAGvB,YAAY,EACR,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GACvC,iBAAiB,CAAC,OAAO,CAAC,GAC1B,IAAI,EACR,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,EAC3B,QAAQ,GAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,YAE3C;IAYnB,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE,gBAAgB,CACjB,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAC9C,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;CAwB7C;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CACpB,OAAO,SAAS;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EACxC,MAAM,SAAS,MAAM,OAAO,EAC5B,YAAY,SAAS,IAAI,EAEzB,YAAY,EACR,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GACvC,iBAAiB,CAAC,OAAO,CAAC,GAC1B,IAAI,EACR,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,EAClC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,YAAY,GACjE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAM3C"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listen.js b/grafast/grafast/dist/steps/listen.js new file mode 100644 index 0000000000..ff140620a0 --- /dev/null +++ b/grafast/grafast/dist/steps/listen.js @@ -0,0 +1,59 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ListenStep = void 0; +exports.listen = listen; +const dev_js_1 = require("../dev.js"); +const index_js_1 = require("../index.js"); +const step_js_1 = require("../step.js"); +const constant_js_1 = require("./constant.js"); +/** + * Subscribes to the given `pubsubOrPlan` to get realtime updates on a given + * topic (`topicOrPlan`), mapping the resulting event via the `itemPlan` + * callback. + */ +class ListenStep extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "ListenStep", + }; } + constructor(pubsubOrPlan, topicOrPlan, itemPlan = ($item) => $item) { + super(); + this.itemPlan = itemPlan; + this.isSyncAndSafe = true; + const $topic = typeof topicOrPlan === "string" ? (0, constant_js_1.constant)(topicOrPlan) : topicOrPlan; + const $pubsub = (0, step_js_1.isExecutableStep)(pubsubOrPlan) + ? pubsubOrPlan + : (0, constant_js_1.constant)(pubsubOrPlan, false); + this.pubsubDep = this.addDependency($pubsub); + this.topicDep = this.addDependency($topic); + } + execute({ indexMap, values, stream, }) { + if (!stream) { + throw new Error("ListenStep must be streamed, never merely executed"); + } + const pubsubValue = values[this.pubsubDep]; + const topicValue = values[this.topicDep]; + return indexMap((i) => { + const pubsub = pubsubValue.at(i); + if (!pubsub) { + throw new index_js_1.SafeError("Subscription not supported", dev_js_1.isDev + ? { + hint: `${this.dependencies[this.pubsubDep]} did not provide a GrafastSubscriber; perhaps you forgot to add the relevant property to context?`, + } + : {}); + } + const topic = topicValue.at(i); + return pubsub.subscribe(topic); + }); + } +} +exports.ListenStep = ListenStep; +/** + * Subscribes to the given `pubsubOrPlan` to get realtime updates on a given + * topic (`topicOrPlan`), mapping the resulting event via the `itemPlan` + * callback. + */ +function listen(pubsubOrPlan, topicOrPlan, itemPlan) { + return new ListenStep(pubsubOrPlan, topicOrPlan, itemPlan); +} +//# sourceMappingURL=listen.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/listen.js.map b/grafast/grafast/dist/steps/listen.js.map new file mode 100644 index 0000000000..f4ec567108 --- /dev/null +++ b/grafast/grafast/dist/steps/listen.js.map @@ -0,0 +1 @@ +{"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/steps/listen.ts"],"names":[],"mappings":";;;AA8FA,wBAiBC;AA/GD,sCAAkC;AAClC,0CAAwC;AAMxC,wCAAoD;AAEpD,+CAAyC;AAEzC;;;;GAIG;AACH,MAAa,UAIX,SAAQ,cAAuB;aACxB,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,YAAY;KACzB,AAHc,CAGb;IAaF,YACE,YAGQ,EACR,WAAkC,EAC3B,WAAoE,CACzE,KAAK,EACL,EAAE,CAAC,KAAY;QAEjB,KAAK,EAAE,CAAC;QAJD,aAAQ,GAAR,QAAQ,CAEE;QApBnB,kBAAa,GAAG,IAAI,CAAC;QAuBnB,MAAM,MAAM,GACV,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,sBAAQ,EAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QACxE,MAAM,OAAO,GAAG,IAAA,0BAAgB,EAAC,YAAY,CAAC;YAC5C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,IAAA,sBAAQ,EAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EACN,MAAM,GAGP;QACC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAc,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,QAAa,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,oBAAS,CACjB,4BAA4B,EAC5B,cAAK;oBACH,CAAC,CAAC;wBACE,IAAI,EAAE,GACJ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAClC,mGAAmG;qBACpG;oBACH,CAAC,CAAC,EAAE,CACP,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;;AAtEH,gCAuEC;AAED;;;;GAIG;AACH,SAAgB,MAAM,CAKpB,YAGQ,EACR,WAAkC,EAClC,QAAkE;IAElE,OAAO,IAAI,UAAU,CACnB,YAAY,EACZ,WAAW,EACX,QAAQ,CACT,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/load.d.ts b/grafast/grafast/dist/steps/load.d.ts new file mode 100644 index 0000000000..5f6f354732 --- /dev/null +++ b/grafast/grafast/dist/steps/load.d.ts @@ -0,0 +1,88 @@ +import type { __ItemStep, ExecutionDetails } from "../index.js"; +import type { GrafastResultsList, Maybe, PromiseOrDirect } from "../interfaces.js"; +import type { Multistep, UnwrapMultistep } from "../multistep.js"; +import { Step } from "../step.js"; +export interface LoadOptions, TUnarySpec = never> { + unary: TUnarySpec; + attributes: ReadonlyArray; + params: Partial; +} +type LoadCallback, TParams extends Record, TUnarySpec = never> = { + (specs: ReadonlyArray, options: LoadOptions): PromiseOrDirect>>; + displayName?: string; +}; +export type LoadOneCallback, TUnarySpec = never> = LoadCallback; +export type LoadManyCallback, TUnarySpec = never> = LoadCallback, TParams, TUnarySpec>; +/** + * A TypeScript Identity Function to help you strongly type your + * LoadOneCallback. + */ +export declare function loadOneCallback, TUnarySpec = never>(callback: LoadOneCallback): LoadOneCallback; +/** + * A TypeScript Identity Function to help you strongly type your + * LoadManyCallback. + */ +export declare function loadManyCallback, TUnarySpec = never>(callback: LoadManyCallback): LoadManyCallback; +/** + * You shouldn't create instances of this yourself - use `loadOne` or `loadMany` instead. + */ +export declare class LoadedRecordStep = Record> extends Step { + private isSingle; + private sourceDescription; + private ioEquivalence; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + attributes: Set; + params: Partial; + constructor($data: Step, isSingle: boolean, sourceDescription: string, ioEquivalence: Record); + toStringMeta(): string; + get(attr: keyof TItem & (string | number)): Step; + private _getInner; + setParam(paramKey: TParamKey, value: TParams[TParamKey]): void; + optimize(): Step | import("./__flag.js").__FlagStep>; + execute({ count, values: [values0], }: ExecutionDetails<[TItem]>): GrafastResultsList; +} +export declare class LoadStep, TParams extends Record, const TUnaryMultistep extends Multistep = never> extends Step { + private ioEquivalence; + private load; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + loadOptions: Omit>, "unary"> | null; + loadOptionsKey: string; + attributes: Set; + params: Partial; + unaryDepId: number | null; + constructor(spec: TMultistep, unarySpec: TUnaryMultistep | null, ioEquivalence: IOEquivalence, load: LoadCallback, TItem, TData, TParams, UnwrapMultistep>); + toStringMeta(): string; + private makeAccessMap; + listItem($item: __ItemStep): LoadedRecordStep; + single(): TData extends ReadonlyArray ? never : LoadedRecordStep; + setParam(paramKey: TParamKey, value: TParams[TParamKey]): void; + addAttributes(attributes: Set): void; + finalize(): void; + execute({ count, values: [values0, values1], extra, }: ExecutionDetails<[ + UnwrapMultistep, + UnwrapMultistep + ]>): PromiseOrDirect>>; +} +export declare function loadMany = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, loadCallback: LoadManyCallback, TItem, TParams, UnwrapMultistep>): LoadStep, TItem, ReadonlyArray, TParams, UnwrapMultistep>; +export declare function loadMany = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, ioEquivalence: IOEquivalence, loadCallback: LoadManyCallback, TItem, TParams, UnwrapMultistep>): LoadStep, TItem, ReadonlyArray, TParams, UnwrapMultistep>; +export declare function loadMany = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, unarySpec: TUnaryMultistep | null, loadCallback: LoadManyCallback, TItem, TParams, UnwrapMultistep>): LoadStep, TItem, ReadonlyArray, TParams, UnwrapMultistep>; +export declare function loadMany = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, unarySpec: TUnaryMultistep | null, ioEquivalence: IOEquivalence, loadCallback: LoadManyCallback, TItem, TParams, UnwrapMultistep>): LoadStep, TItem, ReadonlyArray, TParams, UnwrapMultistep>; +type IOEquivalence = null | string | (UnwrapMultistep extends readonly [...(readonly any[])] ? { + [key in Exclude, keyof any[]>]: string | null; +} : UnwrapMultistep extends Record ? { + [key in keyof UnwrapMultistep]?: string | null; +} : never); +export declare function loadOne = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, loadCallback: LoadOneCallback, TItem, TParams, UnwrapMultistep>): LoadedRecordStep; +export declare function loadOne = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, ioEquivalence: IOEquivalence, loadCallback: LoadOneCallback, TItem, TParams, UnwrapMultistep>): LoadedRecordStep; +export declare function loadOne = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, unarySpec: TUnaryMultistep | null, loadCallback: LoadOneCallback, TItem, TParams, UnwrapMultistep>): LoadedRecordStep; +export declare function loadOne = Record, const TUnaryMultistep extends Multistep = never>(spec: TMultistep, unarySpec: TUnaryMultistep | null, ioEquivalence: IOEquivalence, loadCallback: LoadOneCallback, TItem, TParams, UnwrapMultistep>): LoadedRecordStep; +export {}; +//# sourceMappingURL=load.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/load.d.ts.map b/grafast/grafast/dist/steps/load.d.ts.map new file mode 100644 index 0000000000..152aa128ac --- /dev/null +++ b/grafast/grafast/dist/steps/load.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../src/steps/load.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/load.js b/grafast/grafast/dist/steps/load.js new file mode 100644 index 0000000000..f7fb3457ea --- /dev/null +++ b/grafast/grafast/dist/steps/load.js @@ -0,0 +1,343 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LoadStep = exports.LoadedRecordStep = void 0; +exports.loadOneCallback = loadOneCallback; +exports.loadManyCallback = loadManyCallback; +exports.loadMany = loadMany; +exports.loadOne = loadOne; +const index_js_1 = require("../index.js"); +const multistep_js_1 = require("../multistep.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +const access_js_1 = require("./access.js"); +/** + * A TypeScript Identity Function to help you strongly type your + * LoadOneCallback. + */ +function loadOneCallback(callback) { + return callback; +} +/** + * A TypeScript Identity Function to help you strongly type your + * LoadManyCallback. + */ +function loadManyCallback(callback) { + return callback; +} +const idByLoad = new WeakMap(); +let loadCounter = 0; +/** + * You shouldn't create instances of this yourself - use `loadOne` or `loadMany` instead. + */ +class LoadedRecordStep extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "LoadedRecordStep", + }; } + constructor($data, isSingle, sourceDescription, + // Only safe to reference this during planning phase + ioEquivalence) { + super(); + this.isSingle = isSingle; + this.sourceDescription = sourceDescription; + this.ioEquivalence = ioEquivalence; + this.isSyncAndSafe = true; + this.attributes = new Set(); + this.params = Object.create(null); + this.addDependency($data); + } + toStringMeta() { + return this.sourceDescription ?? null; + } + get(attr) { + return this.cacheStep("get", attr, () => this._getInner(attr)); + } + _getInner(attr) { + // Allow auto-collapsing of the waterfall by knowing keys are equivalent + if (this.operationPlan.phase === "plan" && + this.ioEquivalence[attr]) { + return this.ioEquivalence[attr]; + } + this.attributes.add(attr); + return (0, access_js_1.access)(this, attr); + } + setParam(paramKey, value) { + if (!this.isSingle) { + throw new Error("setParam should not be called on list items - call it on the collection (`loadMany()` step)"); + } + this.params[paramKey] = value; + } + optimize() { + const $source = this.getDepDeep(0); + if ($source instanceof LoadStep) { + // Tell our parent we only need certain attributes + $source.addAttributes(this.attributes); + for (const [key, value] of Object.entries(this.params)) { + $source.setParam(key, value); + } + } + else { + // This should never happen + console.warn(`LoadedRecordStep could not find the parent LoadStep; instead found ${$source}`); + } + // Record has no run-time behaviour (it's just a plan-time helper), so we + // can replace ourself with our dependency: + return this.getDep(0); + } + // This'll never be called, due to `optimize` above. + execute({ count, values: [values0], }) { + return values0.isBatch + ? values0.entries + : (0, utils_js_1.arrayOfLength)(count, values0.value); + } +} +exports.LoadedRecordStep = LoadedRecordStep; +class LoadStep extends step_js_1.Step { + /* implements ListCapableStep> */ + static { this.$$export = { moduleName: "grafast", exportName: "LoadStep" }; } + constructor(spec, unarySpec, ioEquivalence, load) { + super(); + this.ioEquivalence = ioEquivalence; + this.load = load; + this.isSyncAndSafe = false; + this.loadOptions = null; + this.loadOptionsKey = ""; + this.attributes = new Set(); + this.params = Object.create(null); + this.unaryDepId = null; + const $spec = (0, multistep_js_1.multistep)(spec, "load"); + this.addDependency($spec); + const $unarySpec = unarySpec == null ? null : (0, multistep_js_1.multistep)(unarySpec, "loadUnary"); + if ($unarySpec) { + this.unaryDepId = this.addUnaryDependency($unarySpec); + } + } + toStringMeta() { + return this.load.displayName || this.load.name; + } + makeAccessMap() { + const map = Object.create(null); + const $spec = this.getDep(0); + if (this.ioEquivalence == null) { + return map; + } + else if (typeof this.ioEquivalence === "string") { + map[this.ioEquivalence] = $spec; + return map; + } + else if ((0, utils_js_1.isTuple)(this.ioEquivalence)) { + for (let i = 0, l = this.ioEquivalence.length; i < l; i++) { + const key = this.ioEquivalence[i]; + map[key] = (0, step_js_1.isListLikeStep)($spec) ? $spec.at(i) : (0, access_js_1.access)($spec, [i]); + } + return map; + } + else if (typeof this.ioEquivalence === "object") { + for (const key of Object.keys(this.ioEquivalence)) { + const attr = this.ioEquivalence[key]; + if (attr != null) { + map[attr] = (0, step_js_1.isObjectLikeStep)($spec) + ? $spec.get(key) + : (0, access_js_1.access)($spec, [key]); + } + } + return map; + } + else { + throw new Error(`ioEquivalence passed to loadOne() or loadMany() call not understood`); + } + } + listItem($item) { + return new LoadedRecordStep($item, false, this.toStringMeta(), this.makeAccessMap()); + } + single() { + return new LoadedRecordStep(this, true, this.toStringMeta(), this.makeAccessMap()); + } + setParam(paramKey, value) { + this.params[paramKey] = value; + } + addAttributes(attributes) { + for (const attribute of attributes) { + this.attributes.add(attribute); + } + } + finalize() { + // Find all steps of this type that use the same callback and have + // equivalent params and then match their list of attributes together. + const stringifiedParams = (0, utils_js_1.canonicalJSONStringify)(this.params); + const kin = this.operationPlan + .getStepsByStepClass(LoadStep) + .filter((step) => { + if (step.id === this.id) + return false; + if (step.load !== this.load) + return false; + if ((0, utils_js_1.canonicalJSONStringify)(step.params) !== stringifiedParams) + return false; + return true; + }); + for (const otherStep of kin) { + for (const attr of otherStep.attributes) { + this.attributes.add(attr); + } + } + // Build the loadOptions + this.loadOptions = { + attributes: [...this.attributes].sort(), + params: this.params, + }; + // If the canonicalJSONStringify is the same, then we deem that the options are the same + this.loadOptionsKey = (0, utils_js_1.canonicalJSONStringify)(this.loadOptions); + let loadId = idByLoad.get(this.load); + if (!loadId) { + loadId = String(++loadCounter); + idByLoad.set(this.load, loadId); + } + this.metaKey = `LoadStep|${loadId}|${this.loadOptionsKey}`; + super.finalize(); + } + execute({ count, values: [values0, values1], extra, }) { + const meta = extra.meta; + let cache = meta.cache; + if (!cache) { + cache = new Map(); + meta.cache = cache; + } + const batch = new Map(); + const unary = values1?.isBatch === false ? values1.value : undefined; + const results = []; + for (let i = 0; i < count; i++) { + const spec = values0.at(i); + if (cache.has(spec)) { + results.push(cache.get(spec)); + } + else { + // We'll fill this in in a minute + const index = results.push(null) - 1; + const existingIdx = batch.get(spec); + if (existingIdx !== undefined) { + existingIdx.push(index); + } + else { + batch.set(spec, [index]); + } + } + } + const pendingCount = batch.size; + if (pendingCount > 0) { + const deferred = (0, index_js_1.defer)(); + const batchSpecs = [...batch.keys()]; + const loadBatch = { deferred, batchSpecs }; + if (!meta.loadBatchesByLoad) { + meta.loadBatchesByLoad = new Map(); + } + let loadBatches = meta.loadBatchesByLoad.get(this.load); + if (loadBatches) { + // Add to existing batch load + loadBatches.push(loadBatch); + } + else { + // Create new batch load + loadBatches = [loadBatch]; + meta.loadBatchesByLoad.set(this.load, loadBatches); + // Guaranteed by the metaKey to be equivalent for all entries sharing the same `meta`. Note equivalent is not identical; key order may change. + const loadOptions = this.loadOptions; + process.nextTick(() => { + // Don't allow adding anything else to the batch + meta.loadBatchesByLoad.delete(this.load); + executeBatches(loadBatches, this.load, { + ...loadOptions, + unary: unary, + }); + }); + } + return (async () => { + const loadResults = await deferred; + for (let pendingIndex = 0; pendingIndex < pendingCount; pendingIndex++) { + const spec = batchSpecs[pendingIndex]; + const targetIndexes = batch.get(spec); + const loadResult = loadResults[pendingIndex]; + cache.set(spec, loadResult); + for (const targetIndex of targetIndexes) { + results[targetIndex] = loadResult; + } + } + return results; + })(); + } + return results; + } +} +exports.LoadStep = LoadStep; +async function executeBatches(loadBatches, load, loadOptions) { + try { + const numberOfBatches = loadBatches.length; + if (numberOfBatches === 1) { + const [loadBatch] = loadBatches; + loadBatch.deferred.resolve(load(loadBatch.batchSpecs, loadOptions)); + return; + } + else { + // Do some tick-batching! + const indexStarts = []; + const allBatchSpecs = []; + for (let i = 0; i < numberOfBatches; i++) { + const loadBatch = loadBatches[i]; + indexStarts[i] = allBatchSpecs.length; + for (const batchSpec of loadBatch.batchSpecs) { + allBatchSpecs.push(batchSpec); + } + } + const results = await load(allBatchSpecs, loadOptions); + for (let i = 0; i < numberOfBatches; i++) { + const loadBatch = loadBatches[i]; + const start = indexStarts[i]; + const stop = indexStarts[i + 1] ?? allBatchSpecs.length; + const entries = results.slice(start, stop); + loadBatch.deferred.resolve(entries); + } + } + } + catch (e) { + for (const loadBatch of loadBatches) { + loadBatch.deferred.reject(e); + } + } +} +function load(spec, unarySpec, ioEquivalence, loadCallback) { + return new LoadStep(spec, unarySpec, ioEquivalence, loadCallback); +} +function loadMany(spec, loadCallbackOrIoEquivalenceOrUnarySpec, loadCallbackOrIoEquivalence, loadCallbackOnly) { + if (loadCallbackOnly) { + return load(spec, loadCallbackOrIoEquivalenceOrUnarySpec, loadCallbackOrIoEquivalence, loadCallbackOnly); + } + // At most 3 arguments + else if ((0, multistep_js_1.isMultistep)(loadCallbackOrIoEquivalenceOrUnarySpec)) { + return load(spec, loadCallbackOrIoEquivalenceOrUnarySpec, null, loadCallbackOrIoEquivalence); + } + // Unary step is definitely null; 3 arguments + else if (loadCallbackOrIoEquivalence) { + return load(spec, null, loadCallbackOrIoEquivalenceOrUnarySpec, loadCallbackOrIoEquivalence); + } + // 2 arguments + else { + return load(spec, null, null, loadCallbackOrIoEquivalenceOrUnarySpec); + } +} +function loadOne(spec, loadCallbackOrIoEquivalenceOrUnarySpec, loadCallbackOrIoEquivalence, loadCallbackOnly) { + if (loadCallbackOnly) { + return load(spec, loadCallbackOrIoEquivalenceOrUnarySpec, loadCallbackOrIoEquivalence, loadCallbackOnly).single(); + } + // At most 3 arguments + else if ((0, multistep_js_1.isMultistep)(loadCallbackOrIoEquivalenceOrUnarySpec)) { + return load(spec, loadCallbackOrIoEquivalenceOrUnarySpec, null, loadCallbackOrIoEquivalence).single(); + } + // Unary step is definitely null; 3 arguments + else if (loadCallbackOrIoEquivalence) { + return load(spec, null, loadCallbackOrIoEquivalenceOrUnarySpec, loadCallbackOrIoEquivalence).single(); + } + else { + return load(spec, null, null, loadCallbackOrIoEquivalenceOrUnarySpec).single(); + } +} +//# sourceMappingURL=load.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/load.js.map b/grafast/grafast/dist/steps/load.js.map new file mode 100644 index 0000000000..a8d35bc740 --- /dev/null +++ b/grafast/grafast/dist/steps/load.js.map @@ -0,0 +1 @@ +{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/steps/load.ts"],"names":[],"mappings":";;;AAsDA,0CASC;AAKD,4CASC;AAidD,4BAiHC;AA2ED,0BAsFC;AA/yBD,0CAAoC;AAOpC,kDAAyD;AACzD,wCAAoE;AACpE,0CAA6E;AAC7E,2CAAqC;AAuCrC;;;GAGG;AACH,SAAgB,eAAe,CAM7B,QAA4D;IAE5D,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD;;;GAGG;AACH,SAAgB,gBAAgB,CAM9B,QAA6D;IAE7D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAcD,MAAM,QAAQ,GAAG,IAAI,OAAO,EAA4C,CAAC;AACzE,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB;;GAEG;AACH,MAAa,gBAGX,SAAQ,cAAW;aACZ,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,kBAAkB;KAC/B,AAHc,CAGb;IAMF,YACE,KAAkB,EACV,QAAiB,EACjB,iBAAyB;IACjC,oDAAoD;IAC5C,aAAmC;QAE3C,KAAK,EAAE,CAAC;QALA,aAAQ,GAAR,QAAQ,CAAS;QACjB,sBAAiB,GAAjB,iBAAiB,CAAQ;QAEzB,kBAAa,GAAb,aAAa,CAAsB;QAT7C,kBAAa,GAAG,IAAI,CAAC;QAErB,eAAU,GAAG,IAAI,GAAG,EAAe,CAAC;QACpC,WAAM,GAAqB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAS7C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,YAAY;QACV,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC;IACxC,CAAC;IACD,GAAG,CAAC,IAAqC;QACvC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IACO,SAAS,CAAC,IAAqC;QACrD,wEAAwE;QACxE,IACE,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,MAAM;YACnC,IAAI,CAAC,aAAa,CAAC,IAAW,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAW,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAA,kBAAM,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,QAAQ,CACN,QAAmB,EACnB,KAAyB;QAEzB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,QAAQ;QACN,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,OAAO,YAAY,QAAQ,EAAE,CAAC;YAChC,kDAAkD;YAClD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,OAAO,CAAC,IAAI,CACV,sEAAsE,OAAO,EAAE,CAChF,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,2CAA2C;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,oDAAoD;IACpD,OAAO,CAAC,EACN,KAAK,EACL,MAAM,EAAE,CAAC,OAAO,CAAC,GACS;QAC1B,OAAO,OAAO,CAAC,OAAO;YACpB,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,IAAA,wBAAa,EAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;;AA/EH,4CAgFC;AAED,MAAa,QAMX,SAAQ,cAAI;IACZ,yEAAyE;aAClE,aAAQ,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,AAApD,CAAqD;IAapE,YACE,IAAgB,EAChB,SAAiC,EACzB,aAAwC,EACxC,IAMP;QAED,KAAK,EAAE,CAAC;QATA,kBAAa,GAAb,aAAa,CAA2B;QACxC,SAAI,GAAJ,IAAI,CAMX;QArBI,kBAAa,GAAG,KAAK,CAAC;QAE7B,gBAAW,GAGA,IAAI,CAAC;QAChB,mBAAc,GAAG,EAAE,CAAC;QAEpB,eAAU,GAAG,IAAI,GAAG,EAAe,CAAC;QACpC,WAAM,GAAqB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,eAAU,GAAkB,IAAI,CAAC;QAc/B,MAAM,KAAK,GAAG,IAAA,wBAAS,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,UAAU,GACd,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,wBAAS,EAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,YAAY;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjD,CAAC;IACO,aAAa;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC;QACb,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAClD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;YAChC,OAAO,GAAG,CAAC;QACb,CAAC;aAAM,IAAI,IAAA,kBAAO,EAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAClC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAA,wBAAc,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,kBAAM,EAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACtE,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;aAAM,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAClD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAU,CAAC,CAAC;gBAC5C,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;oBACjB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAA,0BAAgB,EAAC,KAAK,CAAC;wBACjC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;wBAChB,CAAC,CAAC,IAAA,kBAAM,EAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,KAAwB;QAC/B,OAAO,IAAI,gBAAgB,CACzB,KAAK,EACL,KAAK,EACL,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,aAAa,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,MAAM;QAGJ,OAAO,IAAI,gBAAgB,CACzB,IAAI,EACJ,IAAI,EACJ,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,aAAa,EAAE,CACd,CAAC;IACX,CAAC;IACD,QAAQ,CACN,QAAmB,EACnB,KAAyB;QAEzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;IAChC,CAAC;IACD,aAAa,CAAC,UAA4B;QACxC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,QAAQ;QACN,kEAAkE;QAClE,sEAAsE;QACtE,MAAM,iBAAiB,GAAG,IAAA,iCAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa;aAC3B,mBAAmB,CAAC,QAAQ,CAAC;aAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;YACtC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YAC1C,IAAI,IAAA,iCAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,KAAK,iBAAiB;gBAC3D,OAAO,KAAK,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;QACL,KAAK,MAAM,SAAS,IAAI,GAAG,EAAE,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;gBACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAW,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,WAAW,GAAG;YACjB,UAAU,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;YACvC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;QACF,wFAAwF;QACxF,IAAI,CAAC,cAAc,GAAG,IAAA,iCAAsB,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/B,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,YAAY,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3D,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,EACN,KAAK,EACL,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAC1B,KAAK,GAGN;QACC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAgB,CAAC;QACpC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyC,CAAC;QAC/D,MAAM,KAAK,GAAG,OAAO,EAAE,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAErE,MAAM,OAAO,GAAyC,EAAE,CAAC;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,iCAAiC;gBACjC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;QAChC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAA,gBAAK,GAA+B,CAAC;YACtD,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,MAAM,SAAS,GAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAE,CAAC;YACrC,CAAC;YACD,IAAI,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,WAAW,EAAE,CAAC;gBAChB,6BAA6B;gBAC7B,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,wBAAwB;gBACxB,WAAW,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBACnD,8IAA8I;gBAC9I,MAAM,WAAW,GAAG,IAAI,CAAC,WAAY,CAAC;gBACtC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;oBACpB,gDAAgD;oBAChD,IAAI,CAAC,iBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC1C,cAAc,CAAC,WAAY,EAAE,IAAI,CAAC,IAAI,EAAE;wBACtC,GAAG,WAAW;wBACd,KAAK,EAAE,KAAyC;qBACjD,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,CAAC,KAAK,IAAI,EAAE;gBACjB,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC;gBACnC,KACE,IAAI,YAAY,GAAG,CAAC,EACpB,YAAY,GAAG,YAAY,EAC3B,YAAY,EAAE,EACd,CAAC;oBACD,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;oBACtC,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;oBACvC,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;oBAC7C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAC5B,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;wBACxC,OAAO,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;oBACpC,CAAC;gBACH,CAAC;gBACD,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;;AAzNH,4BA0NC;AAED,KAAK,UAAU,cAAc,CAC3B,WAAiC,EACjC,IAA2C,EAC3C,WAAuC;IAEvC,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC;QAC3C,IAAI,eAAe,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;YAChC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,MAAM,aAAa,GAAU,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;gBACtC,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;oBAC7C,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC;gBACxD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3C,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,MAAM,SAAS,IAAI,WAAW,EAAE,CAAC;YACpC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAOX,IAAgB,EAChB,SAAiC,EACjC,aAAwC,EACxC,YAMC;IAED,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;AACpE,CAAC;AAsFD,SAAgB,QAAQ,CAMtB,IAAgB,EAChB,sCAQmB,EACnB,2BAE6B,EAC7B,gBAKC;IAQD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,IAAI,CACT,IAAI,EACJ,sCAAgE,EAChE,2BAAwD,EACxD,gBAKC,CAOF,CAAC;IACJ,CAAC;IACD,sBAAsB;SACjB,IACH,IAAA,0BAAW,EAAkB,sCAAsC,CAAC,EACpE,CAAC;QACD,OAAO,IAAI,CACT,IAAI,EACJ,sCAAsC,EACtC,IAAI,EACJ,2BAKC,CAOF,CAAC;IACJ,CAAC;IACD,6CAA6C;SACxC,IAAI,2BAA2B,EAAE,CAAC;QACrC,OAAO,IAAI,CACT,IAAI,EACJ,IAAI,EACJ,sCAAmE,EACnE,2BAKC,CAOF,CAAC;IACJ,CAAC;IACD,cAAc;SACT,CAAC;QACJ,OAAO,IAAI,CACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,sCAKC,CAOF,CAAC;IACJ,CAAC;AACH,CAAC;AA2ED,SAAgB,OAAO,CAMrB,IAAgB,EAChB,sCAQmB,EACnB,2BAO6B,EAC7B,gBAKC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,IAAI,CACT,IAAI,EACJ,sCAAgE,EAChE,2BAAwD,EACxD,gBAKC,CACF,CAAC,MAAM,EAAE,CAAC;IACb,CAAC;IACD,sBAAsB;SACjB,IACH,IAAA,0BAAW,EAAkB,sCAAsC,CAAC,EACpE,CAAC;QACD,OAAO,IAAI,CACT,IAAI,EACJ,sCAAsC,EACtC,IAAI,EACJ,2BAKC,CACF,CAAC,MAAM,EAAE,CAAC;IACb,CAAC;IACD,6CAA6C;SACxC,IAAI,2BAA2B,EAAE,CAAC;QACrC,OAAO,IAAI,CACT,IAAI,EACJ,IAAI,EACJ,sCAAmE,EACnE,2BAKC,CACF,CAAC,MAAM,EAAE,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CACT,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,sCAKC,CACF,CAAC,MAAM,EAAE,CAAC;IACb,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/node.d.ts b/grafast/grafast/dist/steps/node.d.ts new file mode 100644 index 0000000000..866322f610 --- /dev/null +++ b/grafast/grafast/dist/steps/node.d.ts @@ -0,0 +1,47 @@ +import type { GraphQLObjectType } from "graphql"; +import type { Maybe, NodeIdHandler, PolymorphicData, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { PolymorphicStep, Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +/** + * A plan to get a Node by its global object identifier (string). Accepts an + * object specifying the supported codecs, an object map detailing the + * typeNames supported and their details (codec to use, how to find the record, + * etc), and finally the Node id string plan. + */ +export declare class NodeStep extends UnbatchedStep implements PolymorphicStep { + private possibleTypes; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + private specPlanDep; + constructor(possibleTypes: { + [typeName: string]: NodeIdHandler; + }, $id: Step); + planForType(type: GraphQLObjectType): Step; + private getTypeNameFromSpecifier; + unbatchedExecute: (_extra: UnbatchedExecutionExtra, specifier: any) => PolymorphicData> | null; +} +/** + * A plan to get a Node by its global object identifier (string). Accepts an + * object specifying the supported codecs, an object map detailing the + * typeNames supported and their details (codec to use, how to find the record, + * etc), and finally the Node id string plan. + */ +export declare function node(possibleTypes: { + [typeName: string]: NodeIdHandler; +}, $id: Step): NodeStep; +export declare function specFromNodeId(handler: NodeIdHandler, $id: Step>): any; +export declare function nodeIdFromNode(handler: NodeIdHandler, $node: Step): import("./lambda.js").LambdaStep; +export declare function makeDecodeNodeIdRuntime(handlers: readonly NodeIdHandler[]): { + (raw: string | null | undefined): { + [codecName: string]: any; + } | null; + isSyncAndSafe: boolean; +}; +export declare function makeDecodeNodeId(handlers: readonly NodeIdHandler[]): ($id: Step) => import("./lambda.js").LambdaStep; +//# sourceMappingURL=node.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/node.d.ts.map b/grafast/grafast/dist/steps/node.d.ts.map new file mode 100644 index 0000000000..a1197e115e --- /dev/null +++ b/grafast/grafast/dist/steps/node.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/steps/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAIjD,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,eAAe,EACf,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK3C;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,aAAc,YAAW,eAAe;IAWlE,OAAO,CAAC,aAAa;IAVvB,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,0BAA0B,UAAQ;IAElC,OAAO,CAAC,WAAW,CAAS;gBAGlB,aAAa,EAAE;QACrB,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;KACnC,EACD,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAOtC,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAW1C,OAAO,CAAC,wBAAwB;IAiBhC,gBAAgB,GACd,QAAQ,uBAAuB,EAC/B,WAAW,GAAG,KACb,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAKnD;CACH;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAClB,aAAa,EAAE;IACb,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAAC;CACnC,EACD,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GACnC,QAAQ,CAEV;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAC3B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,OAkBzB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,wDAGtE;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE;UAGnC,MAAM,GAAG,IAAI,GAAG,SAAS;;;;EAkB/D;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,IAEzD,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;;UAE7C"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/node.js b/grafast/grafast/dist/steps/node.js new file mode 100644 index 0000000000..b5d465360b --- /dev/null +++ b/grafast/grafast/dist/steps/node.js @@ -0,0 +1,119 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NodeStep = void 0; +exports.node = node; +exports.specFromNodeId = specFromNodeId; +exports.nodeIdFromNode = nodeIdFromNode; +exports.makeDecodeNodeIdRuntime = makeDecodeNodeIdRuntime; +exports.makeDecodeNodeId = makeDecodeNodeId; +const dev_js_1 = require("../dev.js"); +const inspect_js_1 = require("../inspect.js"); +const polymorphic_js_1 = require("../polymorphic.js"); +const step_js_1 = require("../step.js"); +const access_js_1 = require("./access.js"); +const constant_js_1 = require("./constant.js"); +const lambda_js_1 = require("./lambda.js"); +/** + * A plan to get a Node by its global object identifier (string). Accepts an + * object specifying the supported codecs, an object map detailing the + * typeNames supported and their details (codec to use, how to find the record, + * etc), and finally the Node id string plan. + */ +class NodeStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "NodeStep", + }; } + constructor(possibleTypes, $id) { + super(); + this.possibleTypes = possibleTypes; + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.unbatchedExecute = (_extra, specifier) => { + const typeName = specifier + ? this.getTypeNameFromSpecifier(specifier) + : null; + return typeName ? (0, polymorphic_js_1.polymorphicWrap)(typeName) : null; + }; + const decodeNodeId = makeDecodeNodeId(Object.values(possibleTypes)); + this.specPlanDep = this.addDependency(decodeNodeId($id)); + } + planForType(type) { + const spec = this.possibleTypes[type.name]; + if (spec !== undefined) { + return spec.get(spec.getSpec((0, access_js_1.access)(this.getDep(this.specPlanDep), [spec.codec.name]))); + } + else { + return (0, constant_js_1.constant)(null); + } + } + getTypeNameFromSpecifier(specifier) { + for (const [typeName, typeSpec] of Object.entries(this.possibleTypes)) { + const value = specifier[typeSpec.codec.name]; + if (value != null && typeSpec.match(value)) { + return typeName; + } + } + if (dev_js_1.isDev) { + console.error(`Could not find a type that matched the specifier '${(0, inspect_js_1.inspect)(specifier)}'`); + } + return null; + } +} +exports.NodeStep = NodeStep; +/** + * A plan to get a Node by its global object identifier (string). Accepts an + * object specifying the supported codecs, an object map detailing the + * typeNames supported and their details (codec to use, how to find the record, + * etc), and finally the Node id string plan. + */ +function node(possibleTypes, $id) { + return new NodeStep(possibleTypes, $id); +} +function specFromNodeId(handler, $id) { + function decodeWithCodecAndHandler(raw) { + if (raw == null) + return raw; + try { + const decoded = handler.codec.decode(raw); + if (handler.match(decoded)) { + return decoded; + } + return null; + } + catch (e) { + return null; + } + } + decodeWithCodecAndHandler.displayName = `decode_${handler.typeName}_${handler.codec.name}`; + decodeWithCodecAndHandler.isSyncAndSafe = true; // Optimization + const $decoded = (0, lambda_js_1.lambda)($id, decodeWithCodecAndHandler); + return handler.getSpec($decoded); +} +function nodeIdFromNode(handler, $node) { + const specifier = handler.plan($node); + return (0, lambda_js_1.lambda)(specifier, handler.codec.encode); +} +function makeDecodeNodeIdRuntime(handlers) { + const codecs = [...new Set(handlers.map((h) => h.codec))]; + function decodeNodeIdWithCodecs(raw) { + if (raw == null) + return null; + return codecs.reduce((memo, codec) => { + try { + memo[codec.name] = codec.decode(raw); + } + catch (e) { + memo[codec.name] = null; + } + return memo; + }, { raw }); + } + decodeNodeIdWithCodecs.isSyncAndSafe = true; // Optimization + return decodeNodeIdWithCodecs; +} +function makeDecodeNodeId(handlers) { + const decodeNodeIdWithCodecs = makeDecodeNodeIdRuntime(handlers); + return ($id) => (0, lambda_js_1.lambda)($id, decodeNodeIdWithCodecs); +} +//# sourceMappingURL=node.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/node.js.map b/grafast/grafast/dist/steps/node.js.map new file mode 100644 index 0000000000..2bb1ac1789 --- /dev/null +++ b/grafast/grafast/dist/steps/node.js.map @@ -0,0 +1 @@ +{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/steps/node.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/object.d.ts b/grafast/grafast/dist/steps/object.d.ts new file mode 100644 index 0000000000..fcd286128b --- /dev/null +++ b/grafast/grafast/dist/steps/object.d.ts @@ -0,0 +1,73 @@ +import type { DataFromStep, ExecutionDetails, ExecutionExtra, StepOptimizeOptions, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +import { ConstantStep } from "./constant.js"; +export type DataFromObjectSteps = { + [key in keyof TSteps]: DataFromStep; +}; +type Results = Array<[ + Array[keyof TSteps]>, + DataFromObjectSteps +]>; +export interface ObjectPlanMeta { + results: Results; +} +interface ObjectStepCacheConfig { + identifier?: string; + cacheSize?: number; +} +/** + * A plan that represents an object using the keys given and the values being + * the results of the associated plans. + */ +export declare class ObjectStep extends UnbatchedStep> { + private cacheConfig?; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + private readonly keys; + optimizeMetaKey: string; + private cacheSize; + constructor(obj: TPlans, cacheConfig?: ObjectStepCacheConfig | undefined); + private _setKeys; + /** + * This key doesn't get typed, but it can be added later which can be quite + * handy. + */ + set(key: TKey, plan: TPlans[TKey]): void; + getStepForKey(key: TKey): TPlans[TKey]; + getStepForKey(key: TKey, allowMissing: true): TPlans[TKey] | null; + toStringMeta(): string; + tupleToObjectJIT(callback: (fn: (extra: ExecutionExtra, ...tuple: Array[keyof TPlans]>) => DataFromObjectSteps) => void): void; + finalize(): void; + execute({ indexMap, values, extra, }: ExecutionDetails[keyof TPlans]>>): ReadonlyArray>; + unbatchedExecute(_extra: UnbatchedExecutionExtra, ..._values: any[]): any; + deduplicate(peers: ObjectStep[]): ObjectStep[]; + optimize(opts: StepOptimizeOptions): ConstantStep | this | ConstantStep>; + /** + * Get the original plan with the given key back again. + */ + get(key: TKey): TPlans[TKey]; +} +/** + * A plan that represents an object using the keys given and the values being + * the results of the associated plans. + */ +export declare function object(obj: TPlans, cacheConfig?: ObjectStepCacheConfig): ObjectStep; +export {}; +//# sourceMappingURL=object.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/object.d.ts.map b/grafast/grafast/dist/steps/object.d.ts.map new file mode 100644 index 0000000000..0036d9df52 --- /dev/null +++ b/grafast/grafast/dist/steps/object.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/steps/object.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/object.js b/grafast/grafast/dist/steps/object.js new file mode 100644 index 0000000000..0af2e02f77 --- /dev/null +++ b/grafast/grafast/dist/steps/object.js @@ -0,0 +1,216 @@ +"use strict"; +// import debugFactory from "debug"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ObjectStep = void 0; +exports.object = object; +const tslib_1 = require("tslib"); +const tamedevil_1 = tslib_1.__importStar(require("tamedevil")); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +const constant_js_1 = require("./constant.js"); +const DEFAULT_CACHE_SIZE = 100; +const EMPTY_OBJECT = Object.freeze(Object.create(null)); +/** + * A plan that represents an object using the keys given and the values being + * the results of the associated plans. + */ +class ObjectStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ObjectStep", + }; } + constructor(obj, cacheConfig) { + super(); + this.cacheConfig = cacheConfig; + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.keys = []; + // Optimize needs the same 'meta' for all ObjectSteps + this.optimizeMetaKey = "ObjectStep"; + this.cacheSize = + cacheConfig?.cacheSize ?? + (cacheConfig?.identifier ? DEFAULT_CACHE_SIZE : 0); + const keys = Object.keys(obj); + this._setKeys(keys); + for (let i = 0, l = this.keys.length; i < l; i++) { + this.addDependency({ step: obj[keys[i]], skipDeduplication: true }); + } + } + _setKeys(keys) { + this.keys = keys; + this.peerKey = (0, utils_js_1.digestKeys)(keys); + this.metaKey = + this.cacheSize <= 0 + ? undefined + : this.cacheConfig?.identifier + ? `object|${this.peerKey}|${this.cacheConfig.identifier}` + : this.id; + } + /** + * This key doesn't get typed, but it can be added later which can be quite + * handy. + */ + set(key, plan) { + this._setKeys([...this.keys, key]); + this.addDependency({ step: plan, skipDeduplication: true }); + } + getStepForKey(key, allowMissing = false) { + const idx = this.keys.indexOf(key); + if (idx < 0) { + if (!allowMissing) { + throw new Error(`${this}: failed to retrieve plan for key '${String(key)}' - we have no such key`); + } + return null; + } + return this.getDepOptions(idx).step; + } + toStringMeta() { + return "{" + this.keys.join(",") + "}"; + } + /* + tupleToObject( + meta: ObjectPlanMeta, + ...tuple: Array[keyof TPlans]> + ): DataFromObjectSteps { + // Note: `outerloop` is a JavaScript "label". They are not very common. + // First look for an existing match: + outerloop: for (let i = 0, l = meta.results.length; i < l; i++) { + const [values, obj] = meta.results[i]; + // Slow loop over each value in the tuples; this is not expected to be a + // particularly big loop, typically only 2-5 keys. + for (let j = 0, m = this.keys.length; j < m; j++) { + if (values[j] !== tuple[j]) { + // This isn't a match; try the next record in the outer loop + continue outerloop; + } + } + return obj; + } + + // That failed; create a new object. + debugObjectPlanVerbose( + "%s: Could not find cache for keys %c values %c, constructing new object", + this, + this.keys, + tuple, + ); + const newObj = this.keys.reduce((memo, key, i) => { + memo[key] = tuple[i]; + return memo; + }, {} as Partial>) as DataFromObjectSteps; + + // Cache newObj so the same tuple values result in the exact same object. + meta.results.push([tuple, newObj]); + return newObj; + } + */ + tupleToObjectJIT(callback) { + if (this.keys.length === 0) { + // Shortcut simple case + return callback(() => EMPTY_OBJECT); + } + const keysAreSafe = this.keys.every(tamedevil_1.isSafeObjectPropertyName); + const inner = keysAreSafe + ? (0, tamedevil_1.default) `\ + const newObj = { +${tamedevil_1.default.join(this.keys.map((key, i) => (0, tamedevil_1.default) ` ${tamedevil_1.default.safeKeyOrThrow(key)}: ${tamedevil_1.default.identifier(`val${i}`)}`), ",\n")} + }; +` + : (0, tamedevil_1.default) `\ + const newObj = Object.create(null); +${tamedevil_1.default.join(this.keys.map((key, i) => (0, tamedevil_1.default) ` newObj${tamedevil_1.default.set(key, true)} = ${tamedevil_1.default.identifier(`val${i}`)};\n`), "")}\ +`; + const vals = tamedevil_1.default.join(this.keys.map((_k, i) => tamedevil_1.default.identifier(`val${i}`)), ", "); + if (this.cacheSize > 0) { + return tamedevil_1.default.runInBatch((0, tamedevil_1.default) `\ +(function ({ meta }, ${vals}) { + if (meta.nextIndex != null) { + for (let i = 0, l = meta.results.length; i < l; i++) { + const [values, obj] = meta.results[i]; + if (${tamedevil_1.default.join(this.keys.map((_key, i) => (0, tamedevil_1.default) `values[${tamedevil_1.default.lit(i)}] === ${tamedevil_1.default.identifier(`val${i}`)}`), " && ")}) { + return obj; + } + } + } else { + meta.nextIndex = 0; + meta.results = []; + } +${inner} + meta.results[meta.nextIndex] = [[${tamedevil_1.default.join(this.keys.map((_key, i) => tamedevil_1.default.identifier(`val${i}`)), ",")}], newObj]; + // Only cache ${tamedevil_1.default.lit(this.cacheSize)} results, use a round-robin + meta.nextIndex = meta.nextIndex === ${tamedevil_1.default.lit(this.cacheSize - 1)} ? 0 : meta.nextIndex + 1; + return newObj; +})`, callback); + } + else { + return tamedevil_1.default.runInBatch((0, tamedevil_1.default) `\ +(function (_, ${vals}) { +${inner} + return newObj; +})`, callback); + } + } + finalize() { + this.tupleToObjectJIT((fn) => { + this.unbatchedExecute = fn; + }); + return super.finalize(); + } + execute({ indexMap, values, extra, }) { + return indexMap((i) => this.unbatchedExecute(extra, ...values.map((v) => v.at(i)))); + } + unbatchedExecute(_extra, ..._values) { + throw new Error(`${this} didn't finalize? No unbatchedExecute method.`); + } + deduplicate(peers) { + // Managed through peerKey + return peers; + } + optimize(opts) { + if (this.dependencies.every((dep) => dep instanceof constant_js_1.ConstantStep)) { + // Replace self with constant + // We'll cache so that the constants can be more easily deduplicated + const meta = opts.meta; + const keysJoined = this.keys.join(","); + if (!meta[keysJoined]) { + meta[keysJoined] = []; + } + const existing = meta[keysJoined].find((existingObj) => this.keys.every((key, i) => existingObj[key] === + this.dependencies[i].data)); + const isSensitive = this.dependencies.some((d) => d.isSensitive); + if (existing !== undefined) { + return (0, constant_js_1.constant)(existing, isSensitive); + } + else { + const obj = Object.create(null); + for (let i = 0, l = this.keys.length; i < l; i++) { + const key = this.keys[i]; + const value = this.dependencies[i].data; + obj[key] = value; + } + meta[keysJoined].push(obj); + return (0, constant_js_1.constant)(obj, isSensitive); + } + } + return this; + } + /** + * Get the original plan with the given key back again. + */ + get(key) { + const index = this.keys.indexOf(key); + if (index < 0) { + throw new Error(`This ObjectStep doesn't have key '${String(key)}'; supported keys: '${this.keys.join("', '")}'`); + } + return this.getDepOptions(index).step; + } +} +exports.ObjectStep = ObjectStep; +/** + * A plan that represents an object using the keys given and the values being + * the results of the associated plans. + */ +function object(obj, cacheConfig) { + return new ObjectStep(obj, cacheConfig); +} +//# sourceMappingURL=object.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/object.js.map b/grafast/grafast/dist/steps/object.js.map new file mode 100644 index 0000000000..0456154be6 --- /dev/null +++ b/grafast/grafast/dist/steps/object.js.map @@ -0,0 +1 @@ +{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/steps/object.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/partitionByIndex.d.ts b/grafast/grafast/dist/steps/partitionByIndex.d.ts new file mode 100644 index 0000000000..11b66aec46 --- /dev/null +++ b/grafast/grafast/dist/steps/partitionByIndex.d.ts @@ -0,0 +1,40 @@ +import type { Step } from "../step.js"; +import type { ConnectionCapableStep, ItemsStep } from "./connection.js"; +import type { __ListTransformStep, ListTransformItemPlanCallback } from "./listTransform.js"; +/** + * Takes a single dimensional list plan and a mapper that calculates a + * (potentially duplicate) target index for each entry in the list. Returns a + * plan that results in a two dimensional list of the items in the original + * list partitioned (grouped) by their target index. + * + * If your datasource returns indexes that are 1-indexed then you may pass `1` + * as the third argument and we'll account for this. + * + * @example For this data: + * + * ```jsonc + * [ + * {"array_idx": 1, "id": "b0b00000-0000-0000-0000-000000000b0b", "username": "Bob"}, + * {"array_idx": 2, "id": "a11ce000-0000-0000-0000-0000000a11ce", "username": "Alice"}], + * {"array_idx": 2, "id": "cec111a0-0000-0000-0000-00000cec111a", "username": "Cecilia"}], + * ] + * ``` + * + * partitioning by the array_idx (which is 1-indexed), would result in: + * + * ```jsonc + * [ + * [ + * {"array_idx": 1, "id": "b0b00000-0000-0000-0000-000000000b0b", "username": "Bob"}, + * ], + * [ + * {"array_idx": 2, "id": "a11ce000-0000-0000-0000-0000000a11ce", "username": "Alice"}], + * {"array_idx": 2, "id": "cec111a0-0000-0000-0000-00000cec111a", "username": "Cecilia"}], + * ], + * ] + * ``` + * + * Beware: the target indexes should not contain gaps. + */ +export declare function partitionByIndex | ConnectionCapableStep, TItemStep extends Step>(listStep: TListStep, mapper: ListTransformItemPlanCallback, TItemStep>, startIndex?: 0 | 1): __ListTransformStep; +//# sourceMappingURL=partitionByIndex.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/partitionByIndex.d.ts.map b/grafast/grafast/dist/steps/partitionByIndex.d.ts.map new file mode 100644 index 0000000000..cbca68d455 --- /dev/null +++ b/grafast/grafast/dist/steps/partitionByIndex.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"partitionByIndex.d.ts","sourceRoot":"","sources":["../../src/steps/partitionByIndex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,KAAK,EACV,mBAAmB,EACnB,6BAA6B,EAE9B,MAAM,oBAAoB,CAAC;AA8B5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,SAAS,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,EACxE,SAAS,SAAS,IAAI,CAAC,MAAM,CAAC,EAE9B,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,6BAA6B,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,EACtE,UAAU,GAAE,CAAC,GAAG,CAAK,GACpB,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAsB7D"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/partitionByIndex.js b/grafast/grafast/dist/steps/partitionByIndex.js new file mode 100644 index 0000000000..3faf8278f0 --- /dev/null +++ b/grafast/grafast/dist/steps/partitionByIndex.js @@ -0,0 +1,85 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.partitionByIndex = partitionByIndex; +const tslib_1 = require("tslib"); +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const step_js_1 = require("../step.js"); +const each_js_1 = require("./each.js"); +const listTransform_js_1 = require("./listTransform.js"); +/** + * For 0-based indexes + * + * @internal + */ +const reduceCallback0 = (memo, entireItemValue, idx) => { + if (!memo[idx]) + memo[idx] = []; + memo[idx].push(entireItemValue); + return memo; +}; +/** + * For 1-based indexes + * + * @internal + */ +const reduceCallback1 = (memo, entireItemValue, idx1) => { + const idx = idx1 - 1; + if (!memo[idx]) + memo[idx] = []; + memo[idx].push(entireItemValue); + return memo; +}; +const initialState = () => []; +/** + * Takes a single dimensional list plan and a mapper that calculates a + * (potentially duplicate) target index for each entry in the list. Returns a + * plan that results in a two dimensional list of the items in the original + * list partitioned (grouped) by their target index. + * + * If your datasource returns indexes that are 1-indexed then you may pass `1` + * as the third argument and we'll account for this. + * + * @example For this data: + * + * ```jsonc + * [ + * {"array_idx": 1, "id": "b0b00000-0000-0000-0000-000000000b0b", "username": "Bob"}, + * {"array_idx": 2, "id": "a11ce000-0000-0000-0000-0000000a11ce", "username": "Alice"}], + * {"array_idx": 2, "id": "cec111a0-0000-0000-0000-00000cec111a", "username": "Cecilia"}], + * ] + * ``` + * + * partitioning by the array_idx (which is 1-indexed), would result in: + * + * ```jsonc + * [ + * [ + * {"array_idx": 1, "id": "b0b00000-0000-0000-0000-000000000b0b", "username": "Bob"}, + * ], + * [ + * {"array_idx": 2, "id": "a11ce000-0000-0000-0000-0000000a11ce", "username": "Alice"}], + * {"array_idx": 2, "id": "cec111a0-0000-0000-0000-00000cec111a", "username": "Cecilia"}], + * ], + * ] + * ``` + * + * Beware: the target indexes should not contain gaps. + */ +function partitionByIndex(listStep, mapper, startIndex = 0) { + if (startIndex !== 0 && startIndex !== 1) { + throw new Error(`partitionByIndex only supports 0- and 1-indexed lists currently; please use 'lambda' to convert your index`); + } + return (0, listTransform_js_1.listTransform)({ + listStep, + itemPlanCallback: mapper, + initialState, + reduceCallback: startIndex === 1 ? reduceCallback1 : reduceCallback0, + listItem: (0, step_js_1.isListCapableStep)(listStep) + ? (itemPlan) => { + return (0, each_js_1.each)(itemPlan, ($item) => listStep.listItem($item)); + } + : undefined, + meta: `partitionByIndex${startIndex}:${chalk_1.default.yellow(listStep.id)}${mapper.name ? `/${mapper.name}` : ""}`, + }); +} +//# sourceMappingURL=partitionByIndex.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/partitionByIndex.js.map b/grafast/grafast/dist/steps/partitionByIndex.js.map new file mode 100644 index 0000000000..8f69d8d98d --- /dev/null +++ b/grafast/grafast/dist/steps/partitionByIndex.js.map @@ -0,0 +1 @@ +{"version":3,"file":"partitionByIndex.js","sourceRoot":"","sources":["../../src/steps/partitionByIndex.ts"],"names":[],"mappings":";;AA4EA,4CA6BC;;AAzGD,0DAA0B;AAG1B,wCAA+C;AAG/C,uCAAiC;AAMjC,yDAAmD;AAInD;;;;GAIG;AACH,MAAM,eAAe,GAAW,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,EAAE;IAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,eAAe,GAAW,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE;IAC9D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;IACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,SAAgB,gBAAgB,CAI9B,QAAmB,EACnB,MAAsE,EACtE,aAAoB,CAAC;IAErB,IAAI,UAAU,KAAK,CAAC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IACD,OAAO,IAAA,gCAAa,EAAyC;QAC3D,QAAQ;QACR,gBAAgB,EAAE,MAAM;QACxB,YAAY;QACZ,cAAc,EAAE,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe;QACpE,QAAQ,EAAE,IAAA,2BAAiB,EAAC,QAAQ,CAAC;YACnC,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACX,OAAO,IAAA,cAAI,EAAC,QAAe,EAAE,CAAC,KAAK,EAAE,EAAE,CACrC,QAAQ,CAAC,QAAQ,CAAC,KAAY,CAAC,CAChC,CAAC;YACJ,CAAC;YACH,CAAC,CAAC,SAAS;QACb,IAAI,EAAE,mBAAmB,UAAU,IAAI,eAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EACpC,EAAE;KACH,CAAC,CAAC;AACL,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/polymorphicBranch.d.ts b/grafast/grafast/dist/steps/polymorphicBranch.d.ts new file mode 100644 index 0000000000..d84c37d9c2 --- /dev/null +++ b/grafast/grafast/dist/steps/polymorphicBranch.d.ts @@ -0,0 +1,27 @@ +import type { GraphQLObjectType } from "graphql"; +import type { ExecutionDetails, GrafastResultsList, PromiseOrDirect } from "../index.js"; +import type { PolymorphicStep } from "../step.js"; +import { Step } from "../step.js"; +type StepData = TStep extends Step ? U : any; +export interface PolymorphicBranchMatchers { + [typeName: string]: PolymorphicBranchMatcher; +} +export interface PolymorphicBranchMatcher { + match?: (obj: StepData) => boolean; + plan?: ($obj: TStep) => Step; +} +export declare class PolymorphicBranchStep extends Step implements PolymorphicStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private typeNames; + private matchers; + constructor($step: TStep, matchers: PolymorphicBranchMatchers); + planForType(objectType: GraphQLObjectType): Step; + execute({ indexMap, values: [values0], }: ExecutionDetails): PromiseOrDirect>; +} +export declare function polymorphicBranch($step: TStep, matchers: PolymorphicBranchMatchers): PolymorphicBranchStep; +export {}; +//# sourceMappingURL=polymorphicBranch.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/polymorphicBranch.d.ts.map b/grafast/grafast/dist/steps/polymorphicBranch.d.ts.map new file mode 100644 index 0000000000..21661d2995 --- /dev/null +++ b/grafast/grafast/dist/steps/polymorphicBranch.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"polymorphicBranch.d.ts","sourceRoot":"","sources":["../../src/steps/polymorphicBranch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC,KAAK,QAAQ,CAAC,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAM1E,MAAM,WAAW,yBAAyB,CAAC,KAAK,SAAS,IAAI;IAC3D,CAAC,QAAQ,EAAE,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;CACrD;AACD,MAAM,WAAW,wBAAwB,CAAC,KAAK,SAAS,IAAI;IAC1D,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;CAC9B;AAED,qBAAa,qBAAqB,CAAC,KAAK,SAAS,IAAI,CACnD,SAAQ,IACR,YAAW,eAAe;IAE1B,MAAM,CAAC,QAAQ;;;MAGb;IACK,aAAa,UAAQ;IAC5B,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,QAAQ,CAEd;gBACU,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,yBAAyB,CAAC,KAAK,CAAC;IAepE,WAAW,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAehD,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,OAAO,CAAC,GAClB,EAAE,gBAAgB,GAAG,eAAe,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;CAe/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,IAAI,EAClD,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,yBAAyB,CAAC,KAAK,CAAC,gCAG3C"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/polymorphicBranch.js b/grafast/grafast/dist/steps/polymorphicBranch.js new file mode 100644 index 0000000000..e222ea5f1a --- /dev/null +++ b/grafast/grafast/dist/steps/polymorphicBranch.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PolymorphicBranchStep = void 0; +exports.polymorphicBranch = polymorphicBranch; +const index_js_1 = require("../index.js"); +const step_js_1 = require("../step.js"); +const constant_js_1 = require("./constant.js"); +class PolymorphicBranchStep extends step_js_1.Step { + static { this.$$export = { + moduleName: "grafast", + exportName: "PolymorphicBranchStep", + }; } + constructor($step, matchers) { + super(); + this.isSyncAndSafe = true; + this.addDependency($step); + this.typeNames = Object.keys(matchers); + this.matchers = Object.fromEntries(Object.entries(matchers).map(([typeName, matcher]) => { + const fixedMatcher = { + match: matcher.match ?? ((obj) => obj.__typename === typeName), + plan: matcher.plan ?? (($obj) => $obj), + }; + return [typeName, fixedMatcher]; + })); + } + planForType(objectType) { + const matcher = this.matchers[objectType.name]; + const $step = this.getDep(0, true); + if (matcher) { + if (typeof matcher.plan === "function") { + return matcher.plan($step); + } + else { + return $step; + } + } + else { + // TODO: should this be an error? + return (0, constant_js_1.constant)(null); + } + } + execute({ indexMap, values: [values0], }) { + return indexMap((i) => { + const obj = values0.at(i); + let match = null; + if (obj != null) { + for (const typeName of this.typeNames) { + if (this.matchers[typeName].match(obj)) { + match = typeName; + break; + } + } + } + return match !== null ? (0, index_js_1.polymorphicWrap)(match, obj) : null; + }); + } +} +exports.PolymorphicBranchStep = PolymorphicBranchStep; +function polymorphicBranch($step, matchers) { + return new PolymorphicBranchStep($step, matchers); +} +//# sourceMappingURL=polymorphicBranch.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/polymorphicBranch.js.map b/grafast/grafast/dist/steps/polymorphicBranch.js.map new file mode 100644 index 0000000000..f6bb4a39b9 --- /dev/null +++ b/grafast/grafast/dist/steps/polymorphicBranch.js.map @@ -0,0 +1 @@ +{"version":3,"file":"polymorphicBranch.js","sourceRoot":"","sources":["../../src/steps/polymorphicBranch.ts"],"names":[],"mappings":";;;AAyFA,8CAKC;AAvFD,0CAA8C;AAE9C,wCAAkC;AAClC,+CAAyC;AAgBzC,MAAa,qBACX,SAAQ,cAAI;aAGL,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,uBAAuB;KACpC,AAHc,CAGb;IAMF,YAAY,KAAY,EAAE,QAA0C;QAClE,KAAK,EAAE,CAAC;QANH,kBAAa,GAAG,IAAI,CAAC;QAO1B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE;YACnD,MAAM,YAAY,GAAG;gBACnB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC;gBAC9D,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;aACvC,CAAC;YACF,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAClC,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,UAA6B;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACvC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iCAAiC;YACjC,OAAO,IAAA,sBAAQ,EAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,OAAO,CAAC,GACA;QACjB,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,KAAK,GAAkB,IAAI,CAAC;YAChC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvC,KAAK,GAAG,QAAQ,CAAC;wBACjB,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAA,0BAAe,EAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC;;AA5DH,sDA6DC;AAED,SAAgB,iBAAiB,CAC/B,KAAY,EACZ,QAA0C;IAE1C,OAAO,IAAI,qBAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACpD,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/proxy.d.ts b/grafast/grafast/dist/steps/proxy.d.ts new file mode 100644 index 0000000000..428f82d689 --- /dev/null +++ b/grafast/grafast/dist/steps/proxy.d.ts @@ -0,0 +1,38 @@ +import type { ExecutionDetails, GrafastResultsList, UnbatchedExecutionExtra } from "../interfaces.js"; +import { $$proxy } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +/** + * @experimental + * + * Never build this class directly. + */ +export declare class ProxyStep extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + private $depId; + constructor($dep: Step, $actualDep: Step); + toStringMeta(): string | null; + addDependency(step: Step): number; + execute({ count, values: [values0], }: ExecutionDetails<[T]>): GrafastResultsList; + unbatchedExecute(_extra: UnbatchedExecutionExtra, value: T): T; + stream: undefined; +} +declare module "../step.js" { + interface Step { + [$$proxy]?: any; + } +} +/** + * @experimental + * + * This could change at any time, may impact performance, and just, generally, + * needs more work. You shouldn't need this in the vast majority of cases. + */ +export declare function proxy>($step: TStep, $actualDep?: Step): TStep & { + addDependency(step: Step): number; +}; +//# sourceMappingURL=proxy.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/proxy.d.ts.map b/grafast/grafast/dist/steps/proxy.d.ts.map new file mode 100644 index 0000000000..97c286e73a --- /dev/null +++ b/grafast/grafast/dist/steps/proxy.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/steps/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C;;;;GAIG;AACH,qBAAa,SAAS,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,OAAO,CAAC,MAAM,CAAS;gBACX,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI;IAKpC,YAAY,IAAI,MAAM,GAAG,IAAI;IAK7B,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAGxC,OAAO,CAAC,EACN,KAAK,EACL,MAAM,EAAE,CAAC,OAAO,CAAC,GAClB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;IAKhD,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAI9D,MAAM,YAAa;CACpB;AAED,OAAO,QAAQ,YAAY,CAAC;IAC1B,UAAU,IAAI;QACZ,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC;KACjB;CACF;AAgED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,EACpD,KAAK,EAAE,KAAK,EACZ,UAAU,GAAE,IAAY,GACvB,KAAK,GAAG;IAAE,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAK/C"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/proxy.js b/grafast/grafast/dist/steps/proxy.js new file mode 100644 index 0000000000..af62bddf56 --- /dev/null +++ b/grafast/grafast/dist/steps/proxy.js @@ -0,0 +1,117 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ProxyStep = void 0; +exports.proxy = proxy; +const interfaces_js_1 = require("../interfaces.js"); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +/** + * @experimental + * + * Never build this class directly. + */ +class ProxyStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ProxyStep", + }; } + constructor($dep, $actualDep) { + super(); + this.isSyncAndSafe = true; + // Do not proxy stream requests + this.stream = undefined; + this.$depId = $dep.id; + this.addDependency($actualDep); + } + toStringMeta() { + const $dep = this.operationPlan.dangerouslyGetStep(this.$depId); + return $dep.toString(); + } + // Publicly expose this + addDependency(step) { + return super.addDependency(step); + } + execute({ count, values: [values0], }) { + return values0.isBatch + ? values0.entries + : (0, utils_js_1.arrayOfLength)(count, values0.value); + } + unbatchedExecute(_extra, value) { + return value; + } +} +exports.ProxyStep = ProxyStep; +function makeProxyHandler($toStep) { + return { + // $proxy - the ProxyStep instance + // p - the property being accessed + // proxy - the `new Proxy($proxy, ...)` + get($proxy, p, proxy) { + // Do not deduplicate the proxy-ness away! + if (p === "deduplicate") { + return () => [proxy]; + } + // DO optimize the proxy-ness away, so execution doesn't need to be proxied + if (p === "optimize") { + delete $proxy[interfaces_js_1.$$proxy]; + return () => [$proxy]; + } + if (p in $proxy) { + // $proxy has this property ('id', 'layerPlan', etc) - use it + const val = $proxy[p]; + if (typeof val === "function") { + return function (...args) { + return val.apply($proxy, args); + }; + } + else { + return val; + } + } + else { + // $proxy doesn't understand this - delegate to $toStep + const val = $toStep[p]; + if (typeof val === "function") { + return function (...args) { + return val.apply($toStep, args); + }; + } + else { + return val; + } + } + }, + has($proxy, p) { + if (p in $proxy) { + return true; + } + else { + return p in $toStep; + } + }, + set($proxy, p, newValue, receiver) { + if (p in $proxy) { + return Reflect.set($proxy, p, newValue, receiver); + } + else { + throw new Error(`Setting through a ProxyStep is currently forbidden (attempted to set '${String(p)}' on '${$proxy}'`); + } + }, + getPrototypeOf(_$proxy) { + return Object.getPrototypeOf($toStep); + }, + }; +} +/** + * @experimental + * + * This could change at any time, may impact performance, and just, generally, + * needs more work. You shouldn't need this in the vast majority of cases. + */ +function proxy($step, $actualDep = $step) { + const $proxy = new ProxyStep($step, $actualDep); + const proxy = new Proxy($proxy, makeProxyHandler($step)); // Lie. + $proxy[interfaces_js_1.$$proxy] = proxy; + return proxy; +} +//# sourceMappingURL=proxy.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/proxy.js.map b/grafast/grafast/dist/steps/proxy.js.map new file mode 100644 index 0000000000..06b3beee2e --- /dev/null +++ b/grafast/grafast/dist/steps/proxy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/steps/proxy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/remapKeys.d.ts b/grafast/grafast/dist/steps/remapKeys.d.ts new file mode 100644 index 0000000000..ae5cfc8d66 --- /dev/null +++ b/grafast/grafast/dist/steps/remapKeys.d.ts @@ -0,0 +1,35 @@ +import type { ExecutionDetails, GrafastResultsList, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +export type ActualKeyByDesiredKey = { + [desiredKey: string]: string; +}; +/** + * A plan that returns an object resulting from extracting the given + * `actualKey` from the input and storing it as the `desiredKey` in the output. + */ +export declare class RemapKeysStep extends UnbatchedStep { + private readonly actualKeyByDesiredKey; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + private mapper; + constructor($plan: Step, actualKeyByDesiredKey: ActualKeyByDesiredKey); + toStringMeta(): string; + optimize(): Step | this; + finalize(): void; + execute({ count, values: [values0], }: ExecutionDetails): GrafastResultsList; + unbatchedExecute(_extra: UnbatchedExecutionExtra, value: any): any; + deduplicate(peers: RemapKeysStep[]): RemapKeysStep[]; +} +/** + * A plan that returns an object resulting from extracting the given + * `actualKey` from the input and storing it as the `desiredKey` in the output. + */ +export declare function remapKeys($step: Step, actualKeyByDesiredKey: { + [desiredKey: string]: string; +}): RemapKeysStep; +//# sourceMappingURL=remapKeys.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/remapKeys.d.ts.map b/grafast/grafast/dist/steps/remapKeys.d.ts.map new file mode 100644 index 0000000000..61a80b6e5c --- /dev/null +++ b/grafast/grafast/dist/steps/remapKeys.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"remapKeys.d.ts","sourceRoot":"","sources":["../../src/steps/remapKeys.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,MAAM,qBAAqB,GAAG;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AA2CrE;;;GAGG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAW5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAVxC,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,0BAA0B,UAAQ;IAElC,OAAO,CAAC,MAAM,CAAyC;gBAErD,KAAK,EAAE,IAAI,EACM,qBAAqB,EAAE,qBAAqB;IAU/D,YAAY,IAAI,MAAM;IAQtB,QAAQ;IAUR,QAAQ,IAAI,IAAI;IAOhB,OAAO,CAAC,EACN,KAAK,EACL,MAAM,EAAE,CAAC,OAAO,CAAC,GAClB,EAAE,gBAAgB,GAAG,kBAAkB,CAAC,GAAG,CAAC;IAM7C,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG;IAIlE,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE;CAIrD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,IAAI,EACX,qBAAqB,EAAE;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACtD,aAAa,CAEf"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/remapKeys.js b/grafast/grafast/dist/steps/remapKeys.js new file mode 100644 index 0000000000..d1e3e3e5e8 --- /dev/null +++ b/grafast/grafast/dist/steps/remapKeys.js @@ -0,0 +1,91 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.RemapKeysStep = void 0; +exports.remapKeys = remapKeys; +const tslib_1 = require("tslib"); +/* eslint-disable @typescript-eslint/ban-types */ +const chalk_1 = tslib_1.__importDefault(require("chalk")); +const tamedevil_1 = tslib_1.__importStar(require("tamedevil")); +const step_js_1 = require("../step.js"); +const utils_js_1 = require("../utils.js"); +function makeMapper(actualKeyByDesiredKey, callback) { + const entries = Object.entries(actualKeyByDesiredKey); + if (entries.every(([key, val]) => (0, tamedevil_1.isSafeObjectPropertyName)(key) && (0, tamedevil_1.isSafeObjectPropertyName)(val))) { + // We can do a fast custom conversion + return tamedevil_1.default.runInBatch((0, tamedevil_1.default) `(function(obj) { + return (obj == null ? obj : { ${tamedevil_1.default.join(entries.map(([key, val]) => (0, tamedevil_1.default) `${tamedevil_1.default.safeKeyOrThrow(key)}: obj${tamedevil_1.default.get(val)}`), ", ")} }); +})`, callback); + } + // Fallback to slow conversion + return callback((obj) => { + if (obj == null) { + return obj; + } + return Object.keys(actualKeyByDesiredKey).reduce((memo, desiredKey) => { + memo[desiredKey] = obj[actualKeyByDesiredKey[desiredKey]]; + return memo; + }, Object.create(null)); + }); +} +/** + * A plan that returns an object resulting from extracting the given + * `actualKey` from the input and storing it as the `desiredKey` in the output. + */ +class RemapKeysStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "RemapKeysStep", + }; } + constructor($plan, actualKeyByDesiredKey) { + super(); + this.actualKeyByDesiredKey = actualKeyByDesiredKey; + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.addDependency($plan); + this.peerKey = (0, utils_js_1.digestKeys)([ + ...Object.keys(this.actualKeyByDesiredKey), + ...Object.values(this.actualKeyByDesiredKey), + ]); + } + toStringMeta() { + return (chalk_1.default.bold.yellow(String(this.dependencies[0].id)) + + ":" + + JSON.stringify(this.actualKeyByDesiredKey)); + } + optimize() { + for (const [key, val] of Object.entries(this.actualKeyByDesiredKey)) { + if (String(key) !== String(val)) { + return this; + } + } + // If we're not actually remapping, just return the parent + return this.getDep(0); + } + finalize() { + makeMapper(this.actualKeyByDesiredKey, (fn) => { + this.mapper = fn; + }); + super.finalize(); + } + execute({ count, values: [values0], }) { + return values0.isBatch + ? values0.entries.map(this.mapper) + : new Array(count).fill(this.mapper(values0.value)); + } + unbatchedExecute(_extra, value) { + return this.mapper(value); + } + deduplicate(peers) { + // Handled by peerKey + return peers; + } +} +exports.RemapKeysStep = RemapKeysStep; +/** + * A plan that returns an object resulting from extracting the given + * `actualKey` from the input and storing it as the `desiredKey` in the output. + */ +function remapKeys($step, actualKeyByDesiredKey) { + return new RemapKeysStep($step, actualKeyByDesiredKey); +} +//# sourceMappingURL=remapKeys.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/remapKeys.js.map b/grafast/grafast/dist/steps/remapKeys.js.map new file mode 100644 index 0000000000..450dcb6801 --- /dev/null +++ b/grafast/grafast/dist/steps/remapKeys.js.map @@ -0,0 +1 @@ +{"version":3,"file":"remapKeys.js","sourceRoot":"","sources":["../../src/steps/remapKeys.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/reverse.d.ts b/grafast/grafast/dist/steps/reverse.d.ts new file mode 100644 index 0000000000..37b9f9be5a --- /dev/null +++ b/grafast/grafast/dist/steps/reverse.d.ts @@ -0,0 +1,27 @@ +import type { ExecutionDetails, GrafastResultsList, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +/** + * Returns a reversed copy of the list. + */ +export declare function reverseArray(list: readonly TData[]): TData[]; +/** + * Reverses a list. + */ +export declare class ReverseStep extends UnbatchedStep { + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + constructor(plan: Step); + execute({ indexMap, values: [values0], }: ExecutionDetails<[TData[]]>): GrafastResultsList; + unbatchedExecute(_extra: UnbatchedExecutionExtra, arr: TData[]): TData[]; + deduplicate(peers: ReverseStep[]): ReverseStep[]; +} +/** + * Reverses a list. + */ +export declare function reverse(plan: Step): ReverseStep; +//# sourceMappingURL=reverse.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/reverse.d.ts.map b/grafast/grafast/dist/steps/reverse.d.ts.map new file mode 100644 index 0000000000..750fdf00d6 --- /dev/null +++ b/grafast/grafast/dist/steps/reverse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"reverse.d.ts","sourceRoot":"","sources":["../../src/steps/reverse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAYzE;AAED;;GAEG;AACH,qBAAa,WAAW,CAAC,KAAK,CAAE,SAAQ,aAAa,CAAC,SAAS,KAAK,EAAE,CAAC;IACrE,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAQ;IACrB,0BAA0B,UAAQ;gBAEtB,IAAI,EAAE,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;IAKxC,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,OAAO,CAAC,GAClB,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE,CAAC;IAO5D,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE;IAIxE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE;CAG/D;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAC3B,IAAI,EAAE,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,GAC3B,WAAW,CAAC,KAAK,CAAC,CAOpB"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/reverse.js b/grafast/grafast/dist/steps/reverse.js new file mode 100644 index 0000000000..1ef74cc7c6 --- /dev/null +++ b/grafast/grafast/dist/steps/reverse.js @@ -0,0 +1,55 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ReverseStep = void 0; +exports.reverseArray = reverseArray; +exports.reverse = reverse; +const step_js_1 = require("../step.js"); +/** + * Returns a reversed copy of the list. + */ +function reverseArray(list) { + if (!Array.isArray(list)) { + throw new Error(`Attempted to reverse an array, but what was passed wasn't an array`); + } + const l = list.length; + const newList = []; + for (let i = 0; i < l; i++) { + newList[i] = list[l - i - 1]; + } + return newList; +} +/** + * Reverses a list. + */ +class ReverseStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "ReverseStep", + }; } + constructor(plan) { + super(); + this.isSyncAndSafe = true; + this.allowMultipleOptimizations = true; + this.addDependency(plan); + } + execute({ indexMap, values: [values0], }) { + return indexMap((i) => { + const arr = values0.at(i); + return arr == null ? arr : reverseArray(arr); + }); + } + unbatchedExecute(_extra, arr) { + return arr == null ? arr : reverseArray(arr); + } + deduplicate(peers) { + return peers; + } +} +exports.ReverseStep = ReverseStep; +/** + * Reverses a list. + */ +function reverse(plan) { + return plan.operationPlan.cacheStep(plan, "GrafastInternal:reverse()", "", () => new ReverseStep(plan)); +} +//# sourceMappingURL=reverse.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/reverse.js.map b/grafast/grafast/dist/steps/reverse.js.map new file mode 100644 index 0000000000..0ebdfef8b1 --- /dev/null +++ b/grafast/grafast/dist/steps/reverse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"reverse.js","sourceRoot":"","sources":["../../src/steps/reverse.ts"],"names":[],"mappings":";;;AAWA,oCAYC;AAwCD,0BASC;AAlED,wCAA2C;AAE3C;;GAEG;AACH,SAAgB,YAAY,CAAc,IAAsB;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACtB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAa,WAAmB,SAAQ,uBAA+B;aAC9D,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,aAAa;KAC1B,AAHc,CAGb;IAIF,YAAY,IAA4B;QACtC,KAAK,EAAE,CAAC;QAJV,kBAAa,GAAG,IAAI,CAAC;QACrB,+BAA0B,GAAG,IAAI,CAAC;QAIhC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,EACN,QAAQ,EACR,MAAM,EAAE,CAAC,OAAO,CAAC,GACW;QAC5B,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,MAA+B,EAAE,GAAY;QAC5D,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,KAA2B;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;;AA7BH,kCA8BC;AAED;;GAEG;AACH,SAAgB,OAAO,CACrB,IAA4B;IAE5B,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CACjC,IAAI,EACJ,2BAA2B,EAC3B,EAAE,EACF,GAAG,EAAE,CAAC,IAAI,WAAW,CAAQ,IAAI,CAAC,CACnC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/setter.d.ts b/grafast/grafast/dist/steps/setter.d.ts new file mode 100644 index 0000000000..a7b3123d22 --- /dev/null +++ b/grafast/grafast/dist/steps/setter.d.ts @@ -0,0 +1,18 @@ +import type { InputObjectTypeBakedInfo } from "../index.js"; +import { Modifier } from "./applyInput.js"; +export interface SetterCapable> { + set(key: TKey, value: TObj[TKey]): void; +} +export declare class Setter = Record, TParent extends SetterCapable = SetterCapable> extends Modifier { + static $$export: { + moduleName: string; + exportName: string; + }; + private setters; + constructor(parent: TParent); + set(key: TKey, value: TObj[TKey]): void; + apply(): void; +} +export declare function setter = Record, TParent extends SetterCapable = SetterCapable>(parent: TParent): Setter; +export declare function createObjectAndApplyChildren>(_input: Record, info: InputObjectTypeBakedInfo): TObj; +//# sourceMappingURL=setter.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/setter.d.ts.map b/grafast/grafast/dist/steps/setter.d.ts.map new file mode 100644 index 0000000000..4c11fe684d --- /dev/null +++ b/grafast/grafast/dist/steps/setter.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"setter.d.ts","sourceRoot":"","sources":["../../src/steps/setter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,aAAa,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC7D,GAAG,CAAC,IAAI,SAAS,MAAM,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAClE;AAED,qBAAa,MAAM,CACjB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,OAAO,SAAS,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CACzD,SAAQ,QAAQ,CAAC,OAAO,CAAC;IACzB,MAAM,CAAC,QAAQ;;;MAGb;IAEF,OAAO,CAAC,OAAO,CAA2C;gBAE9C,MAAM,EAAE,OAAO;IAI3B,GAAG,CAAC,IAAI,SAAS,MAAM,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhE,KAAK,IAAI,IAAI;CAKd;AAED,wBAAgB,MAAM,CACpB,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtD,OAAO,SAAS,aAAa,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,EACzD,MAAM,EAAE,OAAO,yBAEhB;AAED,wBAAgB,4BAA4B,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3E,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,IAAI,EAAE,wBAAwB,GAC7B,IAAI,CAUN"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/setter.js b/grafast/grafast/dist/steps/setter.js new file mode 100644 index 0000000000..0a2562df41 --- /dev/null +++ b/grafast/grafast/dist/steps/setter.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Setter = void 0; +exports.setter = setter; +exports.createObjectAndApplyChildren = createObjectAndApplyChildren; +const applyInput_js_1 = require("./applyInput.js"); +class Setter extends applyInput_js_1.Modifier { + static { this.$$export = { + moduleName: "grafast", + exportName: "Setter", + }; } + constructor(parent) { + super(parent); + this.setters = new Map(); + } + set(key, value) { + this.setters.set(key, value); + } + apply() { + for (const [key, value] of this.setters.entries()) { + this.parent.set(key, value); + } + } +} +exports.Setter = Setter; +function setter(parent) { + return new Setter(parent); +} +function createObjectAndApplyChildren(_input, info) { + const obj = Object.create(null); + info.applyChildren(setter({ + set(key, value) { + obj[key] = value; + }, + })); + return obj; +} +//# sourceMappingURL=setter.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/setter.js.map b/grafast/grafast/dist/steps/setter.js.map new file mode 100644 index 0000000000..1613a2a986 --- /dev/null +++ b/grafast/grafast/dist/steps/setter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"setter.js","sourceRoot":"","sources":["../../src/steps/setter.ts"],"names":[],"mappings":";;;AAiCA,wBAKC;AAED,oEAaC;AApDD,mDAA2C;AAM3C,MAAa,MAGX,SAAQ,wBAAiB;aAClB,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,QAAQ;KACrB,AAHc,CAGb;IAIF,YAAY,MAAe;QACzB,KAAK,CAAC,MAAM,CAAC,CAAC;QAHR,YAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IAI1D,CAAC;IAED,GAAG,CAA0B,GAAS,EAAE,KAAiB;QACvD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;;AAvBH,wBAwBC;AAED,SAAgB,MAAM,CAGpB,MAAe;IACf,OAAO,IAAI,MAAM,CAAgB,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA2B,EAC3B,IAA8B;IAE9B,MAAM,GAAG,GAAkB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,aAAa,CAChB,MAAM,CAAC;QACL,GAAG,CAAC,GAAG,EAAE,KAAK;YACZ,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;KACF,CAAC,CACH,CAAC;IACF,OAAO,GAAW,CAAC;AACrB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/sideEffect.d.ts b/grafast/grafast/dist/steps/sideEffect.d.ts new file mode 100644 index 0000000000..ee8c759d88 --- /dev/null +++ b/grafast/grafast/dist/steps/sideEffect.d.ts @@ -0,0 +1,28 @@ +import type { PromiseOrDirect, UnbatchedExecutionExtra } from "../interfaces.js"; +import type { Multistep, UnwrapMultistep } from "../multistep.js"; +import type { Step } from "../step.js"; +import { UnbatchedStep } from "../step.js"; +/** + * Calls the given callback function for each tuple + */ +export declare class SideEffectStep extends UnbatchedStep { + private fn; + static $$export: { + moduleName: string; + exportName: string; + }; + isSyncAndSafe: boolean; + allowMultipleOptimizations: boolean; + private planDep; + constructor($plan: Step | null | undefined, fn: (value: TIn) => PromiseOrDirect); + toStringMeta(): any; + unbatchedExecute(_extra: UnbatchedExecutionExtra, value: TIn): PromiseOrDirect; +} +/** + * A plan that takes the input `$plan` and feeds each value through the `fn` + * callback. Note: if you need to pass more than one value, pass a `ListStep` + * as the `$plan` argument. + */ +declare function sideEffect(spec: TInMultistep, fn: (value: UnwrapMultistep) => PromiseOrDirect): SideEffectStep, TOut>; +export { sideEffect }; +//# sourceMappingURL=sideEffect.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/sideEffect.d.ts.map b/grafast/grafast/dist/steps/sideEffect.d.ts.map new file mode 100644 index 0000000000..778db9993e --- /dev/null +++ b/grafast/grafast/dist/steps/sideEffect.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sideEffect.d.ts","sourceRoot":"","sources":["../../src/steps/sideEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,qBAAa,cAAc,CAAC,GAAG,EAAE,IAAI,CAAE,SAAQ,aAAa,CAAC,IAAI,CAAC;IAW9D,OAAO,CAAC,EAAE;IAVZ,MAAM,CAAC,QAAQ;;;MAGb;IACF,aAAa,UAAS;IACtB,0BAA0B,UAAS;IAEnC,OAAO,CAAC,OAAO,CAAgB;gBAE7B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3B,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,eAAe,CAAC,IAAI,CAAC;IAOnD,YAAY;IAIZ,gBAAgB,CACd,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,GAAG,GACT,eAAe,CAAC,IAAI,CAAC;CAGzB;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,KAAK,CAAC,YAAY,SAAS,SAAS,EAAE,IAAI,EAC5D,IAAI,EAAE,YAAY,EAClB,EAAE,EAAE,CAAC,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC,KAAK,eAAe,CAAC,IAAI,CAAC,GAClE,cAAc,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAYrD;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/steps/sideEffect.js b/grafast/grafast/dist/steps/sideEffect.js new file mode 100644 index 0000000000..301c89fa42 --- /dev/null +++ b/grafast/grafast/dist/steps/sideEffect.js @@ -0,0 +1,44 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SideEffectStep = void 0; +exports.sideEffect = sideEffect; +const multistep_js_1 = require("../multistep.js"); +const step_js_1 = require("../step.js"); +/** + * Calls the given callback function for each tuple + */ +class SideEffectStep extends step_js_1.UnbatchedStep { + static { this.$$export = { + moduleName: "grafast", + exportName: "SideEffectStep", + }; } + constructor($plan, fn) { + super(); + this.fn = fn; + this.isSyncAndSafe = false; + this.allowMultipleOptimizations = false; + this.hasSideEffects = true; + this.planDep = $plan != null ? this.addDependency($plan) : null; + } + toStringMeta() { + return this.fn.displayName || this.fn.name; + } + unbatchedExecute(_extra, value) { + return this.fn(value); + } +} +exports.SideEffectStep = SideEffectStep; +/** + * A plan that takes the input `$plan` and feeds each value through the `fn` + * callback. Note: if you need to pass more than one value, pass a `ListStep` + * as the `$plan` argument. + */ +function sideEffect(spec, fn) { + if (fn.length > 1) { + throw new Error("sideEffect callback should accept one argument, perhaps you forgot to destructure the arguments?"); + } + const $in = (0, multistep_js_1.multistep)(spec); + const $result = new SideEffectStep($in, fn); + return $result; +} +//# sourceMappingURL=sideEffect.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/steps/sideEffect.js.map b/grafast/grafast/dist/steps/sideEffect.js.map new file mode 100644 index 0000000000..146fe5248e --- /dev/null +++ b/grafast/grafast/dist/steps/sideEffect.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sideEffect.js","sourceRoot":"","sources":["../../src/steps/sideEffect.ts"],"names":[],"mappings":";;;AAgES,gCAAU;AA3DnB,kDAA4C;AAE5C,wCAA2C;AAE3C;;GAEG;AACH,MAAa,cAA0B,SAAQ,uBAAmB;aACzD,aAAQ,GAAG;QAChB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,gBAAgB;KAC7B,AAHc,CAGb;IAKF,YACE,KAAmC,EAC3B,EAAyC;QAEjD,KAAK,EAAE,CAAC;QAFA,OAAE,GAAF,EAAE,CAAuC;QANnD,kBAAa,GAAG,KAAK,CAAC;QACtB,+BAA0B,GAAG,KAAK,CAAC;QAQjC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC;IAED,YAAY;QACV,OAAQ,IAAI,CAAC,EAAU,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;IACtD,CAAC;IAED,gBAAgB,CACd,MAA+B,EAC/B,KAAU;QAEV,OAAO,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;;AA3BH,wCA4BC;AAED;;;;GAIG;AACH,SAAS,UAAU,CACjB,IAAkB,EAClB,EAAmE;IAEnE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,kGAAkG,CACnG,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,wBAAS,EAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,cAAc,CAChC,GAAG,EACH,EAAE,CACH,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/stringifyPayload.d.ts b/grafast/grafast/dist/stringifyPayload.d.ts new file mode 100644 index 0000000000..e8b9394693 --- /dev/null +++ b/grafast/grafast/dist/stringifyPayload.d.ts @@ -0,0 +1,3 @@ +import type { JSONObject } from "./interfaces.js"; +export declare function stringifyPayload(payload: JSONObject, outputDataAsString: boolean | undefined): string; +//# sourceMappingURL=stringifyPayload.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/stringifyPayload.d.ts.map b/grafast/grafast/dist/stringifyPayload.d.ts.map new file mode 100644 index 0000000000..9bfe3b2533 --- /dev/null +++ b/grafast/grafast/dist/stringifyPayload.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stringifyPayload.d.ts","sourceRoot":"","sources":["../src/stringifyPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,UAAU,EACnB,kBAAkB,EAAE,OAAO,GAAG,SAAS,GACtC,MAAM,CA4CR"} \ No newline at end of file diff --git a/grafast/grafast/dist/stringifyPayload.js b/grafast/grafast/dist/stringifyPayload.js new file mode 100644 index 0000000000..75630c4ed8 --- /dev/null +++ b/grafast/grafast/dist/stringifyPayload.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.stringifyPayload = stringifyPayload; +function stringifyPayload(payload, outputDataAsString) { + if (!outputDataAsString || typeof payload.data !== "string") { + return JSON.stringify(payload); + } + let str = "{"; + let first = true; + if (payload.incremental) { + throw new Error("Haven't implemented incremental yet"); + } + if (payload.errors !== undefined) { + if (!first) + str += ","; + first = false; + str += `"errors":${JSON.stringify(payload.errors)}`; + } + if (payload.data === undefined) { + // noop + } + else if (payload.data === null) { + if (!first) + str += ","; + first = false; + str += `"data":null`; + } + else if (typeof payload.data === "string") { + if (!first) + str += ","; + first = false; + str += `"data":${payload.data}`; + } + else { + throw new Error(`Expected data to be null, undefined, or a JSON string`); + } + if (payload.extensions !== undefined) { + if (!first) + str += ","; + first = false; + str += `"extensions":${JSON.stringify(payload.extensions)}`; + } + if (payload.label !== undefined) { + if (!first) + str += ","; + first = false; + str += `"label":${JSON.stringify(payload.label)}`; + } + if (payload.hasNext !== undefined) { + if (!first) + str += ","; + first = false; + str += `"hasNext":${JSON.stringify(payload.hasNext)}`; + } + str += "}"; + return str; +} +//# sourceMappingURL=stringifyPayload.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/stringifyPayload.js.map b/grafast/grafast/dist/stringifyPayload.js.map new file mode 100644 index 0000000000..01e97b4802 --- /dev/null +++ b/grafast/grafast/dist/stringifyPayload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stringifyPayload.js","sourceRoot":"","sources":["../src/stringifyPayload.ts"],"names":[],"mappings":";;AAEA,4CA+CC;AA/CD,SAAgB,gBAAgB,CAC9B,OAAmB,EACnB,kBAAuC;IAEvC,IAAI,CAAC,kBAAkB,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK;YAAE,GAAG,IAAI,GAAG,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,GAAG,IAAI,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK;YAAE,GAAG,IAAI,GAAG,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,GAAG,IAAI,aAAa,CAAC;IACvB,CAAC;SAAM,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,GAAG,IAAI,GAAG,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,GAAG,IAAI,UAAU,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,GAAG,IAAI,GAAG,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,GAAG,IAAI,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,GAAG,IAAI,GAAG,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,GAAG,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,GAAG,IAAI,GAAG,CAAC;QACvB,KAAK,GAAG,KAAK,CAAC;QACd,GAAG,IAAI,aAAa,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,GAAG,IAAI,GAAG,CAAC;IACX,OAAO,GAAG,CAAC;AACb,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/stripAnsi.d.ts b/grafast/grafast/dist/stripAnsi.d.ts new file mode 100644 index 0000000000..2b15bc3939 --- /dev/null +++ b/grafast/grafast/dist/stripAnsi.d.ts @@ -0,0 +1,3 @@ +export declare const ANSI_REGEXP: RegExp; +export declare function stripAnsi(str: string): string; +//# sourceMappingURL=stripAnsi.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/stripAnsi.d.ts.map b/grafast/grafast/dist/stripAnsi.d.ts.map new file mode 100644 index 0000000000..32037c9dbd --- /dev/null +++ b/grafast/grafast/dist/stripAnsi.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"stripAnsi.d.ts","sourceRoot":"","sources":["../src/stripAnsi.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,QAEsJ,CAAC;AAC/K,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"} \ No newline at end of file diff --git a/grafast/grafast/dist/stripAnsi.js b/grafast/grafast/dist/stripAnsi.js new file mode 100644 index 0000000000..404dd4e397 --- /dev/null +++ b/grafast/grafast/dist/stripAnsi.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ANSI_REGEXP = void 0; +exports.stripAnsi = stripAnsi; +// Extracted from https://github.com/chalk/ansi-regex MIT license +// Copyright (c) Sindre Sorhus (https://sindresorhus.com) +// Copyright (c) Benjie (https://twitter.com/benjie) +exports.ANSI_REGEXP = +// eslint-disable-next-line no-control-regex, no-useless-escape +/[\u001B\u009B][[\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\d\/#&.:=?%@~_]+)*|[a-zA-Z\d]+(?:;[-a-zA-Z\d\/#&.:=?%@~_]*)*)?\u0007)|(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]))/g; +function stripAnsi(str) { + return str.replace(exports.ANSI_REGEXP, ""); +} +//# sourceMappingURL=stripAnsi.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/stripAnsi.js.map b/grafast/grafast/dist/stripAnsi.js.map new file mode 100644 index 0000000000..616510799f --- /dev/null +++ b/grafast/grafast/dist/stripAnsi.js.map @@ -0,0 +1 @@ +{"version":3,"file":"stripAnsi.js","sourceRoot":"","sources":["../src/stripAnsi.ts"],"names":[],"mappings":";;;AAMA,8BAEC;AARD,iEAAiE;AACjE,kFAAkF;AAClF,oDAAoD;AACvC,QAAA,WAAW;AACtB,+DAA+D;AAC/D,4KAA4K,CAAC;AAC/K,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,mBAAW,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/subscribe.d.ts b/grafast/grafast/dist/subscribe.d.ts new file mode 100644 index 0000000000..2b52ae081a --- /dev/null +++ b/grafast/grafast/dist/subscribe.d.ts @@ -0,0 +1,14 @@ +import type { AsyncExecutionResult, ExecutionArgs, ExecutionResult } from "graphql"; +import type { PromiseOrValue } from "graphql/jsutils/PromiseOrValue"; +import type { GrafastExecutionArgs } from "./index.js"; +/** + * @deprecated Second and third parameters should be passed as part of args, + * specifically `resolvedPreset` and `outputDataAsString`. + */ +export declare function subscribe(args: ExecutionArgs, resolvedPreset: GraphileConfig.ResolvedPreset | undefined, outputDataAsString?: boolean): PromiseOrValue | ExecutionResult>; +/** + * Use this instead of GraphQL.js' subscribe method and we'll automatically + * run grafastPrepare for you and handle the result. + */ +export declare function subscribe(args: GrafastExecutionArgs): PromiseOrValue | ExecutionResult>; +//# sourceMappingURL=subscribe.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/subscribe.d.ts.map b/grafast/grafast/dist/subscribe.d.ts.map new file mode 100644 index 0000000000..92bd242f42 --- /dev/null +++ b/grafast/grafast/dist/subscribe.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../src/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,eAAe,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIvD;;;GAGG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,cAAc,CAAC,cAAc,GAAG,SAAS,EACzD,kBAAkB,CAAC,EAAE,OAAO,GAC3B,cAAc,CACb,cAAc,CAAC,eAAe,GAAG,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,GAClE,eAAe,CAClB,CAAC;AACF;;;GAGG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,oBAAoB,GACzB,cAAc,CACb,cAAc,CAAC,eAAe,GAAG,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,GAClE,eAAe,CAClB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/subscribe.js b/grafast/grafast/dist/subscribe.js new file mode 100644 index 0000000000..ea90f264d3 --- /dev/null +++ b/grafast/grafast/dist/subscribe.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.subscribe = subscribe; +const execute_js_1 = require("./execute.js"); +const middleware_js_1 = require("./middleware.js"); +function subscribe(args, legacyResolvedPreset, legacyOutputDataAsString) { + // TODO: remove legacy compatibility + if (legacyResolvedPreset !== undefined) { + args.resolvedPreset = legacyResolvedPreset; + } + if (legacyOutputDataAsString !== undefined) { + args.outputDataAsString = legacyOutputDataAsString; + } + const { resolvedPreset } = args; + const middleware = args.middleware === undefined && resolvedPreset != null + ? (0, middleware_js_1.getGrafastMiddleware)(resolvedPreset) + : (args.middleware ?? null); + if (args.middleware === undefined) { + args.middleware = middleware; + } + if (middleware !== null) { + return middleware.run("subscribe", { args }, subscribeMiddlewareCallback); + } + else { + return (0, execute_js_1.withGrafastArgs)(args); + } +} +const subscribeMiddlewareCallback = (event) => (0, execute_js_1.withGrafastArgs)(event.args); +//# sourceMappingURL=subscribe.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/subscribe.js.map b/grafast/grafast/dist/subscribe.js.map new file mode 100644 index 0000000000..0385b6ace1 --- /dev/null +++ b/grafast/grafast/dist/subscribe.js.map @@ -0,0 +1 @@ +{"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../src/subscribe.ts"],"names":[],"mappings":";;AAkCA,8BA6BC;AAxDD,6CAA+C;AAG/C,mDAAuD;AAwBvD,SAAgB,SAAS,CACvB,IAA0B,EAC1B,oBAAoD,EACpD,wBAAkC;IAKlC,oCAAoC;IACpC,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAC;IAC7C,CAAC;IACD,IAAI,wBAAwB,KAAK,SAAS,EAAE,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,wBAAwB,CAAC;IACrD,CAAC;IAED,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,cAAc,IAAI,IAAI;QACrD,CAAC,CAAC,IAAA,oCAAoB,EAAC,cAAc,CAAC;QACtC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IACD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,2BAA2B,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,OAAO,IAAA,4BAAe,EAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,2BAA2B,GAAG,CAAC,KAAqB,EAAE,EAAE,CAC5D,IAAA,4BAAe,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/thereCanBeOnlyOne.d.ts b/grafast/grafast/dist/thereCanBeOnlyOne.d.ts new file mode 100644 index 0000000000..c916a00509 --- /dev/null +++ b/grafast/grafast/dist/thereCanBeOnlyOne.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=thereCanBeOnlyOne.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/thereCanBeOnlyOne.d.ts.map b/grafast/grafast/dist/thereCanBeOnlyOne.d.ts.map new file mode 100644 index 0000000000..b847398d59 --- /dev/null +++ b/grafast/grafast/dist/thereCanBeOnlyOne.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"thereCanBeOnlyOne.d.ts","sourceRoot":"","sources":["../src/thereCanBeOnlyOne.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/grafast/dist/thereCanBeOnlyOne.js b/grafast/grafast/dist/thereCanBeOnlyOne.js new file mode 100644 index 0000000000..a47f6afda2 --- /dev/null +++ b/grafast/grafast/dist/thereCanBeOnlyOne.js @@ -0,0 +1,21 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const $$grafast = Symbol.for("grafast"); +const globalAny = globalThis; +if (globalAny[$$grafast] === true) { + // Already warned +} +else if (globalAny[$$grafast]) { + console.trace(`WARNING: more than one version of the 'grafast' module has been instantiated - you must ensure there is exactly one grafast (e.g. using yarn "resolutions" or similar techniques). Try clearing your package lockfile and reinstalling.\n ${String(globalAny[$$grafast].stack).replace(/\n/g, "\n ")}`); + globalAny[$$grafast] = true; +} +else { + try { + // Capture the stack trace + throw new Error(`The first 'grafast' was installed here`); + } + catch (e) { + globalAny[$$grafast] = e; + } +} +//# sourceMappingURL=thereCanBeOnlyOne.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/thereCanBeOnlyOne.js.map b/grafast/grafast/dist/thereCanBeOnlyOne.js.map new file mode 100644 index 0000000000..f98b7c2a97 --- /dev/null +++ b/grafast/grafast/dist/thereCanBeOnlyOne.js.map @@ -0,0 +1 @@ +{"version":3,"file":"thereCanBeOnlyOne.js","sourceRoot":"","sources":["../src/thereCanBeOnlyOne.ts"],"names":[],"mappings":";;AAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAExC,MAAM,SAAS,GAAG,UAEjB,CAAC;AACF,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,iBAAiB;AACnB,CAAC;KAAM,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;IAChC,OAAO,CAAC,KAAK,CACX,gPAAgP,MAAM,CACpP,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAC3B,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAC7B,CAAC;IACF,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AAC9B,CAAC;KAAM,CAAC;IACN,IAAI,CAAC;QACH,0BAA0B;QAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/timeSource.d.ts b/grafast/grafast/dist/timeSource.d.ts new file mode 100644 index 0000000000..1944fdc4e1 --- /dev/null +++ b/grafast/grafast/dist/timeSource.d.ts @@ -0,0 +1,2 @@ +export declare const timeSource: import("perf_hooks").Performance | DateConstructor; +//# sourceMappingURL=timeSource.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/timeSource.d.ts.map b/grafast/grafast/dist/timeSource.d.ts.map new file mode 100644 index 0000000000..c0fa38abc9 --- /dev/null +++ b/grafast/grafast/dist/timeSource.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"timeSource.d.ts","sourceRoot":"","sources":["../src/timeSource.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,UAAU,oDAGb,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/timeSource.js b/grafast/grafast/dist/timeSource.js new file mode 100644 index 0000000000..206d5e9f6a --- /dev/null +++ b/grafast/grafast/dist/timeSource.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.timeSource = void 0; +// performance.now() is supported in most modern browsers, plus node. +exports.timeSource = typeof performance !== "undefined" && typeof performance.now === "function" + ? performance + : Date; +//# sourceMappingURL=timeSource.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/timeSource.js.map b/grafast/grafast/dist/timeSource.js.map new file mode 100644 index 0000000000..8e6a147f1e --- /dev/null +++ b/grafast/grafast/dist/timeSource.js.map @@ -0,0 +1 @@ +{"version":3,"file":"timeSource.js","sourceRoot":"","sources":["../src/timeSource.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACxD,QAAA,UAAU,GACrB,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,WAAW,CAAC,GAAG,KAAK,UAAU;IACzE,CAAC,CAAC,WAAW;IACb,CAAC,CAAC,IAAI,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/utils.d.ts b/grafast/grafast/dist/utils.d.ts new file mode 100644 index 0000000000..99c0445187 --- /dev/null +++ b/grafast/grafast/dist/utils.d.ts @@ -0,0 +1,173 @@ +import type { ConstValueNode, DirectiveNode, FieldNode, GraphQLEnumValueConfig, GraphQLFieldConfig, GraphQLInputFieldConfig, GraphQLInputObjectTypeConfig, GraphQLInputType, GraphQLNamedType, GraphQLObjectTypeConfig, GraphQLOutputType, GraphQLSchema, ValueNode } from "graphql"; +import * as graphql from "graphql"; +import type { Deferred } from "./deferred.js"; +import type { OperationPlan } from "./engine/OperationPlan.js"; +import type { BaseGraphQLArguments, GrafastFieldConfig, GrafastInputFieldConfig, OutputPlanForType } from "./interfaces.js"; +import type { Step } from "./step.js"; +/** + * The parent object is used as the key in `GetValueStepId()`; for root level + * fields it's possible that the parent will be null/undefined (in all other + * cases it will be an object), so we need a value that can be the key in a + * WeakMap to represent the root. + */ +export declare const ROOT_VALUE_OBJECT: any; +export declare function assertNullPrototype(object: Record, description: string): void; +/** + * Specifically allows for the `defaultValue` to be undefined, but otherwise + * defers to {@link rawValueToValueNode} + */ +export declare function defaultValueToValueNode(type: GraphQLInputType, defaultValue: unknown): ConstValueNode | undefined; +export declare function isPromise(t: T | Promise): t is Promise; +/** + * Is "thenable". + */ +export declare function isPromiseLike(t: T | PromiseLike): t is PromiseLike; +/** + * Is a promise that can be externally resolved. + */ +export declare function isDeferred(t: T | Promise | Deferred): t is Deferred; +/** + * Returns true if array1 and array2 have the same length, and every pair of + * values within them pass the `comparator` check (which defaults to `===`). + */ +export declare function arraysMatch(array1: ReadonlyArray, array2: ReadonlyArray, comparator?: (val1: T, val2: T) => boolean): boolean; +export type ObjectTypeFields = { + [key: string]: GrafastFieldConfig; +}; +export type ObjectTypeSpec> = Omit, "fields"> & { + fields: TFields | (() => TFields); + assertStep?: TParentStep extends Step ? ((step: Step) => asserts step is TParentStep) | { + new (...args: any[]): TParentStep; + } : null; +}; +/** + * Saves us having to write `extensions: {grafast: {...}}` everywhere. + */ +export declare function objectSpec>(spec: ObjectTypeSpec): GraphQLObjectTypeConfig; +export type GrafastObjectType> = graphql.GraphQLObjectType ? U : never> & { + TParentStep: TParentStep; + TFields: TFields; +}; +/** + * @remarks This is a mess because the first two generics need to be specified manually, but the latter one we want inferred. + */ +export declare function newObjectTypeBuilder(assertStep: TParentStep extends Step ? ((step: Step) => asserts step is TParentStep) | { + new (...args: any[]): TParentStep; +} : never): >(spec: ObjectTypeSpec) => GrafastObjectType; +/** + * Saves us having to write `extensions: {grafast: {...}}` everywhere. + */ +export declare function objectFieldSpec(grafastSpec: GrafastFieldConfig, path: string): GraphQLFieldConfig; +/** + * "Constrainted identity function" for field configs. + * + * @see {@link https://kentcdodds.com/blog/how-to-write-a-constrained-identity-function-in-typescript} + */ +export declare function newGrafastFieldConfigBuilder(): , TArgs extends BaseGraphQLArguments>(config: GrafastFieldConfig) => typeof config; +export type GrafastInputFieldConfigMap = { + [key: string]: GrafastInputFieldConfig; +}; +export type InputObjectTypeSpec = Omit & { + fields: GrafastInputFieldConfigMap | (() => GrafastInputFieldConfigMap); +}; +export type GrafastInputObjectType = graphql.GraphQLInputObjectType & { + TParent: TParent; +}; +export declare function newInputObjectTypeBuilder(): (spec: InputObjectTypeSpec) => GrafastInputObjectType; +/** + * Saves us having to write `extensions: {grafast: {...}}` everywhere. + */ +export declare function inputObjectFieldSpec(grafastSpec: GrafastInputFieldConfig, path: string): GraphQLInputFieldConfig; +declare module "graphql" { + interface GraphQLEnumType { + [$$valueConfigByValue]?: Record; + } +} +declare const $$valueConfigByValue: unique symbol; +export declare function getEnumValueConfigs(enumType: graphql.GraphQLEnumType): { + [outputValue: string]: GraphQLEnumValueConfig | undefined; +}; +/** + * This would be equivalent to `enumType._valueLookup.get(outputValue)` except + * that's not a public API so we have to do a bit of heavy lifting here. Since + * it is heavy lifting, we cache the result, but we don't know when enumType + * will go away so we use a weakmap. + */ +export declare function getEnumValueConfig(enumType: graphql.GraphQLEnumType, outputValue: string): GraphQLEnumValueConfig | undefined; +/** + * Ridiculously, this is faster than `new Array(length).fill(fill)` + */ +export declare function arrayOfLength(length: number, fill?: any): any[]; +export declare const valueNodeToStaticValue: typeof graphql.valueFromAST; +export declare function findVariableNamesUsedInValueNode(valueNode: ValueNode, variableNames: Set): void; +/** + * Given a FieldNode, recursively walks and finds all the variable references, + * returning a list of the (unique) variable names used. + */ +export declare function findVariableNamesUsed(operationPlan: OperationPlan, field: FieldNode): string[]; +export declare function isTypePlanned(schema: GraphQLSchema, namedType: GraphQLNamedType): boolean; +/** + * Returns `true` if the first argument depends on the second argument either + * directly or indirectly (via a chain of dependencies). + */ +export declare function stepADependsOnStepB(stepA: Step, stepB: Step): boolean; +/** + * Returns true if stepA is allowed to depend on stepB, false otherwise. (This + * mostly relates to heirarchy.) + */ +export declare function stepAMayDependOnStepB($a: Step, $b: Step): boolean; +/** + * For a regular GraphQL query with no `@stream`/`@defer`, the entire result is + * calculated and then the output is generated and sent to the client at once. + * Thus you can think of this as every plan is in the same "phase". + * + * However, if you introduce a `@stream`/`@defer` selection, then the steps + * inside that selection should run _later_ than the steps in the parent + * selection - they should run in two different phases. Similar is true for + * subscriptions. + * + * When optimizing your plans, if you are not careful you may end up pushing + * what should be later work into the earlier phase, resulting in the initial + * payload being delayed whilst things that should have been deferred are being + * calculated. Thus, you should generally check that two plans are in the same phase + * before you try and merge them. + * + * This is not a strict rule, though, because sometimes it makes more sense to + * push work into the parent phase because it would be faster overall to do + * that work there, and would not significantly delay the initial payload's + * execution time - for example it's unlikely that it would make sense to defer + * selecting an additional boolean column from a database table even if the + * operation indicates that's what you should do. + * + * As a step class author, it's your responsiblity to figure out the right + * approach. Once you have, you can use this function to help you, should you + * need it. + */ +export declare function stepsAreInSamePhase(ancestor: Step, descendent: Step): boolean; +export declare const canonicalJSONStringify: (o: object) => string; +export declare function assertNotAsync(fn: any, name: string): void; +export declare function assertNotPromise(value: TVal, fn: any, name: string): TVal; +export declare function hasItemPlan(step: Step & { + itemPlan?: ($item: Step) => Step; +}): step is Step & { + itemPlan: ($item: Step) => Step; +}; +export declare function exportNameHint(obj: any, nameHint: string): void; +export declare function isTuple(t: any | T): t is T; +/** + * Turns an array of keys into a digest, avoiding conflicts. + * Symbols are treated as equivalent. (Theoretically faster + * than JSON.stringify().) + */ +export declare function digestKeys(keys: ReadonlyArray): string; +/** + * If the directive has the argument `argName`, return a step representing that + * arguments value, whether that be a step representing the relevant variable + * or a constant step representing the hardcoded value in the document. + * + * @remarks NOT SUITABLE FOR USAGE WITH LISTS OR OBJECTS! Does not evaluate + * internal variable usages e.g. `[1, $b, 3]` + */ +export declare function directiveArgument(operationPlan: OperationPlan, directive: DirectiveNode, argName: string, expectedKind: graphql.Kind.INT | graphql.Kind.FLOAT | graphql.Kind.BOOLEAN | graphql.Kind.STRING): Step | undefined; +export {}; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/utils.d.ts.map b/grafast/grafast/dist/utils.d.ts.map new file mode 100644 index 0000000000..33b6b07d1e --- /dev/null +++ b/grafast/grafast/dist/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/utils.js b/grafast/grafast/dist/utils.js new file mode 100644 index 0000000000..8cfffb7337 --- /dev/null +++ b/grafast/grafast/dist/utils.js @@ -0,0 +1,818 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.canonicalJSONStringify = exports.valueNodeToStaticValue = exports.sharedNull = exports.ROOT_VALUE_OBJECT = void 0; +exports.assertNullPrototype = assertNullPrototype; +exports.defaultValueToValueNode = defaultValueToValueNode; +exports.isPromise = isPromise; +exports.isPromiseLike = isPromiseLike; +exports.isDeferred = isDeferred; +exports.arraysMatch = arraysMatch; +exports.objectSpec = objectSpec; +exports.newObjectTypeBuilder = newObjectTypeBuilder; +exports.objectFieldSpec = objectFieldSpec; +exports.newGrafastFieldConfigBuilder = newGrafastFieldConfigBuilder; +exports.newInputObjectTypeBuilder = newInputObjectTypeBuilder; +exports.inputObjectFieldSpec = inputObjectFieldSpec; +exports.getEnumValueConfigs = getEnumValueConfigs; +exports.getEnumValueConfig = getEnumValueConfig; +exports.stack = stack; +exports.arrayOfLength = arrayOfLength; +exports.arrayOfLengthCb = arrayOfLengthCb; +exports.findVariableNamesUsedInValueNode = findVariableNamesUsedInValueNode; +exports.findVariableNamesUsed = findVariableNamesUsed; +exports.isTypePlanned = isTypePlanned; +exports.sudo = sudo; +exports.writeableArray = writeableArray; +exports.stepADependsOnStepB = stepADependsOnStepB; +exports.stepAMayDependOnStepB = stepAMayDependOnStepB; +exports.stepsAreInSamePhase = stepsAreInSamePhase; +exports.assertNotAsync = assertNotAsync; +exports.assertNotPromise = assertNotPromise; +exports.hasItemPlan = hasItemPlan; +exports.exportNameHint = exportNameHint; +exports.isTuple = isTuple; +exports.digestKeys = digestKeys; +exports.directiveArgument = directiveArgument; +const tslib_1 = require("tslib"); +const graphql = tslib_1.__importStar(require("graphql")); +const assert = tslib_1.__importStar(require("./assert.js")); +const dev_js_1 = require("./dev.js"); +const error_js_1 = require("./error.js"); +const inspect_js_1 = require("./inspect.js"); +const constant_js_1 = require("./steps/constant.js"); +const { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLID, GraphQLInputObjectType, GraphQLInt, GraphQLInterfaceType, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLScalarType, GraphQLString, GraphQLUnionType, Kind, } = graphql; +/** + * The parent object is used as the key in `GetValueStepId()`; for root level + * fields it's possible that the parent will be null/undefined (in all other + * cases it will be an object), so we need a value that can be the key in a + * WeakMap to represent the root. + */ +exports.ROOT_VALUE_OBJECT = Object.freeze(Object.create(null)); +function assertNullPrototype(object, description) { + if (dev_js_1.isDev) { + assert.strictEqual(Object.getPrototypeOf(object), null, `Expected ${description} to have a null prototype`); + } +} +/** + * Converts a JSON value into the equivalent ValueNode _without_ checking that + * it's compatible with the expected type. Typically only used with scalars + * (since they can use any ValueNode) - other parts of the GraphQL schema + * should use explicitly compatible ValueNodes. + * + * WARNING: It's possible for this to generate `LIST(INT, FLOAT, STRING)` which + * is not possible in GraphQL since lists have a single defined type. This should + * only be used with custom scalars. + */ +function dangerousRawValueToValueNode(value) { + if (value == null) { + return { kind: Kind.NULL }; + } + if (typeof value === "boolean") { + return { kind: Kind.BOOLEAN, value }; + } + if (typeof value === "number") { + if (value === Math.round(value)) { + return { kind: Kind.INT, value: String(value) }; + } + else { + return { kind: Kind.FLOAT, value: String(value) }; + } + } + if (typeof value === "string") { + return { kind: Kind.STRING, value }; + } + if (Array.isArray(value)) { + return { + kind: Kind.LIST, + values: value.map(dangerousRawValueToValueNode), + }; + } + if (typeof value === "object" && value !== null) { + return { + kind: Kind.OBJECT, + fields: Object.keys(value).map((key) => ({ + kind: Kind.OBJECT_FIELD, + name: { kind: Kind.NAME, value: key }, + value: dangerousRawValueToValueNode(value[key]), + })), + }; + } + const never = value; + console.error(`Unhandled type when converting custom scalar to ValueNode: ${(0, inspect_js_1.inspect)(never)}`); + throw new Error(`Unhandled type when converting custom scalar to ValueNode`); +} +/** + * Takes a value (typically a JSON-compatible value) and converts it into a + * ValueNode that's compatible with the given GraphQL type. + */ +function rawValueToValueNode(type, value) { + if (type instanceof GraphQLNonNull) { + if (value == null) { + throw new Error("defaultValue contained null/undefined at a position that is marked as non-null"); + } + return rawValueToValueNode(type.ofType, value); + } + // Below here null/undefined are allowed. + if (value === undefined) { + return undefined; + } + if (value === null) { + return { kind: Kind.NULL }; + } + if (type === GraphQLBoolean) { + if (typeof value !== "boolean") { + throw new Error("defaultValue contained invalid value at a position expecting boolean"); + } + return { kind: Kind.BOOLEAN, value }; + } + if (type === GraphQLInt) { + if (typeof value !== "number") { + throw new Error("defaultValue contained invalid value at a position expecting int"); + } + return { kind: Kind.INT, value: String(parseInt(String(value), 10)) }; + } + if (type === GraphQLFloat) { + if (typeof value !== "number") { + throw new Error("defaultValue contained invalid value at a position expecting int"); + } + return { kind: Kind.FLOAT, value: String(value) }; + } + if (type === GraphQLString || type === GraphQLID) { + if (typeof value !== "string") { + throw new Error("defaultValue contained invalid value at a position expecting string"); + } + return { kind: Kind.STRING, value }; + } + if (type instanceof GraphQLEnumType) { + const enumValues = type.getValues(); + const enumValue = enumValues.find((v) => v.value === value); + if (!enumValue) { + console.error(`Default contained invalid value for enum ${type.name}: ${(0, inspect_js_1.inspect)(value)}`); + throw new Error(`Default contained invalid value for enum ${type.name}`); + } + return { kind: Kind.ENUM, value: enumValue.name }; + } + if (type instanceof GraphQLScalarType) { + return dangerousRawValueToValueNode(value); + } + if (type instanceof GraphQLList) { + if (!Array.isArray(value)) { + throw new Error("defaultValue contained invalid value at location expecting a list"); + } + return { + kind: Kind.LIST, + values: value.map((entry) => { + const entryValueNode = rawValueToValueNode(type.ofType, entry); + if (entryValueNode === undefined) { + throw new Error("defaultValue contained invalid list (contained `undefined`)"); + } + return entryValueNode; + }), + }; + } + if (type instanceof GraphQLInputObjectType) { + if (typeof value !== "object" || value === null) { + throw new Error("defaultValue contained invalid value at location expecting an object"); + } + const fieldDefs = type.getFields(); + const fields = []; + for (const fieldName in fieldDefs) { + const fieldDef = fieldDefs[fieldName]; + const fieldType = fieldDef.type; + const rawValue = value[fieldName] !== undefined + ? value[fieldName] + : fieldDef.defaultValue; + const fieldValueNode = rawValueToValueNode(fieldType, rawValue); + if (fieldValueNode !== undefined) { + fields.push({ + kind: Kind.OBJECT_FIELD, + name: { kind: Kind.NAME, value: fieldName }, + value: fieldValueNode, + }); + } + } + return { + kind: Kind.OBJECT, + fields, + }; + } + const never = type; + console.error(`Encountered unexpected type when processing defaultValue ${(0, inspect_js_1.inspect)(never)}`); + throw new Error(`Encountered unexpected type when processing defaultValue`); +} +/** + * Specifically allows for the `defaultValue` to be undefined, but otherwise + * defers to {@link rawValueToValueNode} + */ +function defaultValueToValueNode(type, defaultValue) { + // NOTE: even if `type` is non-null it's okay for `defaultValue` to be + // undefined. However it is not okay for defaultValue to be null if type is + // non-null. + if (defaultValue === undefined) { + return undefined; + } + return rawValueToValueNode(type, defaultValue); +} +function isPromise(t) { + return (typeof t === "object" && + t !== null && + typeof t.then === "function" && + typeof t.catch === "function"); +} +/** + * Is "thenable". + */ +function isPromiseLike(t) { + return t != null && typeof t.then === "function"; +} +/** + * Is a promise that can be externally resolved. + */ +function isDeferred(t) { + return (isPromise(t) && + typeof t.resolve === "function" && + typeof t.reject === "function"); +} +/** + * Returns true if array1 and array2 have the same length, and every pair of + * values within them pass the `comparator` check (which defaults to `===`). + */ +function arraysMatch(array1, array2, comparator) { + if (array1 === array2) + return true; + const l = array1.length; + if (l !== array2.length) { + return false; + } + if (comparator !== undefined) { + for (let i = 0; i < l; i++) { + if (!comparator(array1[i], array2[i])) { + return false; + } + } + } + else { + for (let i = 0; i < l; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + } + return true; +} +/** + * Saves us having to write `extensions: {grafast: {...}}` everywhere. + */ +function objectSpec(spec) { + const { assertStep, ...rest } = spec; + const modifiedSpec = { + ...rest, + ...(assertStep + ? { + extensions: { + ...spec.extensions, + grafast: { + assertStep, + ...spec.extensions?.grafast, + }, + }, + } + : null), + fields: () => { + const fields = typeof spec.fields === "function" ? spec.fields() : spec.fields; + const modifiedFields = Object.keys(fields).reduce((o, key) => { + o[key] = objectFieldSpec(fields[key], `${spec.name}.${key}`); + return o; + }, {}); + return modifiedFields; + }, + }; + return modifiedSpec; +} +/** + * @remarks This is a mess because the first two generics need to be specified manually, but the latter one we want inferred. + */ +function newObjectTypeBuilder(assertStep) { + return (spec) => new GraphQLObjectType(objectSpec({ assertStep, ...spec })); +} +/** + * Saves us having to write `extensions: {grafast: {...}}` everywhere. + */ +function objectFieldSpec(grafastSpec, path) { + const { plan, subscribePlan, args, ...spec } = grafastSpec; + assertNotAsync(plan, `${path ?? "?"}.plan`); + assertNotAsync(subscribePlan, `${path ?? "?"}.subscribePlan`); + const argsWithExtensions = args + ? Object.keys(args).reduce((memo, argName) => { + const grafastArgSpec = args[argName]; + // TODO: remove this code + if (grafastArgSpec.inputPlan || + grafastArgSpec.autoApplyAfterParentPlan || + grafastArgSpec.autoApplyAfterParentSubscribePlan) { + throw new Error(`Argument at ${path} has inputPlan or autoApplyAfterParentPlan or autoApplyAfterParentSubscribePlan set; these properties no longer do anything and should be removed.`); + } + const { applyPlan, applySubscribePlan, ...argSpec } = grafastArgSpec; + assertNotAsync(applyPlan, `${path ?? "?"}(${argName}:).applyPlan`); + assertNotAsync(applySubscribePlan, `${path ?? "?"}(${argName}:).applySubscribePlan`); + memo[argName] = { + ...argSpec, + ...(applyPlan || applySubscribePlan + ? { + extensions: { + ...argSpec.extensions, + grafast: { + ...argSpec.extensions?.grafast, + ...(applyPlan ? { applyPlan } : null), + ...(applySubscribePlan ? { applySubscribePlan } : null), + }, + }, + } + : null), + }; + return memo; + }, Object.create(null)) + : {}; + return { + ...spec, + args: argsWithExtensions, + ...(plan || subscribePlan + ? { + extensions: { + ...spec.extensions, + grafast: { + ...spec.extensions?.grafast, + ...(plan ? { plan } : null), + ...(subscribePlan ? { subscribePlan } : null), + }, + }, + } + : null), + }; +} +/** + * "Constrainted identity function" for field configs. + * + * @see {@link https://kentcdodds.com/blog/how-to-write-a-constrained-identity-function-in-typescript} + */ +function newGrafastFieldConfigBuilder() { + return (config) => config; +} +function inputObjectSpec(spec) { + const modifiedSpec = { + ...spec, + fields: () => { + const fields = typeof spec.fields === "function" ? spec.fields() : spec.fields; + const modifiedFields = Object.keys(fields).reduce((o, key) => { + o[key] = inputObjectFieldSpec(fields[key], `${spec.name}.${key}`); + return o; + }, {}); + return modifiedFields; + }, + }; + return modifiedSpec; +} +function newInputObjectTypeBuilder() { + return (spec) => new GraphQLInputObjectType(inputObjectSpec(spec)); +} +/** + * Saves us having to write `extensions: {grafast: {...}}` everywhere. + */ +function inputObjectFieldSpec(grafastSpec, path) { + // TODO: remove this code + if (grafastSpec.applyPlan || + grafastSpec.inputPlan || + grafastSpec.autoApplyAfterParentApplyPlan || + grafastSpec.autoApplyAfterParentInputPlan) { + throw new Error(`Input field at ${path} has applyPlan or inputPlan or autoApplyAfterParentApplyPlan or autoApplyAfterParentInputPlan set; these properties no longer do anything and should be removed.`); + } + const { apply, ...spec } = grafastSpec; + assertNotAsync(apply, `${path ?? "?"}.apply`); + return apply + ? { + ...spec, + extensions: { + ...spec.extensions, + grafast: { + ...spec.extensions?.grafast, + apply, + }, + }, + } + : spec; +} +const $$valueConfigByValue = Symbol("valueConfigByValue"); +function getEnumValueConfigs(enumType) { + // We cache onto the enumType directly so that garbage collection can clear up after us easily. + if (enumType[$$valueConfigByValue] === undefined) { + const config = enumType.toConfig(); + enumType[$$valueConfigByValue] = Object.values(config.values).reduce((memo, value) => { + memo[value.value] = value; + return memo; + }, Object.create(null)); + } + return enumType[$$valueConfigByValue]; +} +/** + * This would be equivalent to `enumType._valueLookup.get(outputValue)` except + * that's not a public API so we have to do a bit of heavy lifting here. Since + * it is heavy lifting, we cache the result, but we don't know when enumType + * will go away so we use a weakmap. + */ +function getEnumValueConfig(enumType, outputValue) { + return getEnumValueConfigs(enumType)[outputValue]; +} +/** + * It's a peculiarity of V8 that `{}` is twice as fast as + * `Object.create(null)`, but `Object.create(sharedNull)` is the same speed as + * `{}`. Hat tip to `@purge` for bringing this to my attention. + * + * @internal + */ +exports.sharedNull = Object.freeze(Object.create(null)); +/** + * Prints out the stack trace to the current position with a message; useful + * for debugging which code path has hit this line. + * + * @internal + */ +function stack(message, length = 4) { + try { + throw new Error(message); + } + catch (e) { + const lines = e.stack.split("\n"); + const start = lines.findIndex((line) => line.startsWith("Error:")); + if (start < 0) { + console.dir(e.stack); + return; + } + const filtered = [ + lines[start], + ...lines.slice(start + 2, start + 2 + length), + ]; + const mapped = filtered.map((line) => line.replace(/^(.*?)\(\/home[^)]*\/packages\/([^)]*)\)/, (_, start, rest) => `${start}${" ".repeat(Math.max(0, 45 - start.length))}(${rest})`)); + console.log(mapped.join("\n")); + } +} +/** + * Ridiculously, this is faster than `new Array(length).fill(fill)` + */ +function arrayOfLength(length, fill) { + const arr = []; + for (let i = 0; i < length; i++) { + arr[i] = fill; + } + return arr; +} +/** + * Builds an array of length `length` calling `fill` for each entry in the + * list and storing the result. + * + * @internal + */ +function arrayOfLengthCb(length, fill) { + const arr = []; + for (let i = 0; i < length; i++) { + arr[i] = fill(); + } + return arr; +} +exports.valueNodeToStaticValue = graphql.valueFromAST; +function findVariableNamesUsedInValueNode(valueNode, variableNames) { + switch (valueNode.kind) { + case Kind.INT: + case Kind.FLOAT: + case Kind.STRING: + case Kind.BOOLEAN: + case Kind.NULL: + case Kind.ENUM: { + // Static -> no variables + return; + } + case Kind.LIST: { + for (const value of valueNode.values) { + findVariableNamesUsedInValueNode(value, variableNames); + } + return; + } + case Kind.OBJECT: { + for (const field of valueNode.fields) { + findVariableNamesUsedInValueNode(field.value, variableNames); + } + return; + } + case Kind.VARIABLE: { + variableNames.add(valueNode.name.value); + return; + } + default: { + const never = valueNode; + throw new Error(`Unsupported valueNode: ${JSON.stringify(never)}`); + } + } +} +function findVariableNamesUsedInDirectives(directives, variableNames) { + if (directives !== undefined) { + for (const dir of directives) { + if (dir.arguments !== undefined) { + for (const arg of dir.arguments) { + findVariableNamesUsedInValueNode(arg.value, variableNames); + } + } + } + } +} +function findVariableNamesUsedInArguments(args, variableNames) { + if (args !== undefined) { + for (const arg of args) { + findVariableNamesUsedInValueNode(arg.value, variableNames); + } + } +} +function findVariableNamesUsedInSelectionNode(operationPlan, selection, variableNames) { + findVariableNamesUsedInDirectives(selection.directives, variableNames); + switch (selection.kind) { + case Kind.FIELD: { + findVariableNamesUsedInFieldNode(operationPlan, selection, variableNames); + return; + } + case Kind.INLINE_FRAGMENT: { + findVariableNamesUsedInDirectives(selection.directives, variableNames); + for (const innerSelection of selection.selectionSet.selections) { + findVariableNamesUsedInSelectionNode(operationPlan, innerSelection, variableNames); + } + return; + } + case Kind.FRAGMENT_SPREAD: { + findVariableNamesUsedInDirectives(selection.directives, variableNames); + const fragmentName = selection.name.value; + const fragment = operationPlan.fragments[fragmentName]; + findVariableNamesUsedInDirectives(fragment.directives, variableNames); + if (fragment.variableDefinitions?.length) { + throw new error_js_1.SafeError("Grafast doesn't support variable definitions on fragments yet."); + } + for (const innerSelection of fragment.selectionSet.selections) { + findVariableNamesUsedInSelectionNode(operationPlan, innerSelection, variableNames); + } + return; + } + default: { + const never = selection; + throw new Error(`Unsupported selection ${never.kind}`); + } + } +} +function findVariableNamesUsedInFieldNode(operationPlan, field, variableNames) { + findVariableNamesUsedInArguments(field.arguments, variableNames); + findVariableNamesUsedInDirectives(field.directives, variableNames); + if (field.selectionSet !== undefined) { + for (const selection of field.selectionSet.selections) { + findVariableNamesUsedInSelectionNode(operationPlan, selection, variableNames); + } + } +} +/** + * Given a FieldNode, recursively walks and finds all the variable references, + * returning a list of the (unique) variable names used. + */ +function findVariableNamesUsed(operationPlan, field) { + const variableNames = new Set(); + findVariableNamesUsedInFieldNode(operationPlan, field, variableNames); + return [...variableNames].sort(); +} +function isTypePlanned(schema, namedType) { + if (namedType instanceof GraphQLObjectType) { + return !!namedType.extensions?.grafast?.assertStep; + } + else if (namedType instanceof GraphQLUnionType || + namedType instanceof GraphQLInterfaceType) { + const types = namedType instanceof GraphQLUnionType + ? namedType.getTypes() + : schema.getImplementations(namedType).objects; + let firstHadPlan = null; + let i = 0; + for (const type of types) { + const hasPlan = !!type.extensions?.grafast?.assertStep; + if (firstHadPlan === null) { + firstHadPlan = hasPlan; + } + else if (hasPlan !== firstHadPlan) { + // ENHANCE: validate this at schema build time + throw new Error(`The '${namedType.name}' interface or union type's first type '${types[0]}' ${firstHadPlan ? "expected a plan" : "did not expect a plan"}, however the type '${type}' (index = ${i}) ${hasPlan ? "expected a plan" : "did not expect a plan"}. All types in an interface or union must be in agreement about whether a plan is expected or not.`); + } + i++; + } + return !!firstHadPlan; + } + else { + return false; + } +} +/** + * Make protected/private methods accessible. + * + * @internal + */ +function sudo(obj) { + return obj; +} +/** + * We want everything else to treat things like `dependencies` as read only, + * however we ourselves want to be able to write to them, so we can use + * writeable for this. + * + * @internal + */ +function writeableArray(a) { + return a; +} +/** + * Returns `true` if the first argument depends on the second argument either + * directly or indirectly (via a chain of dependencies). + */ +function stepADependsOnStepB(stepA, stepB) { + if (stepA === stepB) { + throw new Error("Invalid call to stepADependsOnStepB"); + } + // PERF: bredth-first might be better. + // PERF: we can stop looking once we pass a certain layerPlan boundary. + // PERF: maybe some form of caching here would be sensible? + // Depth-first search for match + for (const dep of sudo(stepA).dependencies) { + if (dep === stepB) { + return true; + } + if (stepADependsOnStepB(dep, stepB)) { + return true; + } + } + return false; +} +/** + * Returns true if stepA is allowed to depend on stepB, false otherwise. (This + * mostly relates to heirarchy.) + */ +function stepAMayDependOnStepB($a, $b) { + if ($a.isFinalized) { + return false; + } + if ($a._isUnaryLocked && $a._isUnary && !$b._isUnary) { + return false; + } + if (!$a.layerPlan.ancestry.includes($b.layerPlan)) { + return false; + } + return !stepADependsOnStepB($b, $a); +} +/** + * For a regular GraphQL query with no `@stream`/`@defer`, the entire result is + * calculated and then the output is generated and sent to the client at once. + * Thus you can think of this as every plan is in the same "phase". + * + * However, if you introduce a `@stream`/`@defer` selection, then the steps + * inside that selection should run _later_ than the steps in the parent + * selection - they should run in two different phases. Similar is true for + * subscriptions. + * + * When optimizing your plans, if you are not careful you may end up pushing + * what should be later work into the earlier phase, resulting in the initial + * payload being delayed whilst things that should have been deferred are being + * calculated. Thus, you should generally check that two plans are in the same phase + * before you try and merge them. + * + * This is not a strict rule, though, because sometimes it makes more sense to + * push work into the parent phase because it would be faster overall to do + * that work there, and would not significantly delay the initial payload's + * execution time - for example it's unlikely that it would make sense to defer + * selecting an additional boolean column from a database table even if the + * operation indicates that's what you should do. + * + * As a step class author, it's your responsiblity to figure out the right + * approach. Once you have, you can use this function to help you, should you + * need it. + */ +function stepsAreInSamePhase(ancestor, descendent) { + let currentLayerPlan = descendent.layerPlan; + do { + if (currentLayerPlan === ancestor.layerPlan) { + return true; + } + const t = currentLayerPlan.reason.type; + switch (t) { + case "subscription": + case "defer": { + // These indicate boundaries over which plans shouldn't be optimized + // together (generally). + return false; + } + case "polymorphic": { + // OPTIMIZE: can optimize this so that if all polymorphicPaths match then it + // passes + return false; + } + case "listItem": { + if (currentLayerPlan.reason.stream) { + // It's streamed, but we can still inline the step into its parent since its the parent that is being streamed (so it should not add to the initial execution overhead). + // OPTIMIZE: maybe we should only allow this if the parent actually has `stream` support, and disable it otherwise? + continue; + } + else { + continue; + } + } + case "root": + case "nullableBoundary": + case "subroutine": + case "mutationField": { + continue; + } + default: { + const never = t; + throw new Error(`Unhandled layer plan type '${never}'`); + } + } + } while ((currentLayerPlan = currentLayerPlan.parentLayerPlan)); + throw new Error(`${descendent} is not dependent on ${ancestor}, perhaps you passed the arguments in the wrong order?`); +} +// ENHANCE: implement this! +const canonicalJSONStringify = (o) => JSON.stringify(o); +exports.canonicalJSONStringify = canonicalJSONStringify; +// PERF: only do this if isDev; otherwise replace with NOOP? +function assertNotAsync(fn, name) { + if (fn?.constructor?.name === "AsyncFunction") { + throw new Error(`Plans must be synchronous, but this schema has an async function at '${name}': ${fn.toString()}`); + } +} +// PERF: only do this if isDev; otherwise replace with NOOP? +function assertNotPromise(value, fn, name) { + if (isPromiseLike(value)) { + throw new Error(`Plans must be synchronous, but this schema has an function at '${name}' that returned a promise-like object: ${fn.toString()}`); + } + return value; +} +function hasItemPlan(step) { + return "itemPlan" in step && typeof step.itemPlan === "function"; +} +function exportNameHint(obj, nameHint) { + if ((typeof obj === "object" && obj != null) || typeof obj === "function") { + if (!("$exporter$name" in obj)) { + Object.defineProperty(obj, "$exporter$name", { + writable: true, + value: nameHint, + }); + } + else if (!obj.$exporter$name) { + obj.$exporter$name = nameHint; + } + } +} +function isTuple(t) { + return Array.isArray(t); +} +/** + * Turns an array of keys into a digest, avoiding conflicts. + * Symbols are treated as equivalent. (Theoretically faster + * than JSON.stringify().) + */ +function digestKeys(keys) { + let str = ""; + for (let i = 0, l = keys.length; i < l; i++) { + const item = keys[i]; + if (typeof item === "string") { + // str += `|§${item.replace(/§/g, "§§")}§`; + str += `§${item.length}:${item}`; + } + else if (typeof item === "number") { + str += `N${item}`; + } + else { + str += "!"; + } + } + return str; +} +/** + * If the directive has the argument `argName`, return a step representing that + * arguments value, whether that be a step representing the relevant variable + * or a constant step representing the hardcoded value in the document. + * + * @remarks NOT SUITABLE FOR USAGE WITH LISTS OR OBJECTS! Does not evaluate + * internal variable usages e.g. `[1, $b, 3]` + */ +function directiveArgument(operationPlan, directive, argName, expectedKind) { + const arg = directive.arguments?.find((n) => n.name.value === argName); + if (!arg) + return undefined; + const val = arg.value; + return val.kind === graphql.Kind.VARIABLE + ? operationPlan.variableValuesStep.get(val.name.value) + : val.kind === expectedKind + ? (0, constant_js_1.constant)(val.kind === Kind.INT + ? parseInt(val.value, 10) + : val.kind === Kind.FLOAT + ? parseFloat(val.value) + : // boolean, string + val.value) + : undefined; +} +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/utils.js.map b/grafast/grafast/dist/utils.js.map new file mode 100644 index 0000000000..e42f35a218 --- /dev/null +++ b/grafast/grafast/dist/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafast/dist/version.d.ts b/grafast/grafast/dist/version.d.ts new file mode 100644 index 0000000000..4859e2c9f3 --- /dev/null +++ b/grafast/grafast/dist/version.d.ts @@ -0,0 +1,2 @@ +export declare const version = "0.1.1-beta.21"; +//# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/grafast/grafast/dist/version.d.ts.map b/grafast/grafast/dist/version.d.ts.map new file mode 100644 index 0000000000..1f99446fca --- /dev/null +++ b/grafast/grafast/dist/version.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,kBAAkB,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/dist/version.js b/grafast/grafast/dist/version.js new file mode 100644 index 0000000000..14889a21af --- /dev/null +++ b/grafast/grafast/dist/version.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.version = void 0; +// This file is autogenerated by /scripts/postversion.mjs +exports.version = "0.1.1-beta.21"; +//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/grafast/grafast/dist/version.js.map b/grafast/grafast/dist/version.js.map new file mode 100644 index 0000000000..5170c4e6f8 --- /dev/null +++ b/grafast/grafast/dist/version.js.map @@ -0,0 +1 @@ +{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AAC5C,QAAA,OAAO,GAAG,eAAe,CAAC"} \ No newline at end of file diff --git a/grafast/grafast/tsconfig.tsbuildinfo b/grafast/grafast/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..e80f83624c --- /dev/null +++ b/grafast/grafast/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/graphql/version.d.ts","../../node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/graphql/language/source.d.ts","../../node_modules/graphql/jsutils/path.d.ts","../../node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/graphql/language/kinds.d.ts","../../node_modules/graphql/language/tokenkind.d.ts","../../node_modules/graphql/language/ast.d.ts","../../node_modules/graphql/language/location.d.ts","../../node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/graphql/language/directivelocation.d.ts","../../node_modules/graphql/type/directives.d.ts","../../node_modules/graphql/type/schema.d.ts","../../node_modules/graphql/type/definition.d.ts","../../node_modules/graphql/execution/execute.d.ts","../../node_modules/graphql/graphql.d.ts","../../node_modules/graphql/type/scalars.d.ts","../../node_modules/graphql/type/introspection.d.ts","../../node_modules/graphql/type/validate.d.ts","../../node_modules/graphql/type/assertname.d.ts","../../node_modules/graphql/type/index.d.ts","../../node_modules/graphql/language/printlocation.d.ts","../../node_modules/graphql/language/lexer.d.ts","../../node_modules/graphql/language/parser.d.ts","../../node_modules/graphql/language/printer.d.ts","../../node_modules/graphql/language/visitor.d.ts","../../node_modules/graphql/language/predicates.d.ts","../../node_modules/graphql/language/index.d.ts","../../node_modules/graphql/execution/subscribe.d.ts","../../node_modules/graphql/execution/values.d.ts","../../node_modules/graphql/execution/index.d.ts","../../node_modules/graphql/subscription/index.d.ts","../../node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/graphql/validation/validate.d.ts","../../node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/graphql/validation/rules/deferstreamdirectiveonrootfieldrule.d.ts","../../node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/graphql/validation/rules/streamdirectiveonlistfieldrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/graphql/validation/index.d.ts","../../node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/graphql/error/locatederror.d.ts","../../node_modules/graphql/error/index.d.ts","../../node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/graphql/utilities/printschema.d.ts","../../node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/graphql/utilities/concatast.d.ts","../../node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/graphql/utilities/index.d.ts","../../node_modules/graphql/index.d.ts","../../node_modules/eventemitter3/index.d.ts","../../utils/graphile-config/dist/interfaces.d.ts","../../utils/graphile-config/dist/functionality.d.ts","../../utils/graphile-config/dist/hooks.d.ts","../../utils/graphile-config/dist/middleware.d.ts","../../utils/graphile-config/dist/resolvepresets.d.ts","../../utils/graphile-config/dist/index.d.ts","./src/therecanbeonlyone.ts","../../utils/lru/dist/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","./src/dev.ts","./src/inspect.ts","./src/error.ts","../../node_modules/chalk/index.d.ts","../../utils/tamedevil/dist/reservedwords.d.ts","../../utils/tamedevil/dist/therecanbeonlyone.d.ts","../../utils/tamedevil/dist/index.d.ts","./src/assert.ts","./src/polymorphic.ts","../../node_modules/iterall/index.d.ts","./src/steps/__item.ts","./src/deferred.ts","./src/constraints.ts","./src/engine/lib/withgloballayerplan.ts","./src/global.ts","./src/steps/__flag.ts","./src/steps/constant.ts","./src/steps/listtransform.ts","./src/steps/each.ts","./src/steps/connection.ts","./src/steps/error.ts","./src/steps/filter.ts","./src/steps/list.ts","./src/steps/first.ts","./src/steps/groupby.ts","./src/steps/object.ts","./src/multistep.ts","./src/steps/sideeffect.ts","./src/steps/lambda.ts","./src/steps/last.ts","./src/steps/listen.ts","./src/steps/node.ts","./src/steps/partitionbyindex.ts","./src/steps/remapkeys.ts","./src/steps/reverse.ts","./src/steps/applyinput.ts","./src/steps/setter.ts","./src/steps/__trackedvalue.ts","./src/steps/__inputdefault.ts","./src/steps/__inputobject.ts","./src/input.ts","./src/steps/__inputlist.ts","./src/steps/__inputstaticleaf.ts","./src/steps/applytransforms.ts","./src/steps/bakedinput.ts","./src/steps/condition.ts","./src/steps/graphqlresolver.ts","./src/steps/load.ts","./src/steps/polymorphicbranch.ts","./src/steps/proxy.ts","./src/steps/index.ts","./src/graphqlcollectfields.ts","./src/graphqlmergeselectionsets.ts","./src/operationplan-input.ts","./src/timesource.ts","./src/engine/lib/defaultplanresolver.ts","./src/engine/lock.ts","./src/engine/executeoutputplan.ts","./src/engine/outputplan.ts","./src/engine/steptracker.ts","./src/engine/operationplan.ts","./src/utils.ts","./src/steps/access.ts","./src/steps/__value.ts","./src/engine/executebucket.ts","./src/engine/layerplan.ts","./src/step.ts","./src/steps/__inputdynamicscalar.ts","./src/exportas.ts","./src/stripansi.ts","./src/grafastprint.ts","./src/makegrafastschema.ts","./src/middleware.ts","./src/establishoperationplan.ts","./src/prepare.ts","./src/execute.ts","./src/grafastgraphql.ts","./src/stringifypayload.ts","./src/subscribe.ts","./src/version.ts","./src/index.ts","./src/bucket.ts","./src/planjsoninterfaces.ts","./src/interfaces.ts","./src/args.ts","./src/config.ts","../../node_modules/@whatwg-node/promise-helpers/typings/index.d.cts","../../node_modules/@envelop/types/typings/utils.d.cts","../../node_modules/@envelop/types/typings/graphql.d.cts","../../node_modules/@envelop/types/typings/hooks.d.cts","../../node_modules/@envelop/types/typings/plugin.d.cts","../../node_modules/@envelop/types/typings/get-enveloped.d.cts","../../node_modules/@envelop/types/typings/context-types.d.cts","../../node_modules/@envelop/types/typings/index.d.cts","../../node_modules/@envelop/instrumentation/typings/instrumentation.d.cts","../../node_modules/@envelop/instrumentation/typings/index.d.cts","../../node_modules/@envelop/core/typings/create.d.cts","../../node_modules/@envelop/core/typings/utils.d.cts","../../node_modules/@envelop/core/typings/plugins/use-envelop.d.cts","../../node_modules/@envelop/core/typings/plugins/use-logger.d.cts","../../node_modules/@envelop/core/typings/plugins/use-schema.d.cts","../../node_modules/@envelop/core/typings/plugins/use-masked-errors.d.cts","../../node_modules/@envelop/core/typings/plugins/use-error-handler.d.cts","../../node_modules/@envelop/core/typings/plugins/use-extend-context.d.cts","../../node_modules/@envelop/core/typings/plugins/use-payload-formatter.d.cts","../../node_modules/@envelop/core/typings/plugins/use-engine.d.cts","../../node_modules/@envelop/core/typings/plugins/use-validation-rule.d.cts","../../node_modules/@envelop/core/typings/document-string-map.d.cts","../../node_modules/@envelop/core/typings/index.d.cts","./src/envelop.ts","./src/mermaid.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/events/index.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/file.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/filereader.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/assert/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/codemirror/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/cookies/node_modules/@types/express/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-axis/index.d.ts","../../node_modules/@types/d3-brush/index.d.ts","../../node_modules/@types/d3-chord/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@types/d3-contour/index.d.ts","../../node_modules/@types/d3-delaunay/index.d.ts","../../node_modules/@types/d3-dispatch/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-dsv/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-fetch/index.d.ts","../../node_modules/@types/d3-force/index.d.ts","../../node_modules/@types/d3-format/index.d.ts","../../node_modules/@types/d3-geo/index.d.ts","../../node_modules/@types/d3-hierarchy/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-polygon/index.d.ts","../../node_modules/@types/d3-quadtree/index.d.ts","../../node_modules/@types/d3-random/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-scale-chromatic/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-time-format/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/d3/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/interpret/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/jsonwebtoken/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","../../node_modules/@types/koa-bodyparser/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/ajv/node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/@types/license-checker-webpack-plugin/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@iconify/types/types.d.ts","../../node_modules/@iconify/utils/lib/customisations/defaults.d.ts","../../node_modules/@iconify/utils/lib/customisations/merge.d.ts","../../node_modules/@iconify/utils/lib/customisations/bool.d.ts","../../node_modules/@iconify/utils/lib/customisations/flip.d.ts","../../node_modules/@iconify/utils/lib/customisations/rotate.d.ts","../../node_modules/@iconify/utils/lib/icon/name.d.ts","../../node_modules/@iconify/utils/lib/icon/defaults.d.ts","../../node_modules/@iconify/utils/lib/icon/merge.d.ts","../../node_modules/@iconify/utils/lib/icon/transformations.d.ts","../../node_modules/@iconify/utils/lib/svg/viewbox.d.ts","../../node_modules/@iconify/utils/lib/icon/square.d.ts","../../node_modules/@iconify/utils/lib/icon-set/tree.d.ts","../../node_modules/@iconify/utils/lib/icon-set/parse.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","../../node_modules/@iconify/utils/lib/icon-set/expand.d.ts","../../node_modules/@iconify/utils/lib/icon-set/minify.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","../../node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","../../node_modules/@iconify/utils/lib/svg/build.d.ts","../../node_modules/@iconify/utils/lib/svg/defs.d.ts","../../node_modules/@iconify/utils/lib/svg/id.d.ts","../../node_modules/@iconify/utils/lib/svg/size.d.ts","../../node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","../../node_modules/@iconify/utils/lib/svg/trim.d.ts","../../node_modules/@iconify/utils/lib/svg/pretty.d.ts","../../node_modules/@iconify/utils/lib/svg/html.d.ts","../../node_modules/@iconify/utils/lib/svg/url.d.ts","../../node_modules/@iconify/utils/lib/svg/inner-html.d.ts","../../node_modules/@iconify/utils/lib/svg/parse.d.ts","../../node_modules/@iconify/utils/lib/colors/types.d.ts","../../node_modules/@iconify/utils/lib/colors/keywords.d.ts","../../node_modules/@iconify/utils/lib/colors/index.d.ts","../../node_modules/@iconify/utils/lib/css/types.d.ts","../../node_modules/@iconify/utils/lib/css/icon.d.ts","../../node_modules/@iconify/utils/lib/css/icons.d.ts","../../node_modules/@antfu/utils/dist/index.d.mts","../../node_modules/@iconify/utils/lib/loader/types.d.ts","../../node_modules/@iconify/utils/lib/loader/utils.d.ts","../../node_modules/@iconify/utils/lib/loader/custom.d.ts","../../node_modules/@iconify/utils/lib/loader/modern.d.ts","../../node_modules/@iconify/utils/lib/loader/loader.d.ts","../../node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","../../node_modules/@iconify/utils/lib/emoji/convert.d.ts","../../node_modules/@iconify/utils/lib/emoji/format.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","../../node_modules/@iconify/utils/lib/emoji/data.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/components.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/name.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","../../node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","../../node_modules/@iconify/utils/lib/emoji/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","../../node_modules/@iconify/utils/lib/misc/strings.d.ts","../../node_modules/@iconify/utils/lib/misc/objects.d.ts","../../node_modules/@iconify/utils/lib/misc/title.d.ts","../../node_modules/@iconify/utils/lib/index.d.ts","../../node_modules/mermaid/dist/rendering-util/icons.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/dompurify/dist/purify.es.d.mts","../../node_modules/mermaid/dist/config.type.d.ts","../../node_modules/type-fest/source/basic.d.ts","../../node_modules/type-fest/source/except.d.ts","../../node_modules/type-fest/source/mutable.d.ts","../../node_modules/type-fest/source/merge.d.ts","../../node_modules/type-fest/source/merge-exclusive.d.ts","../../node_modules/type-fest/source/require-at-least-one.d.ts","../../node_modules/type-fest/source/require-exactly-one.d.ts","../../node_modules/type-fest/source/partial-deep.d.ts","../../node_modules/type-fest/source/readonly-deep.d.ts","../../node_modules/type-fest/source/literal-union.d.ts","../../node_modules/type-fest/source/promisable.d.ts","../../node_modules/type-fest/source/opaque.d.ts","../../node_modules/type-fest/source/set-optional.d.ts","../../node_modules/type-fest/source/set-required.d.ts","../../node_modules/type-fest/source/value-of.d.ts","../../node_modules/type-fest/source/promise-value.d.ts","../../node_modules/type-fest/source/async-return-type.d.ts","../../node_modules/type-fest/source/conditional-keys.d.ts","../../node_modules/type-fest/source/conditional-except.d.ts","../../node_modules/type-fest/source/conditional-pick.d.ts","../../node_modules/type-fest/source/union-to-intersection.d.ts","../../node_modules/type-fest/source/stringified.d.ts","../../node_modules/type-fest/source/fixed-length-array.d.ts","../../node_modules/type-fest/source/iterable-element.d.ts","../../node_modules/type-fest/source/entry.d.ts","../../node_modules/type-fest/source/entries.d.ts","../../node_modules/type-fest/source/set-return-type.d.ts","../../node_modules/type-fest/source/asyncify.d.ts","../../node_modules/type-fest/source/package-json.d.ts","../../node_modules/type-fest/source/tsconfig-json.d.ts","../../node_modules/type-fest/base.d.ts","../../node_modules/type-fest/source/utilities.d.ts","../../node_modules/type-fest/ts41/camel-case.d.ts","../../node_modules/type-fest/ts41/delimiter-case.d.ts","../../node_modules/type-fest/ts41/kebab-case.d.ts","../../node_modules/type-fest/ts41/pascal-case.d.ts","../../node_modules/type-fest/ts41/snake-case.d.ts","../../node_modules/type-fest/ts41/index.d.ts","../../node_modules/mermaid/dist/types.d.ts","../../node_modules/mermaid/dist/utils.d.ts","../../node_modules/mermaid/dist/diagram.d.ts","../../node_modules/mermaid/dist/diagram-api/types.d.ts","../../node_modules/mermaid/dist/diagram-api/detecttype.d.ts","../../node_modules/mermaid/dist/errors.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","../../node_modules/mermaid/dist/rendering-util/types.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","../../node_modules/dagre-d3-es/src/graphlib/graph.d.ts","../../node_modules/dagre-d3-es/src/graphlib/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/render.d.ts","../../node_modules/dagre-d3-es/src/index.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","../../node_modules/mermaid/dist/logger.d.ts","../../node_modules/mermaid/dist/internals.d.ts","../../node_modules/mermaid/dist/mermaidapi.d.ts","../../node_modules/mermaid/dist/rendering-util/render.d.ts","../../node_modules/mermaid/dist/mermaid.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/mock-fs/lib/item.d.ts","../../node_modules/@types/mock-fs/lib/file.d.ts","../../node_modules/@types/mock-fs/lib/directory.d.ts","../../node_modules/@types/mock-fs/lib/symlink.d.ts","../../node_modules/@types/mock-fs/lib/filesystem.d.ts","../../node_modules/@types/mock-fs/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/nodemon/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/pg/node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pluralize/index.d.ts","../../node_modules/prettier/doc.d.ts","../../node_modules/prettier/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/ps-tree/index.d.ts","../../node_modules/ts-toolbelt/out/index.d.ts","../../node_modules/@types/ramda/tools.d.ts","../../node_modules/@types/ramda/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/minipass/dist/commonjs/index.d.ts","../../node_modules/lru-cache/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/path-scurry/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts","../../node_modules/glob/dist/commonjs/pattern.d.ts","../../node_modules/glob/dist/commonjs/processor.d.ts","../../node_modules/glob/dist/commonjs/walker.d.ts","../../node_modules/glob/dist/commonjs/ignore.d.ts","../../node_modules/glob/dist/commonjs/glob.d.ts","../../node_modules/glob/dist/commonjs/has-magic.d.ts","../../node_modules/glob/dist/commonjs/index.d.ts","../../node_modules/rimraf/dist/commonjs/opt-arg.d.ts","../../node_modules/rimraf/dist/commonjs/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/source-list-map/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/tapable/index.d.ts","../../node_modules/@types/tern/lib/tern/index.d.ts","../../node_modules/@types/tern/lib/infer/index.d.ts","../../node_modules/@types/tern/index.d.ts","../../node_modules/source-map/source-map.d.ts","../../node_modules/@types/uglify-js/index.d.ts","../../node_modules/anymatch/index.d.ts","../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../node_modules/@types/webpack-sources/lib/source.d.ts","../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../node_modules/@types/webpack-sources/lib/index.d.ts","../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../node_modules/@types/webpack-sources/index.d.ts","../../node_modules/@types/webpack/index.d.ts","../../node_modules/@types/webpack-bundle-analyzer/index.d.ts","../../node_modules/@types/websocket/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../../../node_modules/@types/color-name/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/global.d.ts"],"fileIdsList":[[309,353],[79,181,254,265,273,276,309,353],[79,309,353],[79,253,258,267,273,276,309,353],[79,193,194,195,200,202,203,242,247,253,254,256,259,267,274,276,309,353],[79,181,192,193,200,251,254,273,274,276,309,353],[79,190,194,199,200,201,242,253,257,259,267,274,276,309,353],[79,242,255,259,276,309,353],[79,258,273,309,353],[79,273,309,353],[79,181,190,194,199,200,205,206,209,212,230,233,239,242,244,245,246,247,248,249,251,252,254,258,259,273,276,309,353],[79,181,190,193,194,199,200,201,242,250,254,255,258,259,273,274,276,309,353],[79,193,194,208,242,249,251,254,258,259,273,276,309,353],[79,188,262,268,271,301,309,353,368],[79,193,194,276,309,353],[79,181,190,192,193,205,247,254,273,276,309,353],[79,84,181,182,193,194,254,265,267,273,276,309,353],[79,254,309,353],[79,84,181,190,195,254,265,268,273,276,309,353],[79,194,196,242,251,254,257,259,262,274,309,353],[79,181,195,243,253,254,267,273,309,353],[79,181,194,254,273,309,353],[79,181,188,189,190,192,193,195,201,202,204,206,218,219,242,243,246,248,253,254,259,260,261,262,263,264,265,267,268,269,270,271,272,273,276,277,309,353],[79,181,194,230,231,232,243,253,254,260,267,273,276,309,353],[79,85,181,182,188,195,205,228,231,242,243,253,254,258,259,260,267,273,274,275,309,353],[79,181,242,254,259,273,276,309,353],[79,262,275,276,309,353],[79,188,309,353],[79,209,215,218,242,254,259,309,353],[79,181,194,203,242,253,254,259,267,273,276,309,353],[79,276,309,353],[79,194,276,309,353],[79,95,181,193,200,202,204,247,250,251,253,254,257,266,267,273,274,276,309,353],[79,181,193,194,195,196,199,206,207,243,249,253,254,258,267,273,276,309,353],[79,194,195,203,242,259,276,309,353],[79,230,242,259,276,309,353],[79,181,195,230,242,254,259,273,276,309,353],[79,181,200,209,215,233,242,254,259,273,276,309,353],[79,181,199,209,233,242,254,259,273,276,309,353],[79,181,209,242,254,259,273,309,353],[79,196,242,259,273,276,309,353],[79,181,205,242,254,255,256,259,273,276,309,353],[79,242,255,259,273,309,353],[79,194,196,199,242,254,259,276,309,353],[79,181,242,243,254,259,273,276,309,353],[79,193,195,200,203,206,212,242,257,258,259,274,276,309,353],[79,181,228,242,243,254,259,273,276,309,353],[79,242,259,276,309,353],[79,200,209,211,242,254,259,276,309,353],[79,194,242,243,254,259,276,309,353],[79,196,203,210,212,242,259,309,353],[79,194,195,242,254,259,276,309,353],[79,212,215,242,259,276,309,353],[79,181,195,201,202,242,254,259,273,276,309,353],[79,196,203,210,211,212,242,259,309,353],[79,203,206,207,208,209,210,211,212,213,214,215,216,217,218,220,221,222,223,224,225,226,227,228,229,230,232,234,235,236,237,238,239,240,241,242,255,256,273,309,353],[79,219,220,242,259,276,309,353],[79,209,242,259,276,309,353],[79,193,203,209,242,259,273,276,309,353],[79,193,200,203,206,212,242,257,258,259,273,274,276,309,353],[79,219,242,254,255,259,273,276,309,353],[79,181,193,194,201,209,221,242,254,255,259,273,276,309,353],[79,199,209,242,254,259,276,309,353],[79,242,254,259,276,309,353],[79,196,199,242,254,259,276,309,353],[79,228,273,309,353],[79,219,242,259,276,309,353],[79,84,181,254,265,268,273,276,309,353],[79,181,193,194,195,200,204,209,242,253,254,258,259,267,273,276,309,353],[309,353,465],[286,309,353],[286,288,289,290,291,292,293,294,295,296,297,298,299,300,309,353],[286,294,309,353],[286,290,309,353],[279,286,309,353],[287,309,353],[279,309,353],[280,283,284,309,353],[280,281,283,309,353],[280,309,353],[280,281,282,283,284,285,309,353],[280,282,309,353],[309,353,661],[309,353,629,664],[309,353,629],[309,353,629,630],[309,353,686],[309,353,676,678],[309,353,676,678,679,680,681,682],[309,353,676,678,679],[309,353,676,678,679,680],[309,353,676,678,679,680,681],[309,353,629,636],[309,353,629,639],[309,353,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690],[309,353,629,630,667,668],[309,353,629,630,667],[309,353,629,630,639],[309,353,629,630,639,650],[309,353,552],[309,353,368,403],[309,353,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463],[309,353,407],[309,353,407,411],[309,353,405,407,409],[309,353,405,407],[309,353,407,413],[309,353,406,407],[309,353,418],[309,353,407,424,425,426],[309,353,407,428],[309,353,407,429,430,431,432,433,434,435,436,437,438,439,440,441],[309,353,407,410],[309,353,407,409],[309,353,407,418],[309,353,465,466,467,468,469],[309,353,465,467],[309,353,368,403,471],[309,353,359,403],[309,353,396,403,480],[309,353,368,403,471,485,486],[309,353,472,480,484],[309,353,489,517],[309,353,488,494],[309,353,499],[309,353,494],[309,353,493],[309,353,511],[309,353,507],[309,353,489,506,517],[309,353,488,489,490,491,492,493,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518],[191,309,353],[309,353,521,525],[309,353,521,522,524],[309,353,525],[309,353,520,521,522],[309,353,365,368,403,477,478,479],[309,353,472,478,480,484,527],[309,353,366,403,529,530],[309,353,365,366,403,532],[309,353,366,403],[309,353,535],[309,353,537,543],[309,353,538,539,540,541,542],[309,353,543],[309,353,365,368,370,373,385,396,403],[309,353,403],[309,353,548],[309,353,549],[309,353,554,557],[309,353,366,396,403],[191,309,353,358,403],[309,353,365,403],[309,353,562],[309,352,353,365,368,369,373,380,396,403,404,482,483,486,487,545,561],[309,353,613],[309,353,615,617,618,619,620,621,622,623,624,625,626,627],[309,353,615,616,618,619,620,621,622,623,624,625,626,627],[309,353,616,617,618,619,620,621,622,623,624,625,626,627],[309,353,615,616,617,619,620,621,622,623,624,625,626,627],[309,353,615,616,617,618,620,621,622,623,624,625,626,627],[309,353,615,616,617,618,619,621,622,623,624,625,626,627],[309,353,615,616,617,618,619,620,622,623,624,625,626,627],[309,353,615,616,617,618,619,620,621,623,624,625,626,627],[309,353,615,616,617,618,619,620,621,622,624,625,626,627],[309,353,615,616,617,618,619,620,621,622,623,625,626,627],[309,353,615,616,617,618,619,620,621,622,623,624,626,627],[309,353,615,616,617,618,619,620,621,622,623,624,625,627],[309,353,615,616,617,618,619,620,621,622,623,624,625,626],[309,353,823,824,825,826],[309,353,822],[309,353,403,822],[309,353,822,823,824,825],[309,350,353],[309,352,353],[353],[309,353,358,388],[309,353,354,359,365,366,373,385,396],[309,353,354,355,365,373],[304,305,306,309,353],[309,353,356,397],[309,353,357,358,366,374],[309,353,358,385,393],[309,353,359,361,365,373],[309,352,353,360],[309,353,361,362],[309,353,365],[309,353,363,365],[309,352,353,365],[309,353,365,366,367,385,396],[309,353,365,366,367,381,385,388],[309,348,353,401],[309,353,361,365,368,373,385,396],[309,353,365,366,368,369,373,385,393,396],[309,353,368,370,385,393,396],[307,308,309,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402],[309,353,365,371],[309,353,372,396,401],[309,353,361,365,373,385],[309,320,324,353,396],[309,320,353,385,396],[309,315,353],[309,317,320,353,393,396],[309,353,373,393],[309,315,353,403],[309,317,320,353,373,396],[309,312,313,316,319,353,365,385,396],[309,320,327,353],[309,312,318,353],[309,320,341,342,353],[309,316,320,353,388,396,403],[309,341,353,403],[309,314,315,353,403],[309,320,353],[309,314,315,316,317,318,319,320,321,322,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,342,343,344,345,346,347,353],[309,320,335,353],[309,320,327,328,353],[309,318,320,328,329,353],[309,319,353],[309,312,315,320,353],[309,320,324,328,329,353],[309,324,353],[309,318,320,323,353,396],[309,312,317,320,327,353],[309,353,385],[309,315,320,341,353,401,403],[309,353,374],[309,353,375],[309,352,353,376],[309,350,351,352,353,354,355,356,357,358,359,360,361,362,363,365,366,367,368,369,370,371,372,373,374,375,376,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402],[309,353,379],[309,353,380],[309,353,365,381,382],[309,353,381,383,397,399],[309,353,365,385,386,388],[309,353,387,388],[309,353,385,386],[309,353,388],[309,353,389],[309,350,353,385],[309,353,365,391,392],[309,353,391,392],[309,353,358,373,385,393],[309,353,394],[309,353,373,395],[309,353,368,380,396],[309,353,358,397],[309,353,385,398],[309,353,372,399],[309,353,400],[309,353,358,365,367,376,385,396,399,401],[309,353,385,402],[309,353,365,385,393,403,832,833,836,837],[309,353,844,845],[309,353,844],[309,353,849],[309,353,543,852,853],[309,353,848,950],[309,353,848,951],[309,353,543,852],[309,353,848,851],[309,353,842,847,848],[309,353,368,385,403],[309,353,385,403],[309,353,877,916],[309,353,877,901,916],[309,353,916],[309,353,877],[309,353,877,902,916],[309,353,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915],[309,353,902,916],[309,353,366,385,403,476],[309,353,366,485],[309,353,368,403,477,483],[309,353,923,924],[309,353,521,923],[309,353,521,924],[309,353,693],[309,353,926],[309,353,368,373,403,613],[309,353,403,930,931,932,933,934,935,936,937,938,939,940],[309,353,929,930,939],[309,353,930,939],[309,353,920,929,930,939],[309,353,929,930,931,932,933,934,935,936,937,938,940],[309,353,930],[309,353,358,929,939],[309,353,358,403,612,926,927,928,941],[309,353,365,368,370,373,396,403],[309,353,365,368,370,373,385,393,396,402,403],[309,353,947],[309,353,568,569,573,600,601,603,604,605,607,608],[309,353,566,567],[309,353,566],[309,353,568,608],[309,353,568,569,605,606,608],[309,353,608],[309,353,565,608,609],[309,353,568,569,607,608],[309,353,568,569,571,572,607,608],[309,353,568,569,570,607,608],[309,353,568,569,573,600,601,602,603,604,607,608],[309,353,565,568,569,573,605,607],[309,353,573,608],[309,353,575,576,577,578,579,580,581,582,583,584,608],[309,353,598,608],[309,353,574,585,593,594,595,596,597,599],[309,353,578,608],[309,353,586,587,588,589,590,591,592,608],[309,353,806,807,808,809,810],[309,353,804],[309,353,805,811,812],[309,353,694],[309,353,551,556],[309,353,860,862,866,867,870],[309,353,871],[309,353,862,866,869],[309,353,860,862,866,869,870,871,872],[309,353,866],[309,353,862,866,867,869],[309,353,860,862,867,868,870],[309,353,863,864,865],[309,353,366,375,403,860,861],[81,82,88,89,309,353],[90,156,157,309,353],[81,88,90,309,353],[82,90,309,353],[81,83,84,85,88,90,93,94,309,353],[83,95,109,110,309,353],[81,88,93,94,95,309,353],[81,85,88,90,92,93,94,309,353],[81,82,93,94,95,309,353],[80,96,101,108,111,112,155,158,180,309,353],[81,309,353],[82,86,87,309,353],[82,86,87,88,89,91,102,103,104,105,106,107,309,353],[82,87,88,309,353],[82,309,353],[81,82,87,88,90,103,309,353],[88,309,353],[82,88,89,309,353],[86,88,309,353],[95,109,309,353],[81,83,84,85,88,93,309,353],[81,88,91,94,309,353],[83,92,93,94,97,98,99,100,309,353],[94,309,353],[81,85,88,90,92,94,309,353],[90,93,309,353],[90,309,353],[81,88,94,309,353],[82,88,93,104,309,353],[93,159,309,353],[90,94,309,353],[88,93,309,353],[93,309,353],[81,91,309,353],[81,88,309,353],[88,93,94,309,353],[113,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,309,353],[93,94,309,353],[85,88,309,353],[81,88,92,93,94,106,309,353],[81,85,88,94,309,353],[81,85,88,309,353],[114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,309,353],[106,114,309,353],[114,309,353],[81,88,90,93,113,114,309,353],[81,88,90,92,93,94,106,113,309,353],[309,353,554],[196,309,353,555],[309,353,695],[309,353,696,738],[309,353,519,696,734,737],[309,353,736,738],[309,353,489,517,696,735,736,742,814,815],[309,353,692,696,735,736,737,738,739,740,742,816,817,818],[309,353,696,735,737,738],[309,353,629,691],[309,353,738,742,816],[309,353,742],[309,353,489,517,735,742,803,813,819],[309,353,735,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802],[309,353,489,517,735,742],[309,353,696,741,803],[309,353,696],[309,353,489,517,519,696,735],[309,353,365,389,403],[309,353,403,833,834,835],[309,353,385,403,833],[309,353,839],[309,353,553],[309,353,874],[309,353,366,873],[309,353,610],[309,353,522,564,609],[309,353,522,610],[309,353,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726],[309,353,712],[309,353,712,723],[309,353,698,714],[309,353,714],[309,353,721],[309,353,697],[309,353,698],[309,353,706],[309,353,728],[309,353,727,729,730,731,732,733],[309,353,730],[309,353,729],[309,353,368,373,393,396,399,521,526,564,610,611,612],[183,309,353],[183,184,309,353],[183,184,185,186,187,309,353],[197,198,309,353]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"f473be7c909dbd10c40f013e70da40f24648b2abb01025436fe0a0eecd0e83be","impliedFormat":1},{"version":"c98583f02275727ead0256c97298c15fb77a1c1e473b03c3b61291c63c66d385","impliedFormat":1},{"version":"9a7904e39add402d71343ac8de5303e990d9abb1fc703c64991c655b718267a5","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"f671901909a26ae633328d6d899992193ca9ea718e6315f2c3d46f39c437f02c","impliedFormat":1},{"version":"7920b8aa27a7b6a90bf9f5dc21eedac7f38ca8717ebe70495ab616eb52b3247b","impliedFormat":1},{"version":"485fb40ef0ae61e1f8f5f494a2aa4a69df73dc860b5c94ef8fc8dc42679fdb26","impliedFormat":1},{"version":"1f53ae308869bfb894735576727f3dca47d0405ba7fee4f076a701b449ce6f94","impliedFormat":1},{"version":"84bdeff726a44cad4c07230ccdd2b777e53608d081eb8b27f6d28540ac22a915","impliedFormat":1},{"version":"1950e4d79983ccc330513fb28324280bbd138fc69e2739353008ae5a75f976e6","impliedFormat":1},{"version":"2e9b3ece2914738d48a674dc4d677a6cef576ef045356961120a7915735e13f4","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"3c8c852d93800512dc47f4554efe94789bd81733947e2066a916ba70fe6992fd","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"5a2ae43daf9d478f37780e3ae08089a46347e395812c7c4526684878e34b1401","impliedFormat":1},{"version":"d60984fcae46158649bf553c1a649428ced1dfaa789086a7fb79a819536b0023","impliedFormat":1},{"version":"ff90925b7aef60c568d491966f90f37cfe4eb126a590e68a33c017b9be483f84","impliedFormat":1},{"version":"cbd12dce7f4a3542b0f00690efcf1211e50ad87bd78cedbf7beb60acb27d20a0","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"6b6fdab709d30fbedb090e783a610662e60b4922843f42ef801e3073a23392ee","impliedFormat":1},{"version":"65b2a90560049039460015abe63b8fa7f205bb78796a8de48a3661cfe7e07e28","impliedFormat":1},{"version":"1b6173159974df8ff78f3b01b8b89449053c1912c2ec715a2dc664d8d93a54c1","impliedFormat":1},{"version":"2b4b6a59d7d1020b65f9c878850b1aa2ae8eceb26025224d6bee2c5d7883d815","impliedFormat":1},{"version":"d45acd2463649e59b4dafb4ee051426783c6a13a72c21fac94265676f7fc01d8","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"7ef6d45ce6f0ee16a0441063ca89cebfbe4c00647132f5fe31bbe5420e20843b","impliedFormat":1},{"version":"11c2481df1d73d5d667ce282d1ec9fbcedee39f0a0382fd591cf6434b21f05d0","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"ac7eec65e925055052e4c3d88a303457150e7ddf8f02256a674315335b95af70","impliedFormat":1},{"version":"bb61172ecd43ac71849821f49ef6afa6515230386b253817c380873bdc49da50","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"1b3a76621e54583d0f1a9fcde6b7aa7642283412b103744f7b2a5c3c19108959","impliedFormat":1},{"version":"6f0f5830c13abe710e1e7e97bed1ae039f3a9fc8b5ce2a076141eaf0c854fee6","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"3307e5b71a5eea118476097fde4580e60c20b187e945f42d7eb69a8dbbe7e09a","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"0a08db8f792dd2b329dfb09bb2c7805298d03888608acd9eb554a8ad820e1079","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"490725ebec9ddfc97663887989ff1a49323b7cce7293970732ef962cffed3699","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"cf3f331aad22bfead8f79aae52f022f25bf9ce25185cfc87f3c4a59c060a699e","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"da129261494c4094bf55c761ba5f0ae4d5426d83ed5e312bc7f8600727bb8a05","impliedFormat":1},{"version":"cd2f8f7d90d8d283bb4b91b57406bf793df731d39bc2c119e3fa514a057d21f8","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"1930700210612b5324055fd9d335f4f2a7bb3f1b1433e1adadd7bdc5ee50272f","impliedFormat":1},{"version":"b998db2d97135f8958613fd1d795fc58a17b8fcc452288eaec13e8c8d870d1ac","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"2d8df720a088cfdc1253782b120f400cbe0d4516bb06e98c88ae7c2af1447653","impliedFormat":1},{"version":"99acda6ceb0b1e5a754aa8e7af740702e50ab515561be3d987392f04d0f7078e","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"806f43175b88c9a2ef89448cef56bc95c4df32a27be99748c517e5ca076919e8","impliedFormat":1},{"version":"5832c4ed86047766c1d4cfe2aa5780e3ab5d8d842d12664d0f71faf78c80dd7e","impliedFormat":1},{"version":"a43d21378510cf4ed5aad29f64f3d0fc6e0a30bb2bb81af0ea776b239a77d068","impliedFormat":1},{"version":"60c4cb259d73efe80ca3854715efdf93710a8b11a560a7f9741d6638280b4a80","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"faa402775a4c220279f9c26074a0010f10a7f0293c506ffd0857ea45e8ba7733","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"08b603e3737ff32a685eefca3e7f21324b8b868f3322416cef759f8a54d234ef","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"14d8af44e19148423a5a0817544a229e3ba324e1cd814c1d7b4ca2690baf434c","impliedFormat":1},{"version":"91122fba45414382787d7cffbd90298118a2970f8f12d91cff302f3a482f01e1","impliedFormat":1},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"27b4308d9e3db258a09b8b7bd92677320d654f5fc089abbbcb1fd2f70b14c909","impliedFormat":1},{"version":"d1d7e7d247badcbc50cf0bd6b1096dc7ab3cd36b31e9803b3c0acbbfacc493d2","impliedFormat":1},{"version":"6c2a2e7e8500f70a127dbb259d99c0f3951394df7c46a69eb2569f0e8c14665e","impliedFormat":1},{"version":"924e12558578f341179bb878e75cfd9aa648254f5ac6cf228832fae40a52c067","impliedFormat":1},{"version":"3f7705b6434455ff25ac2d336388564173179a4aed8cd0d1b1ea235f0fd3de23","impliedFormat":1},{"version":"b5f6aef5039b1b98a67bf3a3ed52f8693a56be698da9e4a41e2d67b0751ee005","affectsGlobalScope":true,"impliedFormat":1},{"version":"243cde3e94962d3a3683967fd060231cfa852b82ed1dd37830ec9e01af159c55","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8c2f60c3192f66fe9e5e7a7a941534583cdff4f5a059fad30b1b863a547f388a","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"acb2779a490d980d82d87b3bab178955975784e7331111ca61400decff66a114","signature":"9e8cb3ec89db85e85513bb89adbe63b8acccad3fffe11d6d8df01c865c77fb5a","impliedFormat":1},{"version":"595ec9cfd45edf272e35bb1a723a2bc0161aa699f2d2fa08bc3bb62a7107c7b6","signature":"d751081230981b36b832737b9a64081b67b29a778905a388d2aa9091e6fc3629","impliedFormat":1},{"version":"4c29a1bb397a8cdcfc26f261727f5361843c0bf64f9c2f3068ac6cec4c15f365","signature":"3bb99d9565690ee166e65b90817eb27c7c942b0efa84609bf2fcf0a8cc9405b8","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"53e75027dd1b06ae5d4a3da1cff89d04303b9ef30c5d47b2f8ead4b8616e4549","impliedFormat":1},{"version":"516f341210dea50c84646ee54f7d0cfee42efc76756b45dd46b09c34758e786b","impliedFormat":1},{"version":"812210fbee321e58333269b3e2bce9423c09177dfebba5896ab7eafc7aa7db08","impliedFormat":1},{"version":"468cf4f93fde977fa171a9e65d9eb891ab595197f6cbc4db16f7f4e33027ffe1","signature":"15a5bc7ecfc0cc5662751cda78cd4abc1dfe205021b5f578f47748e74976f755","impliedFormat":1},{"version":"81ac75a0808611b4f51275c79dd0fc65ce4e7ac5f2aacf9a606ce7155d586f0e","signature":"fda09dd5bb69c3fdf9ae579b4b9f5a7db565223896f50aed99760821c1517bbc","impliedFormat":1},{"version":"41449e5c8ad2b4ad46497762cb72ec680457e35e03b658842f257a79da3d694c","impliedFormat":1},{"version":"9bb0d39d8ebf3d1cb039ea6353a4ff47598516c913bc07395cae41fbf7783266","signature":"691e623f6b017a026baf823394aa6d74efabfe877b799c539e085e3f82247cd8","impliedFormat":1},{"version":"9f3b9b476a673852c5ac4cb51bc1234592680f6bcdede8ee33aae94948b61cbc","signature":"c325aac67ed6a692a807c9396d513ce37ed8f56c8d8ca7bf4ea76d4cd09e7c20","impliedFormat":1},{"version":"ce4a638567b7f584309ae629a74b1bbd4bd923721e39c4a0f566f7abd307f3fa","signature":"b6ac3e813f3bc41717619291caf2fbc75ee84b4f5bd3abd3e48885831ebdaf96","impliedFormat":1},{"version":"77e53c3f89278737e1113bcd2b1cbfc77ad50876a4088db4e35e85276458eab2","signature":"e8f141e5548179b835f699a1026f79ea581eeac1a4e57f5f22dcd0b4a772cbbc","impliedFormat":1},{"version":"2f9c8935b798063a85edaf5799fb363fba0d01164219c863ccd470a15638043a","signature":"efa370b650d0c7ec471345f9ecba0738be9b51191db2ec130a9a88b0c50fc212","impliedFormat":1},{"version":"aecfd3a450fc0917c355852e2c1950b6ac8913c006e60834e1e665280ebad33c","signature":"a4808116b12ab27b11b3800dbc2b64dd122d4748d48a111957b87b52fd3cda2d","impliedFormat":1},{"version":"f8212c76a1c437613e4532efd3294808d7f93b695b250c253adf382b483b6757","signature":"e383a277c8c485ffafdeea2bd0d28036bd8d1be4b2d6099a7b27ecc4419fe8d4","impliedFormat":1},{"version":"58c690aed139c8a3d43593f8798f5d52177c1c9ed83b4acd102438773bfbe200","signature":"bbd9e6f68bf6e418bd44d7991a4860b1d386a30b798d1be773931ac7bd1e657a","impliedFormat":1},{"version":"52dabe16a4b4a2bba7485415a92e8d0da1eab8d100d8d3ccf843da98feea73f5","signature":"66a1d3c8e68134692c9784cfcd8ca275d8e24ace1bc01c432c5a2cc27ef27701","impliedFormat":1},{"version":"032d93ee8c94b47db8e193f3da22618f6f097c40cdb0e9332c1b8f5c5fdea264","signature":"f7ff9fd2db48fbabaf6516a4c3515b07325baf4c7a35766a7bc1ce72a1bb9b83","impliedFormat":1},{"version":"4ecfe003c7d534cf560b8172a23bfa4bfe661202b8ba94d2720d82a29b7ba161","signature":"18b79e1c4ef00056857db2070ed947e32dae63dbbaefadee3cb6e8f21d5193d2","impliedFormat":1},{"version":"c467cb2ea435aa8fcfc25e7eb29387b5275e277452d28fa735ccb77fe4a77259","signature":"cbce9fb00ac5676380dafebfd7e5ce1561f17dfbe6356597d6e5d9b6b9bd5fe2","impliedFormat":1},{"version":"4492cc459a524404d8d86286afb6c60e9f28e96ec57f912060c1f111979cfa41","signature":"53960fc36042dc4aef356c0273674bb0e7f65059720fb42ac36d29a8d2e3cbf1","impliedFormat":1},{"version":"935cfab261ca70b6f3a257a26b9826456e58e4eacd1d22aabda19f05cfddcdff","signature":"ae042e01074576c186a734888cd420dcf9eccf57053c9d7de5326cc235b7d3ac","impliedFormat":1},{"version":"5373dc4b862633664102b2cbc439664ce5c9e760e64c9707434445771f6fcd47","signature":"040c519477a40f166f9d3d1f1e792761de759c5301466833b74d119957c794b3","impliedFormat":1},{"version":"3de417f555cd280cbfdf189eb43ce1fc29158b41726d5c59340b43111e71ef93","signature":"f7df54c02497181cc6e63d6eada933f477a18b3a72776a0a77e63de603439061","impliedFormat":1},{"version":"85c4dc842c9da313c8428b470f70ac3b365d7c7cb204d565b976b84655a56bc1","signature":"d5a20d626aa5d02f7732d87050b9f3589627f36e4b4d01fe171d2cb9a958b21c","impliedFormat":1},{"version":"5ffbbb1ddd2ddc4de43f5db7f87bc6654a321b6974fcc557c9b9fd358ae3d499","signature":"a1604f4912418542596cf7598f199be7f276b7ad715416c59603d048894733e4","impliedFormat":1},{"version":"f545a1e001dd10e47b718437a2dbad22abd087256380f07ac56eb27a5002ff70","signature":"d36fb912245b9e1c7a4ac59cffe51d83546d2b03f52e2b3b9fff969d01257800","impliedFormat":1},{"version":"dd2a3a01816f024c2a083bd0d1b56c208b1c28fa64e4960a76a4b179686c04e3","signature":"70ecd65df736dcf74d8304cd3767a863b7fab2bfa04a73c039c995cfd88489dc","impliedFormat":1},{"version":"938efed2ef842a4701b3709b7f79ac9a568cc807d936f9a73e941ab5c6a1f03d","signature":"8c607552166070130883b20fb7da9c7b7006e065239c2075f47e3349f3664c66","impliedFormat":1},{"version":"8d3582e8d3e817cd3ab6594e44fcd28159b9b7a6f4a78e485d2f70958d0391a5","signature":"d3878648b6e0c7f8ca809b4a03d8d13ddccdde282c6c84aa1faf59f0780a888c","impliedFormat":1},{"version":"8b6fb756f8ce467ec38abb739ddd95ddd6581c6f0f4f85bc21d8ec0654725cec","signature":"c1a24626823048792dc4440975646629ae984fa3354cd2f09270834d90fd997d","impliedFormat":1},{"version":"561895242300100aae9b8e1040775390a939e088419a435345558213eb77dabf","signature":"696e8b13ed6b15e0395fa6438f43e1363e09204f080640c6cb5437323f9ed8fb","impliedFormat":1},{"version":"90b6c12cc8806dd2f06d32dc7c98fafc40d2bd7b48dd12d2cf5c369478513b64","signature":"a5d6fe2a52c03c4f5edb8c1ef06ccfc777ae377d0f0dbd7df3b066b0f9cec946","impliedFormat":1},{"version":"fbda0c4c956d5b9775834c8ef96552fc493c03849481eab02567de0268297368","signature":"34b4698d4b6ccfb2b1e3e034d4463ecf490a6c700d229685f7b5b08ccc150393","impliedFormat":1},{"version":"6e2799243f10591e733d8298991b5bbe05c2843bde33dd58a0dc8df5b1a00a15","signature":"f19baa96f4a8c3b23453401f7864ef337ebd2533dca12c042155cbd526341f29","impliedFormat":1},{"version":"d25be2f8647e335f1af74d4f81c5a63c834906968282b2a6708c68e6235cbba2","signature":"013c10b8066b319a9dc033db24f0467737406810561d0c55d8bab3c8212788bb","impliedFormat":1},{"version":"27a6d80946feb7b9a900add8072f38be6dc4695765db88d9788117df568e473f","signature":"c742fe995845140002d0baa8785af21a3bab8527b5584cdb0b407a226107f585","impliedFormat":1},{"version":"77171027fbc01c7f2cf000fe6770def94d1f4d031a7b1dd1219819007854f6be","signature":"a59bdaea7395061b93e12c89996770f196ada0f3e9197e2343763c65d0588dd8","impliedFormat":1},{"version":"4393b282f6785ac4e47dc167282bc48095a5d1b509d58aaa952e25b7b122c6f5","signature":"74554e93cc78df58bc49058d883b5f2d9789a344e003c49ff826832d7578f9ef","impliedFormat":1},{"version":"bedaef6b08b1d5d93be669a20e6d31ac66130fa50a4abab6884cef5af1e71e7d","signature":"11b0c060c13dcf6fd09d60d9870f4921492a4d3c1b39a33f9d93f22f1dfb7c3b","impliedFormat":1},{"version":"395fc93c764302a143e0196bae758081fe6f798cddf5877529ce4f22d1b0b641","signature":"9ffe848f345f1ac8c2fa2f4706c38840fe2beb455e19c5dce756e0ad09776235","impliedFormat":1},{"version":"4c7d0fcf1226d998329ce1a7f6433997803ae88db4c22c15bf57783786fa1322","signature":"b424df9fec80812448f7b2977e3220d5a2eb88e6c8e8b675c282f4eb1f4b8834","impliedFormat":1},{"version":"6dcba7dfcb58f06e2e73e0a637863b13ffef33ff1a0a153f1eea0f221d10a2d7","signature":"d66670300c6ad07603217e119240d129d327ee2cb4e05cdfc86f7f01e36a42ea","impliedFormat":1},{"version":"018ae8f639ff95a849a6e7be2688580bd64ab24aecc136ead3d70401ba3b4528","signature":"3dbba617428a6892f0e7a3c16d960738db464eb8df6724df7d95e7a4f116f110","impliedFormat":1},{"version":"8e9acbd818ffe73593cac7781cb693bf9f75fa39d962841c936f9d711c7d0c05","signature":"3d7926e64b370e31cd4080bb432adb9e92fe096e31bee0685ee49d75cd317120","impliedFormat":1},{"version":"0c9a4b53127cadb73923325b4c1c7e4d884cc03692c54d3a432fc29b6b51e003","signature":"5862b0752f1eeef4061683d1311ebec322696c9ccd497e14b9d0c97545b317b6","impliedFormat":1},{"version":"7490bf7ee959315b65c74f235b8c5000caa8ef1f4f9a232d066be991105d0736","signature":"c9829971663604cc72b30018b901c7cd97483587953e8a9535616ae04c808867","impliedFormat":1},{"version":"d26805067fbec1e3951dba1545d1e7bc021790eddd5da556dba021d54aff8eb1","signature":"b0b73baeadd229c956da12d8b08f9c464b15e653d6dc5838bea41c733de7fe00","impliedFormat":1},{"version":"a69e264258f4244b58d063d46a5359fd6e5f73c4fbb1968a0168202739c6394c","signature":"88ad86557665308c7957b0aeefbba159d9c99ed57e1d9a696cb4b068ea30f68d","impliedFormat":1},{"version":"1c7ae9cf219147615a2957d6e17f75140cddbb7a07b35d6626ad98a9eaa588c7","signature":"8ce9716f8368167c631c4240de8cb2b5997c1c2ad9d885609079ec4c30877139","impliedFormat":1},{"version":"c3b70fbc58ba416db174c58cf11bd8a8247fa3f24b1550a16597ad3ca971813c","signature":"a8e160bd386542c9bb11ac35a7a2525e8c4168db26c58fa6dcdeb0d517d5b692","impliedFormat":1},{"version":"ea867c9fe2c8b06c2e3ebb57cd01055dcd773e3eeec1d2ce5bd3a78930112cab","signature":"a7e006e3243d9746d204b7addb1f034e5deb4a0d157d8c85ecada87a86f222ff","impliedFormat":1},{"version":"a2f1623e9417bd41fd639b1c94796731e6b1473995e6ab3f6bb2aa246d532e8a","signature":"e73aeb1d7d4224e86cfa83db2cf53f0acbb5b32a12ecd9e72da80dfd3f9bbe7a","impliedFormat":1},{"version":"0a917647382844d5e1cdc0b116fb4c7f77aa727b1c6821555687ad10c6cfa266","signature":"f3dd8466af3baf161e0d203a1a28c7bbf9f863679c3b0e659371b1835b40f193","impliedFormat":1},{"version":"5fbd37f56f44d968e6fe18f3f192d564f5534747f21a70095bb6a50b16fb4305","signature":"2a0e3120d243cf93b4e50322bcc886fb04dc2df6f77ca6ca7b48dff45e8034d0","impliedFormat":1},{"version":"d4bd318874b01ed5a0e5bcff6c382fba0543f7aaa909a38f16d39bad06bd4481","signature":"35595df80753dbc2b21a04ddb000835b32f0b9ad56ea259d4e6e9ee674debef4","impliedFormat":1},{"version":"7e2cbf142789600ac5b76bdebdc54c87c11116cc686e149ebc9df72daeb1d9f9","signature":"efc5e846a8dcc7aeb97cdf4d6e529079e4ab45ac3cd39ab38ca96599bbcf232f","impliedFormat":1},{"version":"c8d7921f804fb45fe247e9f802fce808dee83d6de45f54259d39ec0e20310ae9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"ec059fbf16f3533522243066aa181f650738cc625884caaa4a351293131f1743","signature":"730450f8a576f827f2044ff9e3f0f7130e605b79087552c11ac5d92fda9a7e1d","impliedFormat":1},{"version":"fbf36d423b5e6226763f54d4a1b75abb4e7b275c9b19461b91066f1de5918318","signature":"9d39a014e37dc53a1dafdb2ef5099417bd00174b815ac7e390414372b30a14bd","impliedFormat":1},{"version":"61838a7f75d37b446c5208851537c58cb543b00df15d76533621cc6cb883cb72","signature":"2501feb6d0a73d980a9b8e5e03c7e15053788a7fbae6d55cf93df3b0e06dbedb","impliedFormat":1},{"version":"692bf5f858791336c877aafa792acb71fde35cc192c35338858d3042680c2edb","signature":"dc9412bbe64fc748d330f3e574c0440753daefc81cc74791198a0223f2114b5a","impliedFormat":1},{"version":"db253eafa5d8e7ffa72c70977f500babdf6998884a0026e629955a009cc8db2d","signature":"4d23c9ce1fa0528517d08b9a1d8eedad75323da6551ce886e88c7fa980fe7bb6","impliedFormat":1},{"version":"855022a8e1c01c62acdfa74e785d05ec7163cdc1e93b84a6375cf63c54bb32ab","signature":"1fb8ecfdc58a9071337c56072dd9b3c78c7d2f76730a1be8d27224ca083227a5","impliedFormat":1},{"version":"58e5c166fe45d6165f880aa71a9c2c27d7ce6c31edbbd2dacb270550dbf60217","signature":"9a62c9484c14c0cb33dbcdcc11e405821ee668e714799f7a125b840eeb8e89ef","impliedFormat":1},{"version":"853bda62240280291f1f59d953650b866a3e9e9a1c5af8f4e0825e5808547f86","signature":"ffa065aa3455b257438ce8c9768c5e0f80ea3820094ee8a1120fb4437cc3e7a4","impliedFormat":1},{"version":"a70ddbc1ba610cab23eb6e700db98b4cecc1a51af14d373fe3303148c5373d4f","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"54840a23b71134ac887f3ca3488a4951fd1828977e926bd54ee5851311674adb","signature":"4871318522f755858f7edb640a4c3ea1614ff99be9d69340f5a51ce82fd809df","impliedFormat":1},{"version":"ed64ec5838eeb43b490902520d41e1cd08fb68493d7b2f0b86ea4cb881e009b5","signature":"a6292eb5c4a48e71b5f49c4ca89b9aa76108a93b7ac98c656a8f1dfc5a614bd7","impliedFormat":1},{"version":"7828b13c2c5f8db99eba5055d150f758d05d8dbf4ed71db84bd3db4ed81d75e8","signature":"7a9121b2912c6821f2783964444cac3050e17b3b75512965e0a32e66b414d592","impliedFormat":1},{"version":"f9a408e2d585b143e9637518ccb6fdad347baf63c5bea09ca0a411741ed86060","signature":"a119ad4d2a84d13a333dbfa30e43bfccf4a0dc040c732d676adab436626f25ee","impliedFormat":1},{"version":"36b15957f3412254d6909d7ef628bc4949071c8ff06961ed68d9f13a1a653ad7","signature":"c2d95b6ca7230891fcf73723108b22380b1acb96d6243a2c3b6a7f05bc7902a0","impliedFormat":1},{"version":"b4c8c466f4210fd2906c99025c612001a7f67f483751d44611c668c8051ed555","signature":"b072aa8c420599d4a0c9182084510f8f9b914a0b049910e0f752b19a4df939b2","impliedFormat":1},{"version":"a781670becbf5cd69a01c39bbbc1585b4667f2045df4139d30760f89acae0383","signature":"2ef7e3af3848886c22ace971e69966b203eb67b2d1787d5e44c99519c09892aa","impliedFormat":1},{"version":"c505d5f3a72f75a694091b24bbaeff6d8451537ca931dc8e95c9809311c0169b","signature":"ddad846edb02abe8e625649c4a5dd64be1bde5d7631302d1fa4d45d14ed8b51f","impliedFormat":1},{"version":"6bcbca70b20d58c36dce2c2575e2deaf3f0c5ec02d97010d01301481c7535065","signature":"261a9e319315e52f88b1cb347db2ce4277ea7a6eb6fccd90c289b119353d5b78","impliedFormat":1},{"version":"c11f1c7c927aeea2bcfb6cd97762cc3447ebd2b1ed46d02da7a7bf67e740ec71","signature":"5208acbce57501f3d5dd58f4956d43734b3a007b8b86578c935785ec72408e04","impliedFormat":1},{"version":"ae02b8906b7572795aa79612928773d957fe14296c48050de1faebbd9c6640d0","signature":"7c296bb31e778cea0fd700a14fbe683b665db7115f09700d8416cf24b83cdfcc","impliedFormat":1},{"version":"c5ec2ede198300f8ad6350c5c8fe29ca388669df3e670e630dd3bedcf51b02f6","signature":"0b3109399eb9e01963064b099613e2f79810b0771aef56b628c4e6651f35440e","affectsGlobalScope":true,"impliedFormat":1},{"version":"be50ede8a4860be68ec43eca0411be0b58cf1601a7bad6d9aa4e01b4e6b4c418","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"5c6f43ff66c30a37ef306c5bba964726c541afe0a7d96de6bcb90caf74bcbdf9","signature":"86a07b0fb1f46d39132ef555b215e7db97e906596697469df465c310646d3528","impliedFormat":1},{"version":"b1bce7f8cf4b2a5f25f33de5e615d4033532a98ea2b19bbaca198e1ed0f6c67a","signature":"0e198c29a6251d421945c8d803c593eeaa2e92de8d8aee6412a2911195055162","impliedFormat":1},{"version":"b9784c7ae759fa5d157665df8f9154ea08db85967eb52ae55baadc8c6169d73d","signature":"2e567bb91461de2ab714bfd4261ce4f58c389cd3dba268958fdaef6cf20f7e3c","impliedFormat":1},{"version":"b9ac5494a7b36f5aef129d817236c088885296569e48e8b4ee428a1a2b0740be","signature":"ac7fec4c5a19d9b2e0ba77a6045478cd8c6f9767a8a7000ebfa4612bac2ed00c","impliedFormat":1},{"version":"0f6eaa7bc8029e73058f9994d2b5083e0dcdab0a207397dc3446d82df6fc9a51","impliedFormat":1},{"version":"0ba4ae0808c4f9aff6bc8ad71680861aa124b2fb7579e648eed262a5bc6bfd4f","impliedFormat":1},{"version":"ef28deabba43cca7acfaf6f5d75a7ef65342c95c42e13abe0d60d70f2ada113d","impliedFormat":1},{"version":"22dac6bb7d3681dfc86509727deab4d3593ed81fdd1156ffe0f3196414372624","impliedFormat":1},{"version":"716388fac8967b1479097de38a9ecafbb06f65d479d80221c3cdf80c6b03bf8b","impliedFormat":1},{"version":"485ce84a2e2c29a7f50819be204670d079d4cf87fad634d025181872b66c10c4","impliedFormat":1},{"version":"8571d0d500038b851e99ea611fd51c41259550685a7afca8a921732ff758b01e","impliedFormat":1},{"version":"23028135160c7b164e6f09317ff80168b688ae150bd9a99954b3f8840a8046fd","impliedFormat":1},{"version":"f1faa3bad5cd9e57221700c0a25a306bc411971a00cfee559ad93e23f7ee663d","impliedFormat":1},{"version":"a11f87984c9661ea33da75c9582545900f2c900c6663b766518f8700a2e443ef","impliedFormat":1},{"version":"f91a7d05afb252a08ff7c867cbdf3d2a45758e28e3fd272a4c77ba2c940251a1","impliedFormat":1},{"version":"82b59f6e26149c9daee7d25458a8e92d9a6e831ff30c345c01ed7438c4b73fbb","impliedFormat":1},{"version":"daa771190928d0a5fb9d18135397087d63d13f23ebe899a9f2b72416492e1e75","impliedFormat":1},{"version":"7f9835185d1d2404c9a83bf516340f3ac0cd79f9363d4e48195ac6f70b8da62f","impliedFormat":1},{"version":"85d4be2bac99c440d93113d1613163bf3c8f11b5bd9112d3a26d9e16376cdc76","impliedFormat":1},{"version":"73e0fc700725b01d37fd169d71a6bcecc6a46c2ff81d5cc9f6b25eaf809c9889","impliedFormat":1},{"version":"00b5d0e3c24ce1d3f9feaef698b746fec7ed3594a69620e19b2f2dbe37c334be","impliedFormat":1},{"version":"3d52b11e160b46cc21959f96603225f203c05be09937bd158015ba3842659f9f","impliedFormat":1},{"version":"0a077f4a3167699a2641066e601f72de9473f36a7c8b82837388864e7eb607aa","impliedFormat":1},{"version":"8a15aa7c47b0bd7de370741ad2e918fd05a246166f2dd407673dac7ca2d3d36b","impliedFormat":1},{"version":"fffa755863c80aa266c9723381923cac427e737fd265e3a179c61ce0dd5ed3d2","impliedFormat":1},{"version":"b9a34c74d148a26614c30051c17bd98437c84b7202da3693bbb4138af453591f","impliedFormat":1},{"version":"0fed0e7547e58a507103a3798a3dbd704635abe6c5f1e12fd0be31ab8751c5f7","impliedFormat":1},{"version":"c266dcec43aa6882b5f12eb0b8618d93ce0875b753dcc3cdd697b76064cbb709","signature":"1ac597e0fe1325883bd8fdc9a914f788e9a37f02808bba38da05f39ad468c121","impliedFormat":1},{"version":"6aeaff9d5d9e2e1f39cb70787764887ab9cb91a4968a422e409e1e5110a578ce","signature":"0fd310a550f41282f2331513b61cc3add05d3126c9fa4440d7501c42deeb6af2","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"400db42c3a46984118bff14260d60cec580057dc1ab4c2d7310beb643e4f5935","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a37b8d00d03f0381d2db2fe31b0571dc9d7cc0f4b87ca103cc3cd2277690ba0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"afbe82d2b4857d674686255c44c8590dfe0b40927713876f875fdf4960473441","impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"87f287f296f3ff07dbd14ea7853c2400d995dccd7bd83206196d6c0974774e96","impliedFormat":1},{"version":"78ef0198c323d0f7b16f993ada3459f0e7e20567e7f56fe0c5ee78f31cb0840c","impliedFormat":1},{"version":"01dea450d742aa55ce9b8ab8877bbda8eb73bf88609e440cc34f6f59f35080db","impliedFormat":1},{"version":"5ec614ed82e045de15417a47e2568be5310d43d4764ee43d295ea38caafbfd17","impliedFormat":1},{"version":"b788ef070e70003842cbd03c3e04f87d46b67a47b71e9e7d8713fd8c58c5f5ec","impliedFormat":1},{"version":"583d365dc19f813f1e2767771e844c7c4ea9ab1a01e85e0119f2e083488379c2","impliedFormat":1},{"version":"b82fc3869c625b828dd3feac4b5ebf335ed007d586dc16176602db73bc4e7c65","impliedFormat":1},{"version":"05e30605274c26f405c411eebed776fa2102418c05beec885e5c9bd0fa716f32","impliedFormat":1},{"version":"58c7f7820dc027a539b0437be7e1f8bdf663f91fbc9e861d80bb9368a38d4a94","impliedFormat":1},{"version":"d67d6b779d0dece9450d7a4170d3ee58ea7fcae0af2ab5e1d0ad711474b4f7f5","impliedFormat":1},{"version":"1066c11177d085898185548e1b38ed15fcea50061508f7c313ab8bec35d46b95","impliedFormat":1},{"version":"bbc49fd9dc6ee162ba3d270c834398e0c1d44e657ac4edfa55ac837902b7e0da","impliedFormat":1},{"version":"6993f360de4984b6743764fad3b88246d5dc6cfa45567783fc23833ad4e50c13","impliedFormat":1},{"version":"f11eb1fb4e569b293a7cae9e7cdae57e13efc12b0e4510e927868c93ec055e82","impliedFormat":1},{"version":"715682cddbefe50e27e5e7896acf4af0ffc48f9e18f64b0a0c2f8041e3ea869b","impliedFormat":1},{"version":"6d2f5a67bfe2034aa77b38f10977a57e762fd64e53c14372bcc5f1d3175ca322","impliedFormat":1},{"version":"4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","impliedFormat":1},{"version":"33859aa36b264dd91bef77c279a5a0d259c6b63684d0c6ad538e515c69a489ec","impliedFormat":1},{"version":"33fa69f400b34c83e541dd5f4474f1c6fb2788614a1790c6c7b346b5c7eaa7dd","impliedFormat":1},{"version":"be213d7cbc3e5982b22df412cf223c2ac9d841c75014eae4c263761cd9d5e4c0","impliedFormat":1},{"version":"66451f9540fdf68a5fd93898257ccd7428cf7e49029f2e71b8ce70c8d927b87a","impliedFormat":1},{"version":"8a051690018330af516fd9ea42b460d603f0839f44d3946ebb4b551fe3bc7703","impliedFormat":1},{"version":"301fb04ef91ae1340bec1ebc3acdd223861c887a4a1127303d8eef7638b2d893","impliedFormat":1},{"version":"06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","impliedFormat":1},{"version":"fc26991e51514bfc82e0f20c25132268b1d41e8928552dbaed7cc6f3d08fc3ac","impliedFormat":1},{"version":"5d82bb58dec5014c02aaeb3da465d34f4b7d5c724afea07559e3dfca6d8da5bc","impliedFormat":1},{"version":"44448f58f4d731dc28a02b5987ab6f20b9f77ad407dcf57b68c853fe52195cd7","impliedFormat":1},{"version":"b2818e8d05d6e6ad0f1899abf90a70309240a15153ea4b8d5e0c151e117b7338","impliedFormat":1},{"version":"1c708c15bb96473ce8ec2a946bd024ecded341169a0b84846931f979172244ba","impliedFormat":1},{"version":"ed0f5e1f45dc7c3f40356e0a855e8594aa57c125a5d8dfeef118e0a3024f98ff","impliedFormat":1},{"version":"dc187f457333356ddc1ab8ec7833cd836f85e0bbcade61290dc55116244867cb","impliedFormat":1},{"version":"25525e173de74143042e824eaa786fa18c6b19e9dafb64da71a5faacc5bd2a5c","impliedFormat":1},{"version":"7a3d649f2de01db4b316cf4a0ce5d96832ee83641f1dc84d3e9981accf29c3a1","impliedFormat":1},{"version":"26e4260ee185d4af23484d8c11ef422807fb8f51d33aa68d83fab72eb568f228","impliedFormat":1},{"version":"c4d52d78e3fb4f66735d81663e351cf56037270ed7d00a9b787e35c1fc7183ce","impliedFormat":1},{"version":"864a5505d0e9db2e1837dce8d8aae8b7eeaa5450754d8a1967bf2843124cc262","impliedFormat":1},{"version":"2d045f00292ac7a14ead30d1f83269f1f0ad3e75d1f8e5a245ab87159523cf98","impliedFormat":1},{"version":"54bcb32ab0c7c72b61becd622499a0ae1c309af381801a30878667e21cba85bb","impliedFormat":1},{"version":"20666518864143f162a9a43249db66ca1d142e445e2d363d5650a524a399b992","impliedFormat":1},{"version":"28439c9ebd31185ae3353dd8524115eaf595375cd94ca157eefcf1280920436a","impliedFormat":1},{"version":"84344d56f84577d4ac1d0d59749bb2fde14c0fb460d0bfb04e57c023748c48a6","impliedFormat":1},{"version":"89bcaf21b0531640604ca9e0796f54a6e1b4e2d43c07422ffa1e3d2e1bb0e456","impliedFormat":1},{"version":"66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","impliedFormat":1},{"version":"35a0eac48984d20f6da39947cf81cd71e0818feefc03dcb28b4ac7b87a636cfd","impliedFormat":1},{"version":"f6c226d8222108b3485eb0745e8b0ee48b0b901952660db20e983741e8852654","impliedFormat":1},{"version":"93c3b758c4dc64ea499c9416b1ed0e69725133644b299b86c5435e375d823c75","impliedFormat":1},{"version":"4e85f443714cff4858fdaffed31052492fdd03ff7883b22ed938fc0e34b48093","impliedFormat":1},{"version":"0146912d3cad82e53f779a0b7663f181824bba60e32715adb0e9bd02c560b8c6","impliedFormat":1},{"version":"70754650d1eba1fc96a4ed9bbbc8458b341b41063fe79f8fa828db7059696712","impliedFormat":1},{"version":"220783c7ca903c6ce296b210fae5d7e5c5cc1942c5a469b23d537f0fbd37eb18","impliedFormat":1},{"version":"0974c67cf3e2d539d0046c84a5e816e235b81c8516b242ece2ed1bdbb5dbd3d6","impliedFormat":1},{"version":"b4186237e7787a397b6c5ae64e155e70ac2a43fdd13ff24dfb6c1e3d2f930570","impliedFormat":1},{"version":"2647784fffa95a08af418c179b7b75cf1d20c3d32ed71418f0a13259bf505c54","impliedFormat":1},{"version":"0480102d1a385b96c05316b10de45c3958512bb9e834dbecbbde9cc9c0b22db3","impliedFormat":1},{"version":"eea44cfed69c9b38cc6366bd149a5cfa186776ca2a9fb87a3746e33b7e4f5e74","impliedFormat":1},{"version":"7f375e5ef1deb2c2357cba319b51a8872063d093cab750675ac2eb1cef77bee9","impliedFormat":1},{"version":"b7f06aec971823244f909996a30ef2bbeae69a31c40b0b208d0dfd86a8c16d4f","impliedFormat":1},{"version":"0421510c9570dfae34b3911e1691f606811818df00354df7abd028cee454979f","impliedFormat":1},{"version":"1517236728263863a79500653cc15ceb286f048907b3dba3141a482ca6946bd7","impliedFormat":1},{"version":"7c7b418e467a88a714b4c6dac321923b933f82875f063f48abf952021a2c2df1","impliedFormat":1},{"version":"33120063a7e106818ce109be9238569edca74d4e8530f853bd30d298d1375fd8","impliedFormat":1},{"version":"8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4584e95c63371b5d507749924d94e324c7e041f964975a92e7c8a1abc840328","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"0504070e7eaba788f5d0d5926782ed177f1db01cee28363c488fae94950c0bbc","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"6847334317c1bc1e6fc4b679b0095bbd2b6ee3b85fe3f26fc26bac462f68ef5e","impliedFormat":1},{"version":"2224f3072e3cc07906eeed5c71746779511fba2dd224addc5489bcdb489bdee5","impliedFormat":1},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"7f15c8d21ca2c062f4760ff3408e1e0ec235bad2ca4e2842d1da7fc76bb0b12f","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","impliedFormat":1},{"version":"fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"fbf802b3a028f5eb22ad406ee5fc7c368f0acfd3a2a6d0f805120766f5717ec8","impliedFormat":1},{"version":"63786b6f821dee19eb898afb385bd58f1846e6cba593a35edcf9631ace09ba25","impliedFormat":1},{"version":"ff954afaefd9bd5fad03678cae63fd23e0aaaf4d311b27bfb35e1d6d83833997","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"818e7c86776c67f49dbd781d445e13297b59aa7262e54b065b1332d7dcc6f59a","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"7e8d3f08435ad2cefe67f58182618bfc9a0a29db08cf2544b94cbcae754a9bd9","impliedFormat":1},{"version":"8cf9b9045a614f883b623c2f1a631ec6a93321747e933330b2eec0ee47164a34","impliedFormat":1},{"version":"cee62e64fc4bdfb3798ab8e21486fadd2027ce4128349989acc63905366f91c5","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"c68eb17ea7b2ff7f8bcfe1a9e82b8210c3112820d9e74b56b0fbecaab5ce8866","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"ee736931bcb117efdd2118795ccfa4b2d0beb8fec426f91ae448e51b03510707","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"9068fb04d9df0cb5de85ced5c4d70a935096c4cb289ab76b038e0a2496c92503","impliedFormat":1},{"version":"1f2bcc8836f72a2ff7a6804dc5379e9b73bf94a51d8e60c43cf5b874b5f4f6ff","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"100985057cdd198e32b471b9c92a39080e5e50720b2cb290d04ddf40fbe71c84","impliedFormat":99},{"version":"333d9b9067c0213cd7b275d1d78bab0577ba31ef7a63306ab65a74e83a546a65","impliedFormat":99},{"version":"85566a0b81339b43e063f5cd8cc49a9b9bc177bc5ad3ffd5e4874700040ec11e","impliedFormat":99},{"version":"c2688779f6804c3bc6dfa33d05a810464c684a74f92aee6b0f0d4bcd7dbeed6d","impliedFormat":99},{"version":"16331f489efb6af7d06037074020644d9175f70a7a6466d926f63e74af5a77d8","impliedFormat":99},{"version":"2b2b8b64b39f152439ecb9f04b3d6c1d88d35c75bf14a4eb98f1cc791f092366","impliedFormat":99},{"version":"395548b309c8fe9ffadd8b1055898fffa29bd28ea1f8079f33e48a65601589e2","impliedFormat":99},{"version":"e38871affeac7cf4dd4cc3a55714ff38d55f137c30788d30e454a6e3058f36bc","impliedFormat":99},{"version":"783a0f8fb88d659272c1ac541719e32235881815705b44fb63b6af579885ea75","impliedFormat":99},{"version":"6a60957e322c4c060ddf3073130cbcbcbc5e639e21cd2279df43184bfa8cb9a3","impliedFormat":99},{"version":"5b353617eeb8a37c7a9497ebaeacc027bd7487eec10ffbebca41dcdc2634af70","impliedFormat":99},{"version":"cedbd20d98f3fd7c1fa00742292ab5b13c3fec266ae41b90c47b716ef06cd983","impliedFormat":99},{"version":"9713bcf79cd728919262a2a543484a5f9bd24a15cfec1cee096d9d17a9f5524d","impliedFormat":99},{"version":"35fb129972553f809a7045f3cb952c2598299548018a23238304c020cb16945f","impliedFormat":99},{"version":"855b0379a6b6e96eda055cff16da442b4a7a4548101848b9ae48bce22879569e","impliedFormat":99},{"version":"ea2ac8d236dddbce748dbaffcaa1bfcadae6fbcae1fd0a67e17d5e35d5e38dfc","impliedFormat":99},{"version":"a7750935d6a1cbd259861b5acf1c912f9d3b10efd8602f61fc858f04f261595d","impliedFormat":99},{"version":"e0aa3276d014f3c798dd3101af8c8545b56d79665a7a982b4cf6fe28551a3b56","impliedFormat":99},{"version":"ea744987345eb5ae036495b0185e95eeb7d2d999b0ef80265f79434e83863e9e","impliedFormat":99},{"version":"c3bc54ba21655aaf1db5bb97c42f56bbfe5a3a3c40e3884ef3ba2cdaa9f34c1f","impliedFormat":99},{"version":"705917c38d2e92347b5e57c1c6007da46f1005874ef2257cc8dfff59cba4710f","impliedFormat":99},{"version":"40925b4938b527a6267b1fe56a2e97cc52ea9d73eec90ea8e05df773a182101e","impliedFormat":99},{"version":"2930156137f4885c3ad168804c557edfc9bb88ae0e1df487f4adcdc771286ad7","impliedFormat":99},{"version":"b63e990c632eeee9375c2c43bbd5cdcb23418b79edcb57afa53edf4dd597b33c","impliedFormat":99},{"version":"721dcf072e75b71b5ab7a0bbbd6578f908c36a0bfaefa1454d3e43938bde67a5","impliedFormat":99},{"version":"5704f5ee2642dd0b810bb07ce6e4e51319ed4d6db78747ff54675e72c3fede06","impliedFormat":99},{"version":"da2be38a98356fdd540580a68338df2d2450ec071b1cb5bdbfe8e52075ddde9e","impliedFormat":99},{"version":"3af0bb87094d80e20b0d451626eef1e2da701891c41998ac0a6a6c91cff86f74","impliedFormat":99},{"version":"30a211e9de0dd587f8c690f9ed9378c15c79bcbe762dd85a61c548e5058c3fd6","impliedFormat":99},{"version":"a7cda498cd929d2f958ce49abbaef1abf999ec40884a04cd28ff34317d844e54","impliedFormat":99},{"version":"e48b510f40f29a89d9dbe19a9fca96d7f02b721aec6754fd5c242f9893d06508","impliedFormat":99},{"version":"30d88e2e7c4ca1cdfeb37cf05a2d7a351c68b14ac472e6238401ecb7b75686ea","impliedFormat":99},{"version":"03b34718c02b6225c2f7d7c374cb701ab04461a5cfa66d150531c9f31e39da49","impliedFormat":99},{"version":"7dfe7da785eafad3e3d0cc66545e97f1acf934ebe5b2ec8f4a34341a9ca76ed4","impliedFormat":99},{"version":"8c7829855345152b7b3c196e82147153115d5b568ff97be0e40d161e8d9d2f51","impliedFormat":99},{"version":"f30a36ff98b099ea8c635146dfdd1d810bc14ec303acb653ca938445047b0e41","impliedFormat":99},{"version":"07fa63aca536ca8d8d8c6a56eabcf77f746609921fe23d780a69e2c0a2a65701","impliedFormat":99},{"version":"c8fe48c4437d4ead0a841128d179f8bb99e0e38f9ccb80ca6be14833e30bc129","impliedFormat":99},{"version":"5eac3facc9f59e960c00f41502b34a908776cfba6d7e1a5a4ead5030682b7434","impliedFormat":99},{"version":"d44f8de16b9c6ef4ebd88d4162bc24942bee9975f88162a8962bb572e62dc5df","impliedFormat":99},{"version":"0251c18e8c863bf5ef510043644299aceab6debf3d87aab8c8cfded5aef7d6af","impliedFormat":99},{"version":"292f7dc6b4be74f148f5e5b57b9e8a7f515d7d4f6183d3f9162e127e50959ba9","impliedFormat":99},{"version":"c1608d867d6ddda5c0f4736cf4959e2b2c6bcda660c4c72f7feb36b3998df2bb","impliedFormat":99},{"version":"02d77b0d27ecb78e28d3a376c6cdce05fabcf58f2fd01c102f031d8e375191da","impliedFormat":99},{"version":"daef84b3b89e60054fab1abaafe38eda673f88abdedc3920015d61f1cc5358b8","impliedFormat":99},{"version":"f3318054dc392b6661785263095ed8f1555f0d8f3ce534c8c2de8895b4ec7bd3","impliedFormat":99},{"version":"6c3aa7e0c4eb4d8d7fc24df037980369e70a28f9237cae77511b4cfc6a1b74d0","impliedFormat":99},{"version":"ecc7e0840690cc4b9a2587a4f550b292c35d36150c6c108803bbdfc3bead5b91","impliedFormat":99},{"version":"e11a23b343084cdec24d718fc64369dc8b6dece71314b41d4b5938f2a568834d","impliedFormat":99},{"version":"ce678766176812e8eda3f4925304d4159d806f50fa8a93a72da56e95dae8bbc8","impliedFormat":99},{"version":"bb21d35a36dc1db80a2cf29383bb7304919708cde205bbe246ec47176336e255","impliedFormat":99},{"version":"df657f732e32af7c7550da93e66dfdfa142fc1282b4a392ec78fc9aefbd6fdd0","impliedFormat":99},{"version":"b20ef0766a8a578e5c542aafaa8c53b7e2b0e32a5522f9cf18bc021a81d54dd7","impliedFormat":99},{"version":"9ea0cd8a367cab9b1c632740d1bd998f8c4dbbbda4505f47bebd38a46afbaaa6","impliedFormat":99},{"version":"97980bb49a7e4b15df6f988f914070c831a39426cd9a29a6f7a9af82f397b28c","impliedFormat":99},{"version":"3ddf05b5259b9a0e2b1da1559585655202670e1f78396b4d4efccea0195a41b4","impliedFormat":99},{"version":"1e99c59aadb1af6d090976ade8280ea37208e8f064f79e9a18231fe5b7232890","impliedFormat":99},{"version":"c7ee77eec320d6312899cd8c16484c82b98385e175c57ff00d49cc5a2c291e0d","impliedFormat":99},{"version":"b38d9a4927465a8a5d1ae84e00d323bedfc7f5e77f4bc360078c6f283b964acb","impliedFormat":99},{"version":"27d6b338ff280dc86ff167217c29d7e71b52bd25a3c3b8eb1f5a56c887571d00","impliedFormat":99},{"version":"da60046c4cc6b018869ea8fc71a7b7bf5591d9f5d90ee52c4a614ecc69ff3433","impliedFormat":99},{"version":"8bee1fe0b3dd1b324f08189d81e55f9952007ce2304df07a15568b821b7e524f","impliedFormat":99},{"version":"a3dd2d53781729214a67f4b91d9a65d5310c1bbdcd0595789a5152a493cded91","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e20fc6cca2cf901917bc09c88bf9ee380383717ed990900aa99962ff9e3f786","impliedFormat":99},{"version":"7410b87e621ce92f484a13dfbe72069a6470fb72cc418df865f31b601193595c","impliedFormat":99},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"c96ac2cf9b266d5606f79d99191e3e2c2bede081f60aab6377d16b1e73841429","impliedFormat":99},{"version":"30a4dd54f1f39dee17bafcc0fb9a877932d607d8f24d3f1ac7f8998cf07f2649","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"ccb5f2cdd46a60b0aa3b43aeeac9f0d499640f589806f2486f35ff8a9565784b","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"5e8c09adb8be1b932100a9374cb0f8def9dda6a16a973e91c2322983ed669dd9","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"cc89688d19046618e7f88ea7c25ff04560d939902bf49e60bd38fb4662e38b5b","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"fc67adfb454cf82752ab00e969d14a95fa762f55c34e25327dc77174b0d5f742","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"bc79bd6403aa643e99c8e6733d5a8c7bf214e4528e79c882e77e9e441049e45e","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"8fa1dc3b4a2f43c688f6f4cf1721e1d26d641ef322c14adac867ecfa41aa2109","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"2d9ad35b54c1413e9ee0e74945cd5c8a99516c1fbbd0a12f673c75073436a931","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"23e028cc298226d1f8e87d57950673b3a19b91f23538ee9287d52e77540af8cf","impliedFormat":99},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1},{"version":"b95f2a78de34a873c6dd76dc538b7a5fec77da6a0e0e7efc7aa58f58ddfce270","impliedFormat":1},{"version":"1231f32d791b0fcc13e0c836543b34e83dea6e0b494ee35194a66a50dd25427e","impliedFormat":1},{"version":"66880e558be5ee57d23c12ffd0a90bf07840e088f8fa9b608fadeaf45af78969","impliedFormat":1},{"version":"058186f212307a621cd51160e2124c26208649600b4f0a27835f1d1caae81e65","impliedFormat":1},{"version":"c2bfeeadb18ba18386d7549a69c2049e57f31758b71343543a5c27919197b0fa","impliedFormat":1},{"version":"63b0be497f88d815c410b76985b798132d6c470199f2f31e1390a48480619758","impliedFormat":1},{"version":"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","impliedFormat":1},{"version":"95a31f8eea43d175dfeda85accc45bddce5678acae4e22e2f683b48e0e0188de","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26","impliedFormat":1},{"version":"a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"c21e3729094ed9ecdcb97724ce5b20625bb9ac3b9146d681cafa97d667c12bb5","impliedFormat":1},{"version":"5adf3c3c7204b3614dbc585681a33ef598c68df387298859f9a2521cfb449437","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"bbf7c864f1ffbacf54b524d028b6a77da9f0be0b8fff5c088e3185ee50496762","impliedFormat":1},{"version":"9df147746b0cbd11d022b564e6fdd43ac79b643dc579d2123317ee01cc4f0d70","impliedFormat":1},{"version":"fa244c20411dd53d853ce4b85e7146860be364946da477dad721e66301097460","impliedFormat":1},{"version":"fab2754e047c7818a8eb650cc2194aef4388193acdc4606eb601cb60923f7798","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"b2546f0fbeae6ef5e232c04100e1d8c49d36d1fff8e4755f663a3e3f06e7f2d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","impliedFormat":1},{"version":"041597c12abeaa2ef07766775955fc87cfc65c43e0fe86c836071bea787e967c","impliedFormat":1},{"version":"0838507efff4f479c6f603ec812810ddfe14ab32abf8f4a8def140be970fe439","impliedFormat":1},{"version":"f67c92f5cb2bf5a9929ee73216f08749db4f22b04a18e5205ed6e75ca48e9feb","impliedFormat":1},{"version":"7212c2d58855b8df35275180e97903a4b6093d4fbaefea863d8d028da63938c6","impliedFormat":1},{"version":"de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","impliedFormat":1},{"version":"1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","impliedFormat":1},{"version":"854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","impliedFormat":1},{"version":"dd9faff42b456b5f03b85d8fbd64838eb92f6f7b03b36322cbc59c005b7033d3","impliedFormat":1},{"version":"6ff702721d87c0ba8e7f8950e7b0a3b009dfd912fab3997e0b63fab8d83919c3","impliedFormat":1},{"version":"9dce9fc12e9a79d1135699d525aa6b44b71a45e32e3fa0cf331060b980b16317","impliedFormat":1},{"version":"586b2fd8a7d582329658aaceec22f8a5399e05013deb49bcfde28f95f093c8ee","impliedFormat":1},{"version":"dedc0ab5f7babe4aef870618cd2d4bc43dc67d1584ee43b68fc6e05554ef8f34","impliedFormat":1},{"version":"ef1f3eadd7bed282de45bafd7c2c00105cf1db93e22f6cd763bec8a9c2cf6df1","impliedFormat":1},{"version":"3d8885d13f76ff35b7860039e83c936ff37553849707c2fd1d580d193a52be5b","impliedFormat":1},{"version":"b75188f1d06bba9e266aad819df75b51ed1fcc19ac0750dc6a55a8eb1b7c2134","impliedFormat":1},{"version":"d8272401aa994ed8a60f71067acbcc9a73d847be6badf1b9397a8ce965af6318","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1087c6c9066684d3e72a8fcc5445f34e85572792bc16f5aab01208bcbbbe64be","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"eb27bc1c8d46234252298d3d7252c8459667daa0953b974f9d2c581c46703b2a","impliedFormat":1},{"version":"1b096ca6b209d1fed9ce68edd110ff6de8bec4fab2689d2adc481ffc1b1dc20b","impliedFormat":1},{"version":"9c02f12da30d30dd5f5ccaeedfb9b925ed4e5114059e9be6ed2ecf87a492fd16","impliedFormat":1},{"version":"8c8f8e816a38f1a0cc2dd3813d3bede2d773df36e72f4cb55d9daabd22016925","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"f86d0150d5abc55bf5bb479beacc34a7e9d4ab4e3014315fb74626baf1558857","impliedFormat":1},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"d77523951427fca92c7fdcaafb776bfb5d76cb0dfd8a7b18f38710332386ad6d","impliedFormat":1},{"version":"d9dcda644a9ecb57df163cbeaaca093c696335a53f47b5dbbf7cf0671b76e2eb","impliedFormat":1},{"version":"2d4d871246a21c785aec2a5b745ad79cdc877de3866f586887c8c74ddec97b8d","impliedFormat":1},{"version":"0cfa403fc15d0fda3214c3d8b75a42abcfa60c07e739de908e57d1f76220b7f9","impliedFormat":1},{"version":"d99cef4ae065cde21bd536998282a9882d8fb36a902725f03d71c3a9e3a24aa4","impliedFormat":1},{"version":"f3d4606a83fbdeedeeecd982ac35945bc02d50499cc65c72d71a143afa7e7334","impliedFormat":1},{"version":"bc919e8ad895c43568f8125523ab0f91810d5208afcc5bff2ba4713dffda0d97","impliedFormat":1},{"version":"6771b9c4bb2253e2a51c5ef7155419558289b885857e275ff61f90a979049cc3","impliedFormat":1},{"version":"6a1fb700b666a19112cddb4ab24e671c83ce40f6bfe64d1e7cb59c88263d0ec2","impliedFormat":1},{"version":"cc060af11b9bc0ed723d1200951bdc3255ff189475183a1f9ed06fd9c57206a6","impliedFormat":1},{"version":"a0aa9907949f7688394904c4d16b93c8d3154a9eda70ab096e0cfb37ef48e9b1","impliedFormat":1},{"version":"816dd83b87f2f1986f4c9072d38262ae96ee6589fab8a9ebc3b8d8f30263b8d3","impliedFormat":1},{"version":"5512a0ca56d3a21dd2843b62c939ff885d8853e55524bada67d1e393649e4bd6","impliedFormat":1},{"version":"3cd6ea92f13a0bf3c120ac271bc0ba57bf4cc3078e010150887c657f78b41959","impliedFormat":1},{"version":"4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","impliedFormat":1},{"version":"d9a256f69f3956993e65efd88336644be8f8dd36d149e859c14704ef6c6c0eec","impliedFormat":1},{"version":"d18f13c33148de7f0b1241734cb10dfe4c1e9505acad51ee48c3f4c1bd09e0dd","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","impliedFormat":1}],"root":[189,[193,195],200,201,[203,278],302,303],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationDir":"./dist","declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"stripInternal":true,"target":9,"useDefineForClassFields":false,"useUnknownInCatchVariables":false},"referencedMap":[[949,1],[310,1],[277,2],[200,3],[274,4],[278,3],[205,3],[204,3],[193,3],[257,5],[250,6],[258,7],[248,8],[206,9],[249,10],[253,11],[251,12],[252,13],[302,14],[195,15],[266,16],[268,17],[261,18],[207,3],[269,19],[263,20],[244,21],[245,22],[273,23],[233,24],[194,3],[276,25],[264,26],[303,27],[265,28],[219,29],[246,30],[275,31],[201,32],[267,33],[259,34],[208,35],[231,36],[260,37],[234,38],[232,39],[235,40],[203,41],[230,42],[256,43],[255,44],[228,45],[236,46],[237,47],[238,48],[212,49],[209,50],[211,51],[213,52],[214,51],[216,53],[239,54],[217,55],[243,56],[221,57],[222,53],[215,58],[223,59],[210,60],[240,61],[224,62],[218,63],[225,55],[241,40],[242,64],[226,65],[227,48],[229,66],[220,67],[270,31],[262,3],[271,68],[189,3],[247,3],[254,69],[272,3],[667,1],[467,70],[465,1],[289,71],[300,1],[301,72],[298,71],[291,71],[295,73],[296,71],[292,74],[294,71],[297,71],[293,71],[299,71],[290,75],[288,76],[287,77],[285,78],[284,79],[281,80],[282,79],[286,81],[283,82],[280,77],[629,1],[663,83],[662,83],[661,1],[665,84],[666,84],[664,1],[632,1],[630,85],[633,86],[631,86],[634,1],[673,1],[674,1],[678,1],[675,1],[685,85],[684,1],[686,1],[687,87],[679,88],[683,89],[680,90],[676,1],[681,91],[682,92],[677,1],[649,85],[645,85],[648,85],[647,85],[646,85],[642,85],[641,85],[644,85],[643,85],[636,85],[637,93],[635,1],[640,94],[638,85],[691,95],[670,96],[672,96],[671,96],[668,97],[669,96],[689,1],[688,1],[690,1],[650,98],[651,1],[654,1],[657,1],[652,1],[659,1],[660,99],[656,1],[653,1],[655,1],[658,1],[639,1],[551,1],[553,100],[552,1],[404,101],[377,1],[405,1],[406,1],[407,1],[464,102],[408,103],[453,104],[410,105],[409,106],[411,103],[412,103],[414,107],[413,103],[415,108],[416,108],[417,103],[419,109],[420,103],[421,109],[422,103],[424,103],[425,103],[426,103],[427,110],[423,103],[428,1],[429,111],[430,111],[431,111],[432,111],[433,111],[442,112],[434,111],[435,111],[436,111],[437,111],[439,111],[438,111],[440,111],[441,111],[443,103],[444,103],[418,103],[445,109],[447,113],[446,103],[448,103],[449,103],[450,114],[452,103],[451,103],[454,103],[456,103],[457,115],[455,103],[458,103],[459,103],[460,103],[461,103],[462,103],[463,103],[470,116],[466,70],[468,117],[469,70],[472,118],[473,119],[474,1],[475,1],[481,120],[471,101],[482,1],[487,121],[485,122],[488,1],[490,123],[491,123],[492,1],[493,1],[495,124],[496,1],[497,1],[498,123],[499,1],[500,1],[501,125],[502,1],[503,1],[504,126],[505,1],[506,127],[507,1],[508,1],[509,1],[510,1],[513,1],[512,128],[489,1],[514,129],[515,1],[511,1],[516,1],[517,123],[518,130],[519,131],[192,132],[526,133],[525,134],[524,135],[520,1],[523,136],[521,1],[480,137],[528,138],[527,137],[531,139],[494,1],[533,140],[534,141],[536,142],[538,143],[539,143],[540,143],[537,1],[543,144],[541,145],[542,145],[544,1],[545,1],[483,1],[546,146],[547,147],[548,1],[549,148],[550,149],[558,150],[522,1],[529,151],[530,1],[559,152],[486,1],[560,153],[563,154],[561,154],[562,155],[614,156],[616,157],[617,158],[615,159],[618,160],[619,161],[620,162],[621,163],[622,164],[623,165],[624,166],[625,167],[626,168],[627,169],[628,142],[476,1],[532,1],[820,1],[821,1],[827,170],[824,171],[823,172],[826,173],[822,1],[825,171],[191,1],[828,147],[350,174],[351,174],[352,175],[309,176],[353,177],[354,178],[355,179],[304,1],[307,180],[305,1],[306,1],[356,181],[357,182],[358,183],[359,184],[360,185],[361,186],[362,186],[364,187],[363,188],[365,189],[366,190],[367,191],[349,192],[308,1],[368,193],[369,194],[370,195],[403,196],[371,197],[372,198],[373,199],[327,200],[337,201],[326,200],[347,202],[318,203],[317,204],[346,147],[340,205],[345,206],[320,207],[334,208],[319,209],[343,210],[315,211],[314,147],[344,212],[316,213],[321,214],[322,1],[325,214],[312,1],[348,215],[338,216],[329,217],[330,218],[332,219],[328,220],[331,221],[341,147],[323,222],[324,223],[333,224],[313,225],[336,216],[335,214],[339,1],[342,226],[374,227],[375,228],[376,229],[378,230],[379,231],[380,232],[381,233],[382,233],[383,234],[384,1],[385,235],[387,236],[386,237],[388,238],[389,239],[390,240],[391,241],[392,242],[393,243],[394,244],[395,245],[396,246],[397,247],[398,248],[399,249],[400,250],[401,251],[402,252],[829,147],[830,1],[831,1],[837,253],[832,1],[838,1],[841,1],[842,1],[843,1],[478,1],[846,254],[845,255],[479,1],[850,256],[855,257],[854,258],[857,257],[856,259],[853,260],[851,1],[852,261],[847,1],[849,262],[858,263],[859,1],[876,264],[901,265],[902,266],[877,267],[880,267],[899,265],[900,265],[890,265],[889,268],[887,265],[882,265],[895,265],[893,265],[897,265],[881,265],[894,265],[898,265],[883,265],[884,265],[896,265],[878,265],[885,265],[886,265],[888,265],[892,265],[903,269],[891,265],[879,265],[916,270],[915,1],[910,269],[912,271],[911,269],[904,269],[905,269],[907,269],[909,269],[913,271],[914,271],[906,271],[908,271],[477,272],[918,273],[917,122],[484,274],[919,101],[920,1],[921,1],[922,1],[925,275],[924,276],[923,277],[694,278],[693,1],[927,279],[535,1],[943,280],[941,281],[940,282],[931,283],[932,284],[939,285],[933,284],[934,283],[935,283],[936,283],[937,286],[930,287],[938,282],[929,1],[942,288],[944,289],[945,1],[946,290],[947,1],[948,291],[279,1],[609,292],[566,1],[568,293],[567,294],[572,295],[607,296],[604,297],[606,298],[569,297],[570,299],[574,299],[573,300],[571,301],[605,302],[603,297],[608,303],[601,1],[602,1],[575,304],[580,297],[582,297],[577,297],[578,304],[584,297],[585,305],[576,297],[581,297],[583,297],[579,297],[599,306],[598,297],[600,307],[594,297],[596,297],[595,297],[591,297],[597,308],[592,297],[593,309],[586,297],[587,297],[588,297],[589,297],[590,297],[565,1],[928,1],[311,1],[196,1],[848,1],[811,310],[807,1],[808,1],[806,1],[809,1],[810,1],[812,1],[804,1],[805,311],[813,312],[695,313],[182,1],[557,314],[871,315],[872,316],[870,317],[873,318],[867,319],[868,320],[869,321],[863,319],[864,319],[866,322],[865,319],[862,323],[90,324],[158,325],[157,326],[156,327],[95,328],[111,329],[109,330],[110,331],[96,332],[181,333],[81,1],[85,1],[83,334],[84,1],[88,335],[91,1],[108,336],[86,1],[103,337],[89,338],[104,339],[107,340],[105,340],[102,341],[82,1],[87,1],[106,342],[112,343],[100,1],[94,344],[92,345],[101,346],[98,347],[97,347],[93,348],[99,349],[177,350],[171,351],[164,352],[163,353],[172,354],[173,340],[165,355],[178,356],[159,357],[160,358],[161,359],[180,360],[162,353],[166,356],[167,361],[174,362],[175,338],[176,361],[179,340],[168,359],[113,363],[169,364],[170,365],[155,366],[153,367],[154,367],[117,367],[118,367],[119,367],[120,367],[121,367],[122,367],[123,367],[124,367],[125,367],[145,367],[126,367],[127,367],[128,367],[129,367],[130,367],[131,367],[152,367],[132,367],[133,367],[134,367],[135,367],[150,367],[136,367],[151,367],[137,367],[148,367],[149,367],[138,367],[139,367],[140,367],[146,367],[147,367],[141,367],[142,367],[143,367],[144,367],[116,368],[115,369],[114,370],[80,1],[202,1],[555,371],[556,372],[861,1],[696,373],[739,374],[738,375],[737,376],[740,1],[816,377],[815,1],[819,378],[817,379],[692,380],[818,381],[741,382],[814,383],[803,384],[743,385],[744,385],[745,385],[746,385],[747,385],[800,385],[748,385],[749,385],[750,385],[751,385],[752,385],[753,385],[754,385],[755,385],[799,385],[756,385],[757,385],[758,385],[759,385],[760,385],[761,385],[762,385],[763,385],[764,385],[765,385],[766,385],[767,385],[802,385],[768,385],[769,385],[770,385],[771,385],[772,385],[773,385],[774,385],[775,385],[776,385],[777,385],[778,385],[779,385],[801,385],[780,385],[781,385],[782,385],[783,385],[784,385],[785,385],[786,385],[787,385],[788,385],[789,385],[790,385],[791,385],[792,385],[793,385],[794,385],[795,385],[796,385],[797,385],[798,385],[742,386],[735,387],[736,388],[860,389],[836,390],[833,147],[835,391],[834,1],[839,1],[840,392],[554,393],[875,394],[874,395],[611,396],[610,397],[564,398],[926,1],[612,1],[844,255],[79,1],[727,399],[713,400],[724,401],[697,1],[715,402],[714,1],[716,403],[722,404],[721,1],[698,1],[719,1],[720,1],[706,405],[701,1],[700,406],[699,1],[708,1],[725,407],[704,405],[707,1],[712,1],[705,405],[702,406],[703,1],[709,406],[710,406],[723,1],[718,1],[726,1],[717,1],[728,1],[711,1],[729,408],[730,408],[734,409],[731,410],[732,411],[733,410],[77,1],[78,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[8,1],[52,1],[49,1],[50,1],[51,1],[53,1],[9,1],[54,1],[55,1],[56,1],[58,1],[57,1],[59,1],[60,1],[10,1],[61,1],[62,1],[63,1],[11,1],[64,1],[65,1],[66,1],[67,1],[68,1],[1,1],[69,1],[70,1],[12,1],[74,1],[72,1],[76,1],[71,1],[75,1],[73,1],[613,412],[184,413],[185,414],[188,415],[183,1],[186,413],[187,413],[190,1],[199,416],[197,1],[198,1]],"latestChangedDtsFile":"./dist/mermaid.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/index.d.ts b/grafast/grafserv-persisted/dist/index.d.ts new file mode 100644 index 0000000000..ac4a2d3031 --- /dev/null +++ b/grafast/grafserv-persisted/dist/index.d.ts @@ -0,0 +1,86 @@ +import type { ParsedGraphQLBody, ProcessGraphQLRequestBodyEvent } from "grafserv"; +export type { PersistedOperationGetter } from "./interfaces.js"; +import type { PersistedOperationGetter } from "./interfaces.js"; +declare global { + namespace GraphileConfig { + interface Plugins { + PersistedPlugin: true; + } + } +} +declare const PersistedPlugin: GraphileConfig.Plugin; +export default PersistedPlugin; +declare global { + namespace GraphileConfig { + interface GrafservOptions { + /** + * This function will be passed a GraphQL request object (normally + * `{query: string, variables?: any, operationName?: string, extensions?: any}`, + * but in the case of persisted operations it likely won't have a `query` + * property), and must extract the hash to use to identify the persisted + * operation. For Apollo Client, this might be something like: + * `request?.extensions?.persistedQuery?.sha256Hash`; for Relay something + * like: `request?.documentId`. + */ + hashFromPayload?(request: ParsedGraphQLBody): string | undefined; + /** + * We can read persisted operations from a folder (they must be named + * `.graphql`). When used in this way, the first request for a hash + * will read the file, and then the result will be cached such that the + * **filesystem read** will only impact the first use of that hash. We + * periodically scan the folder for new files, requests for hashes that + * were not present in our last scan of the folder will be rejected to + * mitigate denial of service attacks asking for non-existent hashes. + */ + persistedOperationsDirectory?: string; + /** + * How many milliseconds should we leave it between scans of the persisted + * operations folder, checking for new files? + * + * Set this to the string "watch" to use `fs.watch` to monitor for changes. [EXPERIMENTAL]. + * + * Set to `-1` to disable. + * + * Default: -1 + */ + persistedOperationsDirectoryScanInterval?: number | "watch"; + /** + * An optional string-string key-value object defining the persisted + * operations, where the keys are the hashes, and the values are the + * operation document strings to use. + */ + persistedOperations?: { + [hash: string]: string; + }; + /** + * If your known persisted operations may change over time, or you'd rather + * load them on demand, you may supply this function. Note this function is + * **performance critical** so you should use caching to improve + * performance of any follow-up requests for the same hash. + */ + persistedOperationsGetter?: PersistedOperationGetter; + /** + * There are situations where you may want to allow arbitrary operations + * (for example using GraphiQL in development, or allowing an admin to + * make arbitrary requests in production) whilst enforcing Persisted + * Operations for the application and non-admin users. This function + * allows you to determine under which circumstances persisted operations + * may be bypassed. + * + * IMPORTANT: this function must not throw! + * + * @example + * + * ``` + * app.use(postgraphile(DATABASE_URL, SCHEMAS, { + * allowUnpersistedOperation(event) { + * return process.env.NODE_ENV === "development" && event.request?.getHeader('referer')?.endsWith("/graphiql"); + * } + * }); + * ``` + */ + allowUnpersistedOperation?: boolean | ((event: ProcessGraphQLRequestBodyEvent) => boolean); + } + } +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/index.d.ts.map b/grafast/grafserv-persisted/dist/index.d.ts.map new file mode 100644 index 0000000000..04111f558b --- /dev/null +++ b/grafast/grafserv-persisted/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,8BAA8B,EAC/B,MAAM,UAAU,CAAC;AAGlB,YAAY,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB,UAAU,OAAO;YACf,eAAe,EAAE,IAAI,CAAC;SACvB;KACF;CACF;AAED,QAAA,MAAM,eAAe,EAAE,cAAc,CAAC,MA+CrC,CAAC;AAEF,eAAe,eAAe,CAAC;AAoR/B,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB,UAAU,eAAe;YACvB;;;;;;;;eAQG;YACH,eAAe,CAAC,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAAC;YAEjE;;;;;;;;eAQG;YACH,4BAA4B,CAAC,EAAE,MAAM,CAAC;YAEtC;;;;;;;;;eASG;YACH,wCAAwC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;YAE5D;;;;eAIG;YACH,mBAAmB,CAAC,EAAE;gBAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;aAAE,CAAC;YAEjD;;;;;eAKG;YACH,yBAAyB,CAAC,EAAE,wBAAwB,CAAC;YAErD;;;;;;;;;;;;;;;;;;;eAmBG;YACH,yBAAyB,CAAC,EACtB,OAAO,GACP,CAAC,CAAC,KAAK,EAAE,8BAA8B,KAAK,OAAO,CAAC,CAAC;SAC1D;KACF;CACF"} \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/index.js b/grafast/grafserv-persisted/dist/index.js new file mode 100644 index 0000000000..1887495e6a --- /dev/null +++ b/grafast/grafserv-persisted/dist/index.js @@ -0,0 +1,239 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const tslib_1 = require("tslib"); +const promises_1 = tslib_1.__importDefault(require("node:fs/promises")); +const grafast_1 = require("grafast"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +const version_js_1 = require("./version.js"); +const PersistedPlugin = { + name: "PersistedPlugin", + description: "Enables persisted operations in Grafserv", + version: version_js_1.version, + grafserv: { + middleware: { + processGraphQLRequestBody(next, event) { + const { body, resolvedPreset } = event; + const options = resolvedPreset.grafserv; + if (!options) { + throw new grafast_1.SafeError("Persisted operations misconfigured; rejecting requests.", { statusCode: 500 }); + } + const realQuery = persistedOperationFromPayload(body, options, shouldAllowUnpersistedOperation(options, event)); + // Always overwrite + if (realQuery != null && typeof realQuery !== "string") { + return realQuery.then((q) => { + if (typeof q === "string") { + body.query = q; + } + else { + throw new grafast_1.SafeError("Persisted operations are enabled on this server, please provide an approved document id.", { statusCode: 400 }); + } + }); + } + else { + if (typeof realQuery === "string") { + body.query = realQuery; + } + else { + throw new grafast_1.SafeError("Persisted operations are enabled on this server, please provide an approved document id.", { statusCode: 400 }); + } + } + return next(); + }, + }, + }, +}; +exports.default = PersistedPlugin; +/** + * This fallback hashFromPayload method is compatible with Apollo Client and + * Relay. + */ +function defaultHashFromPayload(payload) { + return ( + // https://github.com/apollographql/apollo-link-persisted-queries#protocol + payload?.extensions?.persistedQuery?.sha256Hash || + // https://relay.dev/docs/en/persisted-queries#network-layer-changes + payload?.documentId || + // Benjie's memory + payload?.id); +} +/** + * Given a cache object, returns a persisted operation getter that looks up the + * given hash in said cache object. + */ +function persistedOperationGetterForCache(cache) { + return (key) => cache[key]; +} +function makeGetterForDirectory(directory, scanInterval = -1) { + // TODO: implement AbortController integration for timer, etc. + const abortController = new AbortController(); + const { signal } = abortController; + // NOTE: We periodically scan the folder to see what files it contains so + // that we can reject requests to non-existent files to avoid DOS attacks + // having us make lots of requests to the filesystem. + let files = null; + /** is scanDirectory active? */ + let scanning = false; + /** Should we scan the directory again once the current scanDirectory is complete? */ + let scanAgain = false; + /** + * This function must never reject. + */ + async function scanDirectory() { + if (scanning) { + scanAgain = true; + return; + } + scanning = true; + scanAgain = false; + try { + const allFiles = await promises_1.default.readdir(directory); + files = allFiles.filter((name) => name.endsWith(".graphql")); + } + catch (e) { + console.error(`Error occurred whilst scanning '${directory}'`); + console.error(e); + } + finally { + scanning = false; + if (scanInterval === "watch") { + if (scanAgain) { + scanDirectory(); + } + } + else if (typeof scanInterval === "number" && scanInterval >= 0) { + // We don't know how long the scanning takes, so rather than setting an + // interval, we wait for a scan to complete before kicking off the next + // one. + setTimeout(scanDirectory, scanInterval); + } + } + } + scanDirectory(); + if (scanInterval === "watch") { + (async () => { + try { + const watcher = promises_1.default.watch(directory, { signal, recursive: false }); + for await (const _event of watcher) { + scanDirectory(); + } + } + catch (err) { + if (err.name === "AbortError") + return; + console.error(`Error occurred whilst watching the persisted operations directory. Folder is no longer being watched. Recommend you restart your server (and file an issue explaining what happened).`); + console.error(err); + } + })(); + } + const operationFromHash = new Map(); + function getOperationFromHash(hash) { + if (!/^[a-zA-Z0-9_-]+$/.test(hash)) { + throw new Error("Invalid hash"); + } + let operation = operationFromHash.get(hash); + if (!operation) { + const filename = `${hash}.graphql`; + if (files && !files.includes(filename)) { + throw new Error(`Could not find file for hash '${hash}'`); + } + operation = promises_1.default + .readFile(`${directory}/${filename}`, "utf8") + .catch(() => null); + operationFromHash.set(hash, operation); + // Once resolved, replace reference to string to avoid unnecessary ticks + operation.then((operationText) => { + operationFromHash.set(hash, operationText); + }); + } + return operation; + } + return { getter: getOperationFromHash, abortController }; +} +const directoryGetterByDirectory = new Map(); +/** + * Given a directory, get or make the persisted operations getter. + */ +function getterForDirectory(directory, scanInterval) { + const key = `${scanInterval}|${directory}`; + let getter = directoryGetterByDirectory.get(key); + if (!getter) { + getter = makeGetterForDirectory(directory, scanInterval); + directoryGetterByDirectory.set(key, getter); + } + return getter; +} +/** + * Extracts or creates a persisted operation getter function from the + * PostGraphile options. + */ +function getterFromOptionsCore(options) { + const optionsSpecified = Object.keys(options).filter((key) => [ + "persistedOperationsGetter", + "persistedOperationsDirectory", + "persistedOperations", + ].includes(key)); + if (optionsSpecified.length > 1) { + // If you'd like support for more than one of these options; send a PR! + throw new Error(`'${optionsSpecified.join("' and '")}' were specified, at most one of these operations can be specified.`); + } + if (options.persistedOperationsGetter) { + return options.persistedOperationsGetter; + } + else if (options.persistedOperations) { + return persistedOperationGetterForCache(options.persistedOperations); + } + else if (options.persistedOperationsDirectory) { + // TODO: do something with abortController? abortController.abort() + const { getter, abortController: _abortController } = getterForDirectory(options.persistedOperationsDirectory, options.persistedOperationsDirectoryScanInterval); + return getter; + } + else { + throw new Error("Server misconfiguration issue: persisted operations (operation allowlist) is in place, but the server has not been told how to fetch the allowed operations. Please provide one of the persisted operations configuration options."); + } +} +const getterFromOptionsCache = new lru_1.default({ + maxLength: 100, +}); +/** + * Returns a cached getter for performance reasons. + */ +function getterFromOptions(options) { + let getter = getterFromOptionsCache.get(options); + if (!getter) { + getter = getterFromOptionsCore(options); + getterFromOptionsCache.set(options, getter); + } + return getter; +} +function shouldAllowUnpersistedOperation(options, event) { + const { allowUnpersistedOperation } = options; + if (typeof allowUnpersistedOperation === "function") { + return allowUnpersistedOperation(event); + } + return !!allowUnpersistedOperation; +} +/** + * Given a payload, this method returns the GraphQL operation document + * (string), or null on failure. It **never throws**. + */ +function persistedOperationFromPayload(payload, options, allowUnpersistedOperation) { + try { + const hashFromPayload = options.hashFromPayload || defaultHashFromPayload; + const hash = hashFromPayload(payload); + if (typeof hash !== "string") { + if (allowUnpersistedOperation && typeof payload?.query === "string") { + return payload.query; + } + throw new Error("We could not find a persisted operation hash string in the request."); + } + const getter = getterFromOptions(options); + return getter(hash); + } + catch (e) { + console.error("Failed to get persisted operation from payload", payload, e); + // We must not throw, instead just overwrite the query with null (the error + // will be thrown elsewhere). + return null; + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/index.js.map b/grafast/grafserv-persisted/dist/index.js.map new file mode 100644 index 0000000000..13bd3508ab --- /dev/null +++ b/grafast/grafserv-persisted/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/interfaces.d.ts b/grafast/grafserv-persisted/dist/interfaces.d.ts new file mode 100644 index 0000000000..79112a6c0c --- /dev/null +++ b/grafast/grafserv-persisted/dist/interfaces.d.ts @@ -0,0 +1,7 @@ +import type { PromiseOrDirect } from "grafast"; +/** + * Given a persisted operation hash, return the associated GraphQL operation + * document. + */ +export type PersistedOperationGetter = (hash: string) => PromiseOrDirect; +//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/interfaces.d.ts.map b/grafast/grafserv-persisted/dist/interfaces.d.ts.map new file mode 100644 index 0000000000..07d2843b0b --- /dev/null +++ b/grafast/grafserv-persisted/dist/interfaces.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,IAAI,EAAE,MAAM,KACT,eAAe,CAAC,MAAM,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/interfaces.js b/grafast/grafserv-persisted/dist/interfaces.js new file mode 100644 index 0000000000..db9191150b --- /dev/null +++ b/grafast/grafserv-persisted/dist/interfaces.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/interfaces.js.map b/grafast/grafserv-persisted/dist/interfaces.js.map new file mode 100644 index 0000000000..8fb5f7d179 --- /dev/null +++ b/grafast/grafserv-persisted/dist/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/version.d.ts b/grafast/grafserv-persisted/dist/version.d.ts new file mode 100644 index 0000000000..e6f10f564a --- /dev/null +++ b/grafast/grafserv-persisted/dist/version.d.ts @@ -0,0 +1,2 @@ +export declare const version = "0.0.0-beta.34"; +//# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/version.d.ts.map b/grafast/grafserv-persisted/dist/version.d.ts.map new file mode 100644 index 0000000000..1f99446fca --- /dev/null +++ b/grafast/grafserv-persisted/dist/version.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,kBAAkB,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/version.js b/grafast/grafserv-persisted/dist/version.js new file mode 100644 index 0000000000..bb93024cd7 --- /dev/null +++ b/grafast/grafserv-persisted/dist/version.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.version = void 0; +// This file is autogenerated by /scripts/postversion.mjs +exports.version = "0.0.0-beta.34"; +//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/grafast/grafserv-persisted/dist/version.js.map b/grafast/grafserv-persisted/dist/version.js.map new file mode 100644 index 0000000000..5170c4e6f8 --- /dev/null +++ b/grafast/grafserv-persisted/dist/version.js.map @@ -0,0 +1 @@ +{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AAC5C,QAAA,OAAO,GAAG,eAAe,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv-persisted/tsconfig.tsbuildinfo b/grafast/grafserv-persisted/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..216bffeb6e --- /dev/null +++ b/grafast/grafserv-persisted/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../grafast/dist/therecanbeonlyone.d.ts","../../utils/lru/dist/index.d.ts","../../utils/graphile-config/dist/interfaces.d.ts","../../utils/graphile-config/dist/functionality.d.ts","../../utils/graphile-config/dist/hooks.d.ts","../../utils/graphile-config/dist/middleware.d.ts","../../utils/graphile-config/dist/resolvepresets.d.ts","../../utils/graphile-config/dist/index.d.ts","../../node_modules/graphql/version.d.ts","../../node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/graphql/language/source.d.ts","../../node_modules/graphql/jsutils/path.d.ts","../../node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/graphql/language/kinds.d.ts","../../node_modules/graphql/language/tokenkind.d.ts","../../node_modules/graphql/language/ast.d.ts","../../node_modules/graphql/language/location.d.ts","../../node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/graphql/language/directivelocation.d.ts","../../node_modules/graphql/type/directives.d.ts","../../node_modules/graphql/type/schema.d.ts","../../node_modules/graphql/type/definition.d.ts","../../node_modules/graphql/execution/execute.d.ts","../../node_modules/graphql/graphql.d.ts","../../node_modules/graphql/type/scalars.d.ts","../../node_modules/graphql/type/introspection.d.ts","../../node_modules/graphql/type/validate.d.ts","../../node_modules/graphql/type/assertname.d.ts","../../node_modules/graphql/type/index.d.ts","../../node_modules/graphql/language/printlocation.d.ts","../../node_modules/graphql/language/lexer.d.ts","../../node_modules/graphql/language/parser.d.ts","../../node_modules/graphql/language/printer.d.ts","../../node_modules/graphql/language/visitor.d.ts","../../node_modules/graphql/language/predicates.d.ts","../../node_modules/graphql/language/index.d.ts","../../node_modules/graphql/execution/subscribe.d.ts","../../node_modules/graphql/execution/values.d.ts","../../node_modules/graphql/execution/index.d.ts","../../node_modules/graphql/subscription/index.d.ts","../../node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/graphql/validation/validate.d.ts","../../node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/graphql/validation/rules/deferstreamdirectiveonrootfieldrule.d.ts","../../node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/graphql/validation/rules/streamdirectiveonlistfieldrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/graphql/validation/index.d.ts","../../node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/graphql/error/locatederror.d.ts","../../node_modules/graphql/error/index.d.ts","../../node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/graphql/utilities/printschema.d.ts","../../node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/graphql/utilities/concatast.d.ts","../../node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/graphql/utilities/index.d.ts","../../node_modules/graphql/index.d.ts","../../node_modules/eventemitter3/index.d.ts","../grafast/dist/constraints.d.ts","../grafast/dist/bucket.d.ts","../grafast/dist/steps/__item.d.ts","../grafast/dist/steps/__flag.d.ts","../grafast/dist/steps/access.d.ts","../grafast/dist/steps/__value.d.ts","../grafast/dist/steps/listtransform.d.ts","../grafast/dist/steps/connection.d.ts","../grafast/dist/steps/constant.d.ts","../grafast/dist/steps/each.d.ts","../grafast/dist/steps/error.d.ts","../grafast/dist/steps/filter.d.ts","../grafast/dist/steps/first.d.ts","../grafast/dist/steps/groupby.d.ts","../grafast/dist/multistep.d.ts","../grafast/dist/steps/lambda.d.ts","../grafast/dist/steps/last.d.ts","../grafast/dist/steps/list.d.ts","../grafast/dist/steps/listen.d.ts","../grafast/dist/steps/node.d.ts","../grafast/dist/steps/partitionbyindex.d.ts","../grafast/dist/steps/remapkeys.d.ts","../grafast/dist/steps/reverse.d.ts","../grafast/dist/steps/applyinput.d.ts","../grafast/dist/steps/setter.d.ts","../grafast/dist/steps/sideeffect.d.ts","../grafast/dist/steps/__inputlist.d.ts","../grafast/dist/steps/__inputobject.d.ts","../grafast/dist/steps/__inputstaticleaf.d.ts","../grafast/dist/steps/__trackedvalue.d.ts","../grafast/dist/steps/applytransforms.d.ts","../grafast/dist/steps/bakedinput.d.ts","../grafast/dist/steps/condition.d.ts","../grafast/dist/steps/graphqlresolver.d.ts","../grafast/dist/steps/load.d.ts","../grafast/dist/steps/polymorphicbranch.d.ts","../grafast/dist/steps/proxy.d.ts","../grafast/dist/steps/index.d.ts","../grafast/dist/graphqlcollectfields.d.ts","../grafast/dist/engine/executeoutputplan.d.ts","../grafast/dist/engine/outputplan.d.ts","../grafast/dist/engine/operationplan.d.ts","../grafast/dist/step.d.ts","../grafast/dist/engine/layerplan.d.ts","../grafast/dist/error.d.ts","../grafast/dist/steps/__inputdefault.d.ts","../grafast/dist/steps/__inputdynamicscalar.d.ts","../grafast/dist/deferred.d.ts","../grafast/dist/utils.d.ts","../grafast/dist/planjsoninterfaces.d.ts","../grafast/dist/interfaces.d.ts","../grafast/dist/steps/object.d.ts","../grafast/dist/exportas.d.ts","../grafast/dist/grafastprint.d.ts","../grafast/dist/makegrafastschema.d.ts","../grafast/dist/dev.d.ts","../grafast/dist/engine/lib/defaultplanresolver.d.ts","../grafast/dist/engine/lib/withgloballayerplan.d.ts","../grafast/dist/execute.d.ts","../grafast/dist/grafastgraphql.d.ts","../grafast/dist/middleware.d.ts","../grafast/dist/operationplan-input.d.ts","../grafast/dist/polymorphic.d.ts","../grafast/dist/stringifypayload.d.ts","../grafast/dist/stripansi.d.ts","../grafast/dist/subscribe.d.ts","../../node_modules/iterall/index.d.ts","../grafast/dist/args.d.ts","../grafast/dist/version.d.ts","../grafast/dist/index.d.ts","../grafast/fwd/graphql/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/codemirror/index.d.ts","../../node_modules/@graphiql/react/types/editor/types.d.ts","../../node_modules/@graphiql/react/types/editor/header-editor.d.ts","../../node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/@graphiql/react/types/editor/components/header-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/image-preview.d.ts","../../node_modules/vscode-languageserver-types/lib/umd/main.d.ts","../../node_modules/graphql-config/types.d.ts","../../node_modules/@graphql-tools/utils/schemavisitor.d.ts","../../node_modules/@graphql-tools/utils/interfaces.d.ts","../../node_modules/@graphql-tools/utils/loaders.d.ts","../../node_modules/@graphql-tools/utils/helpers.d.ts","../../node_modules/@graphql-tools/utils/debug-log.d.ts","../../node_modules/@graphql-tools/utils/fix-windows-path.d.ts","../../node_modules/@graphql-tools/utils/flatten-array.d.ts","../../node_modules/@graphql-tools/utils/get-directives.d.ts","../../node_modules/@graphql-tools/utils/get-fields-with-directives.d.ts","../../node_modules/@graphql-tools/utils/get-implementing-types.d.ts","../../node_modules/@graphql-tools/utils/types.d.ts","../../node_modules/@graphql-tools/utils/print-schema-with-directives.d.ts","../../node_modules/@graphql-tools/utils/validate-documents.d.ts","../../node_modules/@graphql-tools/utils/fix-schema-ast.d.ts","../../node_modules/@graphql-tools/utils/parse-graphql-json.d.ts","../../node_modules/@graphql-tools/utils/parse-graphql-sdl.d.ts","../../node_modules/@graphql-tools/utils/get-user-types-from-schema.d.ts","../../node_modules/@graphql-tools/utils/create-schema-definition.d.ts","../../node_modules/@graphql-tools/utils/build-operation-for-field.d.ts","../../node_modules/@graphql-tools/utils/filterschema.d.ts","../../node_modules/@graphql-tools/utils/clone.d.ts","../../node_modules/@graphql-tools/utils/heal.d.ts","../../node_modules/@graphql-tools/utils/schemadirectivevisitor.d.ts","../../node_modules/@graphql-tools/utils/visitschema.d.ts","../../node_modules/@graphql-tools/utils/getresolversfromschema.d.ts","../../node_modules/@graphql-tools/utils/foreachfield.d.ts","../../node_modules/@graphql-tools/utils/foreachdefaultvalue.d.ts","../../node_modules/@graphql-tools/utils/mapschema.d.ts","../../node_modules/@graphql-tools/utils/addtypes.d.ts","../../node_modules/@graphql-tools/utils/rewire.d.ts","../../node_modules/@graphql-tools/utils/prune.d.ts","../../node_modules/@graphql-tools/utils/mergedeep.d.ts","../../node_modules/@graphql-tools/utils/stub.d.ts","../../node_modules/@graphql-tools/utils/selectionsets.d.ts","../../node_modules/@graphql-tools/utils/getresponsekeyfrominfo.d.ts","../../node_modules/@graphql-tools/utils/fields.d.ts","../../node_modules/@graphql-tools/utils/renametype.d.ts","../../node_modules/@graphql-tools/utils/collectfields.d.ts","../../node_modules/@graphql-tools/utils/transforminputvalue.d.ts","../../node_modules/@graphql-tools/utils/mapasynciterator.d.ts","../../node_modules/@graphql-tools/utils/updateargument.d.ts","../../node_modules/@graphql-tools/utils/implementsabstracttype.d.ts","../../node_modules/@graphql-tools/utils/errors.d.ts","../../node_modules/@graphql-tools/utils/toconfig.d.ts","../../node_modules/@graphql-tools/utils/observabletoasynciterable.d.ts","../../node_modules/@graphql-tools/utils/visitresult.d.ts","../../node_modules/@graphql-tools/utils/getargumentvalues.d.ts","../../node_modules/@graphql-tools/utils/valuematchescriteria.d.ts","../../node_modules/@graphql-tools/utils/isasynciterable.d.ts","../../node_modules/@graphql-tools/utils/isdocumentnode.d.ts","../../node_modules/@graphql-tools/utils/astfromvalueuntyped.d.ts","../../node_modules/@graphql-tools/utils/executor.d.ts","../../node_modules/@graphql-tools/utils/withcancel.d.ts","../../node_modules/@graphql-tools/utils/index.d.ts","../../node_modules/@graphql-tools/load/load-typedefs.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/interfaces.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/loaders.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/helpers.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-fields-with-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-implementing-types.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/types.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/print-schema-with-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/validate-documents.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/fix-schema-ast.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/parse-graphql-json.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/parse-graphql-sdl.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-user-types-from-schema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/create-schema-definition.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/build-operation-for-field.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/filterschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/heal.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getresolversfromschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/foreachfield.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/foreachdefaultvalue.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mapschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/addtypes.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/rewire.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/prune.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mergedeep.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/stub.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/selectionsets.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getresponsekeyfrominfo.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/fields.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/renametype.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/transforminputvalue.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mapasynciterator.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/updateargument.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/implementsabstracttype.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/errors.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/observabletoasynciterable.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/visitresult.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getargumentvalues.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/valuematchescriteria.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/isasynciterable.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/isdocumentnode.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/astfromvalueuntyped.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/executor.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/withcancel.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/aggregateerror.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/roottypes.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/index.d.ts","../../node_modules/@graphql-tools/merge/merge-resolvers.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/arguments.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/utils.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-typedefs.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-nodes.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/comments.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/directives.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/enum-values.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/enum.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/fields.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/input-type.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/interface.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-named-type-array.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/scalar.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/type.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/union.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/index.d.ts","../../node_modules/@graphql-tools/merge/merge-schemas.d.ts","../../node_modules/@graphql-tools/merge/extensions.d.ts","../../node_modules/@graphql-tools/merge/index.d.ts","../../node_modules/@graphql-tools/load/schema.d.ts","../../node_modules/@graphql-tools/load/documents.d.ts","../../node_modules/@graphql-tools/load/filter-document-kind.d.ts","../../node_modules/@graphql-tools/load/index.d.ts","../../node_modules/graphql-config/helpers/utils.d.ts","../../node_modules/graphql-config/loaders.d.ts","../../node_modules/graphql-config/extension.d.ts","../../node_modules/graphql-config/project-config.d.ts","../../node_modules/graphql-config/config.d.ts","../../node_modules/graphql-config/errors.d.ts","../../node_modules/graphql-config/index.d.ts","../../node_modules/graphql-language-service/dist/parser/types.d.ts","../../node_modules/graphql-language-service/dist/parser/characterstream.d.ts","../../node_modules/graphql-language-service/dist/parser/rules.d.ts","../../node_modules/graphql-language-service/dist/parser/rulehelpers.d.ts","../../node_modules/graphql-language-service/dist/parser/onlineparser.d.ts","../../node_modules/graphql-language-service/dist/parser/api.d.ts","../../node_modules/graphql-language-service/dist/parser/gettypeinfo.d.ts","../../node_modules/graphql-language-service/dist/parser/index.d.ts","../../node_modules/graphql-language-service/dist/types.d.ts","../../node_modules/graphql-language-service/dist/interface/autocompleteutils.d.ts","../../node_modules/graphql-language-service/dist/interface/getautocompletesuggestions.d.ts","../../node_modules/graphql-language-service/dist/utils/fragmentdependencies.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/graphql-language-service/dist/utils/collectvariables.d.ts","../../node_modules/graphql-language-service/dist/utils/getvariablesjsonschema.d.ts","../../node_modules/graphql-language-service/dist/utils/getastnodeatposition.d.ts","../../node_modules/graphql-language-service/dist/utils/range.d.ts","../../node_modules/graphql-language-service/dist/utils/validatewithcustomrules.d.ts","../../node_modules/graphql-language-service/dist/utils/getoperationfacts.d.ts","../../node_modules/graphql-language-service/dist/utils/index.d.ts","../../node_modules/graphql-language-service/dist/interface/getdefinition.d.ts","../../node_modules/graphql-language-service/dist/interface/getdiagnostics.d.ts","../../node_modules/graphql-language-service/dist/interface/getoutline.d.ts","../../node_modules/graphql-language-service/dist/interface/gethoverinformation.d.ts","../../node_modules/graphql-language-service/dist/interface/index.d.ts","../../node_modules/graphql-language-service/dist/index.d.ts","../../node_modules/codemirror-graphql/utils/gettypeinfo.d.ts","../../node_modules/codemirror-graphql/utils/schemareference.d.ts","../../node_modules/graphql-ws/lib/common.d.ts","../../node_modules/graphql-ws/lib/client.d.ts","../../node_modules/graphql-ws/lib/server.d.ts","../../node_modules/graphql-ws/lib/index.d.ts","../../node_modules/@graphiql/toolkit/dist/esm/create-fetcher/types.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/async-helpers/index.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/create-fetcher/createfetcher.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/format/index.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/auto-complete.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/merge-ast.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/operation-name.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/base.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/query.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/history.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/custom.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/index.d.mts","../../node_modules/@graphiql/react/types/editor/hooks.d.ts","../../node_modules/@graphiql/react/types/editor/query-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/query-editor.d.ts","../../node_modules/@graphiql/react/types/editor/response-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/response-editor.d.ts","../../node_modules/@graphiql/react/types/editor/variable-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/variable-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/index.d.ts","../../node_modules/@graphiql/react/types/editor/tabs.d.ts","../../node_modules/@graphiql/react/types/editor/context.d.ts","../../node_modules/@graphiql/react/types/editor/index.d.ts","../../node_modules/@graphiql/react/types/execution.d.ts","../../node_modules/@graphiql/react/types/explorer/components/argument.d.ts","../../node_modules/@graphiql/react/types/explorer/context.d.ts","../../node_modules/@graphiql/react/types/explorer/components/default-value.d.ts","../../node_modules/@graphiql/react/types/explorer/components/deprecation-reason.d.ts","../../node_modules/@graphiql/react/types/explorer/components/directive.d.ts","../../node_modules/@graphiql/react/types/explorer/components/doc-explorer.d.ts","../../node_modules/@graphiql/react/types/explorer/components/field-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/field-link.d.ts","../../node_modules/@graphiql/react/types/explorer/components/schema-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/search.d.ts","../../node_modules/@graphiql/react/types/explorer/components/section.d.ts","../../node_modules/@graphiql/react/types/explorer/components/type-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/type-link.d.ts","../../node_modules/@graphiql/react/types/explorer/index.d.ts","../../node_modules/@graphiql/react/types/history/components.d.ts","../../node_modules/@graphiql/react/types/history/context.d.ts","../../node_modules/@graphiql/react/types/history/index.d.ts","../../node_modules/@graphiql/react/types/plugin.d.ts","../../node_modules/@graphiql/react/types/schema.d.ts","../../node_modules/@graphiql/react/types/storage.d.ts","../../node_modules/@graphiql/react/types/provider.d.ts","../../node_modules/@graphiql/react/types/theme.d.ts","../../node_modules/@graphiql/react/types/utility/resize.d.ts","../../node_modules/@graphiql/react/types/utility/is-macos.d.ts","../../node_modules/@graphiql/react/types/icons/index.d.ts","../../node_modules/@graphiql/react/types/ui/button.d.ts","../../node_modules/@graphiql/react/types/ui/button-group.d.ts","../../node_modules/@radix-ui/react-context/dist/index.d.ts","../../node_modules/@radix-ui/react-primitive/dist/index.d.ts","../../node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts","../../node_modules/@radix-ui/react-focus-scope/dist/index.d.ts","../../node_modules/@radix-ui/react-portal/dist/index.d.ts","../../node_modules/@radix-ui/react-dialog/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/dialog.d.ts","../../node_modules/@radix-ui/react-arrow/dist/index.d.ts","../../node_modules/@radix-ui/rect/dist/index.d.ts","../../node_modules/@radix-ui/react-popper/dist/index.d.ts","../../node_modules/@radix-ui/react-roving-focus/dist/index.d.ts","../../node_modules/@radix-ui/react-menu/dist/index.d.ts","../../node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/dropdown.d.ts","../../node_modules/@graphiql/react/types/ui/markdown.d.ts","../../node_modules/@graphiql/react/types/ui/spinner.d.ts","../../node_modules/@graphiql/react/types/ui/tabs.d.ts","../../node_modules/@radix-ui/react-tooltip/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/tooltip.d.ts","../../node_modules/@graphiql/react/types/ui/index.d.ts","../../node_modules/@graphiql/react/types/toolbar/button.d.ts","../../node_modules/@graphiql/react/types/toolbar/execute.d.ts","../../node_modules/@graphiql/react/types/toolbar/menu.d.ts","../../node_modules/@graphiql/react/types/toolbar/index.d.ts","../../node_modules/@graphiql/react/types/index.d.ts","../../node_modules/graphiql/dist/graphiql.d.ts","../../node_modules/graphiql/dist/index.d.ts","../ruru/dist/interfaces.d.ts","../ruru/dist/server.d.ts","../grafserv/dist/middleware/graphql.d.ts","../grafserv/dist/options.d.ts","../grafserv/dist/interfaces.d.ts","../grafserv/dist/middleware/graphiql.d.ts","../grafserv/dist/core/base.d.ts","../grafserv/dist/utils.d.ts","../grafserv/dist/index.d.ts","./src/interfaces.ts","./src/version.ts","./src/index.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/events/index.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/file.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/filereader.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/assert/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/cookies/node_modules/@types/express/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-axis/index.d.ts","../../node_modules/@types/d3-brush/index.d.ts","../../node_modules/@types/d3-chord/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@types/d3-contour/index.d.ts","../../node_modules/@types/d3-delaunay/index.d.ts","../../node_modules/@types/d3-dispatch/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-dsv/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-fetch/index.d.ts","../../node_modules/@types/d3-force/index.d.ts","../../node_modules/@types/d3-format/index.d.ts","../../node_modules/@types/d3-geo/index.d.ts","../../node_modules/@types/d3-hierarchy/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-polygon/index.d.ts","../../node_modules/@types/d3-quadtree/index.d.ts","../../node_modules/@types/d3-random/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-scale-chromatic/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-time-format/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/d3/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/interpret/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/chalk/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/jsonwebtoken/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","../../node_modules/@types/koa-bodyparser/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/ajv/node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/@types/license-checker-webpack-plugin/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@iconify/types/types.d.ts","../../node_modules/@iconify/utils/lib/customisations/defaults.d.ts","../../node_modules/@iconify/utils/lib/customisations/merge.d.ts","../../node_modules/@iconify/utils/lib/customisations/bool.d.ts","../../node_modules/@iconify/utils/lib/customisations/flip.d.ts","../../node_modules/@iconify/utils/lib/customisations/rotate.d.ts","../../node_modules/@iconify/utils/lib/icon/name.d.ts","../../node_modules/@iconify/utils/lib/icon/defaults.d.ts","../../node_modules/@iconify/utils/lib/icon/merge.d.ts","../../node_modules/@iconify/utils/lib/icon/transformations.d.ts","../../node_modules/@iconify/utils/lib/svg/viewbox.d.ts","../../node_modules/@iconify/utils/lib/icon/square.d.ts","../../node_modules/@iconify/utils/lib/icon-set/tree.d.ts","../../node_modules/@iconify/utils/lib/icon-set/parse.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","../../node_modules/@iconify/utils/lib/icon-set/expand.d.ts","../../node_modules/@iconify/utils/lib/icon-set/minify.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","../../node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","../../node_modules/@iconify/utils/lib/svg/build.d.ts","../../node_modules/@iconify/utils/lib/svg/defs.d.ts","../../node_modules/@iconify/utils/lib/svg/id.d.ts","../../node_modules/@iconify/utils/lib/svg/size.d.ts","../../node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","../../node_modules/@iconify/utils/lib/svg/trim.d.ts","../../node_modules/@iconify/utils/lib/svg/pretty.d.ts","../../node_modules/@iconify/utils/lib/svg/html.d.ts","../../node_modules/@iconify/utils/lib/svg/url.d.ts","../../node_modules/@iconify/utils/lib/svg/inner-html.d.ts","../../node_modules/@iconify/utils/lib/svg/parse.d.ts","../../node_modules/@iconify/utils/lib/colors/types.d.ts","../../node_modules/@iconify/utils/lib/colors/keywords.d.ts","../../node_modules/@iconify/utils/lib/colors/index.d.ts","../../node_modules/@iconify/utils/lib/css/types.d.ts","../../node_modules/@iconify/utils/lib/css/icon.d.ts","../../node_modules/@iconify/utils/lib/css/icons.d.ts","../../node_modules/@antfu/utils/dist/index.d.mts","../../node_modules/@iconify/utils/lib/loader/types.d.ts","../../node_modules/@iconify/utils/lib/loader/utils.d.ts","../../node_modules/@iconify/utils/lib/loader/custom.d.ts","../../node_modules/@iconify/utils/lib/loader/modern.d.ts","../../node_modules/@iconify/utils/lib/loader/loader.d.ts","../../node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","../../node_modules/@iconify/utils/lib/emoji/convert.d.ts","../../node_modules/@iconify/utils/lib/emoji/format.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","../../node_modules/@iconify/utils/lib/emoji/data.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/components.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/name.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","../../node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","../../node_modules/@iconify/utils/lib/emoji/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","../../node_modules/@iconify/utils/lib/misc/strings.d.ts","../../node_modules/@iconify/utils/lib/misc/objects.d.ts","../../node_modules/@iconify/utils/lib/misc/title.d.ts","../../node_modules/@iconify/utils/lib/index.d.ts","../../node_modules/mermaid/dist/rendering-util/icons.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/dompurify/dist/purify.es.d.mts","../../node_modules/mermaid/dist/config.type.d.ts","../../node_modules/type-fest/source/basic.d.ts","../../node_modules/type-fest/source/except.d.ts","../../node_modules/type-fest/source/mutable.d.ts","../../node_modules/type-fest/source/merge.d.ts","../../node_modules/type-fest/source/merge-exclusive.d.ts","../../node_modules/type-fest/source/require-at-least-one.d.ts","../../node_modules/type-fest/source/require-exactly-one.d.ts","../../node_modules/type-fest/source/partial-deep.d.ts","../../node_modules/type-fest/source/readonly-deep.d.ts","../../node_modules/type-fest/source/literal-union.d.ts","../../node_modules/type-fest/source/promisable.d.ts","../../node_modules/type-fest/source/opaque.d.ts","../../node_modules/type-fest/source/set-optional.d.ts","../../node_modules/type-fest/source/set-required.d.ts","../../node_modules/type-fest/source/value-of.d.ts","../../node_modules/type-fest/source/promise-value.d.ts","../../node_modules/type-fest/source/async-return-type.d.ts","../../node_modules/type-fest/source/conditional-keys.d.ts","../../node_modules/type-fest/source/conditional-except.d.ts","../../node_modules/type-fest/source/conditional-pick.d.ts","../../node_modules/type-fest/source/union-to-intersection.d.ts","../../node_modules/type-fest/source/stringified.d.ts","../../node_modules/type-fest/source/fixed-length-array.d.ts","../../node_modules/type-fest/source/iterable-element.d.ts","../../node_modules/type-fest/source/entry.d.ts","../../node_modules/type-fest/source/entries.d.ts","../../node_modules/type-fest/source/set-return-type.d.ts","../../node_modules/type-fest/source/asyncify.d.ts","../../node_modules/type-fest/source/package-json.d.ts","../../node_modules/type-fest/source/tsconfig-json.d.ts","../../node_modules/type-fest/base.d.ts","../../node_modules/type-fest/source/utilities.d.ts","../../node_modules/type-fest/ts41/camel-case.d.ts","../../node_modules/type-fest/ts41/delimiter-case.d.ts","../../node_modules/type-fest/ts41/kebab-case.d.ts","../../node_modules/type-fest/ts41/pascal-case.d.ts","../../node_modules/type-fest/ts41/snake-case.d.ts","../../node_modules/type-fest/ts41/index.d.ts","../../node_modules/mermaid/dist/types.d.ts","../../node_modules/mermaid/dist/utils.d.ts","../../node_modules/mermaid/dist/diagram.d.ts","../../node_modules/mermaid/dist/diagram-api/types.d.ts","../../node_modules/mermaid/dist/diagram-api/detecttype.d.ts","../../node_modules/mermaid/dist/errors.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","../../node_modules/mermaid/dist/rendering-util/types.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","../../node_modules/dagre-d3-es/src/graphlib/graph.d.ts","../../node_modules/dagre-d3-es/src/graphlib/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/render.d.ts","../../node_modules/dagre-d3-es/src/index.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","../../node_modules/mermaid/dist/logger.d.ts","../../node_modules/mermaid/dist/internals.d.ts","../../node_modules/mermaid/dist/mermaidapi.d.ts","../../node_modules/mermaid/dist/rendering-util/render.d.ts","../../node_modules/mermaid/dist/mermaid.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/mock-fs/lib/item.d.ts","../../node_modules/@types/mock-fs/lib/file.d.ts","../../node_modules/@types/mock-fs/lib/directory.d.ts","../../node_modules/@types/mock-fs/lib/symlink.d.ts","../../node_modules/@types/mock-fs/lib/filesystem.d.ts","../../node_modules/@types/mock-fs/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/nodemon/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/pg/node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pluralize/index.d.ts","../../node_modules/prettier/doc.d.ts","../../node_modules/prettier/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/@types/ps-tree/index.d.ts","../../node_modules/ts-toolbelt/out/index.d.ts","../../node_modules/@types/ramda/tools.d.ts","../../node_modules/@types/ramda/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/minipass/dist/commonjs/index.d.ts","../../node_modules/lru-cache/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/path-scurry/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts","../../node_modules/glob/dist/commonjs/pattern.d.ts","../../node_modules/glob/dist/commonjs/processor.d.ts","../../node_modules/glob/dist/commonjs/walker.d.ts","../../node_modules/glob/dist/commonjs/ignore.d.ts","../../node_modules/glob/dist/commonjs/glob.d.ts","../../node_modules/glob/dist/commonjs/has-magic.d.ts","../../node_modules/glob/dist/commonjs/index.d.ts","../../node_modules/rimraf/dist/commonjs/opt-arg.d.ts","../../node_modules/rimraf/dist/commonjs/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/source-list-map/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/tapable/index.d.ts","../../node_modules/@types/tern/lib/tern/index.d.ts","../../node_modules/@types/tern/lib/infer/index.d.ts","../../node_modules/@types/tern/index.d.ts","../../node_modules/source-map/source-map.d.ts","../../node_modules/@types/uglify-js/index.d.ts","../../node_modules/anymatch/index.d.ts","../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../node_modules/@types/webpack-sources/lib/source.d.ts","../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../node_modules/@types/webpack-sources/lib/index.d.ts","../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../node_modules/@types/webpack-sources/index.d.ts","../../node_modules/@types/webpack/index.d.ts","../../node_modules/@types/webpack-bundle-analyzer/index.d.ts","../../node_modules/@types/websocket/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../../../node_modules/@types/color-name/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/global.d.ts"],"fileIdsList":[[534,578],[189,239,241,260,534,578],[192,231,534,578],[192,227,232,233,534,578],[227,233,241,534,578],[234,260,534,578],[189,191,229,231,234,239,241,260,534,578],[81,189,192,227,230,233,234,239,241,260,534,578],[241,534,578],[92,189,239,241,260,534,578],[192,534,578],[189,228,239,260,534,578],[80,81,87,189,205,227,228,232,233,235,238,239,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,534,578],[87,93,189,190,191,214,227,228,232,233,234,235,236,237,239,240,260,534,578],[189,227,233,239,241,260,534,578],[87,534,578],[227,233,534,578],[189,227,232,233,239,241,260,534,578],[189,228,232,234,239,241,260,534,578],[193,227,233,241,534,578],[220,227,233,241,534,578],[189,199,227,233,239,241,260,534,578],[189,199,227,233,239,260,534,578],[227,233,241,260,534,578],[189,191,194,195,196,227,233,239,241,260,534,578],[195,227,233,260,534,578],[194,227,233,241,534,578],[189,227,228,233,239,241,260,534,578],[197,227,233,241,534,578],[193,197,198,227,233,534,578],[198,227,233,241,534,578],[189,227,233,239,260,534,578],[197,198,227,233,534,578],[193,194,195,196,197,198,199,200,201,202,203,204,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,242,260,534,578],[205,227,233,241,534,578],[194,199,227,233,241,534,578],[193,198,227,233,241,260,534,578],[194,205,227,233,241,260,534,578],[189,206,227,233,239,241,260,534,578],[199,227,233,241,534,578],[214,260,534,578],[92,189,239,260,534,578],[189,227,232,233,238,239,241,260,534,578],[189,239,260,534,578],[79,81,87,260,525,526,527,534,578,592],[79,87,260,534,578],[79,534,578],[87,260,261,519,521,522,534,578],[87,260,261,518,519,520,521,523,524,534,578],[87,260,261,438,518,519,520,525,534,578],[87,260,520,521,534,578],[260,261,521,525,534,578],[261,521,534,578],[260,261,438,521,525,534,578,610],[518,534,578],[516,517,534,578],[534,578,690],[268,269,534,578],[266,269,534,578],[270,271,453,455,457,534,578],[269,452,534,578],[269,454,534,578],[269,456,534,578],[189,239,260,265,267,269,432,459,534,578],[265,267,534,578],[266,267,434,450,534,578],[267,268,451,452,454,456,458,459,460,534,578],[189,239,260,265,267,434,451,534,578],[265,266,267,534,578],[267,450,460,534,578],[266,534,578],[265,267,434,534,578],[265,269,450,451,534,578],[189,239,260,269,534,578],[269,464,534,578],[269,534,578],[265,269,534,578],[189,239,260,265,534,578],[189,239,260,265,269,534,578],[463,464,465,466,467,468,469,470,471,472,473,474,475,534,578],[269,450,534,578],[265,269,450,534,578],[477,478,534,578],[265,534,578],[461,462,476,479,480,481,482,483,484,485,486,487,509,513,534,578],[269,461,462,464,479,480,481,482,534,578],[189,239,260,265,269,450,534,578],[510,511,512,534,578],[265,269,502,534,578],[265,495,534,578],[488,489,496,503,504,505,506,508,534,578],[265,507,534,578],[189,239,260,438,439,534,578],[189,239,260,438,534,578],[189,239,260,438,439,440,441,442,443,444,445,446,447,448,449,534,578],[446,534,578],[446,447,534,578],[327,328,534,578],[328,396,397,398,534,578],[327,534,578],[189,239,260,328,395,534,578],[376,392,393,394,534,578],[375,534,578],[189,239,260,375,379,534,578],[329,534,578],[189,239,260,329,534,578],[189,239,260,335,534,578],[189,239,260,375,534,578],[329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,534,578],[189,239,260,330,335,534,578],[101,189,239,260,534,578],[189,239,260,330,534,578],[189,239,260,392,534,578],[189,239,260,380,534,578],[189,239,260,379,534,578],[377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,534,578],[189,239,260,375,378,534,578],[189,239,260,275,534,578],[189,239,260,284,534,578],[274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,534,578],[189,239,260,274,534,578],[101,189,239,260,275,534,578],[101,189,239,260,276,284,534,578],[189,239,260,274,275,534,578],[189,239,260,276,534,578],[534,578,887],[534,578,855,890],[534,578,855],[534,578,855,856],[534,578,912],[534,578,902,904],[534,578,902,904,905,906,907,908],[534,578,902,904,905],[534,578,902,904,905,906],[534,578,902,904,905,906,907],[534,578,855,862],[534,578,855,865],[534,578,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916],[534,578,855,856,893,894],[534,578,855,856,893],[534,578,855,856,865],[534,578,855,856,865,876],[534,578,778],[265,491,534,578],[265,490,491,492,493,494,534,578],[265,490,491,501,534,578],[265,490,491,492,493,494,499,500,534,578],[265,490,491,497,498,534,578],[265,490,491,534,578],[265,490,491,492,494,499,534,578],[534,578,593,628],[534,578,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688],[534,578,632],[534,578,632,636],[534,578,630,632,634],[534,578,630,632],[534,578,632,638],[534,578,631,632],[534,578,643],[534,578,632,649,650,651],[534,578,632,653],[534,578,632,654,655,656,657,658,659,660,661,662,663,664,665,666],[534,578,632,635],[534,578,632,634],[534,578,632,643],[534,578,690,691,692,693,694],[534,578,690,692],[534,578,593,628,696],[534,578,584,628],[534,578,621,628,704],[534,578,593,628,696,709,710],[534,578,697,704,708],[534,578,713,741],[534,578,712,718],[534,578,723],[534,578,718],[534,578,717],[534,578,735],[534,578,731],[534,578,713,730,741],[534,578,712,713,714,715,716,717,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742],[534,578,744],[534,578,747,750],[419,534,578,747,749],[534,578,750],[419,534,578,746,747],[534,578,590,593,628,701,702,703],[534,578,697,702,704,708,752],[534,578,591,628,754,755],[534,578,590,591,628,757],[534,578,591,628],[534,578,760],[534,578,762,768],[534,578,763,764,765,766,767],[534,578,768],[534,578,590,593,595,598,610,621,628],[534,578,628],[534,578,773],[534,578,774],[534,578,780,783],[534,578,591,621,628],[534,578,583,628,744],[534,578,590,628],[534,578,788],[534,577,578,590,593,594,598,605,621,628,629,706,707,710,711,770,787],[534,578,839],[534,578,841,843,844,845,846,847,848,849,850,851,852,853],[534,578,841,842,844,845,846,847,848,849,850,851,852,853],[534,578,842,843,844,845,846,847,848,849,850,851,852,853],[534,578,841,842,843,845,846,847,848,849,850,851,852,853],[534,578,841,842,843,844,846,847,848,849,850,851,852,853],[534,578,841,842,843,844,845,847,848,849,850,851,852,853],[534,578,841,842,843,844,845,846,848,849,850,851,852,853],[534,578,841,842,843,844,845,846,847,849,850,851,852,853],[534,578,841,842,843,844,845,846,847,848,850,851,852,853],[534,578,841,842,843,844,845,846,847,848,849,851,852,853],[534,578,841,842,843,844,845,846,847,848,849,850,852,853],[534,578,841,842,843,844,845,846,847,848,849,850,851,853],[534,578,841,842,843,844,845,846,847,848,849,850,851,852],[534,578,1049,1050,1051,1052],[534,578,1048],[534,578,628,1048],[534,578,1048,1049,1050,1051],[534,575,578],[534,577,578],[578],[534,578,583,613],[534,578,579,584,590,591,598,610,621],[534,578,579,580,590,598],[529,530,531,534,578],[534,578,581,622],[534,578,582,583,591,599],[534,578,583,610,618],[534,578,584,586,590,598],[534,577,578,585],[534,578,586,587],[534,578,590],[534,578,588,590],[534,577,578,590],[534,578,590,591,592,610,621],[534,578,590,591,592,606,610,613],[534,573,578,626],[534,578,586,590,593,598,610,621],[534,578,590,591,593,594,598,610,618,621],[534,578,593,595,610,618,621],[532,533,534,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627],[534,578,590,596],[534,578,597,621,626],[534,578,586,590,598,610],[534,545,549,578,621],[534,545,578,610,621],[534,540,578],[534,542,545,578,618,621],[534,578,598,618],[534,540,578,628],[534,542,545,578,598,621],[534,537,538,541,544,578,590,610,621],[534,545,552,578],[534,537,543,578],[534,545,566,567,578],[534,541,545,578,613,621,628],[534,566,578,628],[534,539,540,578,628],[534,545,578],[534,539,540,541,542,543,544,545,546,547,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,567,568,569,570,571,572,578],[534,545,560,578],[534,545,552,553,578],[534,543,545,553,554,578],[534,544,578],[534,537,540,545,578],[534,545,549,553,554,578],[534,549,578],[534,543,545,548,578,621],[534,537,542,545,552,578],[534,578,610],[534,540,545,566,578,626,628],[534,578,599],[534,578,600],[534,577,578,601],[534,575,576,577,578,579,580,581,582,583,584,585,586,587,588,590,591,592,593,594,595,596,597,598,599,600,601,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627],[534,578,604],[534,578,605],[534,578,590,606,607],[534,578,606,608,622,624],[534,578,590,610,611,613],[534,578,612,613],[534,578,610,611],[534,578,613],[534,578,614],[534,575,578,610],[534,578,590,616,617],[534,578,616,617],[534,578,583,598,610,618],[534,578,619],[534,578,598,620],[534,578,593,605,621],[534,578,583,622],[534,578,610,623],[534,578,597,624],[534,578,625],[534,578,583,590,592,601,610,621,624,626],[534,578,610,627],[534,578,590,610,618,628,1058,1059,1062,1063],[534,578,1069,1070],[534,578,1069],[534,578,768,1074,1075],[263,534,578,1172],[263,534,578,1173],[534,578,768,1074],[263,534,578,1073],[262,263,264,534,578],[534,578,593,610,628],[534,578,610,628],[534,578,1099,1138],[534,578,1099,1123,1138],[534,578,1138],[534,578,1099],[534,578,1099,1124,1138],[534,578,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137],[534,578,1124,1138],[534,578,591,610,628,700],[534,578,591,709],[534,578,593,628,701,707],[534,578,1145,1146],[534,578,747,1145],[534,578,747,1146],[534,578,919],[534,578,1148],[534,578,593,598,628,839],[534,578,628,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162],[534,578,1151,1152,1161],[534,578,1152,1161],[534,578,1142,1151,1152,1161],[534,578,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1162],[534,578,1152],[534,578,583,1151,1161],[534,578,583,628,838,1148,1149,1150,1163],[534,578,590,593,595,598,621,628],[534,578,590,593,595,598,610,618,621,627,628],[534,578,1169],[534,578,794,795,799,826,827,829,830,831,833,834],[534,578,792,793],[534,578,792],[534,578,794,834],[534,578,794,795,831,832,834],[534,578,834],[534,578,791,834,835],[534,578,794,795,833,834],[534,578,794,795,797,798,833,834],[534,578,794,795,796,833,834],[534,578,794,795,799,826,827,828,829,830,833,834],[534,578,791,794,795,799,831,833],[534,578,799,834],[534,578,801,802,803,804,805,806,807,808,809,810,834],[534,578,824,834],[534,578,800,811,819,820,821,822,823,825],[534,578,804,834],[534,578,812,813,814,815,816,817,818,834],[189,239,260,432,534,578],[89,189,239,260,433,534,578],[534,578,1032,1033,1034,1035,1036],[534,578,1030],[534,578,1031,1037,1038],[534,578,920],[534,578,776,782],[534,578,1082,1084,1088,1089,1092],[534,578,1093],[534,578,1084,1088,1091],[534,578,1082,1084,1088,1091,1092,1093,1094],[534,578,1088],[534,578,1084,1088,1089,1091],[534,578,1082,1084,1089,1090,1092],[534,578,1085,1086,1087],[534,578,591,600,628,1082,1083],[265,514,534,578],[514,515,534,578],[273,402,403,534,578],[401,534,578],[273,534,578],[273,327,402,403,404,405,534,578],[189,239,260,327,399,400,534,578],[189,239,260,273,327,399,402,534,578],[414,415,426,431,534,578],[189,239,260,414,415,534,578],[189,239,260,415,426,534,578],[189,239,260,272,415,534,578],[189,239,260,272,414,415,534,578],[415,534,578],[416,417,427,428,429,430,534,578],[189,239,260,414,432,534,578],[407,534,578],[407,408,409,410,411,412,413,534,578],[407,408,409,534,578],[189,239,260,408,415,534,578],[189,239,260,272,406,414,534,578],[189,239,260,415,534,578],[189,239,260,420,534,578],[419,420,534,578],[418,420,421,422,423,424,425,534,578],[189,239,260,435,534,578],[435,436,437,534,578],[89,90,96,97,534,578],[98,164,165,534,578],[89,96,98,534,578],[90,98,534,578],[89,91,92,93,96,98,101,102,534,578],[91,103,117,118,534,578],[89,96,101,102,103,534,578],[89,93,96,98,100,101,102,534,578],[89,90,101,102,103,534,578],[88,104,109,116,119,120,163,166,188,534,578],[89,534,578],[90,94,95,534,578],[90,94,95,96,97,99,110,111,112,113,114,115,534,578],[90,95,96,534,578],[90,534,578],[89,90,95,96,98,111,534,578],[96,534,578],[90,96,97,534,578],[94,96,534,578],[103,117,534,578],[89,91,92,93,96,101,534,578],[89,96,99,102,534,578],[91,100,101,102,105,106,107,108,534,578],[102,534,578],[89,93,96,98,100,102,534,578],[98,101,534,578],[98,534,578],[89,96,102,534,578],[90,96,101,112,534,578],[101,167,534,578],[98,102,534,578],[96,101,534,578],[101,534,578],[89,99,534,578],[89,96,534,578],[96,101,102,534,578],[121,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,534,578],[101,102,534,578],[93,96,534,578],[89,96,100,101,102,114,534,578],[89,93,96,102,534,578],[89,93,96,534,578],[122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,534,578],[114,122,534,578],[122,534,578],[89,96,98,101,121,122,534,578],[89,96,98,100,101,102,114,121,534,578],[534,578,780],[534,578,777,781],[534,578,921],[534,578,922,964],[534,578,743,922,960,963],[534,578,962,964],[534,578,713,741,922,961,962,968,1040,1041],[534,578,918,922,961,962,963,964,965,966,968,1042,1043,1044],[534,578,922,961,963,964],[534,578,855,917],[534,578,964,968,1042],[534,578,968],[534,578,713,741,961,968,1029,1039,1045],[534,578,961,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028],[534,578,713,741,961,968],[534,578,922,967,1029],[534,578,922],[534,578,713,741,743,922,961],[534,578,590,614,628],[534,578,628,1059,1060,1061],[534,578,610,628,1059],[534,578,1065],[534,578,779],[534,578,1096],[534,578,591,1095],[534,578,836],[419,534,578,790,835],[419,534,578,836],[534,578,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952],[534,578,938],[534,578,938,949],[534,578,924,940],[534,578,940],[534,578,947],[534,578,923],[534,578,924],[534,578,932],[534,578,954],[534,578,953,955,956,957,958,959],[534,578,956],[534,578,955],[534,578,593,598,618,621,624,747,751,790,836,837,838],[82,534,578],[82,83,534,578],[82,83,84,85,86,534,578]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8c2f60c3192f66fe9e5e7a7a941534583cdff4f5a059fad30b1b863a547f388a","impliedFormat":1},{"version":"27b4308d9e3db258a09b8b7bd92677320d654f5fc089abbbcb1fd2f70b14c909","impliedFormat":1},{"version":"d1d7e7d247badcbc50cf0bd6b1096dc7ab3cd36b31e9803b3c0acbbfacc493d2","impliedFormat":1},{"version":"6c2a2e7e8500f70a127dbb259d99c0f3951394df7c46a69eb2569f0e8c14665e","impliedFormat":1},{"version":"924e12558578f341179bb878e75cfd9aa648254f5ac6cf228832fae40a52c067","impliedFormat":1},{"version":"3f7705b6434455ff25ac2d336388564173179a4aed8cd0d1b1ea235f0fd3de23","impliedFormat":1},{"version":"b5f6aef5039b1b98a67bf3a3ed52f8693a56be698da9e4a41e2d67b0751ee005","affectsGlobalScope":true,"impliedFormat":1},{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"f473be7c909dbd10c40f013e70da40f24648b2abb01025436fe0a0eecd0e83be","impliedFormat":1},{"version":"c98583f02275727ead0256c97298c15fb77a1c1e473b03c3b61291c63c66d385","impliedFormat":1},{"version":"9a7904e39add402d71343ac8de5303e990d9abb1fc703c64991c655b718267a5","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"f671901909a26ae633328d6d899992193ca9ea718e6315f2c3d46f39c437f02c","impliedFormat":1},{"version":"7920b8aa27a7b6a90bf9f5dc21eedac7f38ca8717ebe70495ab616eb52b3247b","impliedFormat":1},{"version":"485fb40ef0ae61e1f8f5f494a2aa4a69df73dc860b5c94ef8fc8dc42679fdb26","impliedFormat":1},{"version":"1f53ae308869bfb894735576727f3dca47d0405ba7fee4f076a701b449ce6f94","impliedFormat":1},{"version":"84bdeff726a44cad4c07230ccdd2b777e53608d081eb8b27f6d28540ac22a915","impliedFormat":1},{"version":"1950e4d79983ccc330513fb28324280bbd138fc69e2739353008ae5a75f976e6","impliedFormat":1},{"version":"2e9b3ece2914738d48a674dc4d677a6cef576ef045356961120a7915735e13f4","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"3c8c852d93800512dc47f4554efe94789bd81733947e2066a916ba70fe6992fd","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"5a2ae43daf9d478f37780e3ae08089a46347e395812c7c4526684878e34b1401","impliedFormat":1},{"version":"d60984fcae46158649bf553c1a649428ced1dfaa789086a7fb79a819536b0023","impliedFormat":1},{"version":"ff90925b7aef60c568d491966f90f37cfe4eb126a590e68a33c017b9be483f84","impliedFormat":1},{"version":"cbd12dce7f4a3542b0f00690efcf1211e50ad87bd78cedbf7beb60acb27d20a0","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"6b6fdab709d30fbedb090e783a610662e60b4922843f42ef801e3073a23392ee","impliedFormat":1},{"version":"65b2a90560049039460015abe63b8fa7f205bb78796a8de48a3661cfe7e07e28","impliedFormat":1},{"version":"1b6173159974df8ff78f3b01b8b89449053c1912c2ec715a2dc664d8d93a54c1","impliedFormat":1},{"version":"2b4b6a59d7d1020b65f9c878850b1aa2ae8eceb26025224d6bee2c5d7883d815","impliedFormat":1},{"version":"d45acd2463649e59b4dafb4ee051426783c6a13a72c21fac94265676f7fc01d8","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"7ef6d45ce6f0ee16a0441063ca89cebfbe4c00647132f5fe31bbe5420e20843b","impliedFormat":1},{"version":"11c2481df1d73d5d667ce282d1ec9fbcedee39f0a0382fd591cf6434b21f05d0","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"ac7eec65e925055052e4c3d88a303457150e7ddf8f02256a674315335b95af70","impliedFormat":1},{"version":"bb61172ecd43ac71849821f49ef6afa6515230386b253817c380873bdc49da50","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"1b3a76621e54583d0f1a9fcde6b7aa7642283412b103744f7b2a5c3c19108959","impliedFormat":1},{"version":"6f0f5830c13abe710e1e7e97bed1ae039f3a9fc8b5ce2a076141eaf0c854fee6","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"3307e5b71a5eea118476097fde4580e60c20b187e945f42d7eb69a8dbbe7e09a","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"0a08db8f792dd2b329dfb09bb2c7805298d03888608acd9eb554a8ad820e1079","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"490725ebec9ddfc97663887989ff1a49323b7cce7293970732ef962cffed3699","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"cf3f331aad22bfead8f79aae52f022f25bf9ce25185cfc87f3c4a59c060a699e","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"da129261494c4094bf55c761ba5f0ae4d5426d83ed5e312bc7f8600727bb8a05","impliedFormat":1},{"version":"cd2f8f7d90d8d283bb4b91b57406bf793df731d39bc2c119e3fa514a057d21f8","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"1930700210612b5324055fd9d335f4f2a7bb3f1b1433e1adadd7bdc5ee50272f","impliedFormat":1},{"version":"b998db2d97135f8958613fd1d795fc58a17b8fcc452288eaec13e8c8d870d1ac","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"2d8df720a088cfdc1253782b120f400cbe0d4516bb06e98c88ae7c2af1447653","impliedFormat":1},{"version":"99acda6ceb0b1e5a754aa8e7af740702e50ab515561be3d987392f04d0f7078e","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"806f43175b88c9a2ef89448cef56bc95c4df32a27be99748c517e5ca076919e8","impliedFormat":1},{"version":"5832c4ed86047766c1d4cfe2aa5780e3ab5d8d842d12664d0f71faf78c80dd7e","impliedFormat":1},{"version":"a43d21378510cf4ed5aad29f64f3d0fc6e0a30bb2bb81af0ea776b239a77d068","impliedFormat":1},{"version":"60c4cb259d73efe80ca3854715efdf93710a8b11a560a7f9741d6638280b4a80","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"faa402775a4c220279f9c26074a0010f10a7f0293c506ffd0857ea45e8ba7733","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"08b603e3737ff32a685eefca3e7f21324b8b868f3322416cef759f8a54d234ef","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"14d8af44e19148423a5a0817544a229e3ba324e1cd814c1d7b4ca2690baf434c","impliedFormat":1},{"version":"91122fba45414382787d7cffbd90298118a2970f8f12d91cff302f3a482f01e1","impliedFormat":1},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"b6ac3e813f3bc41717619291caf2fbc75ee84b4f5bd3abd3e48885831ebdaf96","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"691e623f6b017a026baf823394aa6d74efabfe877b799c539e085e3f82247cd8","impliedFormat":1},{"version":"a4808116b12ab27b11b3800dbc2b64dd122d4748d48a111957b87b52fd3cda2d","impliedFormat":1},{"version":"2501feb6d0a73d980a9b8e5e03c7e15053788a7fbae6d55cf93df3b0e06dbedb","impliedFormat":1},{"version":"dc9412bbe64fc748d330f3e574c0440753daefc81cc74791198a0223f2114b5a","impliedFormat":1},{"version":"bbd9e6f68bf6e418bd44d7991a4860b1d386a30b798d1be773931ac7bd1e657a","impliedFormat":1},{"version":"f7ff9fd2db48fbabaf6516a4c3515b07325baf4c7a35766a7bc1ce72a1bb9b83","impliedFormat":1},{"version":"e383a277c8c485ffafdeea2bd0d28036bd8d1be4b2d6099a7b27ecc4419fe8d4","impliedFormat":1},{"version":"66a1d3c8e68134692c9784cfcd8ca275d8e24ace1bc01c432c5a2cc27ef27701","impliedFormat":1},{"version":"18b79e1c4ef00056857db2070ed947e32dae63dbbaefadee3cb6e8f21d5193d2","impliedFormat":1},{"version":"cbce9fb00ac5676380dafebfd7e5ce1561f17dfbe6356597d6e5d9b6b9bd5fe2","impliedFormat":1},{"version":"ae042e01074576c186a734888cd420dcf9eccf57053c9d7de5326cc235b7d3ac","impliedFormat":1},{"version":"040c519477a40f166f9d3d1f1e792761de759c5301466833b74d119957c794b3","impliedFormat":1},{"version":"d5a20d626aa5d02f7732d87050b9f3589627f36e4b4d01fe171d2cb9a958b21c","impliedFormat":1},{"version":"d36fb912245b9e1c7a4ac59cffe51d83546d2b03f52e2b3b9fff969d01257800","impliedFormat":1},{"version":"70ecd65df736dcf74d8304cd3767a863b7fab2bfa04a73c039c995cfd88489dc","impliedFormat":1},{"version":"53960fc36042dc4aef356c0273674bb0e7f65059720fb42ac36d29a8d2e3cbf1","impliedFormat":1},{"version":"8c607552166070130883b20fb7da9c7b7006e065239c2075f47e3349f3664c66","impliedFormat":1},{"version":"d3878648b6e0c7f8ca809b4a03d8d13ddccdde282c6c84aa1faf59f0780a888c","impliedFormat":1},{"version":"c1a24626823048792dc4440975646629ae984fa3354cd2f09270834d90fd997d","impliedFormat":1},{"version":"696e8b13ed6b15e0395fa6438f43e1363e09204f080640c6cb5437323f9ed8fb","impliedFormat":1},{"version":"a5d6fe2a52c03c4f5edb8c1ef06ccfc777ae377d0f0dbd7df3b066b0f9cec946","impliedFormat":1},{"version":"34b4698d4b6ccfb2b1e3e034d4463ecf490a6c700d229685f7b5b08ccc150393","impliedFormat":1},{"version":"f19baa96f4a8c3b23453401f7864ef337ebd2533dca12c042155cbd526341f29","impliedFormat":1},{"version":"a1604f4912418542596cf7598f199be7f276b7ad715416c59603d048894733e4","impliedFormat":1},{"version":"11b0c060c13dcf6fd09d60d9870f4921492a4d3c1b39a33f9d93f22f1dfb7c3b","impliedFormat":1},{"version":"a59bdaea7395061b93e12c89996770f196ada0f3e9197e2343763c65d0588dd8","impliedFormat":1},{"version":"9ffe848f345f1ac8c2fa2f4706c38840fe2beb455e19c5dce756e0ad09776235","impliedFormat":1},{"version":"013c10b8066b319a9dc033db24f0467737406810561d0c55d8bab3c8212788bb","impliedFormat":1},{"version":"b424df9fec80812448f7b2977e3220d5a2eb88e6c8e8b675c282f4eb1f4b8834","impliedFormat":1},{"version":"d66670300c6ad07603217e119240d129d327ee2cb4e05cdfc86f7f01e36a42ea","impliedFormat":1},{"version":"3dbba617428a6892f0e7a3c16d960738db464eb8df6724df7d95e7a4f116f110","impliedFormat":1},{"version":"3d7926e64b370e31cd4080bb432adb9e92fe096e31bee0685ee49d75cd317120","impliedFormat":1},{"version":"5862b0752f1eeef4061683d1311ebec322696c9ccd497e14b9d0c97545b317b6","impliedFormat":1},{"version":"c9829971663604cc72b30018b901c7cd97483587953e8a9535616ae04c808867","impliedFormat":1},{"version":"b0b73baeadd229c956da12d8b08f9c464b15e653d6dc5838bea41c733de7fe00","impliedFormat":1},{"version":"88ad86557665308c7957b0aeefbba159d9c99ed57e1d9a696cb4b068ea30f68d","impliedFormat":1},{"version":"8ce9716f8368167c631c4240de8cb2b5997c1c2ad9d885609079ec4c30877139","impliedFormat":1},{"version":"35595df80753dbc2b21a04ddb000835b32f0b9ad56ea259d4e6e9ee674debef4","impliedFormat":1},{"version":"efc5e846a8dcc7aeb97cdf4d6e529079e4ab45ac3cd39ab38ca96599bbcf232f","impliedFormat":1},{"version":"730450f8a576f827f2044ff9e3f0f7130e605b79087552c11ac5d92fda9a7e1d","impliedFormat":1},{"version":"9a62c9484c14c0cb33dbcdcc11e405821ee668e714799f7a125b840eeb8e89ef","impliedFormat":1},{"version":"1fb8ecfdc58a9071337c56072dd9b3c78c7d2f76730a1be8d27224ca083227a5","impliedFormat":1},{"version":"3bb99d9565690ee166e65b90817eb27c7c942b0efa84609bf2fcf0a8cc9405b8","impliedFormat":1},{"version":"c742fe995845140002d0baa8785af21a3bab8527b5584cdb0b407a226107f585","impliedFormat":1},{"version":"ffa065aa3455b257438ce8c9768c5e0f80ea3820094ee8a1120fb4437cc3e7a4","impliedFormat":1},{"version":"c325aac67ed6a692a807c9396d513ce37ed8f56c8d8ca7bf4ea76d4cd09e7c20","impliedFormat":1},{"version":"9d39a014e37dc53a1dafdb2ef5099417bd00174b815ac7e390414372b30a14bd","impliedFormat":1},{"version":"86a07b0fb1f46d39132ef555b215e7db97e906596697469df465c310646d3528","impliedFormat":1},{"version":"0e198c29a6251d421945c8d803c593eeaa2e92de8d8aee6412a2911195055162","impliedFormat":1},{"version":"f7df54c02497181cc6e63d6eada933f477a18b3a72776a0a77e63de603439061","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"a6292eb5c4a48e71b5f49c4ca89b9aa76108a93b7ac98c656a8f1dfc5a614bd7","impliedFormat":1},{"version":"7a9121b2912c6821f2783964444cac3050e17b3b75512965e0a32e66b414d592","impliedFormat":1},{"version":"9e8cb3ec89db85e85513bb89adbe63b8acccad3fffe11d6d8df01c865c77fb5a","impliedFormat":1},{"version":"f3dd8466af3baf161e0d203a1a28c7bbf9f863679c3b0e659371b1835b40f193","impliedFormat":1},{"version":"e8f141e5548179b835f699a1026f79ea581eeac1a4e57f5f22dcd0b4a772cbbc","impliedFormat":1},{"version":"2ef7e3af3848886c22ace971e69966b203eb67b2d1787d5e44c99519c09892aa","impliedFormat":1},{"version":"ddad846edb02abe8e625649c4a5dd64be1bde5d7631302d1fa4d45d14ed8b51f","impliedFormat":1},{"version":"a119ad4d2a84d13a333dbfa30e43bfccf4a0dc040c732d676adab436626f25ee","impliedFormat":1},{"version":"a7e006e3243d9746d204b7addb1f034e5deb4a0d157d8c85ecada87a86f222ff","impliedFormat":1},{"version":"fda09dd5bb69c3fdf9ae579b4b9f5a7db565223896f50aed99760821c1517bbc","impliedFormat":1},{"version":"261a9e319315e52f88b1cb347db2ce4277ea7a6eb6fccd90c289b119353d5b78","impliedFormat":1},{"version":"4871318522f755858f7edb640a4c3ea1614ff99be9d69340f5a51ce82fd809df","impliedFormat":1},{"version":"5208acbce57501f3d5dd58f4956d43734b3a007b8b86578c935785ec72408e04","impliedFormat":1},{"version":"41449e5c8ad2b4ad46497762cb72ec680457e35e03b658842f257a79da3d694c","impliedFormat":1},{"version":"2e567bb91461de2ab714bfd4261ce4f58c389cd3dba268958fdaef6cf20f7e3c","impliedFormat":1},{"version":"7c296bb31e778cea0fd700a14fbe683b665db7115f09700d8416cf24b83cdfcc","impliedFormat":1},{"version":"0b3109399eb9e01963064b099613e2f79810b0771aef56b628c4e6651f35440e","affectsGlobalScope":true,"impliedFormat":1},{"version":"00c167f32444b220a604a8308f4466cb83b1e3de66ccffdcdefb65a49c26f161","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"b2546f0fbeae6ef5e232c04100e1d8c49d36d1fff8e4755f663a3e3f06e7f2d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4584e95c63371b5d507749924d94e324c7e041f964975a92e7c8a1abc840328","impliedFormat":1},{"version":"294985ec97b28343d1d6e2730a13a839c375a2ffb5f6b37acbf5dacf35613785","impliedFormat":1},{"version":"3896fddb08ec18856f5e88f9f7776c1c58c41d6129f8ee5158513a5de3febd01","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"4e2af0853ef2aa0bd0c97121d37255db91d57a5a5d67cc937f2367a949373f3f","impliedFormat":1},{"version":"d53ba569f15be8659ba0f726dddb7a24bb875b63b8614c6b007d38cabfa3217b","impliedFormat":1},{"version":"2e900e22ef301dafb3a35df7aaab4f139bf1602c8e5dc0bb0ca8b24305af388e","impliedFormat":1},{"version":"9c479340e2f7537bbd31dd0a08aeeec28db302d9bef096eef3cc09f20eb56097","impliedFormat":1},{"version":"952d81d65c1cb9a3bb736f233db638e50fdd4e7ae75a5624e7b8be24dad92851","impliedFormat":1},{"version":"2767eb79f4b9e754efff56d654aa71715baac18a6157170f423cbd460f2445ab","impliedFormat":1},{"version":"3d6f89fb6ab035027268da5a90e31369876b5f2c37339b1212590c8727bc920a","impliedFormat":1},{"version":"6b05adc37cce53629f7740a2ce72a17d231cb1332dd20d725f49918db5f90ec4","impliedFormat":1},{"version":"cb364f282ace685f66e8fa777804a36e96892e4c92cf4e8816ae9156c3551453","impliedFormat":1},{"version":"afe1be833b5a9e15f35b72d4aedaac24c0fd903e374c4eb4be90334a0e5ad9ae","impliedFormat":1},{"version":"42b59521c78a8daeaf087752adb5de9753e7c4b701fc7c3e435ef1d737140091","impliedFormat":1},{"version":"eedad1c380f5737f1220feb0ee83212f602acae8f0553837c098878e5c73c198","impliedFormat":1},{"version":"e0fdb256e83c39f7794908de553930ce2581ba109b8de90937bf972fa75485d5","impliedFormat":1},{"version":"dafdf0b0ccb55128f83fe0acaddadfb5d223887a7e8d59a0623860a68b1f59a7","impliedFormat":1},{"version":"6f3ef4208d2d6933180ac1bc813efbfb319b05e49ef0cdbeea15126b982578c4","impliedFormat":1},{"version":"02e7a692feb22c829d837e40e82070d47b696a0c64ea192ba2c438f6a55902a4","impliedFormat":1},{"version":"685b232bf1f8763afa58c62d964f677478fac68ccd9e761e4d9a0cf6b5f9a378","impliedFormat":1},{"version":"2d205c767099a9c1719b2884eeb878470d81e3418ffe9ae8db8139e597f3e34d","impliedFormat":1},{"version":"0c0ccc47a6e4cdaf336181d46a262c591dad7098f431a4234364fccf7ced258f","impliedFormat":1},{"version":"cf68f71517959967c83d4585d1cd37376fbbe8174ddd0140274c228488149190","impliedFormat":1},{"version":"d6cadb48c29a13aeb7be79d14980f2aa4ebfe9c6118726a906cc429fba582079","impliedFormat":1},{"version":"56e6a902d2aa94175f75bdc0ad822bf787b67bb6dbf52018c389d3643d203539","impliedFormat":1},{"version":"650b748b635b9299a8d2ba23ff02f403aac044a946b7e10bfb95942367bc1489","impliedFormat":1},{"version":"c4e474945611676435f1807a5ab049becffc54a32a1a4cfc96731cdb34fdc8c1","impliedFormat":1},{"version":"a23c0e88e5d4204898c2087a5950b974c594343f78aa8e3e758bb85c3d30dfde","impliedFormat":1},{"version":"8d071caad80707dc1853c718e6372349df8fdd4790ac57550cb243545ac91806","impliedFormat":1},{"version":"6138f6a183b6ab187becc7f4f37ea7b9b072874c75699d2bd10950fe07726aec","impliedFormat":1},{"version":"ddbafa89c2b1b11251b96deef3869fa0b567766c43bd31224838ecb024297b8b","impliedFormat":1},{"version":"3cc6ec5641587a673473f9613880b63f531446bc631a6f96adbb033672cf6d2d","impliedFormat":1},{"version":"3901548cb8b4d914800927f9def278f34dfa106e65be38ee47d59c4efdd45ef9","impliedFormat":1},{"version":"21856903077f053172be7ab1027ccfb94fecbb0d22dbc34e7208c4553575ccbc","impliedFormat":1},{"version":"6cf6409ce9b90a14cd1e146d00fd21973d5d6b2da875283f3da0f27e0b786eaa","impliedFormat":1},{"version":"2a527df5c4828328fa6b35cf8b8f5bf0640933a4602c517faace7a1c3af0d446","impliedFormat":1},{"version":"2a46d72fe8eac64f8337c839bba3e558a07cdf6f2574d88dd5852d6ee8bf7d9c","impliedFormat":1},{"version":"0787ec67c199917f7c0f2a127432dc65f5d422e15992b8a7c3d7765f94075390","impliedFormat":1},{"version":"8494cb4b789a1f5e0710a4db2e111b4e20ee373251cb958b79f2d19d8adb3743","impliedFormat":1},{"version":"b8a25d32e4a2a187e2169f0936416cfcac8926f56166f3895fb5f82942f3150e","impliedFormat":1},{"version":"7552cf0a2915702d6cf9a8c6a2a242b713214728dbb81353132d2d986e74e521","impliedFormat":1},{"version":"c3789c53874f2aba5a7c21e1ac1e467f95522ba5a0c8f9c8b8c519efa7aec51b","impliedFormat":1},{"version":"dec52a42c912503c35463f974fb86cb1a772cab001c2c9ed413093845be2f677","impliedFormat":1},{"version":"d2a2a7be324ab271073676edb22f5de259d4baf5bad32bd2e5545f957f503ac4","impliedFormat":1},{"version":"63fd6e8e4f5403337124c82bf46fb17ce24923d8a9223b387ad312a4b075e7c9","impliedFormat":1},{"version":"bce453d2e25d1104b3b84c97aee92111e194691e5b254af318499745c8e041c6","impliedFormat":1},{"version":"22f897e17f18b702f8aa1c6e6412fcd33d180f8ef61297fec6c395a2b18d9908","impliedFormat":1},{"version":"0afe2ed080fb1ca424bbcecca1874d7fa24aaba54535722b00607d38dd150f8a","impliedFormat":1},{"version":"04260ae2a15ef601034f94c4b4c91b76a4c4197d48137d04859d9aa9c83f2f16","impliedFormat":1},{"version":"507fe2b965da84e42b4d17d35264be1e70694a8692c75fc07207d38deda42ad7","impliedFormat":1},{"version":"4a9bdce843a6bc8bdc71287de2808e7438fd718e17c55d175f0f2d0a8883947e","impliedFormat":1},{"version":"8a0a5c90711b4d4d55b0edf7d097faf872f65d6f7be1a5a42fdcfb62c751a135","impliedFormat":1},{"version":"756c0a51db689803dcbcb94cec65edd6f0212fcda9abf264001ae975a5c6a18b","impliedFormat":1},{"version":"2873b8fe4083b54fb60dd1d03ee8b22496e41f96a4e536e06cd59a481aba01de","impliedFormat":1},{"version":"5fc9e50135f4163989ce74b83b68a5ee44d151f04ec44078adbe913c8dad694e","impliedFormat":1},{"version":"e2949c84dcb7b6a3fb40fc8bfcd9fa6b74d1e2c830de0d5ace7159cc4fb4b5a5","impliedFormat":1},{"version":"34a80ad568a06a539e43bde102bed1fcb8bec196811caa9abc3a0cf44a95fdde","impliedFormat":1},{"version":"e634a64172adde8d23f6df23f252d35e16eaa4bc33e881700967498a955e0b25","impliedFormat":1},{"version":"b1432d91fcf4cf709d71adc1a00e04ac1948380b8552310d0509dbdc3b2cf97a","impliedFormat":1},{"version":"e3d05607f9e532c806395e8765913736c42900c5c3ab5ab52d910da6fd57121c","impliedFormat":1},{"version":"eca0a0e9725ccbf8b13ee72cdab75b489992f2ce7f4dd198767831982463c294","impliedFormat":1},{"version":"26d1f4beb9d50d83557de587f5168dacb4dc81935f4880afa7d48dd7b13d5d10","impliedFormat":1},{"version":"67d2cca28154842dd7b1d5cde8c94b9fc24afad1089eab0f1de7294d143605d5","impliedFormat":1},{"version":"28c9bcc4c2323e859523b1edd20a69b66784bb3ca58568ac1c2448d90c1e1fce","impliedFormat":1},{"version":"b2434d709c9dcf1bee9223a19b449cf9d8a0b411fa5bb2ecc8ce25fa92889c77","impliedFormat":1},{"version":"6cbfcc72a73f25c47951ebb87118ecc43d04781e02b51236d4fab69dbc63926e","impliedFormat":1},{"version":"e0fdb256e83c39f7794908de553930ce2581ba109b8de90937bf972fa75485d5","impliedFormat":1},{"version":"dafdf0b0ccb55128f83fe0acaddadfb5d223887a7e8d59a0623860a68b1f59a7","impliedFormat":1},{"version":"ec314adb4116647307480f138c5c23f98bb5ad4efba51aeb1957fc4519429d8b","impliedFormat":1},{"version":"5297455afc3c8eff9ae459f28eeb846fd86a51678afbceb7c27696eefdcf1e5b","impliedFormat":1},{"version":"532aeb172f2a735739956f48d7862681212baeca1bbde9185eae73f6dcb95faa","impliedFormat":1},{"version":"2d205c767099a9c1719b2884eeb878470d81e3418ffe9ae8db8139e597f3e34d","impliedFormat":1},{"version":"cb33e3ca7c3b2cda0d04b6aafe6f9ddad719ef615bdeae9cb88384ad798807ec","impliedFormat":1},{"version":"2c9b150c52c2c876fd5e91e1c63be66a6e2d052a1f381d362ad649c6ffd8fba5","impliedFormat":1},{"version":"d6cadb48c29a13aeb7be79d14980f2aa4ebfe9c6118726a906cc429fba582079","impliedFormat":1},{"version":"1fecc438d1dbb692dcc38564aa5ea06a108cb37661327d8c0e0c065e07efb3aa","impliedFormat":1},{"version":"650b748b635b9299a8d2ba23ff02f403aac044a946b7e10bfb95942367bc1489","impliedFormat":1},{"version":"c4e474945611676435f1807a5ab049becffc54a32a1a4cfc96731cdb34fdc8c1","impliedFormat":1},{"version":"8d071caad80707dc1853c718e6372349df8fdd4790ac57550cb243545ac91806","impliedFormat":1},{"version":"3cc6ec5641587a673473f9613880b63f531446bc631a6f96adbb033672cf6d2d","impliedFormat":1},{"version":"3901548cb8b4d914800927f9def278f34dfa106e65be38ee47d59c4efdd45ef9","impliedFormat":1},{"version":"21856903077f053172be7ab1027ccfb94fecbb0d22dbc34e7208c4553575ccbc","impliedFormat":1},{"version":"6cf6409ce9b90a14cd1e146d00fd21973d5d6b2da875283f3da0f27e0b786eaa","impliedFormat":1},{"version":"2a527df5c4828328fa6b35cf8b8f5bf0640933a4602c517faace7a1c3af0d446","impliedFormat":1},{"version":"7f2eab4f5f276996d3e13aa12f589048fe198eea8dbd78ddcee60c38a8ff5606","impliedFormat":1},{"version":"0787ec67c199917f7c0f2a127432dc65f5d422e15992b8a7c3d7765f94075390","impliedFormat":1},{"version":"095b26151a4ce7b9da003174d4a22db9f867928d3bc7718966d0e95f0c9d160f","impliedFormat":1},{"version":"b8a25d32e4a2a187e2169f0936416cfcac8926f56166f3895fb5f82942f3150e","impliedFormat":1},{"version":"7552cf0a2915702d6cf9a8c6a2a242b713214728dbb81353132d2d986e74e521","impliedFormat":1},{"version":"c3789c53874f2aba5a7c21e1ac1e467f95522ba5a0c8f9c8b8c519efa7aec51b","impliedFormat":1},{"version":"dec52a42c912503c35463f974fb86cb1a772cab001c2c9ed413093845be2f677","impliedFormat":1},{"version":"d2a2a7be324ab271073676edb22f5de259d4baf5bad32bd2e5545f957f503ac4","impliedFormat":1},{"version":"e8125d329bd068dfa97035914b87f0d561f8bbc5a5883ad883c5484dd8315eee","impliedFormat":1},{"version":"22f897e17f18b702f8aa1c6e6412fcd33d180f8ef61297fec6c395a2b18d9908","impliedFormat":1},{"version":"9b48fb7d6521c10569a09921fea776719fab153e4b24d6bf4290fe6fab9be6d3","impliedFormat":1},{"version":"9c2c8c2162f810ac21c9a9df55ef59085b82790d9b17a916c6d025ba3e3b8edf","impliedFormat":1},{"version":"507fe2b965da84e42b4d17d35264be1e70694a8692c75fc07207d38deda42ad7","impliedFormat":1},{"version":"8a0a5c90711b4d4d55b0edf7d097faf872f65d6f7be1a5a42fdcfb62c751a135","impliedFormat":1},{"version":"3ae18d6fa578fc0025f43e6b2f26bc3d1ba110e9149273bd213a5cb7fb878848","impliedFormat":1},{"version":"2873b8fe4083b54fb60dd1d03ee8b22496e41f96a4e536e06cd59a481aba01de","impliedFormat":1},{"version":"5fc9e50135f4163989ce74b83b68a5ee44d151f04ec44078adbe913c8dad694e","impliedFormat":1},{"version":"e2949c84dcb7b6a3fb40fc8bfcd9fa6b74d1e2c830de0d5ace7159cc4fb4b5a5","impliedFormat":1},{"version":"34a80ad568a06a539e43bde102bed1fcb8bec196811caa9abc3a0cf44a95fdde","impliedFormat":1},{"version":"e0f1bf295d165e3e7fdb6bbd9910888e9c5645e19cb4ae4b86303ee5ba2c951d","impliedFormat":1},{"version":"7c6d7a526120d34a336b995d5a5b2f52d934b89d364b333b850c15ef3b5bffce","impliedFormat":1},{"version":"e3d05607f9e532c806395e8765913736c42900c5c3ab5ab52d910da6fd57121c","impliedFormat":1},{"version":"0a019658c43651da76cdbc673aab961f4c6e9fab4006e3aaedb5b13e5dbab37d","impliedFormat":1},{"version":"956b961306d285dc2c1d3b5020baf1e2c57f564876f50dd42e0976bc75a020d3","impliedFormat":1},{"version":"dcb2d6a6e0b8900a46f9cc664fc1c6e3cc9a4d99249bad1605749d651e8cdd2e","impliedFormat":1},{"version":"9b33ad40fa8b00650b695638c8e08df88bbbfed00283ff5eabbf11b8813e03f8","impliedFormat":1},{"version":"fa90ab24a39247e1e9874784e7b56a93ab9f1a04daadff9d9cb99d7223d91486","impliedFormat":1},{"version":"4b91eb2d2841e34c371710ec924e8ac947911d9941bdfb6a11730e741f287005","impliedFormat":1},{"version":"ce980562ed0d193d700d6d55ff717131e4bb58b88b5448e7e05dfceae719f47c","impliedFormat":1},{"version":"4d66be39bdb7a62696866426ec835920b2cdce7124b54aa14b1f9fef4d41cd93","impliedFormat":1},{"version":"dd679f95f944384711ac7c9ed85d6b46b15f82c023c4919ba3232fd753532c90","impliedFormat":1},{"version":"8b4a688f685193540c8164ebe48624c4e82b8769d74dfb3557c4dbb9fa567898","impliedFormat":1},{"version":"b5f9c5b2f54ce4c0baf948d885a7a21aeba477dc9356beefd63c4bddac366d6c","impliedFormat":1},{"version":"48079abf5a74f7028473652a9cf64e3d260c44bf4060b05485a6e3d7f0370dc2","impliedFormat":1},{"version":"ea22fbc1dbd8fac6df7dbd5870183a9d14ccb8358c253bf844ced890a7f38dd6","impliedFormat":1},{"version":"773078223907d9936c05dddfed60cafeebd4249acbcc189001370261718f0258","impliedFormat":1},{"version":"17e344c68488e5787eebf3ec125565d51a468af5701e214367a42ce8e5eef059","impliedFormat":1},{"version":"aadf00554ac0118fcf308d7ae1cafd86a7931b41e038022dd891af248d72ef35","impliedFormat":1},{"version":"733ec8bd6c210af3ea70cfd0ae7924949de5ecb384d9d1db3744b3af2f9d0f00","impliedFormat":1},{"version":"d95f40246c4a53a739dec1818a4f3cb39aac4965ae1a4faf614f78bf3b85c347","impliedFormat":1},{"version":"3a844741079e4c4e38e5dfa7b182ef7030a8c787bc08efacebe0d7b3bb685f37","impliedFormat":1},{"version":"5f5ff006e411f34b3ecf4fe66bbf7c9978bab7fb7f09646c91b8549acc8d487f","impliedFormat":1},{"version":"70e812cb0393e7100087a2203ee9349dab49974032429d29c84222be1356e6f8","impliedFormat":1},{"version":"856aae51a27c4c285b39701ee870dae66bd5b8e007c8dc153bd66fd56fa901ea","impliedFormat":1},{"version":"739130f4f55f33efe791911603f2276169bc0554dbb789bd907870774bbf30d0","impliedFormat":1},{"version":"9ee7eea77d7631e7d95b4f5efc9972fea3a82a3947bac97e0c5c3a9ad2f8d509","impliedFormat":1},{"version":"748b8a93f92a5e3c6c45e9252efe5f70312dbaabf23c32882b0901d530698b40","impliedFormat":1},{"version":"59a6a3f236c937dcc8a6d99557b4317712c0b82f53e73f7a0070c82fc795ed6e","impliedFormat":1},{"version":"dfd624f05e679a330f8b0b8c27b97cc6d09cb8c5547c229eedcf71ee60716f50","impliedFormat":1},{"version":"33bcff4a7c9c06dd05a7635f1a7ba8ccd1a26250caf6fef41fe4bf3677437356","impliedFormat":1},{"version":"001bb2fff6cc7d1cfb99e5eb13b745764230c0a48c9832cd4b8196acbb63a402","impliedFormat":1},{"version":"7f843004c1f9cc2d32f9778227813cfeb8f47733f4485130d999f51eb97a45df","impliedFormat":1},{"version":"1489c494f095baea8f9e67d37a9fdd4025c172c1e74ee783093ee2756a665a1d","impliedFormat":1},{"version":"d4946c3a7c18a8ba1e60a1578c676f51a81d1767fcbbf60b072803ed3fa7f9f9","impliedFormat":1},{"version":"a56648d6831b9b5552b56f0eae7536666d181c86fdcc422f9143e4a5cece6a39","impliedFormat":1},{"version":"f15ff88fe1895cda331b45ceaf23dca027937395a64daa6867cbde52dea7b8c2","impliedFormat":1},{"version":"37046d990462ee09b87b6045d32d62f04d2285351a0977aec83050d994cd6992","impliedFormat":1},{"version":"67294340fe22775adae3b562bdd25adbb1b0d9926b54dfca251418e0e9df8730","impliedFormat":1},{"version":"38b2ce306ab9f13712896b0a4aa876c3e0af5b4466266938e7c5988d822a3f76","impliedFormat":1},{"version":"40e954fecc5f79d6d0890a64713d5e2f8083ae960b6b4e541d44efb9b1c4a899","impliedFormat":1},{"version":"0203a29de8ad74bc916100aad38ccaef5efd37435c8e2f6f6fbfaf2449cf9c03","impliedFormat":1},{"version":"c7aedf7a48b01d06a7a163a63bf1d544fc0bd00417885bae592319cd3f8a97e9","impliedFormat":1},{"version":"e5873895fef4cf12c0bed5b157849e6784d24280bd41ed90854180eebdaa5026","impliedFormat":1},{"version":"65cfc8c1b0ef79383524acaf8151508cb09d163850c4a50dc53574583afd4761","impliedFormat":1},{"version":"c38a0a8b43a6403d1381c32af260513432885aa4c0ae03addad9bad07fd2a2d7","impliedFormat":1},{"version":"d34cbb43422395aa227955f37c7d2b5fcaa2e6675e2a7f7e4e25ee704ab912be","impliedFormat":1},{"version":"af560f62851c384acb21284b9127d53411951056010ff0971f0e66d88e66a7b5","impliedFormat":1},{"version":"b34a0615615cbc69750d9fffe16f31563d917330413219225915cbf4fd473fb7","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"82d7a9061cc31434ca602b01abf3bd3aa3d93eeba3d92ca4d7ec5ff0e401bcc1","impliedFormat":1},{"version":"4ca12ab9d4783b7180b61b96b798b62f6da47e3ee15ff54a5a41607349e15ffe","impliedFormat":1},{"version":"143c3bff41eab3e0d761a3cab2bd580a642beb7509d21fdae5ad6ef04eaec846","impliedFormat":1},{"version":"92538fb1b4ade68cef4fc7b35b8b919e1f2d0c95a080865f991bb10254bb198e","impliedFormat":1},{"version":"963a1f038a096850feadc16b1f4877bae9b98f70fb5471e8af07813fc440d9c8","impliedFormat":1},{"version":"636458e860b725e326083020eac20d68df8c765c22870550ad78727f08d354ab","impliedFormat":1},{"version":"b2597f8e5cc644c743602ec4a9196f1a4f981383bc666806c673061d5a974d7f","impliedFormat":1},{"version":"9ea5135bc86b361d9f7d7559979d3749945a5976bf85e7f5c63b5439f122e5fa","impliedFormat":1},{"version":"11606f2a7b32a47aa2fede3d93f3a4505cf57bb4fbae758b0cbebebed1dae817","impliedFormat":1},{"version":"ec5ef2d24ec079093f3e8aeafc36110e32d586c3f2c3af395823aae744e7b69f","impliedFormat":1},{"version":"181baa25db7c55954e1d4114485cd3ed96df14a6e26fb8c9ba702a8a118d9254","impliedFormat":1},{"version":"fb553e78cd953e6b36a394021bd392446638033c9e3388a9f1babb613617a20a","impliedFormat":1},{"version":"6139c7fcac07fead5b35781d146198019e176f8d32c9b6ae89acfa22b16a9fbc","impliedFormat":1},{"version":"86b2abd6ddc37ca8fbed9606367ce4b8fa1d6b2fa3c30cd8f5fcb6d3ae996268","impliedFormat":1},{"version":"5a699f07f692f146028a8d2a24dea3df3bebec19a2f6dc7e1624274b8a0765b8","impliedFormat":1},{"version":"e891cc403ec4588c43e67f20d4f44c2de1995e1a778e7a255e0a1f8c7d263005","impliedFormat":1},{"version":"7a07b0e6d8f5356cb3473723d1853c9505301e05329df8a72ba6c42a2657ca66","impliedFormat":1},{"version":"e54bfc9e643070779ab10e9d572a776562725c6533f9b8eefe30d5ee2e87b22e","impliedFormat":1},{"version":"b60efbac98231283107121b5b3327f56a6632c2d14d7616920bc309a4f6d4bc3","impliedFormat":1},{"version":"46036e7d150725b12b0ef99ca77cfd4ee662c6a0e011f85a679827dd65d1f42c","impliedFormat":99},{"version":"33235f0c8a3cdf9917c3a2b8eca15fba28d554a48d8eeca24c417a16e317d0ac","impliedFormat":99},{"version":"783a9a7d35f9b922e0d72452e85245829e5618776b3243c4adb9bcd554443ca5","impliedFormat":99},{"version":"dd9d62565b1d4e0885e9b1f1fb55c7a304e5710303d31821a7daeeada9662aa0","impliedFormat":99},{"version":"ef14aa59689ac1bd4b725220fafe753eff9acd8cdc445c04e5b98ac3fe28bff2","impliedFormat":99},{"version":"8c184a7193d318242db5e31ef4bbd73e88c3a0e333c0f4c8523ee2d9ad76cf84","impliedFormat":99},{"version":"dc7600229385bd96566e63a48e336a38a71f223de213b9a5c04f84a9c59d1342","impliedFormat":99},{"version":"907df4219dc9e9e4310be2f3e9e118aa092d073612b9ab1247e447c6ce902260","impliedFormat":99},{"version":"4f4f2beae13a724e7f1b45b5af86a94500d799c7a59181eae1098f549698b09a","impliedFormat":99},{"version":"62478b6c261fee944784c9039e465e03600d68b60d312aba7040143dc1189d91","impliedFormat":99},{"version":"72a845236a24235f598a7da1dc89c0e38a74e1c8cdf4db833c5618e12adc4a50","impliedFormat":99},{"version":"0d2a83bc35ebb75a347d16b72836cf7d407563a7827a585590fae7e2873fcdab","impliedFormat":99},{"version":"aa95d55cbdb02fd4cfcc5b52f04453dbaa86a1fcf31e051bcfb3716f398ccefa","impliedFormat":1},{"version":"55cc31850bb3aec591a02f4e2d2999f1484a52f0afa8ed6934dbb0cfa0635128","impliedFormat":1},{"version":"ae5648da65ae89098d2238037b8b739303ff1f1ed7f711f5e1dab85c0cde73dc","impliedFormat":1},{"version":"21cc4c106db99d082b2b726f4feea224fa40b10a6cc7de03c2ac8ecaded86faf","impliedFormat":1},{"version":"51b46e83520f9dc3e1380657071ab165ada01fee49e7b41b186da91bd287503d","impliedFormat":1},{"version":"f577f333d0679c82bbf346c3983de5f6e5730e264937021a506b13ab1cee5e52","impliedFormat":1},{"version":"47ec9752d4882a64ef06ce90067439f39e1f64831efb82d6b61a27e46c27665e","impliedFormat":1},{"version":"4550d4a71bfe8407890afd7c7953e4ff732e848e6569cd94fbf33b45c4339a94","impliedFormat":1},{"version":"79954720b311aed13a8b28effcf9f043816ff2a8f1887ffbc4f5ea604c3ab0ae","impliedFormat":1},{"version":"0c0f1398bc2cb82a901d38593309ab3e9a025718c31d2d41096373661fa943e8","impliedFormat":1},{"version":"ac994da1b115d9aed1ca0100a607032122ec0b1cac07436a3215e6c7f8c2ef2f","impliedFormat":1},{"version":"85a143aa41b4a16f8836a9c1059b84fcaf9380b37fb28624cc35b49bb2c834fc","impliedFormat":1},{"version":"b759e7b85c5337b457a1d61df4b47fb2e97665b05e666e75289d808f3aa4f1bf","impliedFormat":1},{"version":"fa36037b4be0f7c122eb03efb72e79c1799981028f6bfc6b8dea307c97f3529c","impliedFormat":1},{"version":"820fc91384a1b27caba7f2411a1535e9313bf46411e290b3480b030837c6f985","impliedFormat":1},{"version":"da7e68de00deb6259533046617b8a3cd35e61a1be103d0e0487584cef7f1da2c","impliedFormat":1},{"version":"ad4172e0e6d5be3841679dec15e80a2dd09d768a6936ae0df2c05c2c8d45523b","impliedFormat":1},{"version":"706230799de1bc03f4d1e927b0f535f4c9f74061b40138f5ade2e3a470b7f3ea","impliedFormat":1},{"version":"a09dc5f7d149bcbdbc83db02b54ba7cc83bda0148454782c41521e1e9a42233e","impliedFormat":1},{"version":"6fd319d50603e1200a24078e3e92dd1b17ff058681ef451dffa890ba8e84514b","impliedFormat":1},{"version":"2ad76a8f378c771219e4a1c9fc1fc6a66a4ad7192edc3e84a5e0cd79a806dbd5","impliedFormat":1},{"version":"bb40c13d89e52602b3af4cce60ccc46644e30cc2fa5f47d5c8d0fa645c85532a","impliedFormat":1},{"version":"8c2cb956a171e41734bf8ebf4308eac8e21025a4501d3729d0d378f6d259cd02","impliedFormat":1},{"version":"a6dbb9a79212baa8a46fdf91ab2b8210665d55cd739ed1668f109d1976f213f1","impliedFormat":1},{"version":"84dc7636681d2cd0ccc6a365e9123da5a0908b280b1cc485dc5d354a2ca79746","impliedFormat":1},{"version":"eb4f2a4043e45b0452ed473b674229d4a7fda48a8092b7e34d88188df0c8af47","impliedFormat":1},{"version":"95ebe1415645192fdf015b46b4c542bb60e736624bfee59559af8a7671016202","impliedFormat":1},{"version":"d19c66a5a7376840dc3811fa0465038e3e270fe2e9d0d17d1f0c1b2c27481b92","impliedFormat":1},{"version":"0e396f97cc7eae97b942cccbe7c17f60f8af207d8c4aa6c154267eaca86ab11c","impliedFormat":1},{"version":"f4c5d65fe7e93cecddd537d46af01820cdb9f72bb94b09c6309debbb50ad5ada","impliedFormat":1},{"version":"ff526238d3fbb56031ca203f8014f5e75077f04d842f441d2c050df01e849f7a","impliedFormat":1},{"version":"dad84d1b803af8326557fd1c7710ce845a6d590e462c802d380e9d947ec14c6e","impliedFormat":1},{"version":"5806973501dd13a50b30b3f23751f28d9eb8ee103228af39d07491e1de7484fc","impliedFormat":1},{"version":"a3caaf2245d2567ffdda491cbc817df385ef549dc186a39c2a3452daa07dc034","impliedFormat":1},{"version":"a8ff496bbaa5cf7145cc4ca8df03e2dc480bbe24dcbd1f9734200eb12d5aaad7","impliedFormat":1},{"version":"e236821607e4c3dc1adbdaca5cd7fe55ff8d19051672532639e76f045889e9ee","impliedFormat":1},{"version":"f9e2c40b4a0686af8576ad4aad9dfb9e62f5daf309101bc9956a497f38f92b39","impliedFormat":1},{"version":"fff48e97d33173e8b75b9a2b74ed71e6d0d3b7e4aa81b821a90c09a95e0423e0","impliedFormat":1},{"version":"928b23be870338067bbc9381ffb3de5cc3b088abe73c8e4995444fbabd7edaf1","impliedFormat":1},{"version":"a26d74bc8768e134734fa049d5a89fb674a560292f4bf1b39392416dc04cf49e","impliedFormat":1},{"version":"ea7f3d87bb25b8cf26c1b440de31b628c53b5e72e8f1ab1726356bf58acf5946","impliedFormat":1},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":1},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":1},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":1},{"version":"dfcf16e716338e9fe8cf790ac7756f61c85b83b699861df970661e97bf482692","impliedFormat":1},{"version":"3b3fe018cdd6ab5fc1c1b9de009f365e0d6653add071f5fcd383bc9a298cdcee","impliedFormat":1},{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":1},{"version":"f4a1eba860f7493d19df42373ddde4f3c6f31aa574b608e55e5b2bd459bba587","impliedFormat":1},{"version":"6b863463764ae572b9ada405bf77aac37b5e5089a3ab420d0862e4471051393b","impliedFormat":1},{"version":"ec69ebd1c4850514ebb6724911ad56e71caa0d076891ed6b67cb10d3ebbf2586","impliedFormat":1},{"version":"89783bd45ab35df55203b522f8271500189c3526976af533a599a86caaf31362","impliedFormat":1},{"version":"26e6c521a290630ea31f0205a46a87cab35faac96e2b30606f37bae7bcda4f9d","impliedFormat":1},{"version":"a51e18dc7e00eb6961c55b2a4ba4b70ab8c5cd601dc73337a0f5fd8292a5e944","impliedFormat":1},{"version":"3ff6e9ce7c3ad38dfe5165e90c826a27b289c9d0e7d9e934f654566867700fb7","impliedFormat":1},{"version":"f976134f9fc2369f6d4694eea7db6c2fb3c757ae5dbb047aeb06f02a21886443","impliedFormat":1},{"version":"d7e7199291e479bebe7f2bcefeba3498c80ce70c3b3440174fa211cfdab7bedb","impliedFormat":1},{"version":"233267a4a036c64aee95f66a0d31e3e0ef048cccc57dd66f9cf87582b38691e4","impliedFormat":1},{"version":"739fc10cb1f1c08f7578684ad660334e9617a81690d41d3dad234b3e4d5835b1","impliedFormat":1},{"version":"1af96cab9fbac290cbcaa07154ced5fb7a2b8bec02bcc6a34e77456d40fffc71","impliedFormat":1},{"version":"bed80e26fefb16b3eb7062e7878f38e1f0c0280fb61a6a608bdfb6dd64dbfc9b","impliedFormat":1},{"version":"39937ecb2516623611c287309f2b0e123fe5cb06d97487bb6fb6ec911e3ac652","impliedFormat":1},{"version":"9c171e2b0fa97a74c2437e746ea0127b49e6908e89ae6dc06ff238c3bc5c00fe","impliedFormat":1},{"version":"717cf65141e976becda69384a57148f4f6339ec04ff431ebb2ad19c558be4346","impliedFormat":1},{"version":"7f24ea5b058a109f8c9cf8f7711fb20cd2ead9817fa88415f94e47a108d9b149","impliedFormat":1},{"version":"3473f825e4648c65d597a0277245c250531c8fb946bdda179411e61a9eda50de","impliedFormat":1},{"version":"245125adc48737019481042b0e3dab6122528c1acc8933c5afd59e57dd2265cb","impliedFormat":1},{"version":"33f78f7ea02b6489407623b23b616dc8557fa8774c2e2528b33352c812fa1e68","impliedFormat":1},{"version":"e974b3d1188d8ecc1f08d82e9f03710005377d3a13d1af34bad5102aeb99a918","affectsGlobalScope":true,"impliedFormat":1},{"version":"1afb7e5024f4c7ced94c9b7efbd06967da114542851dc57085b2bcda83d1406e","impliedFormat":1},{"version":"b37cc76c2787c14293866b0a7a616c67e7ec8ac740a3d96c906259e83deaa145","impliedFormat":1},{"version":"9398147c02a5a6e1cfa1056ee3ee617c15db397244e372907542229e222fe92f","impliedFormat":1},{"version":"71b2d126e939c1ce534264d8bdaccc9f4444eca1afa3649732c383c69386e522","impliedFormat":1},{"version":"4fccae5d922d4186b7a8c9dbd236f57593b600a056327d79b000d6acc592f4cf","impliedFormat":1},{"version":"081df8dd1109d4b1be003fc3e35beae79880eb7012992f432beb41ac97341ec2","impliedFormat":1},{"version":"051ace40248ab48179838b720dc626daa82a0e03d8fd3076afffc537d7c43ad4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dacceada4f4fcb16e871353e6fb9b9f7bc2f17aaad5d0a4ea46bfc32ebfe355a","signature":"b46e2955978a9d06affdf10311b70d406c2965777328c2bbce307efac70075d9","impliedFormat":1},{"version":"3baf101b409b4f14db477326793c8894f959b7f7c488f8ac85f0138601e1e539","signature":"c51c4d98c4b9a70a602a41382d317d2600d88c0b1d3d2dc17f87402e69029cc5","impliedFormat":1},{"version":"eecd3f81f06cdc3a01b8b1a23adacf50d0f895709d4805c981503844d9c9e011","signature":"c85e9d6e982938e77e3e6b5cfe4969c295b638ffb5a0b9a6a88a82bd8cfaaf6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"400db42c3a46984118bff14260d60cec580057dc1ab4c2d7310beb643e4f5935","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a37b8d00d03f0381d2db2fe31b0571dc9d7cc0f4b87ca103cc3cd2277690ba0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"afbe82d2b4857d674686255c44c8590dfe0b40927713876f875fdf4960473441","impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"87f287f296f3ff07dbd14ea7853c2400d995dccd7bd83206196d6c0974774e96","impliedFormat":1},{"version":"78ef0198c323d0f7b16f993ada3459f0e7e20567e7f56fe0c5ee78f31cb0840c","impliedFormat":1},{"version":"01dea450d742aa55ce9b8ab8877bbda8eb73bf88609e440cc34f6f59f35080db","impliedFormat":1},{"version":"5ec614ed82e045de15417a47e2568be5310d43d4764ee43d295ea38caafbfd17","impliedFormat":1},{"version":"b788ef070e70003842cbd03c3e04f87d46b67a47b71e9e7d8713fd8c58c5f5ec","impliedFormat":1},{"version":"583d365dc19f813f1e2767771e844c7c4ea9ab1a01e85e0119f2e083488379c2","impliedFormat":1},{"version":"b82fc3869c625b828dd3feac4b5ebf335ed007d586dc16176602db73bc4e7c65","impliedFormat":1},{"version":"05e30605274c26f405c411eebed776fa2102418c05beec885e5c9bd0fa716f32","impliedFormat":1},{"version":"58c7f7820dc027a539b0437be7e1f8bdf663f91fbc9e861d80bb9368a38d4a94","impliedFormat":1},{"version":"d67d6b779d0dece9450d7a4170d3ee58ea7fcae0af2ab5e1d0ad711474b4f7f5","impliedFormat":1},{"version":"1066c11177d085898185548e1b38ed15fcea50061508f7c313ab8bec35d46b95","impliedFormat":1},{"version":"bbc49fd9dc6ee162ba3d270c834398e0c1d44e657ac4edfa55ac837902b7e0da","impliedFormat":1},{"version":"6993f360de4984b6743764fad3b88246d5dc6cfa45567783fc23833ad4e50c13","impliedFormat":1},{"version":"f11eb1fb4e569b293a7cae9e7cdae57e13efc12b0e4510e927868c93ec055e82","impliedFormat":1},{"version":"715682cddbefe50e27e5e7896acf4af0ffc48f9e18f64b0a0c2f8041e3ea869b","impliedFormat":1},{"version":"6d2f5a67bfe2034aa77b38f10977a57e762fd64e53c14372bcc5f1d3175ca322","impliedFormat":1},{"version":"4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","impliedFormat":1},{"version":"33859aa36b264dd91bef77c279a5a0d259c6b63684d0c6ad538e515c69a489ec","impliedFormat":1},{"version":"33fa69f400b34c83e541dd5f4474f1c6fb2788614a1790c6c7b346b5c7eaa7dd","impliedFormat":1},{"version":"be213d7cbc3e5982b22df412cf223c2ac9d841c75014eae4c263761cd9d5e4c0","impliedFormat":1},{"version":"66451f9540fdf68a5fd93898257ccd7428cf7e49029f2e71b8ce70c8d927b87a","impliedFormat":1},{"version":"8a051690018330af516fd9ea42b460d603f0839f44d3946ebb4b551fe3bc7703","impliedFormat":1},{"version":"301fb04ef91ae1340bec1ebc3acdd223861c887a4a1127303d8eef7638b2d893","impliedFormat":1},{"version":"06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","impliedFormat":1},{"version":"fc26991e51514bfc82e0f20c25132268b1d41e8928552dbaed7cc6f3d08fc3ac","impliedFormat":1},{"version":"5d82bb58dec5014c02aaeb3da465d34f4b7d5c724afea07559e3dfca6d8da5bc","impliedFormat":1},{"version":"44448f58f4d731dc28a02b5987ab6f20b9f77ad407dcf57b68c853fe52195cd7","impliedFormat":1},{"version":"b2818e8d05d6e6ad0f1899abf90a70309240a15153ea4b8d5e0c151e117b7338","impliedFormat":1},{"version":"1c708c15bb96473ce8ec2a946bd024ecded341169a0b84846931f979172244ba","impliedFormat":1},{"version":"ed0f5e1f45dc7c3f40356e0a855e8594aa57c125a5d8dfeef118e0a3024f98ff","impliedFormat":1},{"version":"dc187f457333356ddc1ab8ec7833cd836f85e0bbcade61290dc55116244867cb","impliedFormat":1},{"version":"25525e173de74143042e824eaa786fa18c6b19e9dafb64da71a5faacc5bd2a5c","impliedFormat":1},{"version":"7a3d649f2de01db4b316cf4a0ce5d96832ee83641f1dc84d3e9981accf29c3a1","impliedFormat":1},{"version":"26e4260ee185d4af23484d8c11ef422807fb8f51d33aa68d83fab72eb568f228","impliedFormat":1},{"version":"c4d52d78e3fb4f66735d81663e351cf56037270ed7d00a9b787e35c1fc7183ce","impliedFormat":1},{"version":"864a5505d0e9db2e1837dce8d8aae8b7eeaa5450754d8a1967bf2843124cc262","impliedFormat":1},{"version":"2d045f00292ac7a14ead30d1f83269f1f0ad3e75d1f8e5a245ab87159523cf98","impliedFormat":1},{"version":"54bcb32ab0c7c72b61becd622499a0ae1c309af381801a30878667e21cba85bb","impliedFormat":1},{"version":"20666518864143f162a9a43249db66ca1d142e445e2d363d5650a524a399b992","impliedFormat":1},{"version":"28439c9ebd31185ae3353dd8524115eaf595375cd94ca157eefcf1280920436a","impliedFormat":1},{"version":"84344d56f84577d4ac1d0d59749bb2fde14c0fb460d0bfb04e57c023748c48a6","impliedFormat":1},{"version":"89bcaf21b0531640604ca9e0796f54a6e1b4e2d43c07422ffa1e3d2e1bb0e456","impliedFormat":1},{"version":"66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","impliedFormat":1},{"version":"35a0eac48984d20f6da39947cf81cd71e0818feefc03dcb28b4ac7b87a636cfd","impliedFormat":1},{"version":"f6c226d8222108b3485eb0745e8b0ee48b0b901952660db20e983741e8852654","impliedFormat":1},{"version":"93c3b758c4dc64ea499c9416b1ed0e69725133644b299b86c5435e375d823c75","impliedFormat":1},{"version":"4e85f443714cff4858fdaffed31052492fdd03ff7883b22ed938fc0e34b48093","impliedFormat":1},{"version":"0146912d3cad82e53f779a0b7663f181824bba60e32715adb0e9bd02c560b8c6","impliedFormat":1},{"version":"70754650d1eba1fc96a4ed9bbbc8458b341b41063fe79f8fa828db7059696712","impliedFormat":1},{"version":"220783c7ca903c6ce296b210fae5d7e5c5cc1942c5a469b23d537f0fbd37eb18","impliedFormat":1},{"version":"0974c67cf3e2d539d0046c84a5e816e235b81c8516b242ece2ed1bdbb5dbd3d6","impliedFormat":1},{"version":"b4186237e7787a397b6c5ae64e155e70ac2a43fdd13ff24dfb6c1e3d2f930570","impliedFormat":1},{"version":"2647784fffa95a08af418c179b7b75cf1d20c3d32ed71418f0a13259bf505c54","impliedFormat":1},{"version":"0480102d1a385b96c05316b10de45c3958512bb9e834dbecbbde9cc9c0b22db3","impliedFormat":1},{"version":"eea44cfed69c9b38cc6366bd149a5cfa186776ca2a9fb87a3746e33b7e4f5e74","impliedFormat":1},{"version":"7f375e5ef1deb2c2357cba319b51a8872063d093cab750675ac2eb1cef77bee9","impliedFormat":1},{"version":"b7f06aec971823244f909996a30ef2bbeae69a31c40b0b208d0dfd86a8c16d4f","impliedFormat":1},{"version":"0421510c9570dfae34b3911e1691f606811818df00354df7abd028cee454979f","impliedFormat":1},{"version":"1517236728263863a79500653cc15ceb286f048907b3dba3141a482ca6946bd7","impliedFormat":1},{"version":"7c7b418e467a88a714b4c6dac321923b933f82875f063f48abf952021a2c2df1","impliedFormat":1},{"version":"33120063a7e106818ce109be9238569edca74d4e8530f853bd30d298d1375fd8","impliedFormat":1},{"version":"8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"0504070e7eaba788f5d0d5926782ed177f1db01cee28363c488fae94950c0bbc","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"6847334317c1bc1e6fc4b679b0095bbd2b6ee3b85fe3f26fc26bac462f68ef5e","impliedFormat":1},{"version":"2224f3072e3cc07906eeed5c71746779511fba2dd224addc5489bcdb489bdee5","impliedFormat":1},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"7f15c8d21ca2c062f4760ff3408e1e0ec235bad2ca4e2842d1da7fc76bb0b12f","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","impliedFormat":1},{"version":"fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"fbf802b3a028f5eb22ad406ee5fc7c368f0acfd3a2a6d0f805120766f5717ec8","impliedFormat":1},{"version":"63786b6f821dee19eb898afb385bd58f1846e6cba593a35edcf9631ace09ba25","impliedFormat":1},{"version":"ff954afaefd9bd5fad03678cae63fd23e0aaaf4d311b27bfb35e1d6d83833997","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"818e7c86776c67f49dbd781d445e13297b59aa7262e54b065b1332d7dcc6f59a","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"7e8d3f08435ad2cefe67f58182618bfc9a0a29db08cf2544b94cbcae754a9bd9","impliedFormat":1},{"version":"8cf9b9045a614f883b623c2f1a631ec6a93321747e933330b2eec0ee47164a34","impliedFormat":1},{"version":"cee62e64fc4bdfb3798ab8e21486fadd2027ce4128349989acc63905366f91c5","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"c68eb17ea7b2ff7f8bcfe1a9e82b8210c3112820d9e74b56b0fbecaab5ce8866","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"ee736931bcb117efdd2118795ccfa4b2d0beb8fec426f91ae448e51b03510707","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"9068fb04d9df0cb5de85ced5c4d70a935096c4cb289ab76b038e0a2496c92503","impliedFormat":1},{"version":"1f2bcc8836f72a2ff7a6804dc5379e9b73bf94a51d8e60c43cf5b874b5f4f6ff","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"100985057cdd198e32b471b9c92a39080e5e50720b2cb290d04ddf40fbe71c84","impliedFormat":99},{"version":"333d9b9067c0213cd7b275d1d78bab0577ba31ef7a63306ab65a74e83a546a65","impliedFormat":99},{"version":"85566a0b81339b43e063f5cd8cc49a9b9bc177bc5ad3ffd5e4874700040ec11e","impliedFormat":99},{"version":"c2688779f6804c3bc6dfa33d05a810464c684a74f92aee6b0f0d4bcd7dbeed6d","impliedFormat":99},{"version":"16331f489efb6af7d06037074020644d9175f70a7a6466d926f63e74af5a77d8","impliedFormat":99},{"version":"2b2b8b64b39f152439ecb9f04b3d6c1d88d35c75bf14a4eb98f1cc791f092366","impliedFormat":99},{"version":"395548b309c8fe9ffadd8b1055898fffa29bd28ea1f8079f33e48a65601589e2","impliedFormat":99},{"version":"e38871affeac7cf4dd4cc3a55714ff38d55f137c30788d30e454a6e3058f36bc","impliedFormat":99},{"version":"783a0f8fb88d659272c1ac541719e32235881815705b44fb63b6af579885ea75","impliedFormat":99},{"version":"6a60957e322c4c060ddf3073130cbcbcbc5e639e21cd2279df43184bfa8cb9a3","impliedFormat":99},{"version":"5b353617eeb8a37c7a9497ebaeacc027bd7487eec10ffbebca41dcdc2634af70","impliedFormat":99},{"version":"cedbd20d98f3fd7c1fa00742292ab5b13c3fec266ae41b90c47b716ef06cd983","impliedFormat":99},{"version":"9713bcf79cd728919262a2a543484a5f9bd24a15cfec1cee096d9d17a9f5524d","impliedFormat":99},{"version":"35fb129972553f809a7045f3cb952c2598299548018a23238304c020cb16945f","impliedFormat":99},{"version":"855b0379a6b6e96eda055cff16da442b4a7a4548101848b9ae48bce22879569e","impliedFormat":99},{"version":"ea2ac8d236dddbce748dbaffcaa1bfcadae6fbcae1fd0a67e17d5e35d5e38dfc","impliedFormat":99},{"version":"a7750935d6a1cbd259861b5acf1c912f9d3b10efd8602f61fc858f04f261595d","impliedFormat":99},{"version":"e0aa3276d014f3c798dd3101af8c8545b56d79665a7a982b4cf6fe28551a3b56","impliedFormat":99},{"version":"ea744987345eb5ae036495b0185e95eeb7d2d999b0ef80265f79434e83863e9e","impliedFormat":99},{"version":"c3bc54ba21655aaf1db5bb97c42f56bbfe5a3a3c40e3884ef3ba2cdaa9f34c1f","impliedFormat":99},{"version":"705917c38d2e92347b5e57c1c6007da46f1005874ef2257cc8dfff59cba4710f","impliedFormat":99},{"version":"40925b4938b527a6267b1fe56a2e97cc52ea9d73eec90ea8e05df773a182101e","impliedFormat":99},{"version":"2930156137f4885c3ad168804c557edfc9bb88ae0e1df487f4adcdc771286ad7","impliedFormat":99},{"version":"b63e990c632eeee9375c2c43bbd5cdcb23418b79edcb57afa53edf4dd597b33c","impliedFormat":99},{"version":"721dcf072e75b71b5ab7a0bbbd6578f908c36a0bfaefa1454d3e43938bde67a5","impliedFormat":99},{"version":"5704f5ee2642dd0b810bb07ce6e4e51319ed4d6db78747ff54675e72c3fede06","impliedFormat":99},{"version":"da2be38a98356fdd540580a68338df2d2450ec071b1cb5bdbfe8e52075ddde9e","impliedFormat":99},{"version":"3af0bb87094d80e20b0d451626eef1e2da701891c41998ac0a6a6c91cff86f74","impliedFormat":99},{"version":"30a211e9de0dd587f8c690f9ed9378c15c79bcbe762dd85a61c548e5058c3fd6","impliedFormat":99},{"version":"a7cda498cd929d2f958ce49abbaef1abf999ec40884a04cd28ff34317d844e54","impliedFormat":99},{"version":"e48b510f40f29a89d9dbe19a9fca96d7f02b721aec6754fd5c242f9893d06508","impliedFormat":99},{"version":"30d88e2e7c4ca1cdfeb37cf05a2d7a351c68b14ac472e6238401ecb7b75686ea","impliedFormat":99},{"version":"03b34718c02b6225c2f7d7c374cb701ab04461a5cfa66d150531c9f31e39da49","impliedFormat":99},{"version":"7dfe7da785eafad3e3d0cc66545e97f1acf934ebe5b2ec8f4a34341a9ca76ed4","impliedFormat":99},{"version":"8c7829855345152b7b3c196e82147153115d5b568ff97be0e40d161e8d9d2f51","impliedFormat":99},{"version":"f30a36ff98b099ea8c635146dfdd1d810bc14ec303acb653ca938445047b0e41","impliedFormat":99},{"version":"07fa63aca536ca8d8d8c6a56eabcf77f746609921fe23d780a69e2c0a2a65701","impliedFormat":99},{"version":"c8fe48c4437d4ead0a841128d179f8bb99e0e38f9ccb80ca6be14833e30bc129","impliedFormat":99},{"version":"5eac3facc9f59e960c00f41502b34a908776cfba6d7e1a5a4ead5030682b7434","impliedFormat":99},{"version":"d44f8de16b9c6ef4ebd88d4162bc24942bee9975f88162a8962bb572e62dc5df","impliedFormat":99},{"version":"0251c18e8c863bf5ef510043644299aceab6debf3d87aab8c8cfded5aef7d6af","impliedFormat":99},{"version":"292f7dc6b4be74f148f5e5b57b9e8a7f515d7d4f6183d3f9162e127e50959ba9","impliedFormat":99},{"version":"c1608d867d6ddda5c0f4736cf4959e2b2c6bcda660c4c72f7feb36b3998df2bb","impliedFormat":99},{"version":"02d77b0d27ecb78e28d3a376c6cdce05fabcf58f2fd01c102f031d8e375191da","impliedFormat":99},{"version":"daef84b3b89e60054fab1abaafe38eda673f88abdedc3920015d61f1cc5358b8","impliedFormat":99},{"version":"f3318054dc392b6661785263095ed8f1555f0d8f3ce534c8c2de8895b4ec7bd3","impliedFormat":99},{"version":"6c3aa7e0c4eb4d8d7fc24df037980369e70a28f9237cae77511b4cfc6a1b74d0","impliedFormat":99},{"version":"ecc7e0840690cc4b9a2587a4f550b292c35d36150c6c108803bbdfc3bead5b91","impliedFormat":99},{"version":"e11a23b343084cdec24d718fc64369dc8b6dece71314b41d4b5938f2a568834d","impliedFormat":99},{"version":"ce678766176812e8eda3f4925304d4159d806f50fa8a93a72da56e95dae8bbc8","impliedFormat":99},{"version":"bb21d35a36dc1db80a2cf29383bb7304919708cde205bbe246ec47176336e255","impliedFormat":99},{"version":"df657f732e32af7c7550da93e66dfdfa142fc1282b4a392ec78fc9aefbd6fdd0","impliedFormat":99},{"version":"b20ef0766a8a578e5c542aafaa8c53b7e2b0e32a5522f9cf18bc021a81d54dd7","impliedFormat":99},{"version":"9ea0cd8a367cab9b1c632740d1bd998f8c4dbbbda4505f47bebd38a46afbaaa6","impliedFormat":99},{"version":"97980bb49a7e4b15df6f988f914070c831a39426cd9a29a6f7a9af82f397b28c","impliedFormat":99},{"version":"3ddf05b5259b9a0e2b1da1559585655202670e1f78396b4d4efccea0195a41b4","impliedFormat":99},{"version":"1e99c59aadb1af6d090976ade8280ea37208e8f064f79e9a18231fe5b7232890","impliedFormat":99},{"version":"c7ee77eec320d6312899cd8c16484c82b98385e175c57ff00d49cc5a2c291e0d","impliedFormat":99},{"version":"b38d9a4927465a8a5d1ae84e00d323bedfc7f5e77f4bc360078c6f283b964acb","impliedFormat":99},{"version":"27d6b338ff280dc86ff167217c29d7e71b52bd25a3c3b8eb1f5a56c887571d00","impliedFormat":99},{"version":"da60046c4cc6b018869ea8fc71a7b7bf5591d9f5d90ee52c4a614ecc69ff3433","impliedFormat":99},{"version":"8bee1fe0b3dd1b324f08189d81e55f9952007ce2304df07a15568b821b7e524f","impliedFormat":99},{"version":"a3dd2d53781729214a67f4b91d9a65d5310c1bbdcd0595789a5152a493cded91","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e20fc6cca2cf901917bc09c88bf9ee380383717ed990900aa99962ff9e3f786","impliedFormat":99},{"version":"7410b87e621ce92f484a13dfbe72069a6470fb72cc418df865f31b601193595c","impliedFormat":99},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"c96ac2cf9b266d5606f79d99191e3e2c2bede081f60aab6377d16b1e73841429","impliedFormat":99},{"version":"30a4dd54f1f39dee17bafcc0fb9a877932d607d8f24d3f1ac7f8998cf07f2649","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"ccb5f2cdd46a60b0aa3b43aeeac9f0d499640f589806f2486f35ff8a9565784b","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"5e8c09adb8be1b932100a9374cb0f8def9dda6a16a973e91c2322983ed669dd9","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"cc89688d19046618e7f88ea7c25ff04560d939902bf49e60bd38fb4662e38b5b","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"fc67adfb454cf82752ab00e969d14a95fa762f55c34e25327dc77174b0d5f742","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"bc79bd6403aa643e99c8e6733d5a8c7bf214e4528e79c882e77e9e441049e45e","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"8fa1dc3b4a2f43c688f6f4cf1721e1d26d641ef322c14adac867ecfa41aa2109","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"2d9ad35b54c1413e9ee0e74945cd5c8a99516c1fbbd0a12f673c75073436a931","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"23e028cc298226d1f8e87d57950673b3a19b91f23538ee9287d52e77540af8cf","impliedFormat":99},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1},{"version":"b95f2a78de34a873c6dd76dc538b7a5fec77da6a0e0e7efc7aa58f58ddfce270","impliedFormat":1},{"version":"1231f32d791b0fcc13e0c836543b34e83dea6e0b494ee35194a66a50dd25427e","impliedFormat":1},{"version":"66880e558be5ee57d23c12ffd0a90bf07840e088f8fa9b608fadeaf45af78969","impliedFormat":1},{"version":"058186f212307a621cd51160e2124c26208649600b4f0a27835f1d1caae81e65","impliedFormat":1},{"version":"c2bfeeadb18ba18386d7549a69c2049e57f31758b71343543a5c27919197b0fa","impliedFormat":1},{"version":"63b0be497f88d815c410b76985b798132d6c470199f2f31e1390a48480619758","impliedFormat":1},{"version":"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","impliedFormat":1},{"version":"95a31f8eea43d175dfeda85accc45bddce5678acae4e22e2f683b48e0e0188de","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26","impliedFormat":1},{"version":"a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"c21e3729094ed9ecdcb97724ce5b20625bb9ac3b9146d681cafa97d667c12bb5","impliedFormat":1},{"version":"5adf3c3c7204b3614dbc585681a33ef598c68df387298859f9a2521cfb449437","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"bbf7c864f1ffbacf54b524d028b6a77da9f0be0b8fff5c088e3185ee50496762","impliedFormat":1},{"version":"9df147746b0cbd11d022b564e6fdd43ac79b643dc579d2123317ee01cc4f0d70","impliedFormat":1},{"version":"fa244c20411dd53d853ce4b85e7146860be364946da477dad721e66301097460","impliedFormat":1},{"version":"fab2754e047c7818a8eb650cc2194aef4388193acdc4606eb601cb60923f7798","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","impliedFormat":1},{"version":"041597c12abeaa2ef07766775955fc87cfc65c43e0fe86c836071bea787e967c","impliedFormat":1},{"version":"0838507efff4f479c6f603ec812810ddfe14ab32abf8f4a8def140be970fe439","impliedFormat":1},{"version":"f67c92f5cb2bf5a9929ee73216f08749db4f22b04a18e5205ed6e75ca48e9feb","impliedFormat":1},{"version":"7212c2d58855b8df35275180e97903a4b6093d4fbaefea863d8d028da63938c6","impliedFormat":1},{"version":"de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","impliedFormat":1},{"version":"1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","impliedFormat":1},{"version":"854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","impliedFormat":1},{"version":"dd9faff42b456b5f03b85d8fbd64838eb92f6f7b03b36322cbc59c005b7033d3","impliedFormat":1},{"version":"6ff702721d87c0ba8e7f8950e7b0a3b009dfd912fab3997e0b63fab8d83919c3","impliedFormat":1},{"version":"9dce9fc12e9a79d1135699d525aa6b44b71a45e32e3fa0cf331060b980b16317","impliedFormat":1},{"version":"586b2fd8a7d582329658aaceec22f8a5399e05013deb49bcfde28f95f093c8ee","impliedFormat":1},{"version":"dedc0ab5f7babe4aef870618cd2d4bc43dc67d1584ee43b68fc6e05554ef8f34","impliedFormat":1},{"version":"ef1f3eadd7bed282de45bafd7c2c00105cf1db93e22f6cd763bec8a9c2cf6df1","impliedFormat":1},{"version":"3d8885d13f76ff35b7860039e83c936ff37553849707c2fd1d580d193a52be5b","impliedFormat":1},{"version":"b75188f1d06bba9e266aad819df75b51ed1fcc19ac0750dc6a55a8eb1b7c2134","impliedFormat":1},{"version":"d8272401aa994ed8a60f71067acbcc9a73d847be6badf1b9397a8ce965af6318","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1087c6c9066684d3e72a8fcc5445f34e85572792bc16f5aab01208bcbbbe64be","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"eb27bc1c8d46234252298d3d7252c8459667daa0953b974f9d2c581c46703b2a","impliedFormat":1},{"version":"1b096ca6b209d1fed9ce68edd110ff6de8bec4fab2689d2adc481ffc1b1dc20b","impliedFormat":1},{"version":"9c02f12da30d30dd5f5ccaeedfb9b925ed4e5114059e9be6ed2ecf87a492fd16","impliedFormat":1},{"version":"8c8f8e816a38f1a0cc2dd3813d3bede2d773df36e72f4cb55d9daabd22016925","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"f86d0150d5abc55bf5bb479beacc34a7e9d4ab4e3014315fb74626baf1558857","impliedFormat":1},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"d77523951427fca92c7fdcaafb776bfb5d76cb0dfd8a7b18f38710332386ad6d","impliedFormat":1},{"version":"d9dcda644a9ecb57df163cbeaaca093c696335a53f47b5dbbf7cf0671b76e2eb","impliedFormat":1},{"version":"2d4d871246a21c785aec2a5b745ad79cdc877de3866f586887c8c74ddec97b8d","impliedFormat":1},{"version":"0cfa403fc15d0fda3214c3d8b75a42abcfa60c07e739de908e57d1f76220b7f9","impliedFormat":1},{"version":"d99cef4ae065cde21bd536998282a9882d8fb36a902725f03d71c3a9e3a24aa4","impliedFormat":1},{"version":"f3d4606a83fbdeedeeecd982ac35945bc02d50499cc65c72d71a143afa7e7334","impliedFormat":1},{"version":"bc919e8ad895c43568f8125523ab0f91810d5208afcc5bff2ba4713dffda0d97","impliedFormat":1},{"version":"6771b9c4bb2253e2a51c5ef7155419558289b885857e275ff61f90a979049cc3","impliedFormat":1},{"version":"6a1fb700b666a19112cddb4ab24e671c83ce40f6bfe64d1e7cb59c88263d0ec2","impliedFormat":1},{"version":"cc060af11b9bc0ed723d1200951bdc3255ff189475183a1f9ed06fd9c57206a6","impliedFormat":1},{"version":"a0aa9907949f7688394904c4d16b93c8d3154a9eda70ab096e0cfb37ef48e9b1","impliedFormat":1},{"version":"816dd83b87f2f1986f4c9072d38262ae96ee6589fab8a9ebc3b8d8f30263b8d3","impliedFormat":1},{"version":"5512a0ca56d3a21dd2843b62c939ff885d8853e55524bada67d1e393649e4bd6","impliedFormat":1},{"version":"3cd6ea92f13a0bf3c120ac271bc0ba57bf4cc3078e010150887c657f78b41959","impliedFormat":1},{"version":"4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","impliedFormat":1},{"version":"d9a256f69f3956993e65efd88336644be8f8dd36d149e859c14704ef6c6c0eec","impliedFormat":1},{"version":"d18f13c33148de7f0b1241734cb10dfe4c1e9505acad51ee48c3f4c1bd09e0dd","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","impliedFormat":1}],"root":[[526,528]],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationDir":"./dist","declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"stripInternal":true,"target":9,"useDefineForClassFields":false,"useUnknownInCatchVariables":false},"referencedMap":[[1171,1],[535,1],[258,2],[192,1],[191,1],[238,1],[246,1],[230,3],[234,4],[247,5],[248,6],[232,7],[231,8],[235,9],[249,10],[243,1],[250,10],[244,11],[229,12],[260,13],[241,14],[245,15],[251,16],[205,17],[252,18],[240,9],[253,9],[233,19],[194,20],[236,21],[237,15],[217,15],[218,22],[219,23],[193,24],[220,25],[196,26],[195,27],[214,28],[221,17],[222,15],[223,5],[198,29],[199,5],[200,30],[201,5],[202,30],[203,31],[224,32],[204,33],[228,34],[206,35],[207,31],[208,36],[209,20],[197,37],[225,38],[210,39],[242,40],[211,33],[226,32],[227,5],[212,5],[213,5],[215,41],[216,35],[254,9],[255,1],[256,42],[80,1],[239,43],[259,1],[261,44],[528,45],[526,46],[527,47],[523,48],[525,49],[521,50],[522,51],[519,52],[520,53],[524,54],[517,55],[518,56],[893,1],[692,57],[690,1],[270,58],[271,59],[458,60],[453,61],[455,62],[457,63],[460,64],[268,65],[451,66],[461,67],[452,68],[454,69],[459,70],[267,71],[456,72],[462,73],[463,74],[465,75],[466,76],[467,74],[468,76],[469,75],[470,75],[471,74],[472,74],[473,77],[474,74],[475,78],[464,79],[476,80],[477,81],[478,82],[479,83],[487,84],[514,85],[480,77],[483,86],[481,87],[482,82],[484,1],[510,84],[511,76],[513,88],[512,89],[489,84],[488,84],[496,90],[503,89],[509,91],[504,84],[505,84],[506,84],[508,92],[486,1],[485,84],[440,93],[441,93],[439,94],[442,1],[443,44],[444,44],[445,44],[450,95],[446,1],[449,96],[448,97],[447,96],[397,98],[398,44],[399,99],[328,100],[396,101],[394,44],[395,102],[376,103],[393,104],[350,44],[373,1],[370,44],[343,44],[342,44],[363,44],[371,105],[357,44],[344,106],[338,107],[348,106],[347,106],[332,44],[333,44],[334,44],[341,44],[366,44],[346,106],[356,44],[345,44],[331,44],[362,108],[375,109],[329,44],[368,1],[369,44],[330,106],[360,1],[349,106],[353,1],[364,1],[339,110],[340,106],[336,107],[352,107],[358,44],[351,111],[374,44],[355,106],[354,44],[359,107],[335,44],[361,44],[337,112],[367,1],[365,106],[372,1],[377,113],[381,114],[382,115],[383,115],[384,115],[385,115],[392,116],[386,115],[387,115],[388,113],[380,115],[379,117],[389,115],[390,115],[391,115],[378,44],[302,44],[324,44],[292,44],[294,44],[311,118],[291,44],[278,1],[316,44],[325,118],[309,44],[293,118],[287,119],[279,1],[280,1],[300,118],[299,118],[281,44],[282,44],[283,44],[290,44],[320,44],[298,118],[308,44],[295,44],[277,44],[315,44],[327,120],[275,121],[322,1],[323,44],[276,122],[313,1],[301,118],[305,1],[318,1],[288,123],[289,118],[285,119],[304,119],[310,44],[303,118],[296,124],[274,44],[307,118],[306,44],[317,44],[312,119],[284,44],[314,44],[286,125],[321,1],[319,118],[297,124],[326,1],[855,1],[889,126],[888,126],[887,1],[891,127],[892,127],[890,1],[858,1],[856,128],[859,129],[857,129],[860,1],[899,1],[900,1],[904,1],[901,1],[911,128],[910,1],[912,1],[913,130],[905,131],[909,132],[906,133],[902,1],[907,134],[908,135],[903,1],[875,128],[871,128],[874,128],[873,128],[872,128],[868,128],[867,128],[870,128],[869,128],[862,128],[863,136],[861,1],[866,137],[864,128],[917,138],[896,139],[898,139],[897,139],[894,140],[895,139],[915,1],[914,1],[916,1],[876,141],[877,1],[880,1],[883,1],[878,1],[885,1],[886,142],[882,1],[879,1],[881,1],[884,1],[865,1],[776,1],[779,143],[497,144],[490,84],[495,145],[492,144],[502,146],[493,144],[501,147],[499,148],[494,144],[491,84],[500,149],[507,150],[498,1],[778,1],[629,151],[602,1],[630,1],[631,1],[632,1],[689,152],[633,153],[678,154],[635,155],[634,156],[636,153],[637,153],[639,157],[638,153],[640,158],[641,158],[642,153],[644,159],[645,153],[646,159],[647,153],[649,153],[650,153],[651,153],[652,160],[648,153],[653,1],[654,161],[655,161],[656,161],[657,161],[658,161],[667,162],[659,161],[660,161],[661,161],[662,161],[664,161],[663,161],[665,161],[666,161],[668,153],[669,153],[643,153],[670,159],[672,163],[671,153],[673,153],[674,153],[675,164],[677,153],[676,153],[679,153],[681,153],[682,165],[680,153],[683,153],[684,153],[685,153],[686,153],[687,153],[688,153],[695,166],[691,57],[693,167],[694,57],[697,168],[698,169],[699,1],[266,1],[705,170],[696,151],[706,1],[711,171],[709,172],[712,1],[714,173],[715,173],[716,1],[717,1],[719,174],[720,1],[721,1],[722,173],[723,1],[724,1],[725,175],[726,1],[727,1],[728,176],[729,1],[730,177],[731,1],[732,1],[733,1],[734,1],[737,1],[736,178],[713,1],[738,179],[739,1],[735,1],[740,1],[741,173],[742,180],[743,181],[745,182],[751,183],[750,184],[749,185],[746,1],[748,186],[747,1],[704,187],[753,188],[752,187],[756,189],[718,1],[758,190],[759,191],[761,192],[763,193],[764,193],[765,193],[762,1],[768,194],[766,195],[767,195],[769,1],[770,1],[707,1],[771,196],[772,197],[773,1],[774,198],[775,199],[784,200],[419,1],[754,201],[755,1],[785,202],[710,1],[786,203],[789,204],[787,204],[788,205],[840,206],[842,207],[843,208],[841,209],[844,210],[845,211],[846,212],[847,213],[848,214],[849,215],[850,216],[851,217],[852,218],[853,219],[854,192],[700,1],[757,1],[1046,1],[1047,1],[1053,220],[1050,221],[1049,222],[1052,223],[1048,1],[1051,221],[744,1],[1054,197],[575,224],[576,224],[577,225],[534,226],[578,227],[579,228],[580,229],[529,1],[532,230],[530,1],[531,1],[581,231],[582,232],[583,233],[584,234],[585,235],[586,236],[587,236],[589,237],[588,238],[590,239],[591,240],[592,241],[574,242],[533,1],[593,243],[594,244],[595,245],[628,246],[596,247],[597,248],[598,249],[552,250],[562,251],[551,250],[572,252],[543,253],[542,254],[571,197],[565,255],[570,256],[545,257],[559,258],[544,259],[568,260],[540,261],[539,197],[569,262],[541,263],[546,264],[547,1],[550,264],[537,1],[573,265],[563,266],[554,267],[555,268],[557,269],[553,270],[556,271],[566,197],[548,272],[549,273],[558,274],[538,275],[561,266],[560,264],[564,1],[567,276],[599,277],[600,278],[601,279],[603,280],[604,281],[605,282],[606,283],[607,283],[608,284],[609,1],[610,285],[612,286],[611,287],[613,288],[614,289],[615,290],[616,291],[617,292],[618,293],[619,294],[620,295],[621,296],[622,297],[623,298],[624,299],[625,300],[626,301],[627,302],[1055,197],[1056,1],[1057,1],[1063,303],[1058,1],[1064,1],[1067,1],[264,1],[1068,1],[702,1],[1071,304],[1070,305],[703,1],[1072,84],[1077,306],[1076,307],[1079,306],[1078,308],[1075,309],[1073,1],[1074,310],[262,1],[265,311],[269,84],[1080,312],[1081,1],[1098,313],[1123,314],[1124,315],[1099,316],[1102,316],[1121,314],[1122,314],[1112,314],[1111,317],[1109,314],[1104,314],[1117,314],[1115,314],[1119,314],[1103,314],[1116,314],[1120,314],[1105,314],[1106,314],[1118,314],[1100,314],[1107,314],[1108,314],[1110,314],[1114,314],[1125,318],[1113,314],[1101,314],[1138,319],[1137,1],[1132,318],[1134,320],[1133,318],[1126,318],[1127,318],[1129,318],[1131,318],[1135,320],[1136,320],[1128,320],[1130,320],[701,321],[1140,322],[1139,172],[708,323],[1141,151],[1142,1],[1143,1],[1144,1],[1147,324],[1146,325],[1145,326],[920,327],[919,1],[1149,328],[760,1],[1165,329],[1163,330],[1162,331],[1153,332],[1154,333],[1161,334],[1155,333],[1156,332],[1157,332],[1158,332],[1159,335],[1152,336],[1160,331],[1151,1],[1164,337],[1166,338],[1167,1],[1168,339],[1169,1],[1170,340],[835,341],[792,1],[794,342],[793,343],[798,344],[833,345],[830,346],[832,347],[795,346],[796,348],[800,348],[799,349],[797,350],[831,351],[829,346],[834,352],[827,1],[828,1],[801,353],[806,346],[808,346],[803,346],[804,353],[810,346],[811,354],[802,346],[807,346],[809,346],[805,346],[825,355],[824,346],[826,356],[820,346],[822,346],[821,346],[817,346],[823,357],[818,346],[819,358],[812,346],[813,346],[814,346],[815,346],[816,346],[791,1],[1150,1],[536,1],[777,1],[433,359],[434,360],[263,1],[1037,361],[1033,1],[1034,1],[1032,1],[1035,1],[1036,1],[1038,1],[1030,1],[1031,362],[1039,363],[921,364],[190,1],[783,365],[1093,366],[1094,367],[1092,368],[1095,369],[1089,370],[1090,371],[1091,372],[1085,370],[1086,370],[1088,373],[1087,370],[1084,374],[515,375],[516,376],[404,377],[405,1],[402,378],[400,379],[406,380],[401,381],[403,382],[273,1],[432,383],[416,384],[417,384],[427,385],[428,386],[430,387],[429,388],[431,389],[412,390],[408,391],[413,384],[414,392],[411,393],[410,391],[409,391],[407,394],[415,395],[420,44],[418,44],[422,396],[425,397],[421,398],[426,399],[423,396],[424,44],[436,400],[435,44],[438,401],[437,400],[98,402],[166,403],[165,404],[164,405],[103,406],[119,407],[117,408],[118,409],[104,410],[189,411],[89,1],[93,1],[91,412],[92,1],[96,413],[99,1],[116,414],[94,1],[111,415],[97,416],[112,417],[115,418],[113,418],[110,419],[90,1],[95,1],[114,420],[120,421],[108,1],[102,422],[100,423],[109,424],[106,425],[105,425],[101,426],[107,427],[185,428],[179,429],[172,430],[171,431],[180,432],[181,418],[173,433],[186,434],[167,435],[168,436],[169,437],[188,438],[170,431],[174,434],[175,439],[182,440],[183,416],[184,439],[187,418],[176,437],[121,441],[177,442],[178,443],[163,444],[161,445],[162,445],[125,445],[126,445],[127,445],[128,445],[129,445],[130,445],[131,445],[132,445],[133,445],[153,445],[134,445],[135,445],[136,445],[137,445],[138,445],[139,445],[160,445],[140,445],[141,445],[142,445],[143,445],[158,445],[144,445],[159,445],[145,445],[156,445],[157,445],[146,445],[147,445],[148,445],[154,445],[155,445],[149,445],[150,445],[151,445],[152,445],[124,446],[123,447],[122,448],[88,1],[257,1],[781,449],[782,450],[1083,1],[922,451],[965,452],[964,453],[963,454],[966,1],[1042,455],[1041,1],[1045,456],[1043,457],[918,458],[1044,459],[967,460],[1040,461],[1029,462],[969,463],[970,463],[971,463],[972,463],[973,463],[1026,463],[974,463],[975,463],[976,463],[977,463],[978,463],[979,463],[980,463],[981,463],[1025,463],[982,463],[983,463],[984,463],[985,463],[986,463],[987,463],[988,463],[989,463],[990,463],[991,463],[992,463],[993,463],[1028,463],[994,463],[995,463],[996,463],[997,463],[998,463],[999,463],[1000,463],[1001,463],[1002,463],[1003,463],[1004,463],[1005,463],[1027,463],[1006,463],[1007,463],[1008,463],[1009,463],[1010,463],[1011,463],[1012,463],[1013,463],[1014,463],[1015,463],[1016,463],[1017,463],[1018,463],[1019,463],[1020,463],[1021,463],[1022,463],[1023,463],[1024,463],[968,464],[961,465],[962,466],[1082,467],[1062,468],[1059,197],[1061,469],[1060,1],[1065,1],[1066,470],[780,471],[1097,472],[1096,473],[837,474],[836,475],[790,476],[1148,1],[838,1],[1069,305],[79,1],[953,477],[939,478],[950,479],[923,1],[941,480],[940,1],[942,481],[948,482],[947,1],[924,1],[945,1],[946,1],[932,483],[927,1],[926,484],[925,1],[934,1],[951,485],[930,483],[933,1],[938,1],[931,483],[928,484],[929,1],[935,484],[936,484],[949,1],[944,1],[952,1],[943,1],[954,1],[937,1],[955,486],[956,486],[960,487],[957,488],[958,489],[959,488],[77,1],[78,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[8,1],[52,1],[49,1],[50,1],[51,1],[53,1],[9,1],[54,1],[55,1],[56,1],[58,1],[57,1],[59,1],[60,1],[10,1],[61,1],[62,1],[63,1],[11,1],[64,1],[65,1],[66,1],[67,1],[68,1],[1,1],[69,1],[70,1],[12,1],[74,1],[72,1],[76,1],[71,1],[75,1],[73,1],[272,1],[839,490],[83,491],[84,492],[87,493],[82,1],[85,491],[86,491],[81,1]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/grafast/grafserv/dist/accept.d.ts b/grafast/grafserv/dist/accept.d.ts new file mode 100644 index 0000000000..292ad9f67d --- /dev/null +++ b/grafast/grafserv/dist/accept.d.ts @@ -0,0 +1,8 @@ +/** + * Returns a function that returns the (first, if multiple equal matches) type + * from mediaTypes that best matches the accept query specified by the given + * `acceptHeader`. If no Accept header is present then the first mediaType will + * be returned. If no match is possible, `null` will be returned. + */ +export declare function makeAcceptMatcher(mediaTypes: string[]): (acceptHeader: string | undefined) => string | null; +//# sourceMappingURL=accept.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/accept.d.ts.map b/grafast/grafserv/dist/accept.d.ts.map new file mode 100644 index 0000000000..c0f577cda1 --- /dev/null +++ b/grafast/grafserv/dist/accept.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"accept.d.ts","sourceRoot":"","sources":["../src/accept.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAwBlD,cAAc,MAAM,GAAG,SAAS,KAC/B,MAAM,GAAG,IAAI,CAmCjB"} \ No newline at end of file diff --git a/grafast/grafserv/dist/accept.js b/grafast/grafserv/dist/accept.js new file mode 100644 index 0000000000..aae656595d --- /dev/null +++ b/grafast/grafserv/dist/accept.js @@ -0,0 +1,468 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.makeAcceptMatcher = makeAcceptMatcher; +const tslib_1 = require("tslib"); +const lru_1 = tslib_1.__importDefault(require("@graphile/lru")); +/** + * Returns a function that returns the (first, if multiple equal matches) type + * from mediaTypes that best matches the accept query specified by the given + * `acceptHeader`. If no Accept header is present then the first mediaType will + * be returned. If no match is possible, `null` will be returned. + */ +function makeAcceptMatcher(mediaTypes) { + const typeDigests = mediaTypes.map((t) => { + // NOTE: this parsing is super lazy and isn't 100% reliable; e.g. it could + // be broken by `foo/bar;baz="\\";frog"`. We're only handling values passed + // by our own code though, and we ain't passing this kind of nonsense. + const [spec, ...params] = t.split(";"); + const parameters = Object.create(null); + for (const param of params) { + const [key, val] = param.split("="); + parameters[key] = val; + } + const [type, subtype] = spec.split("/"); + return { + type, + subtype, + parameters, + q: 1, + originalType: t, + noParams: Object.keys(parameters).length === 0, + }; + }); + const lru = new lru_1.default({ maxLength: 50 }); + return function preferredAccept(acceptHeader) { + if (acceptHeader === undefined) { + return mediaTypes[0]; + } + const existing = lru.get(acceptHeader); + if (existing !== undefined) { + return existing; + } + else { + const specs = parseAccepts(acceptHeader); + // Find the first spec that matches each, then pick the one with the + // highest q. + let bestQ = 0; + let bestMediaType = null; + for (const digest of typeDigests) { + const highestPrecedenceSpecMatch = specs.find((spec) => { + return ((spec.type === "*" || + (spec.type === digest.type && + (spec.subtype === "*" || spec.subtype === digest.subtype))) && + (spec.noParams || + (!digest.noParams && + matchesParameters(spec.parameters, digest.parameters)))); + }); + if (highestPrecedenceSpecMatch) { + if (bestMediaType === null || highestPrecedenceSpecMatch.q > bestQ) { + bestQ = highestPrecedenceSpecMatch.q; + bestMediaType = digest.originalType; + } + } + } + lru.set(acceptHeader, bestMediaType); + return bestMediaType; + } + }; +} +function matchesParameters(required, given) { + for (const key in required) { + if (given[key] !== required[key]) { + return false; + } + } + return true; +} +const SPACE = " ".charCodeAt(0); +const HORIZONTAL_TAB = "\t".charCodeAt(0); +const ASTERISK = "*".charCodeAt(0); +const SLASH = "/".charCodeAt(0); +const COMMA = ",".charCodeAt(0); +const SEMICOLON = ";".charCodeAt(0); +const EQUALS = "=".charCodeAt(0); +const DOUBLE_QUOTE = '"'.charCodeAt(0); +const BACKSLASH = "\\".charCodeAt(0); +const DEL = 0x7f; +/* + * Whitespace: + * 9 (tab) + * 10 (line feed) + * 11 (vertical tab) + * 12 (form feed) + * 13 (carriage return) + * 32 (space) + */ +const WHITESPACE_START = 9; +const WHITESPACE_END = 13; +/** We're more forgiving in whitespace in most cases */ +function isWhitespace(charCode) { + return (charCode === SPACE || + (charCode >= WHITESPACE_START && charCode <= WHITESPACE_END)); +} +/** is Optional White Space */ +function isOWS(charCode) { + return charCode === SPACE || charCode === HORIZONTAL_TAB; +} +/* + "!" / "#" / "$" / "%" / "&" / "'" / "*" + / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + / DIGIT / ALPHA + +33|35-39|42|43|45-57|65-90|94-122|124|126 + +>=33 && <= 126 && !34|40|41|44|58-64|91-93|123|125 + */ +// Matches ordered from most likely to least likely for content types. +function isToken(charCode) { + return ( + // ^_`a-z + (charCode >= 94 && charCode <= 122) || + // symbols and numbers + (charCode >= 35 && + charCode <= 57 && + charCode !== 40 && + charCode !== 41 && + charCode !== 44) || + // A-Z + (charCode >= 65 && charCode <= 90) || + // ! + charCode === 33 || + // | + charCode === 124 || + // ~ + charCode === 126); +} +var State; +(function (State) { + State[State["EXPECT_TYPE"] = 0] = "EXPECT_TYPE"; + State[State["CONTINUE_TYPE"] = 1] = "CONTINUE_TYPE"; + State[State["EXPECT_SUBTYPE"] = 2] = "EXPECT_SUBTYPE"; + State[State["CONTINUE_SUBTYPE"] = 3] = "CONTINUE_SUBTYPE"; + State[State["EXPECT_COMMA_OR_SEMICOLON"] = 4] = "EXPECT_COMMA_OR_SEMICOLON"; + State[State["EXPECT_PARAMETER_NAME"] = 5] = "EXPECT_PARAMETER_NAME"; + State[State["CONTINUE_PARAMETER_NAME"] = 6] = "CONTINUE_PARAMETER_NAME"; + State[State["EXPECT_PARAMETER_VALUE"] = 7] = "EXPECT_PARAMETER_VALUE"; + State[State["CONTINUE_PARAMETER_VALUE"] = 8] = "CONTINUE_PARAMETER_VALUE"; + State[State["CONTINUE_QUOTED_PARAMETER_VALUE"] = 9] = "CONTINUE_QUOTED_PARAMETER_VALUE"; +})(State || (State = {})); +// PERF: we could increase the speed of this significantly by checking the +// type/subtype against the supported types/subtypes, and if a match is not +// found then skip `i` right up to the next `,` without adding the entry to +// `accepts` +/** + * Parser based on https://httpwg.org/specs/rfc9110.html#rfc.section.12.5.1 + * + * @remarks + * + * Why must you always write your own parsers, Benjie? + */ +function parseAccepts(acceptHeader) { + const accepts = []; + let state = State.EXPECT_TYPE; + let currentAccept = null; + let currentParameterName = ""; + let currentParameterValue = ""; + function next() { + if (currentAccept.parameters.q) { + const q = parseFloat(currentAccept.parameters.q); + if (Number.isNaN(q) || q < 0 || q > 1) { + throw new Error("q out of range"); + } + delete currentAccept.parameters.q; + currentAccept.q = q; + } + accepts.push(currentAccept); + currentAccept = null; + state = State.EXPECT_TYPE; + } + for (let i = 0, l = acceptHeader.length; i < l; i++) { + const charCode = acceptHeader.charCodeAt(i); + switch (state) { + case State.EXPECT_TYPE: { + if ( /*@__INLINE__*/isWhitespace(charCode)) { + continue; + } + else if (charCode === ASTERISK) { + // `*/*` + currentAccept = { + type: "*", + subtype: "*", + q: 1, + parameters: Object.create(null), + noParams: true, + }; + const nextCharCode = acceptHeader.charCodeAt(++i); + if (nextCharCode !== SLASH) { + throw new Error("Expected '/' after '*'"); + } + const nextNextCharCode = acceptHeader.charCodeAt(++i); + if (nextNextCharCode !== ASTERISK) { + throw new Error("Expected '*' after '*/'"); + } + state = State.EXPECT_COMMA_OR_SEMICOLON; + } + else if ( /*@__INLINE__*/isToken(charCode)) { + currentAccept = { + type: acceptHeader[i], + subtype: "", + q: 1, + parameters: Object.create(null), + noParams: true, + }; + state = State.CONTINUE_TYPE; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.CONTINUE_TYPE: { + if (charCode === SLASH) { + state = State.EXPECT_SUBTYPE; + } + else if ( /*@__INLINE__*/isToken(charCode)) { + currentAccept.type += acceptHeader[i]; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.EXPECT_SUBTYPE: { + if (charCode === ASTERISK) { + currentAccept.subtype = "*"; + state = State.EXPECT_COMMA_OR_SEMICOLON; + } + else if ( /*@__INLINE__*/isToken(charCode)) { + currentAccept.subtype = acceptHeader[i]; + state = State.CONTINUE_SUBTYPE; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.CONTINUE_SUBTYPE: { + if (charCode === SEMICOLON) { + // Parameters + state = State.EXPECT_PARAMETER_NAME; + } + else if (charCode === COMMA) { + /*@__INLINE__*/ next(); + } + else if ( /*@__INLINE__*/isToken(charCode)) { + currentAccept.subtype += acceptHeader[i]; + } + else if ( /*@__INLINE__*/isWhitespace(charCode)) { + state = State.EXPECT_COMMA_OR_SEMICOLON; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.EXPECT_COMMA_OR_SEMICOLON: { + if ( /*@__INLINE__*/isWhitespace(charCode)) { + continue; + } + else if (charCode === SEMICOLON) { + state = State.EXPECT_PARAMETER_NAME; + } + else if (charCode === COMMA) { + /*@__INLINE__*/ next(); + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.EXPECT_PARAMETER_NAME: { + if (charCode === SEMICOLON) { + continue; + } + else if (charCode === COMMA) { + /*@__INLINE__*/ next(); + continue; + } + else if ( /*@__INLINE__*/isOWS(charCode)) { + continue; + } + else if ( /*@__INLINE__*/isToken(charCode)) { + currentParameterName = acceptHeader[i]; + currentParameterValue = ""; + state = State.CONTINUE_PARAMETER_NAME; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.CONTINUE_PARAMETER_NAME: { + if (charCode === EQUALS) { + state = State.EXPECT_PARAMETER_VALUE; + /* + if (currentAccept?.parameters[currentParameterName]) { + throw new Error("Overriding parameter!"); + } + */ + // "q" is not a valid parameter name; it's just used for weighting. + if (currentParameterName !== "q") { + currentAccept.noParams = false; + } + } + else if ( /*@__INLINE__*/isToken(charCode)) { + currentParameterName += acceptHeader[i]; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.EXPECT_PARAMETER_VALUE: { + if (charCode === DOUBLE_QUOTE) { + state = State.CONTINUE_QUOTED_PARAMETER_VALUE; + } + else if ( /*@__INLINE__*/isToken(charCode)) { + state = State.CONTINUE_PARAMETER_VALUE; + currentParameterValue += acceptHeader[i]; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + case State.CONTINUE_QUOTED_PARAMETER_VALUE: { + if (charCode === DOUBLE_QUOTE) { + currentAccept.parameters[currentParameterName] = + currentParameterValue; + state = State.EXPECT_COMMA_OR_SEMICOLON; + } + else if (charCode === BACKSLASH) { + if (++i === l) { + throw new Error(`Unexpected terminating backslash`); + } + // From the spec: + // + // > A sender SHOULD NOT generate a quoted-pair in a quoted-string + // > except where necessary to quote DQUOTE and backslash octets + // > occurring within that string. A sender SHOULD NOT generate a + // > quoted-pair in a comment except where necessary to quote + // > parentheses ["(" and ")"] and backslash octets occurring within + // > that comment. + // + // i.e. this isn't for `\n` and `\t` and similar, those would just + // come out as "n" and "t" in the output. This is specifically for + // escaping quote marks, parenthesis, backslashes. + // Respect `quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text )` + if (charCode === HORIZONTAL_TAB || + (charCode >= 0x20 && charCode <= 0xff && charCode !== DEL)) { + currentParameterValue += acceptHeader[i]; + } + else { + throw new Error(`Unexpected escaped character with code '${charCode}' at position ${i}`); + } + } + else { + // Respect `qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text` + // 0x09 0x20-0xff !0x22=`"` !0x5c=`\` !0x7f=DEL + if (charCode === HORIZONTAL_TAB || + (charCode >= 0x20 && + charCode <= 0xff && + /* charCode !== DOUBLE_QUOTE && */ + /* charCode !== BACKSLASH && */ + charCode !== DEL)) { + currentParameterValue += acceptHeader[i]; + } + else { + throw new Error(`Unexpected character with code '${charCode}' at position ${i}.`); + } + } + break; + } + case State.CONTINUE_PARAMETER_VALUE: { + if (charCode === SEMICOLON) { + currentAccept.parameters[currentParameterName] = + currentParameterValue; + // Parameters + state = State.EXPECT_PARAMETER_NAME; + } + else if (charCode === COMMA) { + currentAccept.parameters[currentParameterName] = + currentParameterValue; + /*@__INLINE__*/ next(); + } + else if ( /*@__INLINE__*/isToken(charCode)) { + currentParameterValue += acceptHeader[i]; + } + else { + throw new Error(`Unexpected character '${acceptHeader[i]}'`); + } + break; + } + default: { + const never = state; + throw new Error(`Unhandled state '${never}'`); + } + } + } + // Now finish parsing + switch (state) { + case State.EXPECT_TYPE: + case State.CONTINUE_SUBTYPE: + case State.EXPECT_COMMA_OR_SEMICOLON: { + /*@__INLINE__*/ next(); + break; + } + case State.CONTINUE_PARAMETER_VALUE: { + currentAccept.parameters[currentParameterName] = currentParameterValue; + /*@__INLINE__*/ next(); + break; + } + case State.CONTINUE_TYPE: { + throw new Error("Invalid 'accept' header, expected slash"); + } + case State.EXPECT_SUBTYPE: { + throw new Error("Invalid 'accept' header, expected subtype"); + } + case State.EXPECT_PARAMETER_NAME: { + throw new Error("Invalid 'accept' header, expected parameter name"); + } + case State.CONTINUE_PARAMETER_NAME: { + throw new Error("Invalid 'accept' header, expected parameter value"); + } + case State.EXPECT_PARAMETER_VALUE: { + throw new Error("Invalid 'accept' header, expected parameter value"); + } + case State.CONTINUE_QUOTED_PARAMETER_VALUE: { + throw new Error("Invalid 'accept' header, expected closing quote"); + } + default: { + const never = state; + throw new Error(`Unhandled terminal state '${never}'`); + } + } + // Sort `accepts` by precedence. Precedence is how accurate the match is: + // a/b;c=d + // a/b + // a/* + // */* + const score = (accept) => { + let val = 0; + if (accept.type !== "*") { + val += 1_000; + } + if (accept.subtype !== "*") { + val += 1_000_000; + } + val += Object.keys(accept.parameters).length; + return val; + }; + accepts.sort((a, z) => { + const scoreA = score(a); + const scoreZ = score(z); + return scoreZ - scoreA; + }); + return accepts; +} +//# sourceMappingURL=accept.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/accept.js.map b/grafast/grafserv/dist/accept.js.map new file mode 100644 index 0000000000..102400571b --- /dev/null +++ b/grafast/grafserv/dist/accept.js.map @@ -0,0 +1 @@ +{"version":3,"file":"accept.js","sourceRoot":"","sources":["../src/accept.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/core/base.d.ts b/grafast/grafserv/dist/core/base.d.ts new file mode 100644 index 0000000000..1d693831f3 --- /dev/null +++ b/grafast/grafserv/dist/core/base.d.ts @@ -0,0 +1,45 @@ +import type { PromiseOrDirect, TypedEventEmitter } from "grafast"; +import type { GraphQLSchema } from "grafast/graphql"; +import type { Middleware } from "graphile-config"; +import type { DynamicOptions, ErrorResult, ExecutionConfig, GrafservConfig, HandlerResult, RequestDigest, Result, SchemaChangeEvent } from "../interfaces.js"; +import { makeGraphiQLHandler } from "../middleware/graphiql.js"; +import { makeGraphQLHandler } from "../middleware/graphql.js"; +export declare class GrafservBase { + private releaseHandlers; + private releasing; + dynamicOptions: DynamicOptions; + getExecutionConfig(_ctx: Partial): PromiseOrDirect; + resolvedPreset: GraphileConfig.ResolvedPreset; + grafastMiddleware: Middleware | null; + protected schema: GraphQLSchema | PromiseLike | null; + protected schemaError: PromiseLike | null; + protected eventEmitter: TypedEventEmitter<{ + "schema:ready": GraphQLSchema; + "schema:error": any; + "dynamicOptions:ready": Record; + "dynamicOptions:error": any; + }>; + private initialized; + graphqlHandler: ReturnType; + graphiqlHandler: ReturnType; + constructor(config: GrafservConfig); + protected processRequest(requestDigest: RequestDigest): PromiseOrDirect; + getPreset(): GraphileConfig.ResolvedPreset; + getSchema(): PromiseOrDirect; + release(): Promise; + onRelease(cb: () => PromiseOrDirect): void; + private _settingPreset; + setPreset(newPreset: GraphileConfig.Preset): PromiseOrDirect; + setSchema(newSchema: GraphQLSchema): void; + private refreshHandlers; + private waitForGraphqlHandler; + private waitForGraphiqlHandler; + private failedGraphqlHandler; + private failedGraphiqlHandler; + makeStream(): AsyncIterableIterator; +} +export declare function convertHandlerResultToResult(handlerResult: HandlerResult | null): PromiseOrDirect; +export declare const convertErrorToErrorResult: (error: Error & { + statusCode?: number; +}) => ErrorResult; +//# sourceMappingURL=base.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/core/base.d.ts.map b/grafast/grafserv/dist/core/base.d.ts.map new file mode 100644 index 0000000000..f8345f7656 --- /dev/null +++ b/grafast/grafserv/dist/core/base.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/core/base.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AASlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,KAAK,EAEV,cAAc,EACd,WAAW,EAEX,eAAe,EACf,cAAc,EACd,aAAa,EAKb,aAAa,EACb,MAAM,EACN,iBAAiB,EAElB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAEL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAUlC,qBAAa,YAAY;IACvB,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,SAAS,CAAS;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,CACvB,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GACpC,eAAe,CAAC,eAAe,CAAC;IAG5B,cAAc,EAAE,cAAc,CAAC,cAAc,CAAC;IAG9C,iBAAiB,EAAE,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAC9E,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACpE,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACzD,SAAS,CAAC,YAAY,EAAE,iBAAiB,CAAC;QACxC,cAAc,EAAE,aAAa,CAAC;QAC9B,cAAc,EAAE,GAAG,CAAC;QACpB,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9C,sBAAsB,EAAE,GAAG,CAAC;KAC7B,CAAC,CAAC;IACH,OAAO,CAAC,WAAW,CAAS;IACrB,cAAc,EAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;IACvD,eAAe,EAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;gBAEpD,MAAM,EAAE,cAAc;IA4FlC,SAAS,CAAC,cAAc,CACtB,aAAa,EAAE,aAAa,GAC3B,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC;IAY1B,SAAS,IAAI,cAAc,CAAC,cAAc;IAI1C,SAAS,IAAI,eAAe,CAAC,aAAa,CAAC;IAIrC,OAAO;IAeb,SAAS,CAAC,EAAE,EAAE,MAAM,eAAe,CAAC,IAAI,CAAC;IAShD,OAAO,CAAC,cAAc,CAAS;IACxB,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;IAmDlE,SAAS,CAAC,SAAS,EAAE,aAAa;IAuBzC,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,qBAAqB,CAuCzB;IAEJ,OAAO,CAAC,sBAAsB,CAwC1B;IAEJ,OAAO,CAAC,oBAAoB,CAcxB;IAEJ,OAAO,CAAC,qBAAqB,CAczB;IAGG,UAAU,IAAI,qBAAqB,CAAC,iBAAiB,CAAC;CAyD9D;AA+FD,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,aAAa,GAAG,IAAI,GAClC,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,CAoLhC;AAED,eAAO,MAAM,yBAAyB,GACpC,OAAO,KAAK,GAAG;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,KACrC,WASF,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/core/base.js b/grafast/grafserv/dist/core/base.js new file mode 100644 index 0000000000..664145c820 --- /dev/null +++ b/grafast/grafserv/dist/core/base.js @@ -0,0 +1,634 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.convertErrorToErrorResult = exports.GrafservBase = void 0; +exports.convertHandlerResultToResult = convertHandlerResultToResult; +const tslib_1 = require("tslib"); +const eventemitter3_1 = tslib_1.__importDefault(require("eventemitter3")); +const grafast_1 = require("grafast"); +const graphql = tslib_1.__importStar(require("grafast/graphql")); +const graphile_config_1 = require("graphile-config"); +const hooks_js_1 = require("../hooks.js"); +const mapIterator_js_1 = require("../mapIterator.js"); +const graphiql_js_1 = require("../middleware/graphiql.js"); +const graphql_js_1 = require("../middleware/graphql.js"); +const options_js_1 = require("../options.js"); +const utils_js_1 = require("../utils.js"); +const failedToBuildHandlersError = new graphql.GraphQLError("Unknown error occurred."); +const { isSchema, validateSchema } = graphql; +class GrafservBase { + getExecutionConfig(_ctx) { + throw new Error("Overwritten in constructor"); + } + constructor(config) { + this.releaseHandlers = []; + this.releasing = false; + this.initialized = false; + this._settingPreset = false; + this.waitForGraphqlHandler = function (...args) { + const [request] = args; + const deferred = (0, grafast_1.defer)(); + const { dynamicOptions } = this; + const onReady = () => { + this.eventEmitter.off("dynamicOptions:ready", onReady); + this.eventEmitter.off("dynamicOptions:error", onError); + Promise.resolve() + .then(() => this.graphqlHandler(...args)) + .then(deferred.resolve, deferred.reject); + }; + const onError = (e) => { + this.eventEmitter.off("dynamicOptions:ready", onReady); + this.eventEmitter.off("dynamicOptions:error", onError); + const graphqlError = new graphql.GraphQLError("Unknown error occurred", null, null, null, null, e); + deferred.resolve({ + type: "graphql", + request, + dynamicOptions, + payload: { errors: [graphqlError] }, + statusCode: graphqlError.extensions?.statusCode ?? 503, + // Fall back to application/json; this is when an unexpected error happens + // so it shouldn't be hit. + contentType: graphql_js_1.APPLICATION_JSON, + }); + }; + this.eventEmitter.on("dynamicOptions:ready", onReady); + this.eventEmitter.on("dynamicOptions:error", onError); + setTimeout(onError, 5000, new Error("Server initialization timed out")); + return Promise.resolve(deferred); + }; + this.waitForGraphiqlHandler = function (...args) { + const [request] = args; + const { dynamicOptions } = this; + const deferred = (0, grafast_1.defer)(); + const onReady = () => { + this.eventEmitter.off("dynamicOptions:ready", onReady); + this.eventEmitter.off("dynamicOptions:error", onError); + Promise.resolve() + .then(() => this.graphiqlHandler(...args)) + .then(deferred.resolve, deferred.reject); + }; + const onError = (e) => { + this.eventEmitter.off("dynamicOptions:ready", onReady); + this.eventEmitter.off("dynamicOptions:error", onError); + const graphqlError = new graphql.GraphQLError("Unknown error occurred", null, null, null, null, e); + // TODO: this should be an HTML response + deferred.resolve({ + type: "graphql", + request, + dynamicOptions, + payload: { errors: [graphqlError] }, + statusCode: graphqlError.extensions?.statusCode ?? 503, + // Fall back to application/json; this is when an unexpected error happens + // so it shouldn't be hit. + contentType: graphql_js_1.APPLICATION_JSON, + }); + }; + this.eventEmitter.on("dynamicOptions:ready", onReady); + this.eventEmitter.on("dynamicOptions:error", onError); + setTimeout(onError, 5000, new Error("Server initialization timed out")); + return Promise.resolve(deferred); + }; + this.failedGraphqlHandler = function (...args) { + const [request] = args; + const { dynamicOptions } = this; + return { + type: "graphql", + request, + dynamicOptions, + payload: { errors: [failedToBuildHandlersError] }, + statusCode: 503, + // Fall back to application/json; this is when an unexpected error happens + // so it shouldn't be hit. + contentType: graphql_js_1.APPLICATION_JSON, + }; + }; + this.failedGraphiqlHandler = function (...args) { + const [request] = args; + const { dynamicOptions } = this; + return { + type: "graphql", + request, + dynamicOptions, + payload: { errors: [failedToBuildHandlersError] }, + statusCode: 503, + // Fall back to application/json; this is when an unexpected error happens + // so it shouldn't be hit. + contentType: graphql_js_1.APPLICATION_JSON, + }; + }; + this.eventEmitter = new eventemitter3_1.default(); + this.resolvedPreset = (0, graphile_config_1.resolvePreset)(config.preset ? config.preset : {}); + this.dynamicOptions = { + validationRules: [...graphql.specifiedRules], + getExecutionConfig: defaultMakeGetExecutionConfig(), + ...(0, options_js_1.optionsFromConfig)(this.resolvedPreset), + }; + this.getExecutionConfig = this.dynamicOptions.getExecutionConfig; + this.middleware = (0, hooks_js_1.getGrafservMiddleware)(this.resolvedPreset); + this.grafastMiddleware = (0, grafast_1.getGrafastMiddleware)(this.resolvedPreset); + this.schemaError = null; + this.schema = config.schema; + if ((0, grafast_1.isPromiseLike)(config.schema)) { + const promise = config.schema; + promise.then((schema) => { + this.setSchema(schema); + }, (error) => { + this.schemaError = promise; + this.schema = null; + this.eventEmitter.emit("schema:error", error); + }); + } + else { + this.eventEmitter.emit("schema:ready", config.schema); + } + this.graphqlHandler = this.waitForGraphqlHandler; + this.graphiqlHandler = this.waitForGraphiqlHandler; + this.setPreset(this.resolvedPreset); + } + /** @internal */ + _processRequest(inRequest) { + const request = (0, utils_js_1.normalizeRequest)(inRequest); + if (!this.dynamicOptions) { + throw new Error(`GrafservInternalError<1377f225-31b7-4a81-a56e-a28e18a19899>: Attempted to process request prematurely`); + } + const dynamicOptions = this.dynamicOptions; + const forceCORS = !!this.resolvedPreset.grafserv?.dangerouslyAllowAllCORSRequests && + request.method === "OPTIONS"; + try { + if (request.path === dynamicOptions.graphqlPath) { + if (forceCORS) + return optionsResponse(request, this.dynamicOptions); + return this.graphqlHandler(request, this.graphiqlHandler); + } + if (dynamicOptions.graphiql && + request.method === "GET" && + request.path === dynamicOptions.graphiqlPath) { + if (forceCORS) + return optionsResponse(request, dynamicOptions); + return this.graphiqlHandler(request); + } + if (dynamicOptions.watch && + request.method === "GET" && + request.path === dynamicOptions.eventStreamPath) { + if (forceCORS) + return optionsResponse(request, dynamicOptions); + const stream = this.makeStream(); + return { + type: "event-stream", + request, + dynamicOptions, + payload: stream, + statusCode: 200, + }; + } + // Unhandled + return null; + } + catch (e) { + console.error("Unexpected error occurred in _processRequest", e); + return { + type: "html", + request, + dynamicOptions, + status: 500, + payload: Buffer.from("ERROR", "utf8"), + }; + } + } + processRequest(requestDigest) { + const { resolvedPreset } = this; + const event = { + resolvedPreset, + requestDigest, + instance: this, + }; + return this.middleware != null + ? this.middleware.run("processRequest", event, processRequestWithEvent) + : processRequestWithEvent(event); + } + getPreset() { + return this.resolvedPreset; + } + getSchema() { + return this.schema ?? this.schemaError; + } + async release() { + if (this.releasing) { + throw new Error("Release has already been called"); + } + this.releasing = true; + for (let i = this.releaseHandlers.length - 1; i >= 0; i--) { + const handler = this.releaseHandlers[i]; + try { + await handler(); + } + catch (e) { + /* nom nom nom */ + } + } + } + onRelease(cb) { + if (this.releasing) { + throw new Error("Release has already been called; cannot add more onRelease callbacks"); + } + this.releaseHandlers.push(cb); + } + setPreset(newPreset) { + if (this._settingPreset) { + throw new Error(`Setting a preset is currently in progress; please wait for it to complete.`); + } + this._settingPreset = true; + const resolvedPreset = (0, graphile_config_1.resolvePreset)(newPreset); + const middleware = (0, hooks_js_1.getGrafservMiddleware)(this.resolvedPreset); + const grafastMiddleware = (0, grafast_1.getGrafastMiddleware)(this.resolvedPreset); + // Note: this gets directly mutated + const dynamicOptions = { + validationRules: [...graphql.specifiedRules], + getExecutionConfig: defaultMakeGetExecutionConfig(), + ...(0, options_js_1.optionsFromConfig)(resolvedPreset), + }; + const storeDynamicOptions = (dynamicOptions) => { + const { resolvedPreset } = dynamicOptions; + // Overwrite all the `this.*` properties at once + this.resolvedPreset = resolvedPreset; + this.middleware = middleware; + this.grafastMiddleware = grafastMiddleware; + this.dynamicOptions = dynamicOptions; + this.initialized = true; + // ENHANCE: this.graphqlHandler?.release()? + this.refreshHandlers(); + this.getExecutionConfig = dynamicOptions.getExecutionConfig; + // MUST come after the handlers have been refreshed, otherwise we'll + // get infinite loops + this.eventEmitter.emit("dynamicOptions:ready", {}); + }; + return (new Promise((resolve) => resolve(middleware != null + ? middleware.run("setPreset", dynamicOptions, storeDynamicOptions) + : storeDynamicOptions(dynamicOptions))) + .then(null, (e) => { + this.graphqlHandler = this.failedGraphqlHandler; + this.graphiqlHandler = this.failedGraphiqlHandler; + this.eventEmitter.emit("dynamicOptions:error", e); + }) + // Finally: + .then(() => { + this._settingPreset = false; + })); + } + setSchema(newSchema) { + if (!newSchema) { + throw new Error(`setSchema must be called with a GraphQL schema`); + } + if (!isSchema(newSchema)) { + throw new Error(`setParams called with invalid schema (is there more than one 'graphql' module loaded?)`); + } + const errors = validateSchema(newSchema); + if (errors.length > 0) { + throw new Error(`setParams called with invalid schema; first error: ${errors[0]}`); + } + if (this.schema !== newSchema) { + this.schemaError = null; + this.schema = newSchema; + this.eventEmitter.emit("schema:ready", newSchema); + this.refreshHandlers(); + } + } + refreshHandlers() { + if (!this.initialized) { + // This will be handled once `setPreset` completes + return; + } + this.graphqlHandler = (0, graphql_js_1.makeGraphQLHandler)(this); + this.graphiqlHandler = (0, graphiql_js_1.makeGraphiQLHandler)(this.resolvedPreset, this.middleware, this.dynamicOptions); + } + // TODO: Rename this, or make it a middleware, or something + makeStream() { + const queue = []; + let finished = false; + const bump = () => { + const next = queue.shift(); + if (next !== undefined) { + next.resolve({ + done: false, + value: { event: "change", data: "schema" }, + }); + } + }; + const flushQueue = (e) => { + const entries = queue.splice(0, queue.length); + for (const entry of entries) { + if (e != null) { + entry.reject(e); + } + else { + entry.resolve({ done: true }); + } + } + }; + this.eventEmitter.on("schema:ready", bump); + return { + [Symbol.asyncIterator]() { + return this; + }, + next() { + if (finished) { + return Promise.resolve({ + done: true, + }); + } + return new Promise((resolve, reject) => { + queue.push({ resolve, reject }); + }); + }, + return() { + finished = true; + if (queue.length !== 0) { + flushQueue(); + } + return Promise.resolve({ + done: true, + }); + }, + throw(e) { + if (queue.length !== 0) { + flushQueue(e); + } + return Promise.reject(e); + }, + }; + } +} +exports.GrafservBase = GrafservBase; +function defaultMakeGetExecutionConfig() { + let latestSchema; + let latestSchemaOrPromise; + let latestParseAndValidate; + let schemaPrepare = null; + return function getExecutionConfig() { + // Get up to date schema, in case we're in watch mode + const schemaOrPromise = this.getSchema(); + const { resolvedPreset, dynamicOptions } = this; + if (schemaOrPromise !== latestSchemaOrPromise) { + latestSchemaOrPromise = schemaOrPromise; + if ("then" in schemaOrPromise) { + schemaPrepare = (async () => { + latestSchema = await schemaOrPromise; + latestSchemaOrPromise = schemaOrPromise; + latestParseAndValidate = (0, graphql_js_1.makeParseAndValidateFunction)(latestSchema, resolvedPreset, dynamicOptions); + schemaPrepare = null; + return true; + })(); + } + else { + if (latestSchema === schemaOrPromise) { + // No action necessary + } + else { + latestSchema = schemaOrPromise; + latestParseAndValidate = (0, graphql_js_1.makeParseAndValidateFunction)(latestSchema, resolvedPreset, dynamicOptions); + } + } + } + if (schemaPrepare !== null) { + const sleeper = (0, utils_js_1.sleep)(dynamicOptions.schemaWaitTime); + const schemaReadyPromise = Promise.race([schemaPrepare, sleeper.promise]); + return schemaReadyPromise.then((schemaReady) => { + sleeper.release(); + if (schemaReady !== true) { + // Handle missing schema + throw new Error(`Schema isn't ready`); + } + return { + schema: latestSchema, + parseAndValidate: latestParseAndValidate, + resolvedPreset, + execute: grafast_1.execute, + subscribe: grafast_1.subscribe, + contextValue: Object.create(null), + }; + }); + } + /* + if (schemaOrPromise == null) { + const err = Promise.reject( + new GraphQLError( + "The schema is currently unavailable", + null, + null, + null, + null, + null, + { + statusCode: 503, + }, + ), + ); + return () => err; + } + */ + return { + schema: latestSchema, + parseAndValidate: latestParseAndValidate, + resolvedPreset, + execute: grafast_1.execute, + subscribe: grafast_1.subscribe, + contextValue: Object.create(null), + }; + }; +} +const END = Buffer.from("\r\n-----\r\n", "utf8"); +const DIVIDE = Buffer.from(`\r\n---\r\nContent-Type: application/json\r\n\r\n`, "utf8"); +function convertHandlerResultToResult(handlerResult) { + if (handlerResult === null) { + return null; + } + switch (handlerResult.type) { + case "graphql": { + const { payload, statusCode = 200, contentType, outputDataAsString, dynamicOptions, request: { preferJSON }, } = handlerResult; + (0, utils_js_1.handleErrors)(payload); + const headers = Object.create(null); + headers["Content-Type"] = contentType; + if (dynamicOptions.watch) { + headers["X-GraphQL-Event-Stream"] = dynamicOptions.eventStreamPath; + } + if (preferJSON && !outputDataAsString) { + return { + type: "json", + statusCode, + headers, + json: payload, + }; + } + else { + const buffer = Buffer.from((0, grafast_1.stringifyPayload)(payload, outputDataAsString), "utf8"); + headers["Content-Length"] = buffer.length; + return { + type: "buffer", + statusCode, + headers, + buffer, + }; + } + } + case "graphqlIncremental": { + const { iterator, statusCode = 200, outputDataAsString, dynamicOptions, } = handlerResult; + const headers = Object.create(null); + (headers["Content-Type"] = 'multipart/mixed; boundary="-"'), + (headers["Transfer-Encoding"] = "chunked"); + if (dynamicOptions.watch) { + headers["X-GraphQL-Event-Stream"] = dynamicOptions.eventStreamPath; + } + const bufferIterator = (0, mapIterator_js_1.mapIterator)(iterator, (payload) => { + (0, utils_js_1.handleErrors)(payload); + const payloadBuffer = Buffer.from((0, grafast_1.stringifyPayload)(payload, outputDataAsString), "utf8"); + return Buffer.concat([DIVIDE, payloadBuffer]); + }, () => { + return END; + }); + return { + type: "bufferStream", + headers, + statusCode, + lowLatency: true, + bufferIterator, + }; + } + case "text": + case "html": { + const { payload, statusCode = 200 } = handlerResult; + const headers = Object.create(null); + if (handlerResult.type === "html") { + headers["Content-Type"] = "text/html; charset=utf-8"; + } + else { + headers["Content-Type"] = "text/plain; charset=utf-8"; + } + headers["Content-Length"] = payload.length; + return { + type: "buffer", + statusCode, + headers, + buffer: payload, + }; + } + case "noContent": { + const { statusCode = 204 } = handlerResult; + const headers = Object.create(null); + return { + type: "noContent", + statusCode, + headers, + }; + } + case "event-stream": { + const { payload: stream, statusCode = 200, request: { httpVersionMajor }, } = handlerResult; + // Making sure these options are set. + // Set headers for Server-Sent Events. + const headers = Object.create(null); + // Don't buffer EventStream in nginx + headers["X-Accel-Buffering"] = "no"; + headers["Content-Type"] = "text/event-stream"; + headers["Cache-Control"] = "no-cache, no-transform"; + if (httpVersionMajor >= 2) { + // NOOP + } + else { + headers["Connection"] = "keep-alive"; + } + // Creates a stream for the response + const event2buffer = (event) => { + let payload = ""; + if (event.event !== undefined) { + payload += `event: ${event.event}\n`; + } + if (event.id !== undefined) { + payload += `id: ${event.id}\n`; + } + if (event.retry !== undefined) { + payload += `retry: ${event.retry}\n`; + } + if (event.data != null) { + payload += `data: ${event.data.replace(/\n/g, "\ndata: ")}\n`; + } + payload += "\n"; + return Buffer.from(payload, "utf8"); + }; + const bufferIterator = (0, mapIterator_js_1.mapIterator)(stream, event2buffer, undefined, () => event2buffer({ event: "open" })); + return { + type: "bufferStream", + statusCode, + headers, + lowLatency: true, + bufferIterator, + }; + } + default: { + const never = handlerResult; + console.error(`Did not understand '${never}' passed to convertHandlerResultToResult`); + const payload = Buffer.from("Unexpected input to convertHandlerResultToResult", "utf8"); + const headers = Object.create(null); + headers["Content-Type"] = "text/plain; charset=utf-8"; + headers["Content-Length"] = payload.length; + return { + type: "buffer", + statusCode: 500, + headers, + buffer: payload, + }; + } + } +} +const convertErrorToErrorResult = (error) => { + // TODO: need to assert `error` is not a GraphQLError, that should be handled elsewhere. + const statusCode = error.statusCode ?? 500; + return { + type: "error", + statusCode, + headers: Object.create(null), + error, + }; +}; +exports.convertErrorToErrorResult = convertErrorToErrorResult; +function dangerousCorsWrap(result) { + if (result === null) { + return result; + } + result.headers["Access-Control-Allow-Origin"] = "*"; + result.headers["Access-Control-Allow-Headers"] = "*"; + return result; +} +function optionsResponse(request, dynamicOptions) { + return { + type: "noContent", + request, + dynamicOptions: dynamicOptions, + statusCode: 204, + }; +} +function processRequestWithEvent(event) { + const { requestDigest: request, instance } = event; + let returnValue; + try { + const result = instance._processRequest(request); + if ((0, grafast_1.isPromiseLike)(result)) { + returnValue = result.then(convertHandlerResultToResult, exports.convertErrorToErrorResult); + } + else { + returnValue = convertHandlerResultToResult(result); + } + } + catch (e) { + returnValue = (0, exports.convertErrorToErrorResult)(e); + } + if (instance.resolvedPreset.grafserv?.dangerouslyAllowAllCORSRequests) { + if ((0, grafast_1.isPromiseLike)(returnValue)) { + return returnValue.then(dangerousCorsWrap); + } + else { + return dangerousCorsWrap(returnValue); + } + } + else { + return returnValue; + } +} +//# sourceMappingURL=base.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/core/base.js.map b/grafast/grafserv/dist/core/base.js.map new file mode 100644 index 0000000000..8811d8af2f --- /dev/null +++ b/grafast/grafserv/dist/core/base.js.map @@ -0,0 +1 @@ +{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/core/base.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/envelop/index.d.ts b/grafast/grafserv/dist/envelop/index.d.ts new file mode 100644 index 0000000000..7959260b94 --- /dev/null +++ b/grafast/grafserv/dist/envelop/index.d.ts @@ -0,0 +1,19 @@ +import { type GetEnvelopedFn } from "@envelop/core"; +import type { GraphileConfig } from "graphile-config"; +declare global { + namespace GraphileConfig { + interface GrafservOptions { + getEnveloped?: GetEnvelopedFn; + } + } +} +declare global { + namespace GraphileConfig { + interface Plugins { + GrafservEnvelopPlugin: true; + } + } +} +export declare const GrafservEnvelopPlugin: GraphileConfig.Plugin; +export declare const GrafservEnvelopPreset: GraphileConfig.Preset; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/envelop/index.d.ts.map b/grafast/grafserv/dist/envelop/index.d.ts.map new file mode 100644 index 0000000000..c1aef1b852 --- /dev/null +++ b/grafast/grafserv/dist/envelop/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/envelop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EAIpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAKtD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB,UAAU,eAAe;YACvB,YAAY,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;SACpC;KACF;CACF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc,CAAC;QACvB,UAAU,OAAO;YACf,qBAAqB,EAAE,IAAI,CAAC;SAC7B;KACF;CACF;AAED,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,MA+DlD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,MAQlD,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/envelop/index.js b/grafast/grafserv/dist/envelop/index.js new file mode 100644 index 0000000000..e873763213 --- /dev/null +++ b/grafast/grafserv/dist/envelop/index.js @@ -0,0 +1,71 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GrafservEnvelopPreset = exports.GrafservEnvelopPlugin = void 0; +const tslib_1 = require("tslib"); +const core_1 = require("@envelop/core"); +const graphql = tslib_1.__importStar(require("graphql")); +const version_js_1 = require("../version.js"); +exports.GrafservEnvelopPlugin = { + name: "GrafservEnvelopPlugin", + version: version_js_1.version, + grafserv: { + middleware: { + setPreset(next, event) { + const { resolvedPreset } = event; + const userGetEnveloped = resolvedPreset.grafserv?.getEnveloped; + if (!userGetEnveloped) { + throw new Error(`GrafservEnvelopPlugin is enabled, but there is no 'preset.grafserv.getEnveloped' method to call`); + } + const originalGetExecutionConfig = event.getExecutionConfig; + event.getExecutionConfig = async function getExecutionConfig(ctx) { + const config = await originalGetExecutionConfig.call(this, ctx); + const getEnveloped = (0, core_1.envelop)({ + plugins: [ + // PERF: memoize argument if it makes any difference + (0, core_1.useEngine)({ + ...graphql, + execute: config.execute, + subscribe: config.subscribe, + specifiedRules: event.validationRules, + }), + (0, core_1.useSchema)(config.schema), + (0, core_1.useEnvelop)(userGetEnveloped), + ], + }); + const { schema, execute, subscribe, contextFactory, parse: envelopedParse, validate: envelopedValidate, } = getEnveloped(ctx); + const parseAndValidate = (query) => { + const source = new graphql.Source(query, "GraphQL HTTP Request"); + let document; + try { + document = envelopedParse(source); + } + catch (e) { + return { errors: [e] }; + } + const errors = envelopedValidate(schema, document); + return errors.length ? { errors } : { document }; + }; + return { + ...config, + contextValue: contextFactory(ctx), + schema, + execute, + subscribe, + parseAndValidate, + }; + }; + return next(); + }, + }, + }, +}; +exports.GrafservEnvelopPreset = { + plugins: [exports.GrafservEnvelopPlugin], + grafserv: { + // Let Envelop handle error masking + maskError(e) { + return e; + }, + }, +}; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/envelop/index.js.map b/grafast/grafserv/dist/envelop/index.js.map new file mode 100644 index 0000000000..0194f3ec08 --- /dev/null +++ b/grafast/grafserv/dist/envelop/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/envelop/index.ts"],"names":[],"mappings":";;;;AAAA,wCAMuB;AAEvB,yDAAmC;AAEnC,8CAAwC;AAkB3B,QAAA,qBAAqB,GAA0B;IAC1D,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAP,oBAAO;IAEP,QAAQ,EAAE;QACR,UAAU,EAAE;YACV,SAAS,CAAC,IAAI,EAAE,KAAK;gBACnB,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;gBACjC,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC;gBAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;gBACJ,CAAC;gBACD,MAAM,0BAA0B,GAAG,KAAK,CAAC,kBAAkB,CAAC;gBAC5D,KAAK,CAAC,kBAAkB,GAAG,KAAK,UAAU,kBAAkB,CAAC,GAAG;oBAC9D,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAChE,MAAM,YAAY,GAAG,IAAA,cAAO,EAAC;wBAC3B,OAAO,EAAE;4BACP,oDAAoD;4BACpD,IAAA,gBAAS,EAAC;gCACR,GAAG,OAAO;gCACV,OAAO,EAAE,MAAM,CAAC,OAAO;gCACvB,SAAS,EAAE,MAAM,CAAC,SAAS;gCAC3B,cAAc,EAAE,KAAK,CAAC,eAAe;6BACtC,CAAC;4BACF,IAAA,gBAAS,EAAC,MAAM,CAAC,MAAM,CAAC;4BACxB,IAAA,iBAAU,EAAC,gBAAgB,CAAC;yBAC7B;qBACF,CAAC,CAAC;oBACH,MAAM,EACJ,MAAM,EACN,OAAO,EACP,SAAS,EACT,cAAc,EACd,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;oBACtB,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAE,EAAE;wBACzC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;wBACjE,IAAI,QAAQ,CAAC;wBACb,IAAI,CAAC;4BACH,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;wBACpC,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzB,CAAC;wBACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;wBACnD,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;oBACnD,CAAC,CAAC;oBAEF,OAAO;wBACL,GAAG,MAAM;wBACT,YAAY,EAAE,cAAc,CAAC,GAAG,CAAC;wBACjC,MAAM;wBACN,OAAO;wBACP,SAAS;wBACT,gBAAgB;qBACjB,CAAC;gBACJ,CAAC,CAAC;gBACF,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;SACF;KACF;CACF,CAAC;AAEW,QAAA,qBAAqB,GAA0B;IAC1D,OAAO,EAAE,CAAC,6BAAqB,CAAC;IAChC,QAAQ,EAAE;QACR,mCAAmC;QACnC,SAAS,CAAC,CAAC;YACT,OAAO,CAAC,CAAC;QACX,CAAC;KACF;CACF,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/hooks.d.ts b/grafast/grafserv/dist/hooks.d.ts new file mode 100644 index 0000000000..985941fd54 --- /dev/null +++ b/grafast/grafserv/dist/hooks.d.ts @@ -0,0 +1,7 @@ +import { Middleware } from "graphile-config"; +declare const $$middleware: unique symbol; +export declare function getGrafservMiddleware(resolvedPreset: GraphileConfig.ResolvedPreset & { + [$$middleware]?: Middleware | null; +}): Middleware | null; +export {}; +//# sourceMappingURL=hooks.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/hooks.d.ts.map b/grafast/grafserv/dist/hooks.d.ts.map new file mode 100644 index 0000000000..d4422ad1b5 --- /dev/null +++ b/grafast/grafserv/dist/hooks.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAgB,MAAM,iBAAiB,CAAC;AAI3D,QAAA,MAAM,YAAY,eAAuB,CAAC;AAE1C,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,cAAc,CAAC,cAAc,GAAG;IAC9C,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;CACvE,wDAkEF"} \ No newline at end of file diff --git a/grafast/grafserv/dist/hooks.js b/grafast/grafserv/dist/hooks.js new file mode 100644 index 0000000000..55a6e9fac5 --- /dev/null +++ b/grafast/grafserv/dist/hooks.js @@ -0,0 +1,69 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getGrafservMiddleware = getGrafservMiddleware; +const grafast_1 = require("grafast"); +const graphile_config_1 = require("graphile-config"); +// We could use a global WeakMap, but storing directly onto the resolvedPreset +// should use more traditional garbage collection. +const $$middleware = Symbol("middleware"); +function getGrafservMiddleware(resolvedPreset) { + if (resolvedPreset[$$middleware]) { + return resolvedPreset[$$middleware]; + } + let middleware = null; + (0, graphile_config_1.orderedApply)(resolvedPreset.plugins, (p) => p.grafserv?.middleware, (name, fn, _plugin) => { + if (!middleware) + middleware = new graphile_config_1.Middleware(); + middleware.register(name, fn); + }); + // TODO: Delete this backwards compatibility + (0, graphile_config_1.orderedApply)(resolvedPreset.plugins, (p) => p.grafserv?.hooks, (name, fn, _plugin) => { + function resultThenNext(result, next) { + if ((0, grafast_1.isPromiseLike)(result)) { + return result.then(next); + } + else { + return next(); + } + } + if (!middleware) + middleware = new graphile_config_1.Middleware(); + // Backwards compatibility with the old hooks + switch (name) { + case "init": { + middleware.register("setPreset", (next, event) => { + const { resolvedPreset } = event; + const result = fn({ resolvedPreset }, event); + return resultThenNext(result, next); + }); + break; + } + case "ruruHTMLParts": { + middleware.register("ruruHTMLParts", (next, event) => { + const { resolvedPreset, request, htmlParts } = event; + const result = fn({ resolvedPreset }, htmlParts, { + request, + }); + return resultThenNext(result, next); + }); + break; + } + case "processGraphQLRequestBody": { + middleware.register("processGraphQLRequestBody", (next, event) => { + const { resolvedPreset } = event; + const result = fn({ resolvedPreset }, event); + return resultThenNext(result, next); + }); + break; + } + } + }); + try { + resolvedPreset[$$middleware] = middleware; + } + catch { + // Ignore - preset must be readonly + } + return middleware; +} +//# sourceMappingURL=hooks.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/hooks.js.map b/grafast/grafserv/dist/hooks.js.map new file mode 100644 index 0000000000..157826fc69 --- /dev/null +++ b/grafast/grafserv/dist/hooks.js.map @@ -0,0 +1 @@ +{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/index.d.ts b/grafast/grafserv/dist/index.d.ts new file mode 100644 index 0000000000..f2c7496c24 --- /dev/null +++ b/grafast/grafserv/dist/index.d.ts @@ -0,0 +1,122 @@ +import type { PromiseOrDirect } from "grafast"; +import type { ExecutionArgs, GraphQLError } from "grafast/graphql"; +import type { CallbackOrDescriptor, MiddlewareHandlers } from "graphile-config"; +import type { RuruHTMLParts } from "ruru/server"; +import type { GrafservPluginContext, InitEvent, MaskErrorFn, NormalizedRequestDigest, OnSubscribeEvent, ProcessGraphQLRequestBodyEvent, ProcessRequestEvent, RequestContentType, Result, RuruHTMLPartsEvent } from "./interfaces.js"; +export { convertErrorToErrorResult, convertHandlerResultToResult, GrafservBase, } from "./core/base.js"; +export type { BufferResult, BufferStreamResult, ErrorResult, EventStreamHeandlerResult, ExecutionConfig, GrafservBody, GrafservBodyBuffer, GrafservBodyJSON, GrafservBodyText, GrafservConfig, GraphQLHandlerResult, GraphQLIncrementalHandlerResult, HandlerResult, HTMLHandlerResult, JSONObject, JSONResult, JSONValue, NoContentHandlerResult, NoContentResult, NormalizedRequestDigest, ParsedGraphQLBody, ProcessGraphQLRequestBodyEvent, RequestDigest, Result, TextHandlerResult, ValidatedGraphQLBody, } from "./interfaces.js"; +export { DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES } from "./middleware/graphql.js"; +export { defaultMaskError } from "./options.js"; +export { getBodyFromFrameworkBody, getBodyFromRequest, handleErrors, httpError, makeGraphQLWSConfig, memo, normalizeConnectionParams, normalizeRequest, parseGraphQLJSONBody, processHeaders, } from "./utils.js"; +declare global { + namespace Grafast { + interface RequestContext { + http?: NormalizedRequestDigest; + } + } + namespace GraphileConfig { + interface Preset { + /** + * Configuration options for Grafserv + */ + grafserv?: GrafservOptions; + } + interface Plugin { + grafserv?: { + /** @deprecated Please use middleware instead */ + hooks?: { + [key in keyof GrafservHooks]?: CallbackOrDescriptor infer UResult ? (info: GrafservPluginContext, ...args: UArgs) => UResult : never>; + }; + middleware?: MiddlewareHandlers; + }; + } + interface GrafservOptions { + /** Port number to listen on */ + port?: number; + /** Host to listen on */ + host?: string; + /** The path at which GraphQL will be available; usually /graphql */ + graphqlPath?: string; + /** The path at which the GraphQL event stream would be made available; usually /graphql/stream */ + eventStreamPath?: string; + /** If true, allow GraphQL over GET requests. This has security ramifications, exercise caution. */ + graphqlOverGET?: boolean; + graphiql?: boolean; + /** If true, then we will render GraphiQL on GET requests to the /graphql endpoint */ + graphiqlOnGraphQLGET?: boolean; + /** The path at which GraphiQL will be available; usually / */ + graphiqlPath?: string; + /** Set true to enable watch mode */ + watch?: boolean; + /** The length, in bytes, for the largest request body that grafserv will accept */ + maxRequestLength?: number; + /** How long (in milliseconds) should we wait for a schema promise to resolve before sending a failure to the client? */ + schemaWaitTime?: number; + /** + * Use grafast 'string' optimization - response will be partially stringified + * already, use `stringifyPayload` before sending to the user + * + * @remarks + * + * This is a `grafserv` option rather than a `grafast` option because the + * server is responsible for stringifying the body before sending it to the + * user, via `stringifyPayload`. If we were to make this a `grafast` option + * then everything using grafast would be affected by it, and code expecting + * objects would break. + */ + outputDataAsString?: boolean; + /** + * Temporary hack to allow easy testing with graphql-http.com + */ + dangerouslyAllowAllCORSRequests?: boolean; + /** + * Should we enable a websockets transport if available? + */ + websockets?: boolean; + /** + * If you would like to customize the way in which errors are masked, you may + * pass your own error masking function here. You can also import + * `defaultMaskError` from `grafserv`. + */ + maskError?: MaskErrorFn; + /** + * By default `application/json` and `application/graphql` are supported + * (`DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES`). You may add + * `application/x-www-form-urlencoded` to the list, but be aware that + * doing so potentially opens you to CSRF issues even if you're not using + * CORS since this media type is handled specially by browsers - ensure + * that you have CSRF protections in place. + * + * Note further that if you're using CORS the other media types are not + * safe, and you should still use CSRF protection. + */ + allowedRequestContentTypes?: readonly RequestContentType[]; + /** + * How many documents should we cache the parse and validate result for? + * + * @defaultValue `500` + */ + parseAndValidateCacheSize?: number; + } + /** @deprecated Please use middleware instead */ + interface GrafservHooks { + /** @deprecated Please use middleware instead */ + init(event: InitEvent): PromiseOrDirect; + /** @deprecated Please use middleware instead */ + processGraphQLRequestBody(event: ProcessGraphQLRequestBodyEvent): PromiseOrDirect; + /** @deprecated Please use middleware instead */ + ruruHTMLParts(parts: RuruHTMLParts, extra: { + request: NormalizedRequestDigest; + }): PromiseOrDirect; + } + interface GrafservMiddleware { + setPreset(event: InitEvent): PromiseOrDirect; + processRequest(event: ProcessRequestEvent): PromiseOrDirect; + processGraphQLRequestBody(event: ProcessGraphQLRequestBodyEvent): PromiseOrDirect; + ruruHTMLParts(event: RuruHTMLPartsEvent): PromiseOrDirect; + onSubscribe(event: OnSubscribeEvent): TruePromiseOrDirect; + } + } +} +export type TruePromiseOrDirect = Promise | T; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/index.d.ts.map b/grafast/grafserv/dist/index.d.ts.map new file mode 100644 index 0000000000..f60a12cb13 --- /dev/null +++ b/grafast/grafserv/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/index.js b/grafast/grafserv/dist/index.js new file mode 100644 index 0000000000..fcd3a0ca85 --- /dev/null +++ b/grafast/grafserv/dist/index.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.processHeaders = exports.parseGraphQLJSONBody = exports.normalizeRequest = exports.normalizeConnectionParams = exports.memo = exports.makeGraphQLWSConfig = exports.httpError = exports.handleErrors = exports.getBodyFromRequest = exports.getBodyFromFrameworkBody = exports.defaultMaskError = exports.DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES = exports.GrafservBase = exports.convertHandlerResultToResult = exports.convertErrorToErrorResult = void 0; +var base_js_1 = require("./core/base.js"); +Object.defineProperty(exports, "convertErrorToErrorResult", { enumerable: true, get: function () { return base_js_1.convertErrorToErrorResult; } }); +Object.defineProperty(exports, "convertHandlerResultToResult", { enumerable: true, get: function () { return base_js_1.convertHandlerResultToResult; } }); +Object.defineProperty(exports, "GrafservBase", { enumerable: true, get: function () { return base_js_1.GrafservBase; } }); +var graphql_js_1 = require("./middleware/graphql.js"); +Object.defineProperty(exports, "DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES", { enumerable: true, get: function () { return graphql_js_1.DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES; } }); +var options_js_1 = require("./options.js"); +Object.defineProperty(exports, "defaultMaskError", { enumerable: true, get: function () { return options_js_1.defaultMaskError; } }); +var utils_js_1 = require("./utils.js"); +Object.defineProperty(exports, "getBodyFromFrameworkBody", { enumerable: true, get: function () { return utils_js_1.getBodyFromFrameworkBody; } }); +Object.defineProperty(exports, "getBodyFromRequest", { enumerable: true, get: function () { return utils_js_1.getBodyFromRequest; } }); +Object.defineProperty(exports, "handleErrors", { enumerable: true, get: function () { return utils_js_1.handleErrors; } }); +Object.defineProperty(exports, "httpError", { enumerable: true, get: function () { return utils_js_1.httpError; } }); +Object.defineProperty(exports, "makeGraphQLWSConfig", { enumerable: true, get: function () { return utils_js_1.makeGraphQLWSConfig; } }); +Object.defineProperty(exports, "memo", { enumerable: true, get: function () { return utils_js_1.memo; } }); +Object.defineProperty(exports, "normalizeConnectionParams", { enumerable: true, get: function () { return utils_js_1.normalizeConnectionParams; } }); +Object.defineProperty(exports, "normalizeRequest", { enumerable: true, get: function () { return utils_js_1.normalizeRequest; } }); +Object.defineProperty(exports, "parseGraphQLJSONBody", { enumerable: true, get: function () { return utils_js_1.parseGraphQLJSONBody; } }); +Object.defineProperty(exports, "processHeaders", { enumerable: true, get: function () { return utils_js_1.processHeaders; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/index.js.map b/grafast/grafserv/dist/index.js.map new file mode 100644 index 0000000000..43e45e2ea0 --- /dev/null +++ b/grafast/grafserv/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAkBA,0CAIwB;AAHtB,oHAAA,yBAAyB,OAAA;AACzB,uHAAA,4BAA4B,OAAA;AAC5B,uGAAA,YAAY,OAAA;AA8Bd,sDAAgF;AAAvE,mIAAA,qCAAqC,OAAA;AAC9C,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AACzB,uCAWoB;AAVlB,oHAAA,wBAAwB,OAAA;AACxB,8GAAA,kBAAkB,OAAA;AAClB,wGAAA,YAAY,OAAA;AACZ,qGAAA,SAAS,OAAA;AACT,+GAAA,mBAAmB,OAAA;AACnB,gGAAA,IAAI,OAAA;AACJ,qHAAA,yBAAyB,OAAA;AACzB,4GAAA,gBAAgB,OAAA;AAChB,gHAAA,oBAAoB,OAAA;AACpB,0GAAA,cAAc,OAAA"} \ No newline at end of file diff --git a/grafast/grafserv/dist/interfaces.d.ts b/grafast/grafserv/dist/interfaces.d.ts new file mode 100644 index 0000000000..c57f38485c --- /dev/null +++ b/grafast/grafserv/dist/interfaces.d.ts @@ -0,0 +1,205 @@ +import "graphile-config"; +import type { execute, PromiseOrDirect, SafeError, subscribe } from "grafast"; +import type { AsyncExecutionResult, FormattedExecutionResult, GraphQLError, GraphQLFormattedError, GraphQLSchema, ValidationRule } from "grafast/graphql"; +import type { Context, SubscribeMessage } from "graphql-ws"; +import type { RuruHTMLParts } from "ruru/server"; +import type { GrafservBase } from "."; +import type { makeParseAndValidateFunction } from "./middleware/graphql"; +import type { OptionsFromConfig } from "./options"; +export type ContextCallback = (requestContext: Grafast.RequestContext) => Grafast.Context; +export interface GrafservConfig { + schema: GraphQLSchema | PromiseLike; + preset?: GraphileConfig.Preset; +} +export type RequestContentType = "application/json" | "application/graphql" | "application/x-www-form-urlencoded"; +/** + * Represents the core parameters from the GraphQL request, these may not yet + * be fully validated to allow for things such as persisted operations to kick + * in later. + */ +export interface ParsedGraphQLBody { + id: unknown; + documentId: unknown; + query: unknown; + operationName: unknown; + variableValues: unknown; + extensions: unknown; +} +/** + * The validated GraphQL request parameters, after any transforms (such as + * persisted operations) are applied; ready to be fed to Grafast. + */ +export interface ValidatedGraphQLBody { + query: string; + operationName: string | undefined; + variableValues: Record | undefined; + extensions: Record | undefined; +} +export interface GrafservPluginContext { + resolvedPreset: GraphileConfig.ResolvedPreset; +} +export interface SetPresetEvent { + resolvedPreset: GraphileConfig.ResolvedPreset; + getExecutionConfig: (this: GrafservBase, ctx: Partial) => PromiseOrDirect; + validationRules: ValidationRule[]; +} +/** @deprecated Use SetPresetEvent instead */ +export type InitEvent = SetPresetEvent; +export interface ProcessGraphQLRequestBodyEvent { + resolvedPreset: GraphileConfig.ResolvedPreset; + body: ParsedGraphQLBody; + request?: NormalizedRequestDigest; + graphqlWsContext?: Context; +} +export interface ProcessRequestEvent { + resolvedPreset: GraphileConfig.ResolvedPreset; + requestDigest: RequestDigest; + instance: GrafservBase; +} +export interface RuruHTMLPartsEvent { + resolvedPreset: GraphileConfig.ResolvedPreset; + htmlParts: RuruHTMLParts; + request: NormalizedRequestDigest; +} +export interface OnSubscribeEvent { + resolvedPreset: GraphileConfig.ResolvedPreset; + ctx: Context | undefined, unknown>; + message: SubscribeMessage; +} +export interface GrafservBodyBuffer { + type: "buffer"; + buffer: Buffer; +} +export interface GrafservBodyText { + type: "text"; + text: string; +} +export interface GrafservBodyJSON { + type: "json"; + json: JSONValue; +} +export type GrafservBody = GrafservBodyBuffer | GrafservBodyText | GrafservBodyJSON; +export declare const $$normalizedHeaders: unique symbol; +export interface RequestDigest { + method: "HEAD" | "GET" | "POST" | string; + httpVersionMajor: number; + httpVersionMinor: number; + /** True if HTTPS was used, false otherwise */ + isSecure: boolean; + /** The path segment of the URL, not including the query parameters */ + path: string; + headers: Record; + getQueryParams: () => PromiseOrDirect>; + getBody(): PromiseOrDirect; + requestContext: Partial; + /** + * If your server would prefer to receive the JSON objects in memory rather + * than having the response written directly out as a string/buffer, set this + * true. It does not guarantee that you'll receive JSON, but it does state + * your preference. + */ + preferJSON?: boolean; + [$$normalizedHeaders]?: any; +} +export interface NormalizedRequestDigest extends RequestDigest { + method: "GET" | "POST" | string; + preferJSON: boolean; + getHeader(name: string): string | undefined; + /** @deprecated use getHeader unless the original case is essential. */ + headers: Record; +} +interface IHandlerResult { + type: string; + request: NormalizedRequestDigest; + dynamicOptions: OptionsFromConfig; + statusCode?: number; +} +export interface HTMLHandlerResult extends IHandlerResult { + type: "html"; + payload: Buffer; +} +export interface TextHandlerResult extends IHandlerResult { + type: "text"; + payload: Buffer; +} +export interface GraphQLHandlerResult extends IHandlerResult { + type: "graphql"; + contentType: string; + payload: FormattedExecutionResult; + outputDataAsString?: boolean; +} +/** @see {@link https://github.com/glasser/graphql-over-http/blob/dac9638459bb17dd3ade889334fc2fadee9d11e5/rfcs/IncrementalDelivery.md} */ +export interface GraphQLIncrementalHandlerResult extends IHandlerResult { + type: "graphqlIncremental"; + iterator: AsyncGenerator; + outputDataAsString?: boolean; +} +export interface NoContentHandlerResult extends IHandlerResult { + type: "noContent"; +} +export interface EventStreamEvent { + /** The name of the event. Use simple names. Don't put newlines in it! */ + event: string; + /** The data for this event. We'll automatically split this on newlines for you */ + data?: string; + id?: string; + /** integer number of milliseconds indicating how long to wait before reconnecting if connection is lost */ + retry?: number; +} +export interface EventStreamHeandlerResult extends IHandlerResult { + type: "event-stream"; + payload: AsyncIterable; +} +export type HandlerResult = HTMLHandlerResult | GraphQLHandlerResult | GraphQLIncrementalHandlerResult | TextHandlerResult | EventStreamHeandlerResult | NoContentHandlerResult; +export type SchemaChangeEvent = { + event: "change"; + data: "schema"; +}; +export type JSONValue = null | boolean | number | string | JSONValue[] | JSONObject; +export interface JSONObject { + [key: string]: JSONValue; +} +export interface ErrorResult { + type: "error"; + statusCode: number; + headers: Record; + error: Error | SafeError; +} +export interface BufferResult { + type: "buffer"; + statusCode: number; + headers: Record; + buffer: Buffer; +} +export interface JSONResult { + type: "json"; + statusCode: number; + headers: Record; + json: JSONValue; +} +export interface BufferStreamResult { + type: "bufferStream"; + statusCode: number; + headers: Record; + /** If true, setNoDelay, etc */ + lowLatency: boolean; + bufferIterator: AsyncGenerator; +} +export interface NoContentResult { + type: "noContent"; + statusCode: 204; + headers: Record; +} +export type Result = ErrorResult | BufferResult | JSONResult | BufferStreamResult | NoContentResult; +export type DynamicOptions = OptionsFromConfig & InitEvent; +export interface ExecutionConfig { + schema: GraphQLSchema; + parseAndValidate: ReturnType; + resolvedPreset: GraphileConfig.ResolvedPreset; + execute: typeof execute; + subscribe: typeof subscribe; + contextValue: Record; +} +export type MaskErrorFn = (error: GraphQLError) => GraphQLError | GraphQLFormattedError; +export {}; +//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/interfaces.d.ts.map b/grafast/grafserv/dist/interfaces.d.ts.map new file mode 100644 index 0000000000..4dfd7007da --- /dev/null +++ b/grafast/grafserv/dist/interfaces.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/interfaces.js b/grafast/grafserv/dist/interfaces.js new file mode 100644 index 0000000000..69d8ce9100 --- /dev/null +++ b/grafast/grafserv/dist/interfaces.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.$$normalizedHeaders = void 0; +require("graphile-config"); +exports.$$normalizedHeaders = Symbol("normalizedHeaders"); +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/interfaces.js.map b/grafast/grafserv/dist/interfaces.js.map new file mode 100644 index 0000000000..24370c319f --- /dev/null +++ b/grafast/grafserv/dist/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";;;AAAA,2BAAyB;AAkHZ,QAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/mapIterator.d.ts b/grafast/grafserv/dist/mapIterator.d.ts new file mode 100644 index 0000000000..7d3763f059 --- /dev/null +++ b/grafast/grafserv/dist/mapIterator.d.ts @@ -0,0 +1,2 @@ +export declare function mapIterator(iterable: AsyncIterable, cb: (payload: T) => U, end?: () => U, initial?: () => U): AsyncGenerator; +//# sourceMappingURL=mapIterator.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/mapIterator.d.ts.map b/grafast/grafserv/dist/mapIterator.d.ts.map new file mode 100644 index 0000000000..b3b467510a --- /dev/null +++ b/grafast/grafserv/dist/mapIterator.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"mapIterator.d.ts","sourceRoot":"","sources":["../src/mapIterator.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAC9B,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAC1B,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,EACrB,GAAG,CAAC,EAAE,MAAM,CAAC,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,GAChB,cAAc,CAAC,CAAC,CAAC,CA6DnB"} \ No newline at end of file diff --git a/grafast/grafserv/dist/mapIterator.js b/grafast/grafserv/dist/mapIterator.js new file mode 100644 index 0000000000..636ef16480 --- /dev/null +++ b/grafast/grafserv/dist/mapIterator.js @@ -0,0 +1,67 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mapIterator = mapIterator; +function mapIterator(iterable, cb, end, initial) { + const iterator = iterable[Symbol.asyncIterator](); + /** + * -1 - starting + * 0 - normal + * 1 - ending + * 2 - ended + */ + let status = -1; + const mappedIterator = { + async [Symbol.asyncDispose]() { + await this.return(undefined); + }, + next() { + if (status === -1) { + status = 0; + if (typeof initial === "function") { + return Promise.resolve({ value: initial(), done: false }); + } + } + if (status === 1) { + status = 2; + } + // NO 'else' here! + if (status === 2) { + return Promise.resolve({ value: undefined, done: true }); + } + const next = iterator.next(); + return next.then((v) => { + if (v.done) { + if (v.value !== undefined) { + throw new Error("Invalid assumption; tell Benjie he did bad."); + } + if (end) { + status = 1; + return { value: end(), done: false }; + } + else { + status = 2; + return { value: undefined, done: true }; + } + } + else { + return { value: cb(v.value), done: false }; + } + }); + }, + return(value) { + status = 2; + iterator.return?.(value); + return Promise.resolve({ value: undefined, done: true }); + }, + throw(error) { + status = 2; + iterator.throw?.(error); + return Promise.reject(error); + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + return mappedIterator; +} +//# sourceMappingURL=mapIterator.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/mapIterator.js.map b/grafast/grafserv/dist/mapIterator.js.map new file mode 100644 index 0000000000..df60feaa87 --- /dev/null +++ b/grafast/grafserv/dist/mapIterator.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mapIterator.js","sourceRoot":"","sources":["../src/mapIterator.ts"],"names":[],"mappings":";;AAAA,kCAkEC;AAlED,SAAgB,WAAW,CACzB,QAA0B,EAC1B,EAAqB,EACrB,GAAa,EACb,OAAiB;IAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IAClD;;;;;OAKG;IACH,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;IAChB,MAAM,cAAc,GAAsB;QACxC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACzB,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI;YACF,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClB,MAAM,GAAG,CAAC,CAAC;gBACX,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;oBAClC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YACD,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,MAAM,GAAG,CAAC,CAAC;YACb,CAAC;YACD,kBAAkB;YAClB,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrB,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBACX,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC1B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBACjE,CAAC;oBACD,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,GAAG,CAAC,CAAC;wBACX,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACN,MAAM,GAAG,CAAC,CAAC;wBACX,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;oBAC1C,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,KAAK;YACV,MAAM,GAAG,CAAC,CAAC;YACX,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,GAAG,CAAC,CAAC;YACX,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphiql.d.ts b/grafast/grafserv/dist/middleware/graphiql.d.ts new file mode 100644 index 0000000000..d6bfafe496 --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphiql.d.ts @@ -0,0 +1,6 @@ +import type { PromiseOrDirect } from "grafast"; +import type { Middleware } from "graphile-config"; +import type { HandlerResult, NormalizedRequestDigest } from "../interfaces.js"; +import type { OptionsFromConfig } from "../options.js"; +export declare function makeGraphiQLHandler(resolvedPreset: GraphileConfig.ResolvedPreset, middleware: Middleware | null, dynamicOptions: OptionsFromConfig): (request: NormalizedRequestDigest) => PromiseOrDirect; +//# sourceMappingURL=graphiql.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphiql.d.ts.map b/grafast/grafserv/dist/middleware/graphiql.d.ts.map new file mode 100644 index 0000000000..a255e646a7 --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphiql.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"graphiql.d.ts","sourceRoot":"","sources":["../../src/middleware/graphiql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,cAAc,CAAC,cAAc,EAC7C,UAAU,EAAE,UAAU,CAAC,cAAc,CAAC,kBAAkB,CAAC,GAAG,IAAI,EAChE,cAAc,EAAE,iBAAiB,GAChC,CAAC,OAAO,EAAE,uBAAuB,KAAK,eAAe,CAAC,aAAa,CAAC,CAyCtE"} \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphiql.js b/grafast/grafserv/dist/middleware/graphiql.js new file mode 100644 index 0000000000..e56190b217 --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphiql.js @@ -0,0 +1,43 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.makeGraphiQLHandler = makeGraphiQLHandler; +const server_1 = require("ruru/server"); +const utils_js_1 = require("../utils.js"); +function makeGraphiQLHandler(resolvedPreset, middleware, dynamicOptions) { + const { htmlParts: htmlPartsFromConfig } = resolvedPreset?.ruru ?? {}; + const unhookedHTMLParts = { + ...server_1.defaultHTMLParts, + ...htmlPartsFromConfig, + }; + return async (request) => { + let htmlParts = unhookedHTMLParts; + if (middleware != null && middleware.middleware.ruruHTMLParts != null) { + htmlParts = { + ...(0, server_1.makeHTMLParts)(), + ...htmlPartsFromConfig, + }; + await middleware.run("ruruHTMLParts", { + resolvedPreset, + htmlParts, + request, + }, utils_js_1.noop); + } + const config = { + endpoint: dynamicOptions.graphqlPath, + // TODO: websocket endpoint + debugTools: dynamicOptions.explain === true + ? ["explain", "plan"] + : dynamicOptions.explain === false + ? [] + : dynamicOptions.explain, + }; + return { + statusCode: 200, + request, + dynamicOptions, + type: "html", + payload: Buffer.from((0, server_1.ruruHTML)(config, htmlParts), "utf8"), + }; + }; +} +//# sourceMappingURL=graphiql.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphiql.js.map b/grafast/grafserv/dist/middleware/graphiql.js.map new file mode 100644 index 0000000000..f1303e75b4 --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphiql.js.map @@ -0,0 +1 @@ +{"version":3,"file":"graphiql.js","sourceRoot":"","sources":["../../src/middleware/graphiql.ts"],"names":[],"mappings":";;AASA,kDA6CC;AAnDD,wCAAwE;AAIxE,0CAAmC;AAEnC,SAAgB,mBAAmB,CACjC,cAA6C,EAC7C,UAAgE,EAChE,cAAiC;IAEjC,MAAM,EAAE,SAAS,EAAE,mBAAmB,EAAE,GAAG,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC;IACtE,MAAM,iBAAiB,GAAkB;QACvC,GAAG,yBAAgB;QACnB,GAAG,mBAAmB;KACvB,CAAC;IACF,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,SAAS,GAAG,iBAAkB,CAAC;QACnC,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC;YACtE,SAAS,GAAG;gBACV,GAAG,IAAA,sBAAa,GAAE;gBAClB,GAAG,mBAAmB;aACvB,CAAC;YACF,MAAM,UAAU,CAAC,GAAG,CAClB,eAAe,EACf;gBACE,cAAc;gBACd,SAAS;gBACT,OAAO;aACR,EACD,eAAI,CACL,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAqB;YAC/B,QAAQ,EAAE,cAAc,CAAC,WAAW;YACpC,2BAA2B;YAC3B,UAAU,EACR,cAAc,CAAC,OAAO,KAAK,IAAI;gBAC7B,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC;gBACrB,CAAC,CAAC,cAAc,CAAC,OAAO,KAAK,KAAK;oBAChC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAE,cAAc,CAAC,OAAiB;SAC1C,CAAC;QACF,OAAO;YACL,UAAU,EAAE,GAAG;YACf,OAAO;YACP,cAAc;YACd,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,IAAA,iBAAQ,EAAC,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC;SAC1D,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphql.d.ts b/grafast/grafserv/dist/middleware/graphql.d.ts new file mode 100644 index 0000000000..daffccddcd --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphql.d.ts @@ -0,0 +1,27 @@ +import type { PromiseOrDirect } from "grafast"; +import type { DocumentNode, GraphQLSchema } from "grafast/graphql"; +import * as graphql from "grafast/graphql"; +import type { GrafservBase } from "../index.js"; +import type { DynamicOptions, HandlerResult, NormalizedRequestDigest, ParsedGraphQLBody, ValidatedGraphQLBody } from "../interfaces.js"; +export declare function makeParseAndValidateFunction(schema: GraphQLSchema, resolvedPreset: GraphileConfig.ResolvedPreset, dynamicOptions: DynamicOptions): (query: string) => { + document: DocumentNode; + errors?: undefined; +} | { + document?: undefined; + errors: readonly graphql.GraphQLError[]; +}; +/** + * The default allowed request content types do not include + * `application/x-www-form-urlencoded` because that is treated specially by + * browsers (e.g. it can be submitted cross origins without CORS). + * + * If you're using CORS then no media type is CSRF safe - it's up to you to + * manage your CSRF protection. + */ +export declare const DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES: readonly ("application/json" | "application/graphql")[]; +export declare const APPLICATION_JSON = "application/json;charset=utf-8"; +export declare const APPLICATION_GRAPHQL_RESPONSE_JSON = "application/graphql-response+json;charset=utf-8"; +export declare const TEXT_HTML = "text/html;charset=utf-8"; +export declare function validateGraphQLBody(parsed: ParsedGraphQLBody): ValidatedGraphQLBody; +export declare const makeGraphQLHandler: (instance: GrafservBase) => (request: NormalizedRequestDigest, graphiqlHandler?: (request: NormalizedRequestDigest) => PromiseOrDirect) => PromiseOrDirect; +//# sourceMappingURL=graphql.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphql.d.ts.map b/grafast/grafserv/dist/middleware/graphql.d.ts.map new file mode 100644 index 0000000000..70a523fc30 --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphql.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/middleware/graphql.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAwB,eAAe,EAAE,MAAM,SAAS,CAAC;AAErE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,uBAAuB,EACvB,iBAAiB,EAEjB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAgB1B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,cAAc,CAAC,cAAc,EAC7C,cAAc,EAAE,cAAc,WAcG,MAAM;cAXvB,YAAY;aAAW,SAAS;;eAC/B,SAAS;YAAU,SAAS,OAAO,CAAC,YAAY,EAAE;EA4CpE;AA6BD;;;;;;;GAOG;AACH,eAAO,MAAM,qCAAqC,yDAOR,CAAC;AA6G3C,eAAO,MAAM,gBAAgB,mCAAmC,CAAC;AACjE,eAAO,MAAM,iCAAiC,oDACK,CAAC;AACpD,eAAO,MAAM,SAAS,4BAA4B,CAAC;AAiBnD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,iBAAiB,GACxB,oBAAoB,CAsBtB;AAoOD,eAAO,MAAM,kBAAkB,GAAI,UAAU,YAAY,MAIrD,SAAS,uBAAuB,EAChC,kBAAkB,CAChB,OAAO,EAAE,uBAAuB,KAC7B,eAAe,CAAC,aAAa,GAAG,IAAI,CAAC,KACzC,eAAe,CAAC,aAAa,GAAG,IAAI,CAIxC,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphql.js b/grafast/grafserv/dist/middleware/graphql.js new file mode 100644 index 0000000000..8b493226ff --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphql.js @@ -0,0 +1,458 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.makeGraphQLHandler = exports.TEXT_HTML = exports.APPLICATION_GRAPHQL_RESPONSE_JSON = exports.APPLICATION_JSON = exports.DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES = void 0; +exports.makeParseAndValidateFunction = makeParseAndValidateFunction; +exports.validateGraphQLBody = validateGraphQLBody; +const tslib_1 = require("tslib"); +const node_querystring_1 = require("node:querystring"); +const lru_1 = require("@graphile/lru"); +const crypto_1 = require("crypto"); +const grafast_1 = require("grafast"); +const graphql = tslib_1.__importStar(require("grafast/graphql")); +const accept_js_1 = require("../accept.js"); +const interfaces_js_1 = require("../interfaces.js"); +const utils_js_1 = require("../utils.js"); +const { getOperationAST, GraphQLError, parse, Source, validate } = graphql; +let lastString; +let lastHash; +const calculateQueryHash = (queryString) => { + if (queryString !== lastString) { + lastString = queryString; + lastHash = (0, crypto_1.createHash)("sha1").update(queryString).digest("base64"); + } + return lastHash; +}; +function makeParseAndValidateFunction(schema, resolvedPreset, dynamicOptions) { + const maxLength = resolvedPreset.grafserv?.parseAndValidateCacheSize ?? 500; + const parseAndValidationCache = maxLength >= 1 + ? new lru_1.LRU({ + maxLength, + }) + : null; + let lastParseAndValidateQuery; + let lastParseAndValidateResult; + function parseAndValidate(query) { + if (lastParseAndValidateQuery === query) { + return lastParseAndValidateResult; + } + const hash = query.length > 500 ? calculateQueryHash(query) : query; + const cached = parseAndValidationCache?.get(hash); + if (cached !== undefined) { + lastParseAndValidateQuery = query; + lastParseAndValidateResult = cached; + return cached; + } + const source = new Source(query, "GraphQL HTTP Request"); + let document; + try { + document = parse(source); + } + catch (e) { + const result = { errors: [e] }; + parseAndValidationCache?.set(hash, result); + lastParseAndValidateQuery = query; + lastParseAndValidateResult = result; + return result; + } + const errors = validate(schema, document, dynamicOptions.validationRules); + const result = errors.length + ? { errors } + : { document }; + parseAndValidationCache?.set(hash, result); + lastParseAndValidateQuery = query; + lastParseAndValidateResult = result; + return result; + } + return parseAndValidate; +} +function parseGraphQLQueryParams(params) { + const id = params.id; + const documentId = params.documentId; + const query = params.query; + const operationName = params.operationName ?? undefined; + const variablesString = params.variables ?? undefined; + const variableValues = typeof variablesString === "string" + ? JSON.parse(variablesString) + : undefined; + const extensionsString = params.extensions ?? undefined; + const extensions = typeof extensionsString === "string" + ? JSON.parse(extensionsString) + : undefined; + return { + id, + documentId, + query, + operationName, + variableValues, + extensions, + }; +} +/** + * The default allowed request content types do not include + * `application/x-www-form-urlencoded` because that is treated specially by + * browsers (e.g. it can be submitted cross origins without CORS). + * + * If you're using CORS then no media type is CSRF safe - it's up to you to + * manage your CSRF protection. + */ +exports.DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES = Object.freeze([ + "application/json", + "application/graphql", + // CSRF risk: + // "application/x-www-form-urlencoded", + // Not supported, AND CSRF risk: + // 'multipart/form-data' +]); +function parseGraphQLBody(resolvedPreset, request, body) { + const supportedContentTypes = resolvedPreset.grafserv?.allowedRequestContentTypes ?? + exports.DEFAULT_ALLOWED_REQUEST_CONTENT_TYPES; + const contentType = request[interfaces_js_1.$$normalizedHeaders]["content-type"]; + if (!contentType) { + throw (0, utils_js_1.httpError)(400, "Could not determine the Content-Type of the request"); + } + const semi = contentType.indexOf(";"); + const rawContentType = semi >= 0 ? contentType.slice(0, semi).trim() : contentType.trim(); + if (!supportedContentTypes.includes(rawContentType)) { + throw (0, utils_js_1.httpError)(415, `Media type '${rawContentType}' is not allowed`); + } + const ct = rawContentType; + // FIXME: we should probably at least look at the parameters... e.g. throw if encoding !== utf-8 + switch (ct) { + case "application/json": { + switch (body.type) { + case "buffer": { + return (0, utils_js_1.parseGraphQLJSONBody)(JSON.parse(body.buffer.toString("utf8"))); + } + case "text": { + return (0, utils_js_1.parseGraphQLJSONBody)(JSON.parse(body.text)); + } + case "json": { + return (0, utils_js_1.parseGraphQLJSONBody)(body.json); + } + default: { + const never = body; + throw (0, utils_js_1.httpError)(400, `Do not understand type ${never.type}`); + } + } + } + case "application/x-www-form-urlencoded": { + switch (body.type) { + case "buffer": { + return parseGraphQLQueryParams((0, node_querystring_1.parse)(body.buffer.toString("utf8"))); + } + case "text": { + return parseGraphQLQueryParams((0, node_querystring_1.parse)(body.text)); + } + case "json": { + if (body.json == null || + typeof body.json !== "object" || + Array.isArray(body.json)) { + throw (0, utils_js_1.httpError)(400, `Invalid body`); + } + return parseGraphQLQueryParams(body.json); + } + default: { + const never = body; + throw (0, utils_js_1.httpError)(400, `Do not understand type ${never.type}`); + } + } + } + case "application/graphql": { + // ENHANCE: I have a vague feeling that people that do this pass variables via the query string? + switch (body.type) { + case "text": { + return { + id: undefined, + documentId: undefined, + query: body.text, + operationName: undefined, + variableValues: undefined, + extensions: undefined, + }; + } + case "buffer": { + return { + id: undefined, + documentId: undefined, + query: body.buffer.toString("utf8"), + operationName: undefined, + variableValues: undefined, + extensions: undefined, + }; + } + case "json": { + // ERRORS: non-standard; perhaps raise a warning? + return (0, utils_js_1.parseGraphQLJSONBody)(body.json); + } + default: { + const never = body; + throw (0, utils_js_1.httpError)(400, `Do not understand type ${never.type}`); + } + } + } + default: { + const never = ct; + throw (0, utils_js_1.httpError)(415, `Media type '${never}' is not understood`); + } + } +} +exports.APPLICATION_JSON = "application/json;charset=utf-8"; +exports.APPLICATION_GRAPHQL_RESPONSE_JSON = "application/graphql-response+json;charset=utf-8"; +exports.TEXT_HTML = "text/html;charset=utf-8"; +/** https://graphql.github.io/graphql-over-http/draft/#sec-Legacy-Watershed */ +const isAfterWatershed = Date.now() >= +new Date(2025, 0, 1); +const GRAPHQL_TYPES = isAfterWatershed + ? [exports.APPLICATION_GRAPHQL_RESPONSE_JSON, exports.APPLICATION_JSON] + : [exports.APPLICATION_JSON, exports.APPLICATION_GRAPHQL_RESPONSE_JSON]; +const graphqlAcceptMatcher = (0, accept_js_1.makeAcceptMatcher)([...GRAPHQL_TYPES]); +const graphqlOrHTMLAcceptMatcher = (0, accept_js_1.makeAcceptMatcher)([ + ...GRAPHQL_TYPES, + // Must be lowest priority, otherwise GraphiQL may override GraphQL in some + // situations + exports.TEXT_HTML, +]); +function validateGraphQLBody(parsed) { + const { query, operationName, variableValues, extensions } = parsed; + if (typeof query !== "string") { + throw (0, utils_js_1.httpError)(400, "query must be a string"); + } + if (operationName != null && typeof operationName !== "string") { + throw (0, utils_js_1.httpError)(400, "operationName, if given, must be a string"); + } + if (variableValues != null && + (typeof variableValues !== "object" || Array.isArray(variableValues))) { + throw (0, utils_js_1.httpError)(400, "Invalid variables; expected JSON-encoded object"); + } + if (extensions != null && + (typeof extensions !== "object" || Array.isArray(extensions))) { + throw (0, utils_js_1.httpError)(400, "Invalid extensions; expected JSON-encoded object"); + } + return parsed; +} +const _makeGraphQLHandlerInternal = (instance) => { + const { dynamicOptions, resolvedPreset, middleware, grafastMiddleware } = instance; + return async (request, graphiqlHandler) => { + const accept = request[interfaces_js_1.$$normalizedHeaders].accept; + // Do they want HTML, or do they want GraphQL? + const chosenContentType = request.method === "GET" && + dynamicOptions.graphiqlOnGraphQLGET && + graphiqlHandler + ? graphqlOrHTMLAcceptMatcher(accept) + : graphqlAcceptMatcher(accept); + if (chosenContentType === exports.TEXT_HTML) { + // They want HTML -> Ruru + return graphiqlHandler(request); + } + else if (chosenContentType === exports.APPLICATION_JSON || + chosenContentType === exports.APPLICATION_GRAPHQL_RESPONSE_JSON) { + // They want GraphQL + if (request.method === "POST" || + (dynamicOptions.graphqlOverGET && request.method === "GET")) { + /* continue */ + } + else { + return { + type: "graphql", + request, + dynamicOptions, + statusCode: 405, + contentType: "application/json", + payload: { + errors: [new GraphQLError("Method not supported, please use POST")], + }, + }; + } + } + else { + // > Respond with a 406 Not Acceptable status code and stop processing the request. + // https://graphql.github.io/graphql-over-http/draft/#sel-DANHELDAACNA4rR + return { + type: "graphql", + request, + dynamicOptions, + statusCode: 406, + contentType: "application/json", + payload: { + errors: [ + new GraphQLError("Could not find a supported media type; consider adding 'application/json' or 'application/graphql-response+json' to your Accept header."), + ], + }, + }; + } + // If we get here, we're handling a GraphQL request + const isLegacy = chosenContentType === exports.APPLICATION_JSON; + let body; + try { + // Read the body + const parsedBody = request.method === "POST" + ? parseGraphQLBody(resolvedPreset, request, await request.getBody()) + : parseGraphQLQueryParams(await request.getQueryParams()); + // Apply our middleware (if any) to the body (they will mutate the body in place) + if (middleware != null && + middleware.middleware.processGraphQLRequestBody != null) { + const hookResult = middleware.run("processGraphQLRequestBody", { + resolvedPreset, + body: parsedBody, + request, + }, utils_js_1.noop); + if (hookResult != null) { + await hookResult; + } + } + // Validate that the body is of the right shape + body = validateGraphQLBody(parsedBody); + } + catch (e) { + if (e instanceof grafast_1.SafeError) { + throw e; + } + else if (typeof e.statusCode === "number" && + e.statusCode >= 400 && + e.statusCode < 600) { + throw e; + } + else { + // ENHANCE: should maybe handle more specific issues here. See examples: + // https://graphql.github.io/graphql-over-http/draft/#sec-application-json.Examples + throw (0, utils_js_1.httpError)(400, `Parsing failed, please check that the data you're sending to the server is correct`); + } + } + const grafastCtx = { + ...request.requestContext, + http: request, + }; + const { schema, parseAndValidate, execute, + // subscribe, + contextValue, + // dynamicOptions? + } = await instance.getExecutionConfig(grafastCtx); + const outputDataAsString = dynamicOptions.outputDataAsString; + const { maskIterator, maskPayload, maskError } = dynamicOptions; + const { query, operationName, variableValues } = body; + const { errors, document } = parseAndValidate(query); + if (errors !== undefined) { + return { + type: "graphql", + request, + dynamicOptions, + statusCode: isLegacy ? 200 : 400, + contentType: chosenContentType, + payload: { errors }, + }; + } + if (request.method !== "POST") { + // Forbid mutation + const operation = getOperationAST(document, operationName); + if (!operation || operation.operation !== "query") { + const error = new GraphQLError("Only queries may take place over non-POST requests.", operation); + return { + type: "graphql", + request, + dynamicOptions, + // Note: the GraphQL-over-HTTP spec currently mandates 405, even for legacy clients: + // https://graphql.github.io/graphql-over-http/draft/#sel-FALJRPCE2BCGoBitR + statusCode: 405, + contentType: chosenContentType, + payload: { + errors: [error], + }, + }; + } + } + const args = { + schema, + document, + rootValue: null, + contextValue, + variableValues, + operationName, + resolvedPreset, + requestContext: grafastCtx, + middleware: grafastMiddleware, + }; + try { + await (0, grafast_1.hookArgs)(args); + const result = await execute(args); + if ((0, grafast_1.isAsyncIterable)(result)) { + return { + type: "graphqlIncremental", + request, + dynamicOptions, + statusCode: 200, + iterator: maskIterator(result), + outputDataAsString, + }; + } + return { + type: "graphql", + request, + dynamicOptions, + statusCode: isLegacy || !result.errors + ? 200 + : result.data === undefined + ? 400 + : 200, + contentType: chosenContentType, + payload: maskPayload(result), + outputDataAsString, + }; + } + catch (e) { + console.error(e); + return { + type: "graphql", + request, + dynamicOptions, + // e.g. We should always return 400 on no Content-Type header: + // https://graphql.github.io/graphql-over-http/draft/#sel-DALLDJAADLCA8tb + statusCode: e.statusCode ?? (isLegacy ? 200 : 500), + contentType: chosenContentType, + payload: { + errors: [maskError(new GraphQLError(e.message))], + extensions: args.rootValue?.[grafast_1.$$extensions], + }, + }; + } + }; +}; +const makeGraphQLHandler = (instance) => { + const handler = _makeGraphQLHandlerInternal(instance); + const { dynamicOptions } = instance; + return (request, graphiqlHandler) => handler(request, graphiqlHandler).catch((e) => handleGraphQLHandlerError(request, dynamicOptions, e)); +}; +exports.makeGraphQLHandler = makeGraphQLHandler; +function handleGraphQLHandlerError(request, dynamicOptions, e) { + if (e instanceof grafast_1.SafeError) { + return { + type: "graphql", + request, + dynamicOptions, + payload: { + errors: [ + new GraphQLError(e.message, null, null, null, null, e, e.extensions), + ], + }, + statusCode: e.extensions?.statusCode ?? 500, + // FIXME: we should respect the `accept` header here if we can. + contentType: exports.APPLICATION_JSON, + }; + } + // TODO: if a GraphQLError is thrown... WTF? + const graphqlError = e instanceof GraphQLError + ? e + : new GraphQLError("Unknown error occurred", null, null, null, null, e); + // Special error handling for GraphQL route + console.error("An error occurred whilst attempting to handle the GraphQL request:"); + console.dir(e); + return { + type: "graphql", + request, + dynamicOptions, + payload: { errors: [graphqlError] }, + statusCode: graphqlError.extensions?.statusCode ?? 500, + // Fall back to application/json; this is when an unexpected error happens + // so it shouldn't be hit. + contentType: exports.APPLICATION_JSON, + }; +} +//# sourceMappingURL=graphql.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/middleware/graphql.js.map b/grafast/grafserv/dist/middleware/graphql.js.map new file mode 100644 index 0000000000..baf65909af --- /dev/null +++ b/grafast/grafserv/dist/middleware/graphql.js.map @@ -0,0 +1 @@ +{"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/middleware/graphql.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/options.d.ts b/grafast/grafserv/dist/options.d.ts new file mode 100644 index 0000000000..aa3f87b49b --- /dev/null +++ b/grafast/grafserv/dist/options.d.ts @@ -0,0 +1,25 @@ +import type { AsyncExecutionResult, ExecutionResult } from "grafast/graphql"; +import * as graphql from "grafast/graphql"; +import type { MaskErrorFn } from "./interfaces"; +export declare function defaultMaskError(error: graphql.GraphQLError): graphql.GraphQLError; +export declare const makeMaskError: (callback: MaskErrorFn) => MaskErrorFn; +export declare function optionsFromConfig(config: GraphileConfig.ResolvedPreset): { + resolvedPreset: GraphileConfig.ResolvedPreset; + outputDataAsString: boolean; + graphqlPath: string; + graphqlOverGET: boolean; + graphiql: boolean; + graphiqlOnGraphQLGET: boolean; + graphiqlPath: string; + watch: boolean; + eventStreamPath: string; + maxRequestLength: number; + explain: boolean | string[] | undefined; + schemaWaitTime: number; + maskError: MaskErrorFn; + maskPayload: (payload: any) => any; + maskIterator: (result: AsyncGenerator) => AsyncGenerator; + maskExecutionResult: (result: ExecutionResult | AsyncGenerator) => any; +}; +export type OptionsFromConfig = ReturnType; +//# sourceMappingURL=options.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/options.d.ts.map b/grafast/grafserv/dist/options.d.ts.map new file mode 100644 index 0000000000..17ac933b82 --- /dev/null +++ b/grafast/grafserv/dist/options.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAqBhD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,CAAC,YAAY,GAC1B,OAAO,CAAC,YAAY,CAwCtB;AAiBD,eAAO,MAAM,aAAa,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,WAEhB,CAAC;AAExC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,cAAc;;;;;;;;;;;;;;2BAkBvC,GAAG;2BAOvB,cAAc,CAAC,oBAAoB,CAAC,KAC3C,cAAc,CAAC,oBAAoB,CAAC;kCA4B7B,eAAe,GAAG,cAAc,CAAC,oBAAoB,CAAC;EA0BjE;AACD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/options.js b/grafast/grafserv/dist/options.js new file mode 100644 index 0000000000..a646025bad --- /dev/null +++ b/grafast/grafserv/dist/options.js @@ -0,0 +1,128 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.makeMaskError = void 0; +exports.defaultMaskError = defaultMaskError; +exports.optionsFromConfig = optionsFromConfig; +const tslib_1 = require("tslib"); +const node_crypto_1 = require("node:crypto"); +const grafast_1 = require("grafast"); +const graphql = tslib_1.__importStar(require("grafast/graphql")); +const { GraphQLError } = graphql; +// Only the non-ambiguous characters +const RANDOM_STRING_LETTERS = "ABCDEFGHJKLMNPQRTUVWXYZ2346789"; +const RANDOM_STRING_LETTERS_LENGTH = RANDOM_STRING_LETTERS.length; +const sha1 = (text) => (0, node_crypto_1.createHash)("sha1").update(text).digest("base64url"); +const randomString = (length = 10) => { + let str = ""; + for (let i = 0; i < length; i++) { + str += + RANDOM_STRING_LETTERS[Math.floor(Math.random() * RANDOM_STRING_LETTERS_LENGTH)]; + } + return str; +}; +function defaultMaskError(error) { + if (!error.originalError && error instanceof GraphQLError) { + // Things like 'Cannot return null for non-nullable field' + return error; + } + else if (error.originalError instanceof GraphQLError) { + return error; + } + else if (error.originalError != null && (0, grafast_1.isSafeError)(error.originalError)) { + return new GraphQLError(error.originalError.message, error.nodes, error.source, error.positions, error.path, error.originalError, error.originalError.extensions ?? null); + } + else { + // Hash so similar errors can easily be grouped + const hash = sha1(String(error)); + const errorId = randomString(); + console.error("Masked GraphQL error (hash: '%s', id: '%s')\n%s\n%O", hash, errorId, error, error.originalError ?? error); + return new GraphQLError(`An error occurred (logged with hash: '${hash}', id: '${errorId}')`, error.nodes, error.source, error.positions, error.path, error.originalError, + // Deliberately wipe the extensions + { + errorId, + }); + } +} +function devMakeMaskError(callback) { + let warnedAboutMaskErrorCallback = false; + return (error) => { + const path = error.path; + const replacement = callback(error); + if (!warnedAboutMaskErrorCallback && replacement.path !== path) { + warnedAboutMaskErrorCallback = true; + console.warn(`[WARNING] Your maskError callback is changing the error path; please reuse the path of the original error to ensure compliance with the GraphQL specification. We will not issue this warning again until the server is restarted or another maskError function is provided.`); + } + return replacement; + }; +} +exports.makeMaskError = grafast_1.isDev + ? devMakeMaskError + : (callback) => callback; +function optionsFromConfig(config) { + const { graphqlPath = "/graphql", graphqlOverGET = false, graphiql = true, graphiqlOnGraphQLGET = true, graphiqlPath = "/", watch = false, eventStreamPath = "/graphql/stream", maxRequestLength = 100_000, outputDataAsString = false, schemaWaitTime = 15000, maskError: rawMaskError, } = config.grafserv ?? {}; + const { explain } = config.grafast ?? {}; + const maskError = rawMaskError + ? (0, exports.makeMaskError)(rawMaskError) + : defaultMaskError; + const maskPayload = (payload) => { + if (payload.errors !== undefined) { + payload.errors = payload.errors.map(maskError); + } + return payload; + }; + const maskIterator = (result) => { + return { + [Symbol.asyncIterator]() { + return this; + }, + async [Symbol.asyncDispose]() { + await this.return(undefined); + }, + return(value) { + return result.return(value); + }, + throw(e) { + return result.throw(e); + }, + async next(...args) { + const ir = await result.next(...args); + if (ir.value != null) { + return { + done: ir.done, + value: maskPayload(ir.value), + }; + } + else { + return ir; + } + }, + }; + }; + const maskExecutionResult = (result) => { + if ((0, grafast_1.isAsyncIterable)(result)) { + return maskIterator(result); + } + else { + return maskPayload(result); + } + }; + return { + resolvedPreset: config, + outputDataAsString, + graphqlPath, + graphqlOverGET, + graphiql, + graphiqlOnGraphQLGET, + graphiqlPath, + watch, + eventStreamPath, + maxRequestLength, + explain, + schemaWaitTime, + maskError, + maskPayload, + maskIterator, + maskExecutionResult, + }; +} +//# sourceMappingURL=options.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/options.js.map b/grafast/grafserv/dist/options.js.map new file mode 100644 index 0000000000..e62f131b0d --- /dev/null +++ b/grafast/grafserv/dist/options.js.map @@ -0,0 +1 @@ +{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":";;;AA2BA,4CA0CC;AAqBD,8CAgFC;;AA1KD,6CAAyC;AAEzC,qCAA8D;AAE9D,iEAA2C;AAI3C,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;AACjC,oCAAoC;AACpC,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;AAC/D,MAAM,4BAA4B,GAAG,qBAAqB,CAAC,MAAM,CAAC;AAElE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5B,IAAA,wBAAU,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEtD,MAAM,YAAY,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE;IACnC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,GAAG;YACD,qBAAqB,CACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,4BAA4B,CAAC,CACzD,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,SAAgB,gBAAgB,CAC9B,KAA2B;IAE3B,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAC1D,0DAA0D;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,IAAI,KAAK,CAAC,aAAa,YAAY,YAAY,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,IAAI,IAAA,qBAAW,EAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,YAAY,CACrB,KAAK,CAAC,aAAa,CAAC,OAAO,EAC3B,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,CAAC,UAAU,IAAI,IAAI,CACvC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CACX,qDAAqD,EACrD,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,CAAC,aAAa,IAAI,KAAK,CAC7B,CAAC;QACF,OAAO,IAAI,YAAY,CACrB,yCAAyC,IAAI,WAAW,OAAO,IAAI,EACnE,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,aAAa;QACnB,mCAAmC;QACnC;YACE,OAAO;SACR,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAqB;IAC7C,IAAI,4BAA4B,GAAG,KAAK,CAAC;IACzC,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACxB,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,4BAA4B,IAAI,WAAW,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/D,4BAA4B,GAAG,IAAI,CAAC;YACpC,OAAO,CAAC,IAAI,CACV,8QAA8Q,CAC/Q,CAAC;QACJ,CAAC;QACD,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC;AAEY,QAAA,aAAa,GAA2C,eAAK;IACxE,CAAC,CAAC,gBAAgB;IAClB,CAAC,CAAC,CAAC,QAAqB,EAAE,EAAE,CAAC,QAAQ,CAAC;AAExC,SAAgB,iBAAiB,CAAC,MAAqC;IACrE,MAAM,EACJ,WAAW,GAAG,UAAU,EACxB,cAAc,GAAG,KAAK,EACtB,QAAQ,GAAG,IAAI,EACf,oBAAoB,GAAG,IAAI,EAC3B,YAAY,GAAG,GAAG,EAClB,KAAK,GAAG,KAAK,EACb,eAAe,GAAG,iBAAiB,EACnC,gBAAgB,GAAG,OAAO,EAC1B,kBAAkB,GAAG,KAAK,EAC1B,cAAc,GAAG,KAAK,EACtB,SAAS,EAAE,YAAY,GACxB,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,YAAY;QAC5B,CAAC,CAAC,IAAA,qBAAa,EAAC,YAAY,CAAC;QAC7B,CAAC,CAAC,gBAAgB,CAAC;IACrB,MAAM,WAAW,GAAG,CAAC,OAAY,EAAE,EAAE;QACnC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CACnB,MAA4C,EACN,EAAE;QACxC,OAAO;YACL,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;gBACzB,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,CAAC;YACD,MAAM,CAAC,KAAK;gBACV,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,KAAK,CAAC,CAAC;gBACL,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAS;gBACrB,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACtC,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;oBACrB,OAAO;wBACL,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC;qBAC7B,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,mBAAmB,GAAG,CAC1B,MAA8D,EAC9D,EAAE;QACF,IAAI,IAAA,yBAAe,EAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IACF,OAAO;QACL,cAAc,EAAE,MAAM;QACtB,kBAAkB;QAClB,WAAW;QACX,cAAc;QACd,QAAQ;QACR,oBAAoB;QACpB,YAAY;QACZ,KAAK;QACL,eAAe;QACf,gBAAgB;QAChB,OAAO;QACP,cAAc;QACd,SAAS;QACT,WAAW;QACX,YAAY;QACZ,mBAAmB;KACpB,CAAC;AACJ,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/express/v4/index.d.ts b/grafast/grafserv/dist/servers/express/v4/index.d.ts new file mode 100644 index 0000000000..fc698a854a --- /dev/null +++ b/grafast/grafserv/dist/servers/express/v4/index.d.ts @@ -0,0 +1,22 @@ +import type { Server as HTTPServer } from "node:http"; +import type { Server as HTTPSServer } from "node:https"; +import type { Express, Request, Response } from "express"; +import type { GrafservConfig, RequestDigest } from "../../../interfaces.js"; +import type { OptionsFromConfig } from "../../../options.js"; +import { NodeGrafservBase } from "../../node/index.js"; +declare global { + namespace Grafast { + interface RequestContext { + expressv4: { + req: Request; + res: Response; + }; + } + } +} +export declare class ExpressGrafserv extends NodeGrafservBase { + protected getDigest(dynamicOptions: OptionsFromConfig, req: Request, res: Response): RequestDigest; + addTo(app: Express, server: HTTPServer | HTTPSServer | null, addExclusiveWebsocketHandler?: boolean): Promise; +} +export declare function grafserv(config: GrafservConfig): ExpressGrafserv; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/express/v4/index.d.ts.map b/grafast/grafserv/dist/servers/express/v4/index.d.ts.map new file mode 100644 index 0000000000..5d544f09ab --- /dev/null +++ b/grafast/grafserv/dist/servers/express/v4/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/servers/express/v4/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAGxD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,cAAc;YACtB,SAAS,EAAE;gBACT,GAAG,EAAE,OAAO,CAAC;gBACb,GAAG,EAAE,QAAQ,CAAC;aACf,CAAC;SACH;KACF;CACF;AAED,qBAAa,eAAgB,SAAQ,gBAAgB;IACnD,SAAS,CAAC,SAAS,CACjB,cAAc,EAAE,iBAAiB,EACjC,GAAG,EAAE,OAAO,EACZ,GAAG,EAAE,QAAQ,GACZ,aAAa;IA+BV,KAAK,CACT,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,EACvC,4BAA4B,UAAO;CA2CtC;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,mBAE9C"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/express/v4/index.js b/grafast/grafserv/dist/servers/express/v4/index.js new file mode 100644 index 0000000000..f7f15b60fc --- /dev/null +++ b/grafast/grafserv/dist/servers/express/v4/index.js @@ -0,0 +1,82 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ExpressGrafserv = void 0; +exports.grafserv = grafserv; +const utils_js_1 = require("../../../utils.js"); +const index_js_1 = require("../../node/index.js"); +class ExpressGrafserv extends index_js_1.NodeGrafservBase { + getDigest(dynamicOptions, req, res) { + return { + httpVersionMajor: req.httpVersionMajor, + httpVersionMinor: req.httpVersionMinor, + isSecure: req.secure, + method: req.method, + path: req.path, + headers: (0, utils_js_1.processHeaders)(req.headers), + getQueryParams() { + return req.query; + }, + getBody() { + if (req.body != null) { + return (0, utils_js_1.getBodyFromFrameworkBody)(req.body); + } + else { + return (0, utils_js_1.getBodyFromRequest)(req, dynamicOptions.maxRequestLength); + } + }, + requestContext: { + node: { + req, + res, + }, + expressv4: { + req, + res, + }, + }, + }; + } + async addTo(app, server, addExclusiveWebsocketHandler = true) { + app.use(this._createHandler()); + // Alias this just to make it easier for users to copy/paste the code below + // eslint-disable-next-line @typescript-eslint/no-this-alias + const serv = this; + if (addExclusiveWebsocketHandler) { + const grafservUpgradeHandler = await serv.getUpgradeHandler(); + if (grafservUpgradeHandler) { + const upgrade = (req, socket, head) => { + if (serv.shouldHandleUpgrade(req, socket, head)) { + grafservUpgradeHandler(req, socket, head); + } + else { + socket.destroy(); + } + }; + const attachWebsocketsToServer = (server) => { + server.on("upgrade", upgrade); + serv.onRelease(() => { + server.off("upgrade", upgrade); + }); + }; + if (server) { + // If user explicitly passes server, bind to it: + attachWebsocketsToServer(server); + } + else { + // If not, hope they're calling `app.listen()` and intercept that call. + const oldListen = app.listen; + app.listen = function (...args) { + const server = oldListen.apply(this, args); + attachWebsocketsToServer(server); + return server; + }; + } + } + } + } +} +exports.ExpressGrafserv = ExpressGrafserv; +function grafserv(config) { + return new ExpressGrafserv(config); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/express/v4/index.js.map b/grafast/grafserv/dist/servers/express/v4/index.js.map new file mode 100644 index 0000000000..7ca29a4f6d --- /dev/null +++ b/grafast/grafserv/dist/servers/express/v4/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/servers/express/v4/index.ts"],"names":[],"mappings":";;;AA8GA,4BAEC;AAxGD,gDAI2B;AAC3B,kDAAuD;AAavD,MAAa,eAAgB,SAAQ,2BAAgB;IACzC,SAAS,CACjB,cAAiC,EACjC,GAAY,EACZ,GAAa;QAEb,OAAO;YACL,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;YACtC,QAAQ,EAAE,GAAG,CAAC,MAAM;YACpB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,IAAA,yBAAc,EAAC,GAAG,CAAC,OAAO,CAAC;YACpC,cAAc;gBACZ,OAAO,GAAG,CAAC,KAA0C,CAAC;YACxD,CAAC;YACD,OAAO;gBACL,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBACrB,OAAO,IAAA,mCAAwB,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAA,6BAAkB,EAAC,GAAG,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;YACD,cAAc,EAAE;gBACd,IAAI,EAAE;oBACJ,GAAG;oBACH,GAAG;iBACJ;gBACD,SAAS,EAAE;oBACT,GAAG;oBACH,GAAG;iBACJ;aACF;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CACT,GAAY,EACZ,MAAuC,EACvC,4BAA4B,GAAG,IAAI;QAEnC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/B,2EAA2E;QAC3E,4DAA4D;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,4BAA4B,EAAE,CAAC;YACjC,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9D,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,CACd,GAAoB,EACpB,MAAc,EACd,IAAY,EACZ,EAAE;oBACF,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;wBAChD,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,wBAAwB,GAAG,CAAC,MAAgC,EAAE,EAAE;oBACpE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;wBAClB,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;oBACjC,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;gBAEF,IAAI,MAAM,EAAE,CAAC;oBACX,gDAAgD;oBAChD,wBAAwB,CAAC,MAAM,CAAC,CAAC;gBACnC,CAAC;qBAAM,CAAC;oBACN,uEAAuE;oBACvE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC7B,GAAG,CAAC,MAAM,GAAG,UAAU,GAAG,IAAS;wBACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBAC3C,wBAAwB,CAAC,MAAM,CAAC,CAAC;wBACjC,OAAO,MAAM,CAAC;oBAChB,CAAC,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAlFD,0CAkFC;AAED,SAAgB,QAAQ,CAAC,MAAsB;IAC7C,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/fastify/v4/index.d.ts b/grafast/grafserv/dist/servers/fastify/v4/index.d.ts new file mode 100644 index 0000000000..b94cd5c6cb --- /dev/null +++ b/grafast/grafserv/dist/servers/fastify/v4/index.d.ts @@ -0,0 +1,20 @@ +import type { FastifyInstance, FastifyReply, FastifyRequest } from "fastify"; +import { GrafservBase } from "../../../core/base.js"; +import type { GrafservConfig, Result } from "../../../interfaces.js"; +declare global { + namespace Grafast { + interface RequestContext { + fastifyv4: { + request: FastifyRequest; + reply: FastifyReply; + }; + } + } +} +export declare class FastifyGrafserv extends GrafservBase { + constructor(config: GrafservConfig); + send(request: FastifyRequest, reply: FastifyReply, result: Result | null): Promise | import("../../../interfaces.js").JSONValue>; + addTo(app: FastifyInstance): Promise; +} +export declare function grafserv(config: GrafservConfig): FastifyGrafserv; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/fastify/v4/index.d.ts.map b/grafast/grafserv/dist/servers/fastify/v4/index.d.ts.map new file mode 100644 index 0000000000..1f1663b219 --- /dev/null +++ b/grafast/grafserv/dist/servers/fastify/v4/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/servers/fastify/v4/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,cAAc,EAEf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAEL,YAAY,EACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAEV,cAAc,EAEd,MAAM,EACP,MAAM,wBAAwB,CAAC;AAQhC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,cAAc;YACtB,SAAS,EAAE;gBACT,OAAO,EAAE,cAAc,CAAC;gBACxB,KAAK,EAAE,YAAY,CAAC;aACrB,CAAC;SACH;KACF;CACF;AAmCD,qBAAa,eAAgB,SAAQ,YAAY;gBACnC,MAAM,EAAE,cAAc;IAIrB,IAAI,CACf,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI;IAwFjB,KAAK,CAAC,GAAG,EAAE,eAAe;CA6FjC;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,mBAE9C"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/fastify/v4/index.js b/grafast/grafserv/dist/servers/fastify/v4/index.js new file mode 100644 index 0000000000..ef9315f375 --- /dev/null +++ b/grafast/grafserv/dist/servers/fastify/v4/index.js @@ -0,0 +1,207 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FastifyGrafserv = void 0; +exports.grafserv = grafserv; +const node_stream_1 = require("node:stream"); +const websocket_1 = require("graphql-ws/lib/use/@fastify/websocket"); +const base_js_1 = require("../../../core/base.js"); +const utils_js_1 = require("../../../utils.js"); +function getDigest(request, reply) { + return { + httpVersionMajor: request.raw.httpVersionMajor, + httpVersionMinor: request.raw.httpVersionMinor, + // Fastify respects X-Forwarded-Proto when configured to trust the proxy, see: + // https://github.com/fastify/fastify/blob/59c5b273dad30821d03c952bbe073a976f92a325/docs/Reference/Server.md#trustproxy + isSecure: request.protocol === "https", + method: request.method, + path: request.url, + headers: (0, utils_js_1.processHeaders)(request.headers), + getQueryParams() { + return request.query; + }, + getBody() { + return (0, utils_js_1.getBodyFromFrameworkBody)(request.body); + }, + requestContext: { + node: { + req: request.raw, + res: reply.raw, + }, + fastifyv4: { + request, + reply, + }, + }, + preferJSON: true, + }; +} +class FastifyGrafserv extends base_js_1.GrafservBase { + constructor(config) { + super(config); + } + async send(request, reply, result) { + if (result === null) { + // 404 + reply.statusCode = 404; + return "¯\\_(ツ)_/¯"; + } + switch (result.type) { + case "error": { + const { statusCode, headers } = result; + reply.headers(headers); + reply.statusCode = statusCode; + // DEBT: mutating the error is probably bad form... + const errorWithStatus = Object.assign(result.error, { + status: statusCode, + }); + throw errorWithStatus; + } + case "buffer": { + const { statusCode, headers, buffer } = result; + reply.headers(headers); + reply.statusCode = statusCode; + return buffer; + } + case "json": { + const { statusCode, headers, json } = result; + reply.headers(headers); + reply.statusCode = statusCode; + return json; + } + case "noContent": { + const { statusCode, headers } = result; + reply.headers(headers); + reply.statusCode = statusCode; + return null; + } + case "bufferStream": { + const { statusCode, headers, lowLatency, bufferIterator } = result; + let bufferIteratorHandled = false; + try { + if (lowLatency) { + request.raw.socket.setTimeout(0); + request.raw.socket.setNoDelay(true); + request.raw.socket.setKeepAlive(true); + } + reply.headers(headers); + reply.statusCode = statusCode; + const stream = new node_stream_1.PassThrough(); + reply.send(stream); + // Fork off and convert bufferIterator to + try { + bufferIteratorHandled = true; + for await (const buffer of bufferIterator) { + stream.write(buffer); + } + } + finally { + stream.end(); + } + } + catch (e) { + if (!bufferIteratorHandled) { + try { + if (bufferIterator.return) { + bufferIterator.return(); + } + else if (bufferIterator.throw) { + bufferIterator.throw(e); + } + } + catch (e2) { + /* nom nom nom */ + } + } + throw e; + } + return reply; + } + default: { + const never = result; + console.log("Unhandled:"); + console.dir(never); + reply.type("text/plain"); + reply.statusCode = 501; + return "Server hasn't implemented this yet"; + } + } + } + async addTo(app) { + // application/graphql-request+json isn't currently an official serialization format: + // https://graphql.github.io/graphql-over-http/draft/#sec-Media-Types + /* + app.addContentTypeParser( + "application/graphql-request+json", + { parseAs: "string" }, + app.getDefaultJsonParser("ignore", "ignore"), + ); + */ + const { graphiql, graphiqlOnGraphQLGET, graphqlPath, graphiqlPath, graphqlOverGET, maxRequestLength: bodyLimit, watch, } = this.dynamicOptions; + const websockets = this.resolvedPreset.grafserv?.websockets ?? false; + const exposeGetRoute = graphqlOverGET || graphiqlOnGraphQLGET || websockets; + const exposeHeadRoute = true; + // Build HTTP handler. + const handler = async (request, reply) => { + const digest = getDigest(request, reply); + const handlerResult = await this.graphqlHandler((0, utils_js_1.normalizeRequest)(digest), this.graphiqlHandler); + const result = await (0, base_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(request, reply, result); + }; + // Build websocket handler. + const wsHandler = websockets + ? (0, websocket_1.makeHandler)((0, utils_js_1.makeGraphQLWSConfig)(this)) + : undefined; + // Attach HTTP handler for POST requests. + app.route({ method: "POST", url: graphqlPath, handler, bodyLimit }); + // Attach websocket and HTTP handler for GET requests, if desired. + if (exposeGetRoute) { + app.route({ + method: "GET", + url: graphqlPath, + exposeHeadRoute, + handler, + wsHandler, + }); + } + if (graphiql) { + app.route({ + method: "GET", + url: graphiqlPath, + exposeHeadRoute, + bodyLimit, + handler: async (request, reply) => { + const digest = getDigest(request, reply); + const handlerResult = await this.graphiqlHandler((0, utils_js_1.normalizeRequest)(digest)); + const result = await (0, base_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(request, reply, result); + }, + }); + } + if (watch) { + app.route({ + method: "GET", + url: this.dynamicOptions.eventStreamPath, + exposeHeadRoute: true, + bodyLimit: this.dynamicOptions.maxRequestLength, + handler: async (request, reply) => { + const digest = getDigest(request, reply); + // TODO: refactor this to use the eventStreamHandler once we write that... + const handlerResult = { + type: "event-stream", + request: (0, utils_js_1.normalizeRequest)(digest), + dynamicOptions: this.dynamicOptions, + payload: this.makeStream(), + statusCode: 200, + }; + const result = await (0, base_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(request, reply, result); + }, + }); + } + } +} +exports.FastifyGrafserv = FastifyGrafserv; +function grafserv(config) { + return new FastifyGrafserv(config); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/fastify/v4/index.js.map b/grafast/grafserv/dist/servers/fastify/v4/index.js.map new file mode 100644 index 0000000000..2efef30249 --- /dev/null +++ b/grafast/grafserv/dist/servers/fastify/v4/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/servers/fastify/v4/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/h3/v1/index.d.ts b/grafast/grafserv/dist/servers/h3/v1/index.d.ts new file mode 100644 index 0000000000..2557b50cf3 --- /dev/null +++ b/grafast/grafserv/dist/servers/h3/v1/index.d.ts @@ -0,0 +1,28 @@ +import type { Hooks } from "crossws"; +import type { App, H3Event } from "h3"; +import { GrafservBase } from "../../../index.js"; +import type { GrafservConfig, Result } from "../../../interfaces.js"; +declare global { + namespace Grafast { + interface RequestContext { + h3v1: { + event: H3Event; + }; + } + } +} +export declare class H3Grafserv extends GrafservBase { + constructor(config: GrafservConfig); + /** + * @deprecated use handleGraphQLEvent instead + */ + handleEvent(event: H3Event): Promise | import("../../../interfaces.js").JSONValue | undefined>; + handleGraphQLEvent(event: H3Event): Promise | import("../../../interfaces.js").JSONValue | undefined>; + handleGraphiqlEvent(event: H3Event): Promise | import("../../../interfaces.js").JSONValue | undefined>; + handleEventStreamEvent(event: H3Event): Promise | import("../../../interfaces.js").JSONValue | undefined>; + send(event: H3Event, result: Result | null): Promise | import("../../../interfaces.js").JSONValue | undefined>; + addTo(app: App): Promise; + makeWsHandler(): Partial; +} +export declare function grafserv(config: GrafservConfig): H3Grafserv; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/h3/v1/index.d.ts.map b/grafast/grafserv/dist/servers/h3/v1/index.d.ts.map new file mode 100644 index 0000000000..cfdc21cc8e --- /dev/null +++ b/grafast/grafserv/dist/servers/h3/v1/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/servers/h3/v1/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,SAAS,CAAC;AAE3C,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAevC,OAAO,EAEL,YAAY,EAIb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAGV,cAAc,EAEd,MAAM,EACP,MAAM,wBAAwB,CAAC;AAEhC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,cAAc;YACtB,IAAI,EAAE;gBACJ,KAAK,EAAE,OAAO,CAAC;aAChB,CAAC;SACH;KACF;CACF;AAqCD,qBAAa,UAAW,SAAQ,YAAY;gBAC9B,MAAM,EAAE,cAAc;IAIlC;;OAEG;IACU,WAAW,CAAC,KAAK,EAAE,OAAO;IAI1B,kBAAkB,CAAC,KAAK,EAAE,OAAO;IAWjC,mBAAmB,CAAC,KAAK,EAAE,OAAO;IAQlC,sBAAsB,CAAC,KAAK,EAAE,OAAO;IAcrC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA0F1C,KAAK,CAAC,GAAG,EAAE,GAAG;IAqCpB,aAAa,IAAI,OAAO,CAAC,KAAK,CAAC;CA2CvC;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,cAE9C"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/h3/v1/index.js b/grafast/grafserv/dist/servers/h3/v1/index.js new file mode 100644 index 0000000000..e5dae30a17 --- /dev/null +++ b/grafast/grafserv/dist/servers/h3/v1/index.js @@ -0,0 +1,225 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.H3Grafserv = void 0; +exports.grafserv = grafserv; +const node_stream_1 = require("node:stream"); +const graphql_ws_1 = require("graphql-ws"); +const h3_1 = require("h3"); +const index_js_1 = require("../../../index.js"); +function getDigest(event) { + const req = event.node.req; + const res = event.node.res; + return { + httpVersionMajor: req.httpVersionMajor, + httpVersionMinor: req.httpVersionMinor, + isSecure: (0, h3_1.getRequestProtocol)(event) === "https", + method: event.method, + path: event.path, + headers: (0, index_js_1.processHeaders)((0, h3_1.getRequestHeaders)(event)), + getQueryParams() { + return (0, h3_1.getQuery)(event); + }, + async getBody() { + const buffer = await (0, h3_1.readRawBody)(event, false); + if (!buffer) { + throw new Error("Failed to retrieve body from h3"); + } + return { + type: "buffer", + buffer, + }; + }, + requestContext: { + h3v1: { + event, + }, + node: { + req, + res, + }, + }, + }; +} +class H3Grafserv extends index_js_1.GrafservBase { + constructor(config) { + super(config); + } + /** + * @deprecated use handleGraphQLEvent instead + */ + async handleEvent(event) { + return this.handleGraphQLEvent(event); + } + async handleGraphQLEvent(event) { + const digest = getDigest(event); + const handlerResult = await this.graphqlHandler((0, index_js_1.normalizeRequest)(digest), this.graphiqlHandler); + const result = await (0, index_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(event, result); + } + async handleGraphiqlEvent(event) { + const digest = getDigest(event); + const handlerResult = await this.graphiqlHandler((0, index_js_1.normalizeRequest)(digest)); + const result = await (0, index_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(event, result); + } + async handleEventStreamEvent(event) { + const digest = getDigest(event); + const handlerResult = { + type: "event-stream", + request: (0, index_js_1.normalizeRequest)(digest), + dynamicOptions: this.dynamicOptions, + payload: this.makeStream(), + statusCode: 200, + }; + const result = await (0, index_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(event, result); + } + async send(event, result) { + if (result === null) { + // 404 + (0, h3_1.setResponseStatus)(event, 404); + return "¯\\_(ツ)_/¯"; + } + switch (result.type) { + case "error": { + const { statusCode, headers } = result; + (0, h3_1.setResponseHeaders)(event, headers); + (0, h3_1.setResponseStatus)(event, statusCode); + // DEBT: mutating the error is probably bad form... + const errorWithStatus = Object.assign(result.error, { + status: statusCode, + }); + throw errorWithStatus; + } + case "buffer": { + const { statusCode, headers, buffer } = result; + (0, h3_1.setResponseHeaders)(event, headers); + (0, h3_1.setResponseStatus)(event, statusCode); + return buffer; + } + case "json": { + const { statusCode, headers, json } = result; + (0, h3_1.setResponseHeaders)(event, headers); + (0, h3_1.setResponseStatus)(event, statusCode); + return json; + } + case "noContent": { + const { statusCode, headers } = result; + (0, h3_1.setResponseHeaders)(event, headers); + (0, h3_1.setResponseStatus)(event, statusCode); + return null; + } + case "bufferStream": { + const { statusCode, headers, lowLatency, bufferIterator } = result; + let bufferIteratorHandled = false; + try { + if (lowLatency) { + event.node.req.socket.setTimeout(0); + event.node.req.socket.setNoDelay(true); + event.node.req.socket.setKeepAlive(true); + } + (0, h3_1.setResponseHeaders)(event, headers); + (0, h3_1.setResponseStatus)(event, statusCode); + const stream = new node_stream_1.PassThrough(); + (0, h3_1.sendStream)(event, stream).catch((e) => { + console.error("An error occured when streaming to h3:"); + console.error(e); + }); + // Fork off and convert bufferIterator to + try { + bufferIteratorHandled = true; + for await (const buffer of bufferIterator) { + stream.write(buffer); + } + } + finally { + stream.end(); + } + } + catch (e) { + if (!bufferIteratorHandled) { + try { + if (bufferIterator.return) { + bufferIterator.return(); + } + else if (bufferIterator.throw) { + bufferIterator.throw(e); + } + } + catch (e2) { + /* nom nom nom */ + } + } + throw e; + } + return; + } + default: { + const never = result; + console.log("Unhandled:"); + console.dir(never); + (0, h3_1.setResponseHeader)(event, "Content-Type", "text/plain"); + (0, h3_1.setResponseStatus)(event, 501); + return "Server hasn't implemented this yet"; + } + } + } + async addTo(app) { + const dynamicOptions = this.dynamicOptions; + const router = (0, h3_1.createRouter)(); + app.use(router); + router.use(this.dynamicOptions.graphqlPath, (0, h3_1.eventHandler)((event) => this.handleGraphQLEvent(event)), this.dynamicOptions.graphqlOverGET || + this.dynamicOptions.graphiqlOnGraphQLGET + ? ["get", "post"] + : ["post"]); + if (this.resolvedPreset.grafserv?.websockets) { + app.use(this.dynamicOptions.graphqlPath, (0, h3_1.defineWebSocketHandler)(this.makeWsHandler())); + } + if (dynamicOptions.graphiql) { + router.get(this.dynamicOptions.graphiqlPath, (0, h3_1.eventHandler)((event) => this.handleGraphiqlEvent(event))); + } + if (dynamicOptions.watch) { + router.get(this.dynamicOptions.eventStreamPath, (0, h3_1.eventHandler)((event) => this.handleEventStreamEvent(event))); + } + } + makeWsHandler() { + const graphqlWsServer = (0, graphql_ws_1.makeServer)((0, index_js_1.makeGraphQLWSConfig)(this)); + const clients = new Map(); + return { + open(peer) { + const client = {}; + clients.set(peer, client); + const onClose = graphqlWsServer.opened({ + protocol: peer.websocket.protocol ?? graphql_ws_1.GRAPHQL_TRANSPORT_WS_PROTOCOL, // will be validated + send(data) { + peer.send(data); + }, + close(code, reason) { + peer.close(code, reason); // there are protocol standard closures + }, + onMessage(cb) { + client.handleMessage = cb; + }, + }, { socket: peer.websocket, request: peer.request }); + client.closed = async (code, reason) => { + onClose(code, reason); + }; + }, + message(peer, message) { + clients.get(peer)?.handleMessage?.(message.text()); + }, + close(peer, details) { + clients.get(peer)?.closed?.(details.code, details.reason); + clients.delete(peer); + }, + error(peer, _error) { + clients.delete(peer); + }, + }; + } +} +exports.H3Grafserv = H3Grafserv; +function grafserv(config) { + return new H3Grafserv(config); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/h3/v1/index.js.map b/grafast/grafserv/dist/servers/h3/v1/index.js.map new file mode 100644 index 0000000000..7e0e0d53a5 --- /dev/null +++ b/grafast/grafserv/dist/servers/h3/v1/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/servers/h3/v1/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/hono/v4/index.d.ts b/grafast/grafserv/dist/servers/hono/v4/index.d.ts new file mode 100644 index 0000000000..711354172e --- /dev/null +++ b/grafast/grafserv/dist/servers/hono/v4/index.d.ts @@ -0,0 +1,36 @@ +import type { Context as Ctx, Hono, MiddlewareHandler } from "hono"; +import type { StatusCode } from "hono/utils/http-status"; +import type { UpgradeWebSocket } from "hono/ws"; +import { GrafservBase } from "../../../index.js"; +import type { GrafservConfig, Result } from "../../../interfaces.js"; +declare global { + namespace Grafast { + interface RequestContext { + honov4: { + ctx: Ctx; + }; + } + } +} +export declare class HonoGrafserv extends GrafservBase { + private upgradeWebSocket?; + constructor(config: GrafservConfig, upgradeWebSocket?: UpgradeWebSocket | undefined); + makeWsHandler(upgradeWebSocket: UpgradeWebSocket): MiddlewareHandler; + handleGraphQLEvent(ctx: Ctx): Promise<(Response & import("hono").TypedResponse<"¯\\_(ツ)_/¯", import("hono/utils/http-status").ContentfulStatusCode, "text">) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse<"Server hasn't implemented this yet", import("hono/utils/http-status").ContentfulStatusCode, "text">)>; + handleGraphiqlEvent(ctx: Ctx): Promise<(Response & import("hono").TypedResponse<"¯\\_(ツ)_/¯", import("hono/utils/http-status").ContentfulStatusCode, "text">) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse<"Server hasn't implemented this yet", import("hono/utils/http-status").ContentfulStatusCode, "text">)>; + handleEventStreamEvent(ctx: Ctx): Promise<(Response & import("hono").TypedResponse<"¯\\_(ツ)_/¯", import("hono/utils/http-status").ContentfulStatusCode, "text">) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse<"Server hasn't implemented this yet", import("hono/utils/http-status").ContentfulStatusCode, "text">)>; + send(ctx: Ctx, result: Result | null): Promise<(Response & import("hono").TypedResponse<"¯\\_(ツ)_/¯", import("hono/utils/http-status").ContentfulStatusCode, "text">) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse) | (Response & import("hono").TypedResponse<"Server hasn't implemented this yet", import("hono/utils/http-status").ContentfulStatusCode, "text">)>; + addTo(app: Hono): Promise; + private setResponseHeaders; +} +/** + * Creates a new instance of HonoGrafserv. + * + * @param config - The configuration object for Grafserv. + * @param upgradeWebSocket - Optional parameter required when using websockets. + * Hono uses the upgradeWebsocket helper depending on the environment. + * Refer to https://hono.dev/docs/helpers/websocket for more details. + * @returns An instance of HonoGrafserv. + */ +export declare const grafserv: (config: GrafservConfig, upgradeWebSocket?: UpgradeWebSocket) => HonoGrafserv; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/hono/v4/index.d.ts.map b/grafast/grafserv/dist/servers/hono/v4/index.d.ts.map new file mode 100644 index 0000000000..0cb6c827d6 --- /dev/null +++ b/grafast/grafserv/dist/servers/hono/v4/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/servers/hono/v4/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,SAAS,CAAC;AAE3D,OAAO,EAEL,YAAY,EAIb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAGV,cAAc,EAEd,MAAM,EACP,MAAM,wBAAwB,CAAC;AAEhC,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,cAAc;YACtB,MAAM,EAAE;gBACN,GAAG,EAAE,GAAG,CAAC;aACV,CAAC;SACH;KACF;CACF;AAgCD,qBAAa,YAAa,SAAQ,YAAY;IAG1C,OAAO,CAAC,gBAAgB,CAAC;gBADzB,MAAM,EAAE,cAAc,EACd,gBAAgB,CAAC,EAAE,gBAAgB,YAAA;IAKtC,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,iBAAiB;IAkD9D,kBAAkB,CAAC,GAAG,EAAE,GAAG;IAW3B,mBAAmB,CAAC,GAAG,EAAE,GAAG;IAQ5B,sBAAsB,CAAC,GAAG,EAAE,GAAG;IAc/B,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA+DpC,KAAK,CAAC,GAAG,EAAE,IAAI;IAkD5B,OAAO,CAAC,kBAAkB;CAK3B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GACnB,QAAQ,cAAc,EACtB,mBAAmB,gBAAgB,iBAGpC,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/hono/v4/index.js b/grafast/grafserv/dist/servers/hono/v4/index.js new file mode 100644 index 0000000000..0e49a5d46d --- /dev/null +++ b/grafast/grafserv/dist/servers/hono/v4/index.js @@ -0,0 +1,218 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.grafserv = exports.HonoGrafserv = void 0; +const graphql_ws_1 = require("graphql-ws"); +const index_js_1 = require("../../../index.js"); +function getDigest(ctx) { + const req = ctx.req; + return { + httpVersionMajor: 1, // Hono uses Fetch API, which doesn't expose HTTP version + httpVersionMinor: 1, + isSecure: req.url.startsWith("https:"), + method: req.method, + path: req.path, + headers: (0, index_js_1.processHeaders)(req.header()), + getQueryParams() { + return req.query(); + }, + async getBody() { + const json = await req.json(); + if (!json) { + throw new Error("Failed to retrieve body from hono"); + } + return { + type: "json", + json, + }; + }, + requestContext: { + honov4: { + ctx: ctx, + }, + }, + }; +} +class HonoGrafserv extends index_js_1.GrafservBase { + constructor(config, upgradeWebSocket) { + super(config); + this.upgradeWebSocket = upgradeWebSocket; + } + makeWsHandler(upgradeWebSocket) { + const graphqlWsServer = (0, graphql_ws_1.makeServer)((0, index_js_1.makeGraphQLWSConfig)(this)); + return upgradeWebSocket((c) => { + let onMessage; + let onClose; + let isOpened = false; + const initGraphqlServer = (ws) => { + onClose = graphqlWsServer.opened({ + protocol: ws.protocol ?? graphql_ws_1.GRAPHQL_TRANSPORT_WS_PROTOCOL, + send(data) { + ws.send(data); + }, + close(code, reason) { + console.log("close", code, reason); + ws.close(code, reason); + isOpened = false; + }, + onMessage(cb) { + onMessage = cb; + }, + }, { socket: ws, request: c.req }); + isOpened = true; + }; + return { + onOpen(evt, ws) { + initGraphqlServer(ws); + }, + onMessage(evt, ws) { + // cloudflare workers don't support the open event + // so we initialize the server on the first message + if (!isOpened) { + initGraphqlServer(ws); + } + onMessage?.(evt.data); + }, + onClose(evt) { + onClose?.(evt.code, evt.reason); + }, + onError(evt) { + console.error("An error occured in the websocket:", evt); + }, + }; + }); + } + async handleGraphQLEvent(ctx) { + const digest = getDigest(ctx); + const handlerResult = await this.graphqlHandler((0, index_js_1.normalizeRequest)(digest), this.graphiqlHandler); + const result = await (0, index_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(ctx, result); + } + async handleGraphiqlEvent(ctx) { + const digest = getDigest(ctx); + const handlerResult = await this.graphiqlHandler((0, index_js_1.normalizeRequest)(digest)); + const result = await (0, index_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(ctx, result); + } + async handleEventStreamEvent(ctx) { + const digest = getDigest(ctx); + const handlerResult = { + type: "event-stream", + request: (0, index_js_1.normalizeRequest)(digest), + dynamicOptions: this.dynamicOptions, + payload: this.makeStream(), + statusCode: 200, + }; + const result = await (0, index_js_1.convertHandlerResultToResult)(handlerResult); + return this.send(ctx, result); + } + async send(ctx, result) { + if (result === null) { + // 404 + ctx.status(404); + return ctx.text("¯\\_(ツ)_/¯"); + } + switch (result.type) { + case "error": { + const { statusCode, headers } = result; + this.setResponseHeaders(ctx, headers); + ctx.status(statusCode); + const errorWithStatus = Object.assign(result.error, { + status: statusCode, + }); + throw errorWithStatus; + } + case "buffer": { + const { statusCode, headers, buffer } = result; + this.setResponseHeaders(ctx, headers); + ctx.status(statusCode); + return ctx.body(buffer); + } + case "json": { + const { statusCode, headers, json } = result; + this.setResponseHeaders(ctx, headers); + ctx.status(statusCode); + // @ts-expect-error Some issue with types causing "excessively deep and possibly infinite" + return ctx.json(json); + } + case "noContent": { + const { statusCode, headers } = result; + this.setResponseHeaders(ctx, headers); + ctx.status(statusCode); + return ctx.body(null); + } + case "bufferStream": { + // TODO : handle bufferStream? + console.log("bufferStream is not handled yet"); + // Force the iterator to close + const { bufferIterator } = result; + if (bufferIterator.return) { + bufferIterator.return(); + } + else if (bufferIterator.throw) { + bufferIterator.throw(new Error("Unimplemented")); + } + this.setResponseHeaders(ctx, { "Content-Type": "text/plain" }); + ctx.status(501); + return ctx.text("Server hasn't implemented this yet"); + } + default: { + const never = result; + console.log("Unhandled:"); + console.dir(never); + this.setResponseHeaders(ctx, { "Content-Type": "text/plain" }); + ctx.status(501); + return ctx.text("Server hasn't implemented this yet"); + } + } + } + async addTo(app) { + const dynamicOptions = this.dynamicOptions; + if (this.resolvedPreset.grafserv?.websockets && !this.upgradeWebSocket) { + throw new Error("grafserv.websockets is enabled but no upgradeWebSocket was provided"); + } + if (!this.resolvedPreset.grafserv?.websockets && this.upgradeWebSocket) { + console.warn("UpgradeWebSocket was provided but grafserv.websockets is disabled - websockets will not be activated"); + } + app.post(this.dynamicOptions.graphqlPath, (c) => this.handleGraphQLEvent(c)); + const websocketHandler = this.resolvedPreset.grafserv?.websockets && this.upgradeWebSocket + ? this.makeWsHandler(this.upgradeWebSocket) + : undefined; + const shouldServeGetHandler = this.dynamicOptions.graphqlOverGET || + this.dynamicOptions.graphiqlOnGraphQLGET || + websocketHandler; + if (shouldServeGetHandler) { + app.get(this.dynamicOptions.graphqlPath, (c, next) => { + if (c.req.header("Upgrade") === "websocket" && websocketHandler) { + return websocketHandler(c, next); + } + return this.handleGraphQLEvent(c); + }); + } + if (dynamicOptions.graphiql) { + app.get(this.dynamicOptions.graphiqlPath, (c) => this.handleGraphiqlEvent(c)); + } + if (dynamicOptions.watch) { + app.get(this.dynamicOptions.eventStreamPath, (c) => this.handleEventStreamEvent(c)); + } + } + setResponseHeaders(ctx, headers) { + for (const key in headers) { + ctx.header(key, headers[key]); + } + } +} +exports.HonoGrafserv = HonoGrafserv; +/** + * Creates a new instance of HonoGrafserv. + * + * @param config - The configuration object for Grafserv. + * @param upgradeWebSocket - Optional parameter required when using websockets. + * Hono uses the upgradeWebsocket helper depending on the environment. + * Refer to https://hono.dev/docs/helpers/websocket for more details. + * @returns An instance of HonoGrafserv. + */ +const grafserv = (config, upgradeWebSocket) => { + return new HonoGrafserv(config, upgradeWebSocket); +}; +exports.grafserv = grafserv; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/hono/v4/index.js.map b/grafast/grafserv/dist/servers/hono/v4/index.js.map new file mode 100644 index 0000000000..ed4286074b --- /dev/null +++ b/grafast/grafserv/dist/servers/hono/v4/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/servers/hono/v4/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/koa/v2/index.d.ts b/grafast/grafserv/dist/servers/koa/v2/index.d.ts new file mode 100644 index 0000000000..bff19e497f --- /dev/null +++ b/grafast/grafserv/dist/servers/koa/v2/index.d.ts @@ -0,0 +1,25 @@ +import type { IncomingMessage, Server as HTTPServer } from "node:http"; +import type { Server as HTTPSServer } from "node:https"; +import type { Duplex } from "node:stream"; +import type { Context } from "koa"; +import type Koa from "koa"; +import { GrafservBase } from "../../../core/base.js"; +import type { GrafservConfig } from "../../../interfaces.js"; +declare global { + namespace Grafast { + interface RequestContext { + koav2: { + ctx: Context; + }; + } + } +} +export declare class KoaGrafserv extends GrafservBase { + constructor(config: GrafservConfig); + protected _createHandler(): (ctx: Context, next: (err?: Error) => void) => void; + getUpgradeHandler(): Promise<((req: IncomingMessage, socket: Duplex, head: Buffer) => void) | null>; + shouldHandleUpgrade(req: IncomingMessage, _socket: Duplex, _head: Buffer): boolean; + addTo(app: Koa, server: HTTPServer | HTTPSServer | null, addExclusiveWebsocketHandler?: boolean): Promise; +} +export declare function grafserv(config: GrafservConfig): KoaGrafserv; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/koa/v2/index.d.ts.map b/grafast/grafserv/dist/servers/koa/v2/index.d.ts.map new file mode 100644 index 0000000000..54e08150d3 --- /dev/null +++ b/grafast/grafserv/dist/servers/koa/v2/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/servers/koa/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,wBAAwB,CAAC;AAS5E,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,cAAc;YACtB,KAAK,EAAE;gBACL,GAAG,EAAE,OAAO,CAAC;aACd,CAAC;SACH;KACF;CACF;AAsCD,qBAAa,WAAY,SAAQ,YAAY;gBAC/B,MAAM,EAAE,cAAc;IAIlC,SAAS,CAAC,cAAc,IAAI,CAC1B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,KACxB,IAAI;IAwEH,iBAAiB;IAOvB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAWlE,KAAK,CACT,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,EACvC,4BAA4B,UAAO;CA2CtC;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,eAE9C"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/koa/v2/index.js b/grafast/grafserv/dist/servers/koa/v2/index.js new file mode 100644 index 0000000000..7fda80ac42 --- /dev/null +++ b/grafast/grafserv/dist/servers/koa/v2/index.js @@ -0,0 +1,175 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KoaGrafserv = void 0; +exports.grafserv = grafserv; +const node_stream_1 = require("node:stream"); +const base_js_1 = require("../../../core/base.js"); +const utils_js_1 = require("../../../utils.js"); +const index_js_1 = require("../../node/index.js"); +function getDigest(dynamicOptions, ctx) { + return { + httpVersionMajor: ctx.req.httpVersionMajor, + httpVersionMinor: ctx.req.httpVersionMinor, + // Koa respects X-Forwarded-Proto when configured to trust the proxy + isSecure: ctx.secure, + method: ctx.request.method, + path: ctx.request.url, + headers: (0, utils_js_1.processHeaders)(ctx.request.headers), + getQueryParams() { + return ctx.request.query; + }, + getBody() { + if ("body" in ctx.request) { + return (0, utils_js_1.getBodyFromFrameworkBody)(ctx.request.body); + } + else { + // No koa-bodyparser, let's just read the body ourself + return (0, utils_js_1.getBodyFromRequest)(ctx.req, dynamicOptions.maxRequestLength); + } + }, + requestContext: { + node: { + req: ctx.req, + res: ctx.res, + }, + koav2: { + ctx, + }, + }, + preferJSON: true, + }; +} +class KoaGrafserv extends base_js_1.GrafservBase { + constructor(config) { + super(config); + } + _createHandler() { + const dynamicOptions = this.dynamicOptions; + return async (ctx, next) => { + const request = getDigest(dynamicOptions, ctx); + const result = await this.processRequest(request); + if (result === null) { + return next(); + } + switch (result.type) { + case "error": { + const { statusCode, headers } = result; + ctx.response.set(headers); + ctx.response.status = statusCode; + // DEBT: mutating the error is probably bad form... + const errorWithStatus = Object.assign(result.error, { + status: statusCode, + }); + throw errorWithStatus; + } + case "buffer": { + const { statusCode, headers, buffer } = result; + ctx.response.set(headers); + ctx.response.status = statusCode; + ctx.response.body = buffer; + return; + } + case "json": { + const { statusCode, headers, json } = result; + ctx.response.set(headers); + ctx.response.status = statusCode; + ctx.response.body = json; + return; + } + case "noContent": { + const { statusCode, headers } = result; + ctx.response.set(headers); + ctx.response.status = statusCode; + ctx.response.body = null; + return; + } + case "bufferStream": { + const { statusCode, headers, lowLatency, bufferIterator } = result; + if (lowLatency) { + ctx.req.socket.setTimeout(0); + ctx.req.socket.setNoDelay(true); + ctx.req.socket.setKeepAlive(true); + } + ctx.response.set(headers); + ctx.response.status = statusCode; + const stream = new node_stream_1.PassThrough(); + ctx.response.body = stream; + for await (const buffer of bufferIterator) { + stream.write(buffer); + } + return; + } + default: { + const never = result; + console.log("Unhandled:"); + console.dir(never); + ctx.response.type = "text/plain"; + ctx.response.status = 501; + ctx.response.body = "Server hasn't implemented this yet"; + return; + } + } + }; + } + async getUpgradeHandler() { + if (this.resolvedPreset.grafserv?.websockets) { + return (0, index_js_1.makeNodeUpgradeHandler)(this); + } + else { + return null; + } + } + shouldHandleUpgrade(req, _socket, _head) { + const fullUrl = req.url; + if (!fullUrl) { + return false; + } + const q = fullUrl.indexOf("?"); + const url = q >= 0 ? fullUrl.substring(0, q) : fullUrl; + const graphqlPath = this.dynamicOptions.graphqlPath; + return url === graphqlPath; + } + async addTo(app, server, addExclusiveWebsocketHandler = true) { + app.use(this._createHandler()); + // Alias this just to make it easier for users to copy/paste the code below + // eslint-disable-next-line @typescript-eslint/no-this-alias + const serv = this; + if (addExclusiveWebsocketHandler) { + const grafservUpgradeHandler = await serv.getUpgradeHandler(); + if (grafservUpgradeHandler) { + const upgrade = (req, socket, head) => { + if (serv.shouldHandleUpgrade(req, socket, head)) { + grafservUpgradeHandler(req, socket, head); + } + else { + socket.destroy(); + } + }; + const attachWebsocketsToServer = (server) => { + server.on("upgrade", upgrade); + serv.onRelease(() => { + server.off("upgrade", upgrade); + }); + }; + if (server) { + // If user explicitly passes server, bind to it: + attachWebsocketsToServer(server); + } + else { + // If not, hope they're calling `app.listen()` and intercept that call. + const oldListen = app.listen; + app.listen = function (...args) { + const server = oldListen.apply(this, args); + attachWebsocketsToServer(server); + return server; + }; + } + } + } + } +} +exports.KoaGrafserv = KoaGrafserv; +function grafserv(config) { + return new KoaGrafserv(config); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/koa/v2/index.js.map b/grafast/grafserv/dist/servers/koa/v2/index.js.map new file mode 100644 index 0000000000..e937589ae4 --- /dev/null +++ b/grafast/grafserv/dist/servers/koa/v2/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/servers/koa/v2/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/lambda/v1/index.d.ts b/grafast/grafserv/dist/servers/lambda/v1/index.d.ts new file mode 100644 index 0000000000..497872b48c --- /dev/null +++ b/grafast/grafserv/dist/servers/lambda/v1/index.d.ts @@ -0,0 +1,31 @@ +import type { APIGatewayEvent, APIGatewayProxyEvent, APIGatewayProxyResult, Context as LambdaContext } from "aws-lambda"; +import { GrafservBase } from "../../../core/base.js"; +import type { GrafservConfig, RequestDigest, Result } from "../../../interfaces.js"; +declare global { + namespace Grafast { + interface RequestContext { + lambdav1: { + event: APIGatewayProxyEvent; + context: LambdaContext; + }; + } + } +} +/** @experimental */ +export declare class LambdaGrafserv extends GrafservBase { + protected lambdaRequestToGrafserv(event: APIGatewayEvent, context: LambdaContext): RequestDigest; + protected grafservResponseToLambda(response: Result | null): { + statusCode: number; + body: string; + headers?: undefined; + } | { + statusCode: number; + headers: Record; + body: string; + }; + createHandler(): (event: APIGatewayEvent, context: LambdaContext) => Promise; + protected processLambdaRequest(_event: APIGatewayEvent, _context: LambdaContext, request: RequestDigest): import("grafast").PromiseOrDirect; +} +/** @experimental */ +export declare function grafserv(config: GrafservConfig): LambdaGrafserv; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/lambda/v1/index.d.ts.map b/grafast/grafserv/dist/servers/lambda/v1/index.d.ts.map new file mode 100644 index 0000000000..fcb63ef512 --- /dev/null +++ b/grafast/grafserv/dist/servers/lambda/v1/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/servers/lambda/v1/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,OAAO,IAAI,aAAa,EACzB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,MAAM,EACP,MAAM,wBAAwB,CAAC;AAGhC,OAAO,CAAC,MAAM,CAAC;IAEb,UAAU,OAAO,CAAC;QAChB,UAAU,cAAc;YACtB,QAAQ,EAAE;gBAAE,KAAK,EAAE,oBAAoB,CAAC;gBAAC,OAAO,EAAE,aAAa,CAAA;aAAE,CAAC;SACnE;KACF;CACF;AAED,oBAAoB;AACpB,qBAAa,cAAe,SAAQ,YAAY;IAC9C,SAAS,CAAC,uBAAuB,CAC/B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,aAAa,GACrB,aAAa;IAgChB,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;;;;;;;;;IAwC1D,aAAa,KAGT,OAAO,eAAe,EACtB,SAAS,aAAa,KACrB,OAAO,CAAC,qBAAqB,CAAC;IAWnC,SAAS,CAAC,oBAAoB,CAC5B,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,EACvB,OAAO,EAAE,aAAa;CAIzB;AAED,oBAAoB;AACpB,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,kBAE9C"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/lambda/v1/index.js b/grafast/grafserv/dist/servers/lambda/v1/index.js new file mode 100644 index 0000000000..003f08bb09 --- /dev/null +++ b/grafast/grafserv/dist/servers/lambda/v1/index.js @@ -0,0 +1,83 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LambdaGrafserv = void 0; +exports.grafserv = grafserv; +const base_js_1 = require("../../../core/base.js"); +const utils_js_1 = require("../../../utils.js"); +/** @experimental */ +class LambdaGrafserv extends base_js_1.GrafservBase { + lambdaRequestToGrafserv(event, context) { + const version = event.requestContext.protocol.match(/^HTTP\/(?[0-9]+)\.(?[0-9]+)$/); + return { + httpVersionMajor: parseInt(version?.groups?.major ?? "1"), + httpVersionMinor: parseInt(version?.groups?.minor ?? "0"), + isSecure: false, // Because we don't trust X-Forwarded-Proto + method: event.httpMethod, + path: event.requestContext.path, + headers: (0, utils_js_1.processHeaders)(event.multiValueHeaders), + getQueryParams() { + return Object.fromEntries(Object.entries(event.queryStringParameters ?? {}).filter(([_k, v]) => v !== undefined)); + }, + getBody() { + return { + type: "text", + text: event.body ?? "", + }; + }, + requestContext: { + lambdav1: { event, context }, + }, + preferJSON: true, + }; + } + grafservResponseToLambda(response) { + if (response === null) { + return { + statusCode: 404, + body: "¯\\_(ツ)_/¯", + }; + } + switch (response.type) { + case "error": { + const { statusCode, headers, error } = response; + return { + statusCode, + headers: { ...headers, "Content-Type": "text/plain" }, + body: error.message, + }; + } + case "buffer": { + const { statusCode, headers, buffer } = response; + return { statusCode, headers, body: buffer.toString("utf8") }; + } + case "json": { + const { statusCode, headers, json } = response; + return { statusCode, headers, body: JSON.stringify(json) }; + } + default: { + console.log("Unhandled:"); + console.dir(response); + return { + statusCode: 501, + headers: { "Content-Type": "text/plain" }, + body: "Server hasn't implemented this yet", + }; + } + } + } + createHandler() { + // eslint-disable-next-line @typescript-eslint/no-this-alias + return async (event, context) => { + return this.grafservResponseToLambda(await this.processLambdaRequest(event, context, this.lambdaRequestToGrafserv(event, context))); + }; + } + processLambdaRequest(_event, _context, request) { + return this.processRequest(request); + } +} +exports.LambdaGrafserv = LambdaGrafserv; +/** @experimental */ +function grafserv(config) { + return new LambdaGrafserv(config); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/lambda/v1/index.js.map b/grafast/grafserv/dist/servers/lambda/v1/index.js.map new file mode 100644 index 0000000000..75d64f0edc --- /dev/null +++ b/grafast/grafserv/dist/servers/lambda/v1/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/servers/lambda/v1/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/node/index.d.ts b/grafast/grafserv/dist/servers/node/index.d.ts new file mode 100644 index 0000000000..8237476b24 --- /dev/null +++ b/grafast/grafserv/dist/servers/node/index.d.ts @@ -0,0 +1,59 @@ +import type { IncomingHttpHeaders, IncomingMessage, Server as HTTPServer, ServerResponse } from "node:http"; +import type { Server as HTTPSServer } from "node:https"; +import type { Duplex } from "node:stream"; +import type WebSocket from "ws"; +import { GrafservBase } from "../../core/base.js"; +import type { GrafservConfig, RequestDigest } from "../../interfaces.js"; +import type { OptionsFromConfig } from "../../options.js"; +declare global { + namespace Grafast { + interface RequestContext { + node: { + readonly req: IncomingMessage; + readonly res: ServerResponse; + }; + ws: { + /** + * The actual socket connection between the server and the client. + */ + readonly socket: WebSocket | undefined; + /** + * The initial HTTP upgrade request before the actual + * socket and connection is established. + */ + readonly request: IncomingMessage | undefined; + /** The parameters passed during the connection initialisation. */ + readonly connectionParams: Record | undefined; + /** + * As `connectionParams`, but with lower case keys to avoid case sensitivity issues. The actual transforms are: + * + * - Non-string keys are ignored + * - Keys are lowercased + * - Array values are confirmed to be string[], otherwise they're ignored + * - Other values are coerced to string if appropriate, otherwise ignored + * - Ignored values are not added to headers + * - If duplicate keys are found, the resulting value will be string[] + * by concatenating existing and new values + */ + readonly normalizedConnectionParams: IncomingHttpHeaders | undefined; + }; + } + } +} +export declare class NodeGrafservBase extends GrafservBase { + constructor(config: GrafservConfig); + protected getDigest(dynamicOptions: OptionsFromConfig, req: IncomingMessage, res: ServerResponse, isHTTPS: boolean): RequestDigest; + /** + * @deprecated Please user serv.addTo instead, so that websockets can be automatically supported + */ + createHandler(isHTTPS?: boolean): (req: IncomingMessage, res: ServerResponse, next?: (err?: Error) => void) => void; + protected _createHandler(isHTTPS?: boolean): (req: IncomingMessage, res: ServerResponse, next?: (err?: Error) => void) => void; + getUpgradeHandler(): Promise<((req: IncomingMessage, socket: Duplex, head: Buffer) => void) | null>; + shouldHandleUpgrade(req: IncomingMessage, _socket: Duplex, _head: Buffer): boolean; +} +export declare class NodeGrafserv extends NodeGrafservBase { + addTo(server: HTTPServer | HTTPSServer, addExclusiveWebsocketHandler?: boolean): Promise; +} +export declare function grafserv(config: GrafservConfig): NodeGrafserv; +export declare function makeNodeUpgradeHandler(instance: GrafservBase): Promise<(req: IncomingMessage, socket: Duplex, head: Buffer) => void>; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/node/index.d.ts.map b/grafast/grafserv/dist/servers/node/index.d.ts.map new file mode 100644 index 0000000000..9bc3c5745f --- /dev/null +++ b/grafast/grafserv/dist/servers/node/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/servers/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EACf,MAAM,IAAI,UAAU,EACpB,cAAc,EACf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAO1D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,cAAc;YACtB,IAAI,EAAE;gBACJ,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAC;gBAC9B,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;aAC9B,CAAC;YACF,EAAE,EAAE;gBAEF;;mBAEG;gBACH,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;gBACvC;;;mBAGG;gBACH,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,CAAC;gBAE9C,kEAAkE;gBAClE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAE/D;;;;;;;;;;mBAUG;gBACH,QAAQ,CAAC,0BAA0B,EAAE,mBAAmB,GAAG,SAAS,CAAC;aACtE,CAAC;SACH;KACF;CACF;AAED,qBAAa,gBAAiB,SAAQ,YAAY;gBACpC,MAAM,EAAE,cAAc;IAIlC,SAAS,CAAC,SAAS,CACjB,cAAc,EAAE,iBAAiB,EACjC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,OAAO,GACf,aAAa;IA8BhB;;OAEG;IACI,aAAa,CAClB,OAAO,UAAQ,GACd,CACD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,KACzB,IAAI;IAIT,SAAS,CAAC,cAAc,CACtB,OAAO,UAAQ,GACd,CACD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,KACzB,IAAI;IA2JH,iBAAiB,mBAwEC,eAAe,UAAU,MAAM,QAAQ,MAAM;IAjErE,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAiBzE;AAED,qBAAa,YAAa,SAAQ,gBAAgB;IAC1C,KAAK,CACT,MAAM,EAAE,UAAU,GAAG,WAAW,EAChC,4BAA4B,UAAO;CA+BtC;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,gBAE9C;AAED,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,YAAY,iBAMzC,eAAe,UAAU,MAAM,QAAQ,MAAM,WAgDtE"} \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/node/index.js b/grafast/grafserv/dist/servers/node/index.js new file mode 100644 index 0000000000..33413b734b --- /dev/null +++ b/grafast/grafserv/dist/servers/node/index.js @@ -0,0 +1,307 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NodeGrafserv = exports.NodeGrafservBase = void 0; +exports.grafserv = grafserv; +exports.makeNodeUpgradeHandler = makeNodeUpgradeHandler; +const node_querystring_1 = require("node:querystring"); +const grafast_1 = require("grafast"); +const graphql_ws_1 = require("graphql-ws"); +const base_js_1 = require("../../core/base.js"); +const utils_js_1 = require("../../utils.js"); +class NodeGrafservBase extends base_js_1.GrafservBase { + constructor(config) { + super(config); + } + getDigest(dynamicOptions, req, res, isHTTPS) { + const reqUrl = req.url; + const qi = reqUrl.indexOf("?"); + const path = qi >= 0 ? reqUrl.substring(0, qi) : reqUrl; + const search = qi >= 0 ? reqUrl.substring(qi + 1) : null; + return { + httpVersionMajor: req.httpVersionMajor, + httpVersionMinor: req.httpVersionMinor, + isSecure: isHTTPS, + method: req.method, + path, + headers: (0, utils_js_1.processHeaders)(req.headers), + getQueryParams() { + const queryParams = search + ? (0, node_querystring_1.parse)(search) + : Object.create(null); + return queryParams; + }, + getBody() { + return (0, utils_js_1.getBodyFromRequest)(req, dynamicOptions.maxRequestLength); + }, + requestContext: { + node: { + req, + res, + }, + }, + }; + } + /** + * @deprecated Please user serv.addTo instead, so that websockets can be automatically supported + */ + createHandler(isHTTPS = false) { + return this._createHandler(isHTTPS); + } + _createHandler(isHTTPS = false) { + const dynamicOptions = this.dynamicOptions; + return async (req, res, next) => { + try { + const request = this.getDigest(dynamicOptions, req, res, isHTTPS); + const result = await this.processRequest(request); + if (result === null) { + if (typeof next === "function") { + return next(); + } + else { + const payload = Buffer.from(`Could not process ${req.method} request to ${req.url} ─ please POST requests to ${dynamicOptions.graphqlPath}`, "utf8"); + res.writeHead(404, { + "Content-Type": "text/plain; charset=utf-8", + "Content-Length": payload.length, + }); + res.end(payload); + return; + } + } + switch (result.type) { + case "error": { + // TODO: return error in the format the browser would prefer (JSON, HTML, text) + // TODO: respect result.headers + if (result.error instanceof grafast_1.SafeError) { + const payload = Buffer.from(result.error.message, "utf8"); + res.writeHead(result.statusCode, { + "Content-Type": "text/plain; charset=utf-8", + "Content-Length": payload.length, + }); + res.end(payload); + return; + } + else if (typeof next === "function") { + return next(result.error); + } + else { + // TODO: catch all the code paths that lead here! + console.error(result.error); + const payload = Buffer.from("An error occurred", "utf8"); + res.writeHead(result.statusCode, { + "Content-Type": "text/plain; charset=utf-8", + "Content-Length": payload.length, + }); + res.end(payload); + return; + } + } + case "buffer": { + const { statusCode, headers, buffer } = result; + res.writeHead(statusCode, headers); + res.end(buffer); + return; + } + case "json": { + const { statusCode, headers, json } = result; + const buffer = Buffer.from(JSON.stringify(json), "utf8"); + headers["Content-Length"] = String(buffer.length); + res.writeHead(statusCode, headers); + res.end(buffer); + return; + } + case "noContent": { + const { statusCode, headers } = result; + res.writeHead(statusCode, headers); + res.end(); + return; + } + case "bufferStream": { + const { statusCode, headers, lowLatency, bufferIterator } = result; + if (lowLatency) { + req.socket.setTimeout(0); + req.socket.setNoDelay(true); + req.socket.setKeepAlive(true); + } + res.writeHead(statusCode, headers); + // Clean up when connection closes. + const cleanup = () => { + try { + bufferIterator.return?.(); + } + catch { + /* nom nom nom */ + } + req.removeListener("close", cleanup); + req.removeListener("finish", cleanup); + req.removeListener("error", cleanup); + }; + req.on("close", cleanup); + req.on("finish", cleanup); + req.on("error", cleanup); + // https://github.com/expressjs/compression#server-sent-events + const flush = lowLatency + ? typeof res.flush === "function" + ? res.flush.bind(res) + : typeof res.flushHeaders === "function" + ? res.flushHeaders.bind(res) + : null + : null; + try { + for await (const buffer of bufferIterator) { + const bufferIsBelowWatermark = res.write(buffer); + if (flush) { + flush(); + } + if (!bufferIsBelowWatermark) { + // Wait for drain before pumping more data through + await new Promise((resolve) => res.once("drain", resolve)); + } + } + } + catch (e) { + console.error(`Error occurred during stream; swallowing error.`, e); + } + finally { + res.end(); + } + return; + } + default: { + const never = result; + console.log("Unhandled:"); + console.dir(never); + const payload = Buffer.from("Server hasn't implemented this yet", "utf8"); + res.writeHead(501, { "Content-Length": payload.length }); + res.end(payload); + return; + } + } + } + catch (e) { + console.error("Unexpected error occurred:"); + console.error(e); + if (typeof next === "function") { + next(e); + } + else { + const text = "Unknown error occurred"; + res.writeHead(500, { + "Content-Type": "text/plain", + "Content-Length": text.length, + }); + res.end(text); + } + } + }; + } + async getUpgradeHandler() { + if (this.resolvedPreset.grafserv?.websockets) { + return makeNodeUpgradeHandler(this); + } + else { + return null; + } + } + shouldHandleUpgrade(req, _socket, _head) { + const fullUrl = req.url; + if (!fullUrl) { + return false; + } + const q = fullUrl.indexOf("?"); + const url = q >= 0 ? fullUrl.substring(0, q) : fullUrl; + const graphqlPath = this.dynamicOptions.graphqlPath; + return url === graphqlPath; + /* + const protocol = req.headers["sec-websocket-protocol"]; + const protocols = Array.isArray(protocol) + ? protocol + : protocol?.split(",").map((p) => p.trim()) ?? []; + if (protocols.includes(GRAPHQL_TRANSPORT_WS_PROTOCOL)) ... + */ + } +} +exports.NodeGrafservBase = NodeGrafservBase; +class NodeGrafserv extends NodeGrafservBase { + async addTo(server, addExclusiveWebsocketHandler = true) { + const handler = this._createHandler(); + server.on("request", handler); + this.onRelease(() => { + server.off("request", handler); + }); + // Alias this just to make it easier for users to copy/paste the code below + // eslint-disable-next-line @typescript-eslint/no-this-alias + const serv = this; + if (addExclusiveWebsocketHandler) { + const grafservUpgradeHandler = await serv.getUpgradeHandler(); + if (grafservUpgradeHandler) { + const upgrade = (req, socket, head) => { + if (serv.shouldHandleUpgrade(req, socket, head)) { + grafservUpgradeHandler(req, socket, head); + } + else { + socket.destroy(); + } + }; + server.on("upgrade", upgrade); + serv.onRelease(() => { + server.off("upgrade", upgrade); + }); + } + } + } +} +exports.NodeGrafserv = NodeGrafserv; +function grafserv(config) { + return new NodeGrafserv(config); +} +async function makeNodeUpgradeHandler(instance) { + const ws = await import("ws"); + const { WebSocketServer } = ws; + const graphqlWsServer = (0, graphql_ws_1.makeServer)((0, utils_js_1.makeGraphQLWSConfig)(instance)); + const wsServer = new WebSocketServer({ noServer: true }); + const onUpgrade = (req, socket, head) => { + wsServer.handleUpgrade(req, socket, head, function done(ws) { + wsServer.emit("connection", ws, req); + }); + }; + const onConnection = (socket, request) => { + // a new socket opened, let graphql-ws take over + const closed = graphqlWsServer.opened({ + protocol: socket.protocol, // will be validated + send: (data) => new Promise((resolve, reject) => { + socket.send(data, (err) => (err ? reject(err) : resolve())); + }), // control your data flow by timing the promise resolve + close: (code, reason) => socket.close(code, reason), // there are protocol standard closures + onMessage: (cb) => socket.on("message", async (event) => { + try { + // wait for the the operation to complete + // - if init message, waits for connect + // - if query/mutation, waits for result + // - if subscription, waits for complete + await cb(event.toString()); + } + catch (err) { + try { + // all errors that could be thrown during the + // execution of operations will be caught here + socket.close(graphql_ws_1.CloseCode.InternalServerError, err.message); + } + catch { + /*noop*/ + } + } + }), + }, + // pass values to the `extra` field in the context + { socket, request }); + // notify server that the socket closed + socket.once("close", closed); + }; + wsServer.on("connection", onConnection); + instance.onRelease(() => { + wsServer.off("connection", onConnection); + wsServer.close(); + }); + return onUpgrade; +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/servers/node/index.js.map b/grafast/grafserv/dist/servers/node/index.js.map new file mode 100644 index 0000000000..f2b183f88a --- /dev/null +++ b/grafast/grafserv/dist/servers/node/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/servers/node/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/utils.d.ts b/grafast/grafserv/dist/utils.d.ts new file mode 100644 index 0000000000..1a48f1b443 --- /dev/null +++ b/grafast/grafserv/dist/utils.d.ts @@ -0,0 +1,33 @@ +import type { Readable } from "node:stream"; +import { SafeError } from "grafast"; +import type { FormattedExecutionPatchResult, FormattedExecutionResult } from "grafast/graphql"; +import type { ServerOptions, SubscribePayload } from "graphql-ws"; +import type { GrafservBase } from "./index.js"; +import type { GrafservBody, JSONValue, NormalizedRequestDigest, ParsedGraphQLBody, RequestDigest } from "./interfaces.js"; +export declare const sleep: (ms: number) => { + promise: Promise; + release(): void; +}; +export declare function handleErrors(payload: FormattedExecutionResult | FormattedExecutionPatchResult): void; +type IncomingHttpHeaders = Record; +export declare function processHeaders(headers: IncomingHttpHeaders): Record; +export declare function getBodyFromRequest(req: Readable, maxLength: number): Promise; +/** + * Using this is a hack, it sniffs the data and tries to determine the type. + * Really you should ask your framework of choice what type of data it has given + * you. + */ +export declare function getBodyFromFrameworkBody(body: unknown): GrafservBody; +export declare function memo(fn: () => T): () => T; +export declare function normalizeRequest(request: RequestDigest | NormalizedRequestDigest): NormalizedRequestDigest; +export declare function httpError(statusCode: number, message: string): SafeError; +export declare function normalizeConnectionParams(connectionParams: Record | undefined): IncomingHttpHeaders | undefined; +export declare function makeGraphQLWSConfig(instance: GrafservBase): ServerOptions; +export declare function parseGraphQLJSONBody(params: JSONValue | (SubscribePayload & { + id?: string; + documentId?: string; +})): ParsedGraphQLBody; +export declare function concatBufferIterator(bufferIterator: AsyncGenerator): Promise>; +export declare function noop(): void; +export {}; +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/utils.d.ts.map b/grafast/grafserv/dist/utils.d.ts.map new file mode 100644 index 0000000000..4844a2b38d --- /dev/null +++ b/grafast/grafserv/dist/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAY,SAAS,EAAa,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAEV,6BAA6B,EAC7B,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGlE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,uBAAuB,EAEvB,iBAAiB,EACjB,aAAa,EACd,MAAM,iBAAiB,CAAC;AAMzB,eAAO,MAAM,KAAK,GAAI,IAAI,MAAM;;;CAU/B,CAAC;AAGF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,wBAAwB,GAAG,6BAA6B,GAChE,IAAI,CA0BN;AAGD,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAEzE,wBAAgB,cAAc,CAC5B,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAcxB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,CAqBvB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAqBpE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAY5C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,aAAa,GAAG,uBAAuB,GAC/C,uBAAuB,CAoBzB;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAExE;AAmBD,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACpD,mBAAmB,GAAG,SAAS,CAkCjC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,aAAa,CAmGzE;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,SAAS,GAAG,CAAC,gBAAgB,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5E,iBAAiB,CAqBnB;AAED,wBAAsB,oBAAoB,CACxC,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,gCAOvC;AAED,wBAAgB,IAAI,IAAI,IAAI,CAAG"} \ No newline at end of file diff --git a/grafast/grafserv/dist/utils.js b/grafast/grafserv/dist/utils.js new file mode 100644 index 0000000000..a080303550 --- /dev/null +++ b/grafast/grafserv/dist/utils.js @@ -0,0 +1,320 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.sleep = void 0; +exports.handleErrors = handleErrors; +exports.processHeaders = processHeaders; +exports.getBodyFromRequest = getBodyFromRequest; +exports.getBodyFromFrameworkBody = getBodyFromFrameworkBody; +exports.memo = memo; +exports.normalizeRequest = normalizeRequest; +exports.httpError = httpError; +exports.normalizeConnectionParams = normalizeConnectionParams; +exports.makeGraphQLWSConfig = makeGraphQLWSConfig; +exports.parseGraphQLJSONBody = parseGraphQLJSONBody; +exports.concatBufferIterator = concatBufferIterator; +exports.noop = noop; +const tslib_1 = require("tslib"); +const grafast_1 = require("grafast"); +const graphql = tslib_1.__importStar(require("grafast/graphql")); +const interfaces_js_1 = require("./interfaces.js"); +const graphql_js_1 = require("./middleware/graphql.js"); +const { GraphQLError } = graphql; +const sleep = (ms) => { + let _timeout; + return { + promise: new Promise((resolve) => void (_timeout = setTimeout(resolve, ms))), + release() { + clearTimeout(_timeout); + }, + }; +}; +exports.sleep = sleep; +// TODO: remove this ANSI-removal hack! +function handleErrors(payload) { + if (payload.errors !== undefined) { + payload.errors = payload.errors.map((e) => { + const obj = e instanceof GraphQLError + ? e.toJSON() + : { message: e.message, ...e }; + return { + ...obj, + message: (0, grafast_1.stripAnsi)(obj.message), + ...(e instanceof GraphQLError + ? { + extensions: { + ...e.extensions, + ...(typeof e.extensions.stack === "string" + ? { stack: (0, grafast_1.stripAnsi)(e.extensions.stack) } + : null), + ...(typeof e.extensions.cause === "string" + ? { cause: (0, grafast_1.stripAnsi)(e.extensions.cause) } + : null), + }, + } + : null), + }; + }); + } +} +function processHeaders(headers) { + const headerDigest = Object.create(null); + for (const key in headers) { + const val = headers[key]; + if (val == null) { + continue; + } + if (typeof val === "string") { + headerDigest[key] = val; + } + else { + headerDigest[key] = val.join("\n"); + } + } + return headerDigest; +} +function getBodyFromRequest(req /* IncomingMessage */, maxLength) { + return new Promise((resolve, reject) => { + const chunks = []; + let len = 0; + const handleData = (chunk) => { + chunks.push(chunk); + len += chunk.length; + if (len > maxLength) { + req.off("end", done); + req.off("error", reject); + req.off("data", handleData); + reject(httpError(413, "Too much data")); + } + }; + const done = () => { + resolve({ type: "buffer", buffer: Buffer.concat(chunks) }); + }; + req.on("end", done); + req.on("error", reject); + req.on("data", handleData); + }); +} +/** + * Using this is a hack, it sniffs the data and tries to determine the type. + * Really you should ask your framework of choice what type of data it has given + * you. + */ +function getBodyFromFrameworkBody(body) { + if (typeof body === "string") { + return { + type: "text", + text: body, + }; + } + else if (Buffer.isBuffer(body)) { + return { + type: "buffer", + buffer: body, + }; + } + else if (typeof body === "object" && body != null) { + return { + type: "json", + json: body, + }; + } + else { + throw new Error(`Grafserv adaptor doesn't know how to interpret this request body`); + } +} +function memo(fn) { + let cache; + let called = false; + return function memoized() { + if (called) { + return cache; + } + else { + called = true; + cache = fn.call(this); + return cache; + } + }; +} +function normalizeRequest(request) { + if (!request[interfaces_js_1.$$normalizedHeaders]) { + const r = request; + const normalized = Object.create(null); + for (const key in r.headers) { + normalized[key.toLowerCase()] = r.headers[key]; + } + r[interfaces_js_1.$$normalizedHeaders] = normalized; + r.preferJSON = Boolean(r.preferJSON); + r.getHeader = (key) => normalized[key.toLowerCase()]; + r.getBody = memo(r.getBody); + r.getQueryParams = memo(r.getQueryParams); + if (r.method === "HEAD") { + // Pretend that 'HEAD' requests are actually 'GET' requests; Node will + // take care of stripping the response body for us. + r.method = "GET"; + } + } + return request; +} +function httpError(statusCode, message) { + return new grafast_1.SafeError(message, { statusCode }); +} +function coerceHeaderValue(rawValue) { + if (rawValue == null) + return undefined; + if (typeof rawValue === "string") + return rawValue; + if (typeof rawValue === "number") + return String(rawValue); + if (typeof rawValue === "boolean") + return String(rawValue); + if (Array.isArray(rawValue) && rawValue.every((v) => typeof v === "string")) { + return rawValue; + } + // Strip unsupported values + return undefined; +} +function normalizeConnectionParams(connectionParams) { + if (typeof connectionParams !== "object" || + connectionParams === null || + Array.isArray(connectionParams)) { + return undefined; + } + const headers = Object.create(null); + for (const [rawKey, rawValue] of Object.entries(connectionParams)) { + if (typeof rawKey !== "string") + continue; + const key = rawKey.toLowerCase(); + const value = coerceHeaderValue(rawValue); + if (value == null) + continue; + if (headers[key] != null) { + const prev = headers[key]; + if (Array.isArray(prev)) { + if (Array.isArray(value)) { + headers[key] = [...prev, ...value]; + } + else { + headers[key] = [...prev, value]; + } + } + else { + if (Array.isArray(value)) { + headers[key] = [prev, ...value]; + } + else { + headers[key] = [prev, value]; + } + } + } + else { + headers[key] = value; + } + } + return headers; +} +function makeGraphQLWSConfig(instance) { + async function onSubscribeWithEvent({ ctx, message }) { + try { + const grafastCtx = { + ws: { + request: ctx.extra.request, + socket: ctx.extra.socket, + connectionParams: ctx.connectionParams, + normalizedConnectionParams: normalizeConnectionParams(ctx.connectionParams), + }, + }; + const { grafastMiddleware } = instance; + const { schema, parseAndValidate, resolvedPreset, execute, subscribe, contextValue, } = await instance.getExecutionConfig(grafastCtx); + const parsedBody = parseGraphQLJSONBody(message.payload); + if (instance.middleware) { + await instance.middleware.run("processGraphQLRequestBody", { + resolvedPreset, + body: parsedBody, + graphqlWsContext: ctx, + }, noop); + } + const { query, operationName, variableValues } = (0, graphql_js_1.validateGraphQLBody)(parsedBody); + const { errors, document } = parseAndValidate(query); + if (errors !== undefined) { + return errors; + } + const args = { + execute, + subscribe, + schema, + document, + rootValue: null, + contextValue, + variableValues, + operationName, + resolvedPreset, + requestContext: grafastCtx, + middleware: grafastMiddleware, + }; + await (0, grafast_1.hookArgs)(args); + return args; + } + catch (e) { + return [ + new GraphQLError(e.message, null, undefined, undefined, undefined, e, undefined), + ]; + } + } + return { + onSubscribe(ctx, message) { + const event = { + resolvedPreset: instance.resolvedPreset, + ctx, + message, + }; + return instance.middleware != null + ? instance.middleware.run("onSubscribe", event, onSubscribeWithEvent) + : onSubscribeWithEvent(event); + }, + // TODO: validate that this actually does mask every error + // @ts-expect-error See: https://github.com/enisdenjo/graphql-ws/pull/599 + onError(_ctx, _message, errors) { + return errors.map(instance.dynamicOptions.maskError); + }, + async execute(args) { + const eargs = args; + return eargs.execute(eargs); + }, + async subscribe(args) { + const eargs = args; + return eargs.subscribe(eargs); + }, + }; +} +function parseGraphQLJSONBody(params) { + if (!params) { + throw httpError(400, "No body"); + } + if (typeof params !== "object" || Array.isArray(params)) { + throw httpError(400, "Invalid body; expected object"); + } + const id = params.id; + const documentId = params.documentId; + const query = params.query; + const operationName = params.operationName ?? undefined; + const variableValues = params.variables ?? undefined; + const extensions = params.extensions ?? undefined; + return { + id, + documentId, + query, + operationName, + variableValues, + extensions, + }; +} +async function concatBufferIterator(bufferIterator) { + const buffers = []; + for await (const buffer of bufferIterator) { + buffers.push(buffer); + } + return Buffer.concat(buffers); +} +function noop() { } +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/utils.js.map b/grafast/grafserv/dist/utils.js.map new file mode 100644 index 0000000000..5f01f3c598 --- /dev/null +++ b/grafast/grafserv/dist/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/grafserv/dist/version.d.ts b/grafast/grafserv/dist/version.d.ts new file mode 100644 index 0000000000..3dd433f8ce --- /dev/null +++ b/grafast/grafserv/dist/version.d.ts @@ -0,0 +1,2 @@ +export declare const version = "0.1.1-beta.24"; +//# sourceMappingURL=version.d.ts.map \ No newline at end of file diff --git a/grafast/grafserv/dist/version.d.ts.map b/grafast/grafserv/dist/version.d.ts.map new file mode 100644 index 0000000000..1f99446fca --- /dev/null +++ b/grafast/grafserv/dist/version.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,kBAAkB,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/dist/version.js b/grafast/grafserv/dist/version.js new file mode 100644 index 0000000000..c2064a8fb2 --- /dev/null +++ b/grafast/grafserv/dist/version.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.version = void 0; +// This file is autogenerated by /scripts/postversion.mjs +exports.version = "0.1.1-beta.24"; +//# sourceMappingURL=version.js.map \ No newline at end of file diff --git a/grafast/grafserv/dist/version.js.map b/grafast/grafserv/dist/version.js.map new file mode 100644 index 0000000000..5170c4e6f8 --- /dev/null +++ b/grafast/grafserv/dist/version.js.map @@ -0,0 +1 @@ +{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,yDAAyD;AAC5C,QAAA,OAAO,GAAG,eAAe,CAAC"} \ No newline at end of file diff --git a/grafast/grafserv/tsconfig.tsbuildinfo b/grafast/grafserv/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..d6e974e5dd --- /dev/null +++ b/grafast/grafserv/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../utils/lru/dist/index.d.ts","./src/accept.ts","../grafast/dist/therecanbeonlyone.d.ts","../../utils/graphile-config/dist/interfaces.d.ts","../../utils/graphile-config/dist/functionality.d.ts","../../utils/graphile-config/dist/hooks.d.ts","../../utils/graphile-config/dist/middleware.d.ts","../../utils/graphile-config/dist/resolvepresets.d.ts","../../utils/graphile-config/dist/index.d.ts","../../node_modules/graphql/version.d.ts","../../node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/graphql/language/source.d.ts","../../node_modules/graphql/jsutils/path.d.ts","../../node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/graphql/language/kinds.d.ts","../../node_modules/graphql/language/tokenkind.d.ts","../../node_modules/graphql/language/ast.d.ts","../../node_modules/graphql/language/location.d.ts","../../node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/graphql/language/directivelocation.d.ts","../../node_modules/graphql/type/directives.d.ts","../../node_modules/graphql/type/schema.d.ts","../../node_modules/graphql/type/definition.d.ts","../../node_modules/graphql/execution/execute.d.ts","../../node_modules/graphql/graphql.d.ts","../../node_modules/graphql/type/scalars.d.ts","../../node_modules/graphql/type/introspection.d.ts","../../node_modules/graphql/type/validate.d.ts","../../node_modules/graphql/type/assertname.d.ts","../../node_modules/graphql/type/index.d.ts","../../node_modules/graphql/language/printlocation.d.ts","../../node_modules/graphql/language/lexer.d.ts","../../node_modules/graphql/language/parser.d.ts","../../node_modules/graphql/language/printer.d.ts","../../node_modules/graphql/language/visitor.d.ts","../../node_modules/graphql/language/predicates.d.ts","../../node_modules/graphql/language/index.d.ts","../../node_modules/graphql/execution/subscribe.d.ts","../../node_modules/graphql/execution/values.d.ts","../../node_modules/graphql/execution/index.d.ts","../../node_modules/graphql/subscription/index.d.ts","../../node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/graphql/validation/validate.d.ts","../../node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/graphql/validation/rules/deferstreamdirectiveonrootfieldrule.d.ts","../../node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/graphql/validation/rules/streamdirectiveonlistfieldrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/graphql/validation/index.d.ts","../../node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/graphql/error/locatederror.d.ts","../../node_modules/graphql/error/index.d.ts","../../node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/graphql/utilities/printschema.d.ts","../../node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/graphql/utilities/concatast.d.ts","../../node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/graphql/utilities/index.d.ts","../../node_modules/graphql/index.d.ts","../../node_modules/eventemitter3/index.d.ts","../grafast/dist/constraints.d.ts","../grafast/dist/bucket.d.ts","../grafast/dist/steps/__item.d.ts","../grafast/dist/steps/__flag.d.ts","../grafast/dist/steps/access.d.ts","../grafast/dist/steps/__value.d.ts","../grafast/dist/steps/listtransform.d.ts","../grafast/dist/steps/connection.d.ts","../grafast/dist/steps/constant.d.ts","../grafast/dist/steps/each.d.ts","../grafast/dist/steps/error.d.ts","../grafast/dist/steps/filter.d.ts","../grafast/dist/steps/first.d.ts","../grafast/dist/steps/groupby.d.ts","../grafast/dist/multistep.d.ts","../grafast/dist/steps/lambda.d.ts","../grafast/dist/steps/last.d.ts","../grafast/dist/steps/list.d.ts","../grafast/dist/steps/listen.d.ts","../grafast/dist/steps/node.d.ts","../grafast/dist/steps/partitionbyindex.d.ts","../grafast/dist/steps/remapkeys.d.ts","../grafast/dist/steps/reverse.d.ts","../grafast/dist/steps/applyinput.d.ts","../grafast/dist/steps/setter.d.ts","../grafast/dist/steps/sideeffect.d.ts","../grafast/dist/steps/__inputlist.d.ts","../grafast/dist/steps/__inputobject.d.ts","../grafast/dist/steps/__inputstaticleaf.d.ts","../grafast/dist/steps/__trackedvalue.d.ts","../grafast/dist/steps/applytransforms.d.ts","../grafast/dist/steps/bakedinput.d.ts","../grafast/dist/steps/condition.d.ts","../grafast/dist/steps/graphqlresolver.d.ts","../grafast/dist/steps/load.d.ts","../grafast/dist/steps/polymorphicbranch.d.ts","../grafast/dist/steps/proxy.d.ts","../grafast/dist/steps/index.d.ts","../grafast/dist/graphqlcollectfields.d.ts","../grafast/dist/engine/executeoutputplan.d.ts","../grafast/dist/engine/outputplan.d.ts","../grafast/dist/engine/operationplan.d.ts","../grafast/dist/step.d.ts","../grafast/dist/engine/layerplan.d.ts","../grafast/dist/error.d.ts","../grafast/dist/steps/__inputdefault.d.ts","../grafast/dist/steps/__inputdynamicscalar.d.ts","../grafast/dist/deferred.d.ts","../grafast/dist/utils.d.ts","../grafast/dist/planjsoninterfaces.d.ts","../grafast/dist/interfaces.d.ts","../grafast/dist/steps/object.d.ts","../grafast/dist/exportas.d.ts","../grafast/dist/grafastprint.d.ts","../grafast/dist/makegrafastschema.d.ts","../grafast/dist/dev.d.ts","../grafast/dist/engine/lib/defaultplanresolver.d.ts","../grafast/dist/engine/lib/withgloballayerplan.d.ts","../grafast/dist/execute.d.ts","../grafast/dist/grafastgraphql.d.ts","../grafast/dist/middleware.d.ts","../grafast/dist/operationplan-input.d.ts","../grafast/dist/polymorphic.d.ts","../grafast/dist/stringifypayload.d.ts","../grafast/dist/stripansi.d.ts","../grafast/dist/subscribe.d.ts","../../node_modules/iterall/index.d.ts","../grafast/dist/args.d.ts","../grafast/dist/version.d.ts","../grafast/dist/index.d.ts","./src/hooks.ts","../grafast/fwd/graphql/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/codemirror/index.d.ts","../../node_modules/@graphiql/react/types/editor/types.d.ts","../../node_modules/@graphiql/react/types/editor/header-editor.d.ts","../../node_modules/@types/react/jsx-runtime.d.ts","../../node_modules/@graphiql/react/types/editor/components/header-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/image-preview.d.ts","../../node_modules/vscode-languageserver-types/lib/umd/main.d.ts","../../node_modules/graphql-config/types.d.ts","../../node_modules/@graphql-tools/utils/schemavisitor.d.ts","../../node_modules/@graphql-tools/utils/interfaces.d.ts","../../node_modules/@graphql-tools/utils/loaders.d.ts","../../node_modules/@graphql-tools/utils/helpers.d.ts","../../node_modules/@graphql-tools/utils/debug-log.d.ts","../../node_modules/@graphql-tools/utils/fix-windows-path.d.ts","../../node_modules/@graphql-tools/utils/flatten-array.d.ts","../../node_modules/@graphql-tools/utils/get-directives.d.ts","../../node_modules/@graphql-tools/utils/get-fields-with-directives.d.ts","../../node_modules/@graphql-tools/utils/get-implementing-types.d.ts","../../node_modules/@graphql-tools/utils/types.d.ts","../../node_modules/@graphql-tools/utils/print-schema-with-directives.d.ts","../../node_modules/@graphql-tools/utils/validate-documents.d.ts","../../node_modules/@graphql-tools/utils/fix-schema-ast.d.ts","../../node_modules/@graphql-tools/utils/parse-graphql-json.d.ts","../../node_modules/@graphql-tools/utils/parse-graphql-sdl.d.ts","../../node_modules/@graphql-tools/utils/get-user-types-from-schema.d.ts","../../node_modules/@graphql-tools/utils/create-schema-definition.d.ts","../../node_modules/@graphql-tools/utils/build-operation-for-field.d.ts","../../node_modules/@graphql-tools/utils/filterschema.d.ts","../../node_modules/@graphql-tools/utils/clone.d.ts","../../node_modules/@graphql-tools/utils/heal.d.ts","../../node_modules/@graphql-tools/utils/schemadirectivevisitor.d.ts","../../node_modules/@graphql-tools/utils/visitschema.d.ts","../../node_modules/@graphql-tools/utils/getresolversfromschema.d.ts","../../node_modules/@graphql-tools/utils/foreachfield.d.ts","../../node_modules/@graphql-tools/utils/foreachdefaultvalue.d.ts","../../node_modules/@graphql-tools/utils/mapschema.d.ts","../../node_modules/@graphql-tools/utils/addtypes.d.ts","../../node_modules/@graphql-tools/utils/rewire.d.ts","../../node_modules/@graphql-tools/utils/prune.d.ts","../../node_modules/@graphql-tools/utils/mergedeep.d.ts","../../node_modules/@graphql-tools/utils/stub.d.ts","../../node_modules/@graphql-tools/utils/selectionsets.d.ts","../../node_modules/@graphql-tools/utils/getresponsekeyfrominfo.d.ts","../../node_modules/@graphql-tools/utils/fields.d.ts","../../node_modules/@graphql-tools/utils/renametype.d.ts","../../node_modules/@graphql-tools/utils/collectfields.d.ts","../../node_modules/@graphql-tools/utils/transforminputvalue.d.ts","../../node_modules/@graphql-tools/utils/mapasynciterator.d.ts","../../node_modules/@graphql-tools/utils/updateargument.d.ts","../../node_modules/@graphql-tools/utils/implementsabstracttype.d.ts","../../node_modules/@graphql-tools/utils/errors.d.ts","../../node_modules/@graphql-tools/utils/toconfig.d.ts","../../node_modules/@graphql-tools/utils/observabletoasynciterable.d.ts","../../node_modules/@graphql-tools/utils/visitresult.d.ts","../../node_modules/@graphql-tools/utils/getargumentvalues.d.ts","../../node_modules/@graphql-tools/utils/valuematchescriteria.d.ts","../../node_modules/@graphql-tools/utils/isasynciterable.d.ts","../../node_modules/@graphql-tools/utils/isdocumentnode.d.ts","../../node_modules/@graphql-tools/utils/astfromvalueuntyped.d.ts","../../node_modules/@graphql-tools/utils/executor.d.ts","../../node_modules/@graphql-tools/utils/withcancel.d.ts","../../node_modules/@graphql-tools/utils/index.d.ts","../../node_modules/@graphql-tools/load/load-typedefs.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/interfaces.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/loaders.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/helpers.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-fields-with-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-implementing-types.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/types.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/print-schema-with-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/validate-documents.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/fix-schema-ast.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/parse-graphql-json.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/parse-graphql-sdl.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-user-types-from-schema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/create-schema-definition.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/build-operation-for-field.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/filterschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/heal.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getresolversfromschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/foreachfield.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/foreachdefaultvalue.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mapschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/addtypes.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/rewire.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/prune.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mergedeep.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/stub.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/selectionsets.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getresponsekeyfrominfo.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/fields.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/renametype.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/transforminputvalue.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mapasynciterator.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/updateargument.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/implementsabstracttype.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/errors.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/observabletoasynciterable.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/visitresult.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getargumentvalues.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/valuematchescriteria.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/isasynciterable.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/isdocumentnode.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/astfromvalueuntyped.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/executor.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/withcancel.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/aggregateerror.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/roottypes.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/index.d.ts","../../node_modules/@graphql-tools/merge/merge-resolvers.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/arguments.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/utils.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-typedefs.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-nodes.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/comments.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/directives.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/enum-values.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/enum.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/fields.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/input-type.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/interface.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-named-type-array.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/scalar.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/type.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/union.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/index.d.ts","../../node_modules/@graphql-tools/merge/merge-schemas.d.ts","../../node_modules/@graphql-tools/merge/extensions.d.ts","../../node_modules/@graphql-tools/merge/index.d.ts","../../node_modules/@graphql-tools/load/schema.d.ts","../../node_modules/@graphql-tools/load/documents.d.ts","../../node_modules/@graphql-tools/load/filter-document-kind.d.ts","../../node_modules/@graphql-tools/load/index.d.ts","../../node_modules/graphql-config/helpers/utils.d.ts","../../node_modules/graphql-config/loaders.d.ts","../../node_modules/graphql-config/extension.d.ts","../../node_modules/graphql-config/project-config.d.ts","../../node_modules/graphql-config/config.d.ts","../../node_modules/graphql-config/errors.d.ts","../../node_modules/graphql-config/index.d.ts","../../node_modules/graphql-language-service/dist/parser/types.d.ts","../../node_modules/graphql-language-service/dist/parser/characterstream.d.ts","../../node_modules/graphql-language-service/dist/parser/rules.d.ts","../../node_modules/graphql-language-service/dist/parser/rulehelpers.d.ts","../../node_modules/graphql-language-service/dist/parser/onlineparser.d.ts","../../node_modules/graphql-language-service/dist/parser/api.d.ts","../../node_modules/graphql-language-service/dist/parser/gettypeinfo.d.ts","../../node_modules/graphql-language-service/dist/parser/index.d.ts","../../node_modules/graphql-language-service/dist/types.d.ts","../../node_modules/graphql-language-service/dist/interface/autocompleteutils.d.ts","../../node_modules/graphql-language-service/dist/interface/getautocompletesuggestions.d.ts","../../node_modules/graphql-language-service/dist/utils/fragmentdependencies.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/graphql-language-service/dist/utils/collectvariables.d.ts","../../node_modules/graphql-language-service/dist/utils/getvariablesjsonschema.d.ts","../../node_modules/graphql-language-service/dist/utils/getastnodeatposition.d.ts","../../node_modules/graphql-language-service/dist/utils/range.d.ts","../../node_modules/graphql-language-service/dist/utils/validatewithcustomrules.d.ts","../../node_modules/graphql-language-service/dist/utils/getoperationfacts.d.ts","../../node_modules/graphql-language-service/dist/utils/index.d.ts","../../node_modules/graphql-language-service/dist/interface/getdefinition.d.ts","../../node_modules/graphql-language-service/dist/interface/getdiagnostics.d.ts","../../node_modules/graphql-language-service/dist/interface/getoutline.d.ts","../../node_modules/graphql-language-service/dist/interface/gethoverinformation.d.ts","../../node_modules/graphql-language-service/dist/interface/index.d.ts","../../node_modules/graphql-language-service/dist/index.d.ts","../../node_modules/codemirror-graphql/utils/gettypeinfo.d.ts","../../node_modules/codemirror-graphql/utils/schemareference.d.ts","../../node_modules/graphql-ws/lib/common.d.ts","../../node_modules/graphql-ws/lib/client.d.ts","../../node_modules/graphql-ws/lib/server.d.ts","../../node_modules/graphql-ws/lib/index.d.ts","../../node_modules/@graphiql/toolkit/dist/esm/create-fetcher/types.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/async-helpers/index.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/create-fetcher/createfetcher.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/format/index.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/auto-complete.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/merge-ast.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/operation-name.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/base.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/query.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/history.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/custom.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/index.d.mts","../../node_modules/@graphiql/react/types/editor/hooks.d.ts","../../node_modules/@graphiql/react/types/editor/query-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/query-editor.d.ts","../../node_modules/@graphiql/react/types/editor/response-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/response-editor.d.ts","../../node_modules/@graphiql/react/types/editor/variable-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/variable-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/index.d.ts","../../node_modules/@graphiql/react/types/editor/tabs.d.ts","../../node_modules/@graphiql/react/types/editor/context.d.ts","../../node_modules/@graphiql/react/types/editor/index.d.ts","../../node_modules/@graphiql/react/types/execution.d.ts","../../node_modules/@graphiql/react/types/explorer/components/argument.d.ts","../../node_modules/@graphiql/react/types/explorer/context.d.ts","../../node_modules/@graphiql/react/types/explorer/components/default-value.d.ts","../../node_modules/@graphiql/react/types/explorer/components/deprecation-reason.d.ts","../../node_modules/@graphiql/react/types/explorer/components/directive.d.ts","../../node_modules/@graphiql/react/types/explorer/components/doc-explorer.d.ts","../../node_modules/@graphiql/react/types/explorer/components/field-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/field-link.d.ts","../../node_modules/@graphiql/react/types/explorer/components/schema-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/search.d.ts","../../node_modules/@graphiql/react/types/explorer/components/section.d.ts","../../node_modules/@graphiql/react/types/explorer/components/type-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/type-link.d.ts","../../node_modules/@graphiql/react/types/explorer/index.d.ts","../../node_modules/@graphiql/react/types/history/components.d.ts","../../node_modules/@graphiql/react/types/history/context.d.ts","../../node_modules/@graphiql/react/types/history/index.d.ts","../../node_modules/@graphiql/react/types/plugin.d.ts","../../node_modules/@graphiql/react/types/schema.d.ts","../../node_modules/@graphiql/react/types/storage.d.ts","../../node_modules/@graphiql/react/types/provider.d.ts","../../node_modules/@graphiql/react/types/theme.d.ts","../../node_modules/@graphiql/react/types/utility/resize.d.ts","../../node_modules/@graphiql/react/types/utility/is-macos.d.ts","../../node_modules/@graphiql/react/types/icons/index.d.ts","../../node_modules/@graphiql/react/types/ui/button.d.ts","../../node_modules/@graphiql/react/types/ui/button-group.d.ts","../../node_modules/@radix-ui/react-context/dist/index.d.ts","../../node_modules/@radix-ui/react-primitive/dist/index.d.ts","../../node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts","../../node_modules/@radix-ui/react-focus-scope/dist/index.d.ts","../../node_modules/@radix-ui/react-portal/dist/index.d.ts","../../node_modules/@radix-ui/react-dialog/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/dialog.d.ts","../../node_modules/@radix-ui/react-arrow/dist/index.d.ts","../../node_modules/@radix-ui/rect/dist/index.d.ts","../../node_modules/@radix-ui/react-popper/dist/index.d.ts","../../node_modules/@radix-ui/react-roving-focus/dist/index.d.ts","../../node_modules/@radix-ui/react-menu/dist/index.d.ts","../../node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/dropdown.d.ts","../../node_modules/@graphiql/react/types/ui/markdown.d.ts","../../node_modules/@graphiql/react/types/ui/spinner.d.ts","../../node_modules/@graphiql/react/types/ui/tabs.d.ts","../../node_modules/@radix-ui/react-tooltip/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/tooltip.d.ts","../../node_modules/@graphiql/react/types/ui/index.d.ts","../../node_modules/@graphiql/react/types/toolbar/button.d.ts","../../node_modules/@graphiql/react/types/toolbar/execute.d.ts","../../node_modules/@graphiql/react/types/toolbar/menu.d.ts","../../node_modules/@graphiql/react/types/toolbar/index.d.ts","../../node_modules/@graphiql/react/types/index.d.ts","../../node_modules/graphiql/dist/graphiql.d.ts","../../node_modules/graphiql/dist/index.d.ts","../ruru/dist/interfaces.d.ts","../ruru/dist/server.d.ts","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/events/index.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/file.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/filereader.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/assert/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/graphql-ws/lib/use/ws.d.ts","./src/utils.ts","./src/middleware/graphql.ts","./src/options.ts","./src/interfaces.ts","./src/mapiterator.ts","./src/middleware/graphiql.ts","./src/core/base.ts","./src/index.ts","./src/version.ts","../../node_modules/@whatwg-node/promise-helpers/typings/index.d.cts","../../node_modules/@envelop/types/typings/utils.d.cts","../../node_modules/@envelop/types/typings/graphql.d.cts","../../node_modules/@envelop/types/typings/hooks.d.cts","../../node_modules/@envelop/types/typings/plugin.d.cts","../../node_modules/@envelop/types/typings/get-enveloped.d.cts","../../node_modules/@envelop/types/typings/context-types.d.cts","../../node_modules/@envelop/types/typings/index.d.cts","../../node_modules/@envelop/instrumentation/typings/instrumentation.d.cts","../../node_modules/@envelop/instrumentation/typings/index.d.cts","../../node_modules/@envelop/core/typings/create.d.cts","../../node_modules/@envelop/core/typings/utils.d.cts","../../node_modules/@envelop/core/typings/plugins/use-envelop.d.cts","../../node_modules/@envelop/core/typings/plugins/use-logger.d.cts","../../node_modules/@envelop/core/typings/plugins/use-schema.d.cts","../../node_modules/@envelop/core/typings/plugins/use-masked-errors.d.cts","../../node_modules/@envelop/core/typings/plugins/use-error-handler.d.cts","../../node_modules/@envelop/core/typings/plugins/use-extend-context.d.cts","../../node_modules/@envelop/core/typings/plugins/use-payload-formatter.d.cts","../../node_modules/@envelop/core/typings/plugins/use-engine.d.cts","../../node_modules/@envelop/core/typings/plugins/use-validation-rule.d.cts","../../node_modules/@envelop/core/typings/document-string-map.d.cts","../../node_modules/@envelop/core/typings/index.d.cts","./src/envelop/index.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/ws/index.d.mts","./src/servers/node/index.ts","./src/servers/express/v4/index.ts","../../node_modules/ajv/node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/error.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/type.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/enum.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/elements.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/properties.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/values.d.ts","../../node_modules/ajv/dist/vocabularies/jtd/index.d.ts","../../node_modules/ajv/dist/jtd.d.ts","../../node_modules/@fastify/ajv-compiler/types/index.d.ts","../../node_modules/@fastify/error/types/index.d.ts","../../node_modules/fast-json-stringify/types/index.d.ts","../../node_modules/@fastify/fast-json-stringify-compiler/types/index.d.ts","../../node_modules/find-my-way/index.d.ts","../../node_modules/light-my-request/types/index.d.ts","../../node_modules/fastify/types/utils.d.ts","../../node_modules/fastify/types/schema.d.ts","../../node_modules/fastify/types/type-provider.d.ts","../../node_modules/fastify/types/reply.d.ts","../../node_modules/fastify/node_modules/pino-std-serializers/index.d.ts","../../node_modules/fastify/node_modules/sonic-boom/types/index.d.ts","../../node_modules/fastify/node_modules/pino/pino.d.ts","../../node_modules/fastify/types/logger.d.ts","../../node_modules/fastify/types/plugin.d.ts","../../node_modules/fastify/types/register.d.ts","../../node_modules/fastify/types/instance.d.ts","../../node_modules/fastify/types/hooks.d.ts","../../node_modules/fastify/types/route.d.ts","../../node_modules/fastify/types/context.d.ts","../../node_modules/fastify/types/request.d.ts","../../node_modules/fastify/types/content-type-parser.d.ts","../../node_modules/fastify/types/errors.d.ts","../../node_modules/fastify/types/serverfactory.d.ts","../../node_modules/fastify/fastify.d.ts","../../node_modules/@fastify/websocket/types/index.d.ts","../../node_modules/graphql-ws/lib/use/@fastify/websocket.d.ts","./src/servers/fastify/v4/index.ts","../../node_modules/crossws/dist/shared/crossws.chijsjvk.d.mts","../../node_modules/crossws/dist/index.d.mts","../../node_modules/ufo/dist/index.d.ts","../../node_modules/cookie-es/dist/index.d.cts","../../node_modules/iron-webcrypto/dist/index.d.cts","../../node_modules/h3/dist/index.d.ts","./src/servers/h3/v1/index.ts","../../node_modules/hono/dist/types/router.d.ts","../../node_modules/hono/dist/types/utils/headers.d.ts","../../node_modules/hono/dist/types/utils/http-status.d.ts","../../node_modules/hono/dist/types/utils/types.d.ts","../../node_modules/hono/dist/types/types.d.ts","../../node_modules/hono/dist/types/utils/body.d.ts","../../node_modules/hono/dist/types/request.d.ts","../../node_modules/hono/dist/types/utils/mime.d.ts","../../node_modules/hono/dist/types/context.d.ts","../../node_modules/hono/dist/types/hono-base.d.ts","../../node_modules/hono/dist/types/hono.d.ts","../../node_modules/hono/dist/types/client/types.d.ts","../../node_modules/hono/dist/types/client/client.d.ts","../../node_modules/hono/dist/types/client/index.d.ts","../../node_modules/hono/dist/types/index.d.ts","../../node_modules/hono/dist/types/helper/websocket/index.d.ts","./src/servers/hono/v4/index.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/cookies/node_modules/@types/express/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","./src/servers/koa/v2/index.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","./src/servers/lambda/v1/index.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-axis/index.d.ts","../../node_modules/@types/d3-brush/index.d.ts","../../node_modules/@types/d3-chord/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@types/d3-contour/index.d.ts","../../node_modules/@types/d3-delaunay/index.d.ts","../../node_modules/@types/d3-dispatch/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-dsv/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-fetch/index.d.ts","../../node_modules/@types/d3-force/index.d.ts","../../node_modules/@types/d3-format/index.d.ts","../../node_modules/@types/d3-geo/index.d.ts","../../node_modules/@types/d3-hierarchy/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-polygon/index.d.ts","../../node_modules/@types/d3-quadtree/index.d.ts","../../node_modules/@types/d3-random/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-scale-chromatic/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-time-format/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/d3/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/interpret/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/chalk/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/jsonwebtoken/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/koa-bodyparser/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/@types/license-checker-webpack-plugin/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@iconify/types/types.d.ts","../../node_modules/@iconify/utils/lib/customisations/defaults.d.ts","../../node_modules/@iconify/utils/lib/customisations/merge.d.ts","../../node_modules/@iconify/utils/lib/customisations/bool.d.ts","../../node_modules/@iconify/utils/lib/customisations/flip.d.ts","../../node_modules/@iconify/utils/lib/customisations/rotate.d.ts","../../node_modules/@iconify/utils/lib/icon/name.d.ts","../../node_modules/@iconify/utils/lib/icon/defaults.d.ts","../../node_modules/@iconify/utils/lib/icon/merge.d.ts","../../node_modules/@iconify/utils/lib/icon/transformations.d.ts","../../node_modules/@iconify/utils/lib/svg/viewbox.d.ts","../../node_modules/@iconify/utils/lib/icon/square.d.ts","../../node_modules/@iconify/utils/lib/icon-set/tree.d.ts","../../node_modules/@iconify/utils/lib/icon-set/parse.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","../../node_modules/@iconify/utils/lib/icon-set/expand.d.ts","../../node_modules/@iconify/utils/lib/icon-set/minify.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","../../node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","../../node_modules/@iconify/utils/lib/svg/build.d.ts","../../node_modules/@iconify/utils/lib/svg/defs.d.ts","../../node_modules/@iconify/utils/lib/svg/id.d.ts","../../node_modules/@iconify/utils/lib/svg/size.d.ts","../../node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","../../node_modules/@iconify/utils/lib/svg/trim.d.ts","../../node_modules/@iconify/utils/lib/svg/pretty.d.ts","../../node_modules/@iconify/utils/lib/svg/html.d.ts","../../node_modules/@iconify/utils/lib/svg/url.d.ts","../../node_modules/@iconify/utils/lib/svg/inner-html.d.ts","../../node_modules/@iconify/utils/lib/svg/parse.d.ts","../../node_modules/@iconify/utils/lib/colors/types.d.ts","../../node_modules/@iconify/utils/lib/colors/keywords.d.ts","../../node_modules/@iconify/utils/lib/colors/index.d.ts","../../node_modules/@iconify/utils/lib/css/types.d.ts","../../node_modules/@iconify/utils/lib/css/icon.d.ts","../../node_modules/@iconify/utils/lib/css/icons.d.ts","../../node_modules/@antfu/utils/dist/index.d.mts","../../node_modules/@iconify/utils/lib/loader/types.d.ts","../../node_modules/@iconify/utils/lib/loader/utils.d.ts","../../node_modules/@iconify/utils/lib/loader/custom.d.ts","../../node_modules/@iconify/utils/lib/loader/modern.d.ts","../../node_modules/@iconify/utils/lib/loader/loader.d.ts","../../node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","../../node_modules/@iconify/utils/lib/emoji/convert.d.ts","../../node_modules/@iconify/utils/lib/emoji/format.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","../../node_modules/@iconify/utils/lib/emoji/data.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/components.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/name.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","../../node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","../../node_modules/@iconify/utils/lib/emoji/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","../../node_modules/@iconify/utils/lib/misc/strings.d.ts","../../node_modules/@iconify/utils/lib/misc/objects.d.ts","../../node_modules/@iconify/utils/lib/misc/title.d.ts","../../node_modules/@iconify/utils/lib/index.d.ts","../../node_modules/mermaid/dist/rendering-util/icons.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/dompurify/dist/purify.es.d.mts","../../node_modules/mermaid/dist/config.type.d.ts","../../node_modules/type-fest/source/basic.d.ts","../../node_modules/type-fest/source/except.d.ts","../../node_modules/type-fest/source/mutable.d.ts","../../node_modules/type-fest/source/merge.d.ts","../../node_modules/type-fest/source/merge-exclusive.d.ts","../../node_modules/type-fest/source/require-at-least-one.d.ts","../../node_modules/type-fest/source/require-exactly-one.d.ts","../../node_modules/type-fest/source/partial-deep.d.ts","../../node_modules/type-fest/source/readonly-deep.d.ts","../../node_modules/type-fest/source/literal-union.d.ts","../../node_modules/type-fest/source/promisable.d.ts","../../node_modules/type-fest/source/opaque.d.ts","../../node_modules/type-fest/source/set-optional.d.ts","../../node_modules/type-fest/source/set-required.d.ts","../../node_modules/type-fest/source/value-of.d.ts","../../node_modules/type-fest/source/promise-value.d.ts","../../node_modules/type-fest/source/async-return-type.d.ts","../../node_modules/type-fest/source/conditional-keys.d.ts","../../node_modules/type-fest/source/conditional-except.d.ts","../../node_modules/type-fest/source/conditional-pick.d.ts","../../node_modules/type-fest/source/union-to-intersection.d.ts","../../node_modules/type-fest/source/stringified.d.ts","../../node_modules/type-fest/source/fixed-length-array.d.ts","../../node_modules/type-fest/source/iterable-element.d.ts","../../node_modules/type-fest/source/entry.d.ts","../../node_modules/type-fest/source/entries.d.ts","../../node_modules/type-fest/source/set-return-type.d.ts","../../node_modules/type-fest/source/asyncify.d.ts","../../node_modules/type-fest/source/package-json.d.ts","../../node_modules/type-fest/source/tsconfig-json.d.ts","../../node_modules/type-fest/base.d.ts","../../node_modules/type-fest/source/utilities.d.ts","../../node_modules/type-fest/ts41/camel-case.d.ts","../../node_modules/type-fest/ts41/delimiter-case.d.ts","../../node_modules/type-fest/ts41/kebab-case.d.ts","../../node_modules/type-fest/ts41/pascal-case.d.ts","../../node_modules/type-fest/ts41/snake-case.d.ts","../../node_modules/type-fest/ts41/index.d.ts","../../node_modules/mermaid/dist/types.d.ts","../../node_modules/mermaid/dist/utils.d.ts","../../node_modules/mermaid/dist/diagram.d.ts","../../node_modules/mermaid/dist/diagram-api/types.d.ts","../../node_modules/mermaid/dist/diagram-api/detecttype.d.ts","../../node_modules/mermaid/dist/errors.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","../../node_modules/mermaid/dist/rendering-util/types.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","../../node_modules/dagre-d3-es/src/graphlib/graph.d.ts","../../node_modules/dagre-d3-es/src/graphlib/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/render.d.ts","../../node_modules/dagre-d3-es/src/index.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","../../node_modules/mermaid/dist/logger.d.ts","../../node_modules/mermaid/dist/internals.d.ts","../../node_modules/mermaid/dist/mermaidapi.d.ts","../../node_modules/mermaid/dist/rendering-util/render.d.ts","../../node_modules/mermaid/dist/mermaid.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/mock-fs/lib/item.d.ts","../../node_modules/@types/mock-fs/lib/file.d.ts","../../node_modules/@types/mock-fs/lib/directory.d.ts","../../node_modules/@types/mock-fs/lib/symlink.d.ts","../../node_modules/@types/mock-fs/lib/filesystem.d.ts","../../node_modules/@types/mock-fs/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/nodemon/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/pg/node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pluralize/index.d.ts","../../node_modules/prettier/doc.d.ts","../../node_modules/prettier/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/@types/ps-tree/index.d.ts","../../node_modules/ts-toolbelt/out/index.d.ts","../../node_modules/@types/ramda/tools.d.ts","../../node_modules/@types/ramda/index.d.ts","../../node_modules/@types/react-dom/index.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/minipass/dist/commonjs/index.d.ts","../../node_modules/lru-cache/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/path-scurry/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts","../../node_modules/glob/dist/commonjs/pattern.d.ts","../../node_modules/glob/dist/commonjs/processor.d.ts","../../node_modules/glob/dist/commonjs/walker.d.ts","../../node_modules/glob/dist/commonjs/ignore.d.ts","../../node_modules/glob/dist/commonjs/glob.d.ts","../../node_modules/glob/dist/commonjs/has-magic.d.ts","../../node_modules/glob/dist/commonjs/index.d.ts","../../node_modules/rimraf/dist/commonjs/opt-arg.d.ts","../../node_modules/rimraf/dist/commonjs/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/source-list-map/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/tapable/index.d.ts","../../node_modules/@types/tern/lib/tern/index.d.ts","../../node_modules/@types/tern/lib/infer/index.d.ts","../../node_modules/@types/tern/index.d.ts","../../node_modules/source-map/source-map.d.ts","../../node_modules/@types/uglify-js/index.d.ts","../../node_modules/anymatch/index.d.ts","../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../node_modules/@types/webpack-sources/lib/source.d.ts","../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../node_modules/@types/webpack-sources/lib/index.d.ts","../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../node_modules/@types/webpack-sources/index.d.ts","../../node_modules/@types/webpack/index.d.ts","../../node_modules/@types/webpack-bundle-analyzer/index.d.ts","../../node_modules/@types/websocket/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../../../node_modules/@types/color-name/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/global.d.ts"],"fileIdsList":[[526,570],[190,240,242,261,526,570],[193,232,526,570],[193,228,233,234,526,570],[228,234,242,526,570],[235,261,526,570],[190,192,230,232,235,240,242,261,526,570],[80,190,193,228,231,234,235,240,242,261,526,570],[242,526,570],[93,190,240,242,261,526,570],[193,526,570],[190,229,240,261,526,570],[80,82,88,190,206,228,229,233,234,236,239,240,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,526,570],[88,94,190,191,192,215,228,229,233,234,235,236,237,238,240,241,261,526,570],[190,228,234,240,242,261,526,570],[88,526,570],[228,234,526,570],[190,228,233,234,240,242,261,526,570],[190,229,233,235,240,242,261,526,570],[194,228,234,242,526,570],[221,228,234,242,526,570],[190,200,228,234,240,242,261,526,570],[190,200,228,234,240,261,526,570],[228,234,242,261,526,570],[190,192,195,196,197,228,234,240,242,261,526,570],[196,228,234,261,526,570],[195,228,234,242,526,570],[190,228,229,234,240,242,261,526,570],[198,228,234,242,526,570],[194,198,199,228,234,526,570],[199,228,234,242,526,570],[190,228,234,240,261,526,570],[198,199,228,234,526,570],[194,195,196,197,198,199,200,201,202,203,204,205,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,243,261,526,570],[206,228,234,242,526,570],[195,200,228,234,242,526,570],[194,199,228,234,242,261,526,570],[195,206,228,234,242,261,526,570],[190,207,228,234,240,242,261,526,570],[200,228,234,242,526,570],[215,261,526,570],[93,190,240,261,526,570],[190,228,233,234,239,240,242,261,526,570],[190,240,261,526,570],[79,80,526,570],[79,88,191,261,262,263,526,570,623,624,625,626,627,628],[79,88,190,240,261,526,570,631,654],[79,88,261,526,570],[79,88,261,263,520,526,570,623,624,625,626,629],[79,88,261,263,440,520,526,570,624,625,630],[79,526,570],[79,88,261,520,526,570,623,625,626],[79,80,81,261,263,526,570,575,597,623,626,630],[79,261,263,526,570,575,626],[79,526,570,585,587,602,623,625,626,666,668],[79,526,570,602,623,626,629,748,750],[79,440,526,570,602,626,630,753,757],[79,440,526,570,626,630,761,773,774],[79,526,570,585,587,602,623,625,626,629,668,783],[79,526,570,623,626,629,844],[79,261,440,526,570,585,587,597,602,621,623,625,626,629,667],[79,261,263,440,526,570,602,622,624,626,630],[520,526,570],[518,519,526,570],[526,570,846],[526,570,639],[526,570,639,641,642,643,644,645,646,647,648,649,650,651,652,653],[526,570,639,647],[526,570,639,643],[526,570,632,639],[526,570,640],[526,570,632],[526,570,633,636,637],[526,570,633,634,636],[526,570,633],[526,570,633,634,635,636,637,638],[526,570,633,635],[526,570,710,714,723],[526,570,726],[526,570,585,602,620,621,733,741,742,748],[270,271,526,570],[268,271,526,570],[272,273,455,457,459,526,570],[271,454,526,570],[271,456,526,570],[271,458,526,570],[190,240,261,267,269,271,434,461,526,570],[267,269,526,570],[268,269,436,452,526,570],[269,270,453,454,456,458,460,461,462,526,570],[190,240,261,267,269,436,453,526,570],[267,268,269,526,570],[269,452,462,526,570],[268,526,570],[267,269,436,526,570],[267,271,452,453,526,570],[190,240,261,271,526,570],[271,466,526,570],[271,526,570],[267,271,526,570],[190,240,261,267,526,570],[190,240,261,267,271,526,570],[465,466,467,468,469,470,471,472,473,474,475,476,477,526,570],[271,452,526,570],[267,271,452,526,570],[479,480,526,570],[267,526,570],[463,464,478,481,482,483,484,485,486,487,488,489,511,515,526,570],[271,463,464,466,481,482,483,484,526,570],[190,240,261,267,271,452,526,570],[512,513,514,526,570],[267,271,504,526,570],[267,497,526,570],[490,491,498,505,506,507,508,510,526,570],[267,509,526,570],[190,240,261,440,441,526,570],[190,240,261,440,526,570],[190,240,261,440,441,442,443,444,445,446,447,448,449,450,451,526,570],[448,526,570],[448,449,526,570],[329,330,526,570],[330,398,399,400,526,570],[329,526,570],[190,240,261,330,397,526,570],[378,394,395,396,526,570],[377,526,570],[190,240,261,377,381,526,570],[331,526,570],[190,240,261,331,526,570],[190,240,261,337,526,570],[190,240,261,377,526,570],[331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,526,570],[190,240,261,332,337,526,570],[102,190,240,261,526,570],[190,240,261,332,526,570],[190,240,261,394,526,570],[190,240,261,382,526,570],[190,240,261,381,526,570],[379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,526,570],[190,240,261,377,380,526,570],[190,240,261,277,526,570],[190,240,261,286,526,570],[276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,526,570],[190,240,261,276,526,570],[102,190,240,261,277,526,570],[102,190,240,261,278,286,526,570],[190,240,261,276,277,526,570],[190,240,261,278,526,570],[526,570,980],[526,570,948,983],[526,570,948],[526,570,948,949],[526,570,1005],[526,570,995,997],[526,570,995,997,998,999,1000,1001],[526,570,995,997,998],[526,570,995,997,998,999],[526,570,995,997,998,999,1000],[526,570,948,955],[526,570,948,958],[526,570,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009],[526,570,948,949,986,987],[526,570,948,949,986],[526,570,948,949,958],[526,570,948,949,958,969],[526,570,918],[267,493,526,570],[267,492,493,494,495,496,526,570],[267,492,493,503,526,570],[267,492,493,494,495,496,501,502,526,570],[267,492,493,499,500,526,570],[267,492,493,526,570],[267,492,493,494,496,501,526,570],[526,570,585,620],[526,570,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843],[526,570,787],[526,570,787,791],[526,570,785,787,789],[526,570,785,787],[526,570,787,793],[526,570,786,787],[526,570,798],[526,570,787,804,805,806],[526,570,787,808],[526,570,787,809,810,811,812,813,814,815,816,817,818,819,820,821],[526,570,787,790],[526,570,787,789],[526,570,787,798],[526,570,846,847,848,849,850],[526,570,846,848],[526,570,585,620,663],[526,570,576,620],[526,570,613,620,660],[526,570,585,620,663,777,778],[526,570,660,662,664],[526,570,856,884],[526,570,855,861],[526,570,866],[526,570,861],[526,570,860],[526,570,878],[526,570,874],[526,570,856,873,884],[526,570,855,856,857,858,859,860,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885],[526,570,887],[526,570,890,893],[421,526,570,890,892],[526,570,893],[421,526,570,889,890],[526,570,582,585,620,657,658,659],[526,570,658,660,662,664,665],[526,570,583,620,895,896],[526,570,582,583,620,898],[526,570,583,620],[526,570,901],[526,570,903,909],[526,570,904,905,906,907,908],[526,570,909],[526,570,582,585,587,590,602,613,620],[526,570,620],[526,570,913],[526,570,914],[526,570,920,923],[526,570,583,613,620],[526,570,575,620,887],[526,570,582,620],[526,570,783],[526,569,570,582,585,586,590,597,613,620,661,776,778,779,780,781,782],[526,570,932],[526,570,934,936,937,938,939,940,941,942,943,944,945,946],[526,570,934,935,937,938,939,940,941,942,943,944,945,946],[526,570,935,936,937,938,939,940,941,942,943,944,945,946],[526,570,934,935,936,938,939,940,941,942,943,944,945,946],[526,570,934,935,936,937,939,940,941,942,943,944,945,946],[526,570,934,935,936,937,938,940,941,942,943,944,945,946],[526,570,934,935,936,937,938,939,941,942,943,944,945,946],[526,570,934,935,936,937,938,939,940,942,943,944,945,946],[526,570,934,935,936,937,938,939,940,941,943,944,945,946],[526,570,934,935,936,937,938,939,940,941,942,944,945,946],[526,570,934,935,936,937,938,939,940,941,942,943,945,946],[526,570,934,935,936,937,938,939,940,941,942,943,944,946],[526,570,934,935,936,937,938,939,940,941,942,943,944,945],[526,570,1142,1143,1144,1145],[526,570,1141],[526,570,620,1141],[526,570,1141,1142,1143,1144],[526,567,570],[526,569,570],[570],[526,570,575,605],[526,570,571,576,582,583,590,602,613],[526,570,571,572,582,590],[521,522,523,526,570],[526,570,573,614],[526,570,574,575,583,591],[526,570,575,602,610],[526,570,576,578,582,590],[526,569,570,577],[526,570,578,579],[526,570,582],[526,570,580,582],[526,569,570,582],[526,570,582,583,584,602,613],[526,570,582,583,584,598,602,605],[526,565,570,618],[526,570,578,582,585,590,602,613],[526,570,582,583,585,586,590,602,610,613],[526,570,585,587,602,610,613],[524,525,526,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619],[526,570,582,588],[526,570,589,613,618],[526,570,578,582,590,602],[526,537,541,570,613],[526,537,570,602,613],[526,532,570],[526,534,537,570,610,613],[526,570,590,610],[526,532,570,620],[526,534,537,570,590,613],[526,529,530,533,536,570,582,602,613],[526,537,544,570],[526,529,535,570],[526,537,558,559,570],[526,533,537,570,605,613,620],[526,558,570,620],[526,531,532,570,620],[526,537,570],[526,531,532,533,534,535,536,537,538,539,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,559,560,561,562,563,564,570],[526,537,552,570],[526,537,544,545,570],[526,535,537,545,546,570],[526,536,570],[526,529,532,537,570],[526,537,541,545,546,570],[526,541,570],[526,535,537,540,570,613],[526,529,534,537,544,570],[526,570,602],[526,532,537,558,570,618,620],[526,570,591],[526,570,592],[526,569,570,593],[526,567,568,569,570,571,572,573,574,575,576,577,578,579,580,582,583,584,585,586,587,588,589,590,591,592,593,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619],[526,570,596],[526,570,597],[526,570,582,598,599],[526,570,598,600,614,616],[526,570,582,602,603,605],[526,570,604,605],[526,570,602,603],[526,570,605],[526,570,606],[526,567,570,602],[526,570,582,608,609],[526,570,608,609],[526,570,575,590,602,610],[526,570,611],[526,570,590,612],[526,570,585,597,613],[526,570,575,614],[526,570,602,615],[526,570,589,616],[526,570,617],[526,570,575,582,584,593,602,613,616,618],[526,570,602,619],[526,570,582,602,610,620,1151,1152,1155,1156],[526,570,1162,1163],[526,570,1162],[526,570,909,1167,1168],[265,526,570,1264],[265,526,570,1265],[526,570,909,1167],[265,526,570,1166],[264,265,266,526,570],[526,570,585,602,620],[526,570,602,620],[526,570,1192,1231],[526,570,1192,1216,1231],[526,570,1231],[526,570,1192],[526,570,1192,1217,1231],[526,570,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230],[526,570,1217,1231],[526,570,583,602,620,656],[526,570,583,777],[526,570,585,620,657,661],[526,570,1238,1239],[526,570,890,1238],[526,570,890,1239],[526,570,1012],[526,570,1241],[526,570,585,590,620,932],[526,570,620,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255],[526,570,1244,1245,1254],[526,570,1245,1254],[526,570,1235,1244,1245,1254],[526,570,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1255],[526,570,1245],[526,570,575,1244,1254],[526,570,575,620,931,1241,1242,1243,1256],[526,570,582,585,587,590,613,620],[526,570,582,585,587,590,602,610,613,619,620],[526,570,1261],[526,570,673,674,678,705,706,708,709,710,712,713],[526,570,671,672],[526,570,671],[526,570,673,713],[526,570,673,674,710,711,713],[526,570,713],[526,570,670,713,714],[526,570,673,674,712,713],[526,570,673,674,676,677,712,713],[526,570,673,674,675,712,713],[526,570,673,674,678,705,706,707,708,709,712,713],[526,570,673,678,707,708,709,710,712,713,722],[526,570,670,673,674,678,710,712],[526,570,678,713],[526,570,680,681,682,683,684,685,686,687,688,689,713],[526,570,703,713],[526,570,679,690,698,699,700,701,702,704],[526,570,703,713,715],[526,570,713,715],[526,570,713,716,717,718,719,720,721],[526,570,678,713,715],[526,570,683,713],[526,570,691,692,693,694,695,696,697,713],[190,240,261,434,526,570],[90,190,240,261,435,526,570],[526,570,752],[526,570,1125,1126,1127,1128,1129],[526,570,1123],[526,570,1124,1130,1131],[526,570,1013],[526,570,916,922],[526,570,714],[526,570,585,586,587,590,724,725,727,728,729,730,731,732,733,737,738,739,740,741,742,743,744,745,746,747],[526,570,582,618,734,735],[526,570,730,731,732,742,744],[526,570,730,742],[526,570,725],[526,570,602,725,730,731,732,733,737,738,739,740,742,744],[526,570,585,590,725,728,729,730,731,732,733,737,739,741,742,744,745],[526,570,725,730,731,732,733,736,740,742,744],[526,570,730,732,737,740],[526,570,730,737,738,740,748],[526,570,730,731,732,737,740,742,743,744],[526,570,724,730,731,732,737,740,742,743],[526,570,725,728,730,731,732,733,737,740,741,743,744],[526,570,724,727,748],[526,570,585,586,587,730],[526,570,730,731,742],[526,570,585,586,587],[526,570,585,586],[526,570,1175,1177,1181,1182,1185],[526,570,1186],[526,570,1177,1181,1184],[526,570,1175,1177,1181,1184,1185,1186,1187],[526,570,1181],[526,570,1177,1181,1182,1184],[526,570,1175,1177,1182,1183,1185],[526,570,1178,1179,1180],[526,570,583,592,620,1175,1176],[267,516,526,570],[516,517,526,570],[275,404,405,526,570],[403,526,570],[275,526,570],[275,329,404,405,406,407,526,570],[190,240,261,329,401,402,526,570],[190,240,261,275,329,401,404,526,570],[416,417,428,433,526,570],[190,240,261,416,417,526,570],[190,240,261,417,428,526,570],[190,240,261,274,417,526,570],[190,240,261,274,416,417,526,570],[417,526,570],[418,419,429,430,431,432,526,570],[190,240,261,416,434,526,570],[409,526,570],[409,410,411,412,413,414,415,526,570],[409,410,411,526,570],[190,240,261,410,417,526,570],[190,240,261,274,408,416,526,570],[190,240,261,417,526,570],[190,240,261,422,526,570],[421,422,526,570],[420,422,423,424,425,426,427,526,570],[190,240,261,437,526,570],[437,438,439,526,570],[437,439,526,570,748,749],[437,439,526,570,585,621],[90,91,97,98,526,570],[99,165,166,526,570],[90,97,99,526,570],[91,99,526,570],[90,92,93,94,97,99,102,103,526,570],[92,104,118,119,526,570],[90,97,102,103,104,526,570],[90,94,97,99,101,102,103,526,570],[90,91,102,103,104,526,570],[89,105,110,117,120,121,164,167,189,526,570],[90,526,570],[91,95,96,526,570],[91,95,96,97,98,100,111,112,113,114,115,116,526,570],[91,96,97,526,570],[91,526,570],[90,91,96,97,99,112,526,570],[97,526,570],[91,97,98,526,570],[95,97,526,570],[104,118,526,570],[90,92,93,94,97,102,526,570],[90,97,100,103,526,570],[92,101,102,103,106,107,108,109,526,570],[103,526,570],[90,94,97,99,101,103,526,570],[99,102,526,570],[99,526,570],[90,97,103,526,570],[91,97,102,113,526,570],[102,168,526,570],[99,103,526,570],[97,102,526,570],[102,526,570],[90,100,526,570],[90,97,526,570],[97,102,103,526,570],[122,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,526,570],[102,103,526,570],[94,97,526,570],[90,97,101,102,103,115,526,570],[90,94,97,103,526,570],[90,94,97,526,570],[123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,526,570],[115,123,526,570],[123,526,570],[90,97,99,102,122,123,526,570],[90,97,99,101,102,103,115,122,526,570],[526,570,585,602,753,754,755,756],[526,570,762,769,770],[526,570,770,771],[526,570,761,762,763,768,769],[526,570,759,760,761,762,763,765,766],[526,570,763,767],[526,570,759,763,767],[526,570,763,768],[526,570,763,765,767,769,772],[526,570,759,760,762,763,764],[526,570,760,761,762,767,768],[526,570,765],[526,570,920],[526,570,917,921],[526,570,585,602],[526,570,1014],[526,570,1015,1057],[526,570,886,1015,1053,1056],[526,570,1055,1057],[526,570,856,884,1015,1054,1055,1061,1133,1134],[526,570,1011,1015,1054,1055,1056,1057,1058,1059,1061,1135,1136,1137],[526,570,1015,1054,1056,1057],[526,570,948,1010],[526,570,1057,1061,1135],[526,570,1061],[526,570,856,884,1054,1061,1122,1132,1138],[526,570,1054,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121],[526,570,856,884,1054,1061],[526,570,1015,1060,1122],[526,570,1015],[526,570,856,884,886,1015,1054],[526,570,582,606,620],[526,570,620,1152,1153,1154],[526,570,602,620,1152],[526,570,1158],[526,570,919],[526,570,1189],[526,570,583,1188],[526,570,929],[421,526,570,714,928],[421,526,570,929],[526,570,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045],[526,570,1031],[526,570,1031,1042],[526,570,1017,1033],[526,570,1033],[526,570,1040],[526,570,1016],[526,570,1017],[526,570,1025],[526,570,1047],[526,570,1046,1048,1049,1050,1051,1052],[526,570,1049],[526,570,1048],[526,570,585,590,610,613,616,890,894,928,929,930,931],[83,526,570],[83,84,526,570],[83,84,85,86,87,526,570]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"8c2f60c3192f66fe9e5e7a7a941534583cdff4f5a059fad30b1b863a547f388a","impliedFormat":1},{"version":"5684c530792712f3fc7e4024dd049c70d625567f71d77319a6bad39aead104f8","signature":"843c634ce6233d18664296c1f1e4aec8c5e0e98ca6e824ace666ccc5c1a06f89","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"27b4308d9e3db258a09b8b7bd92677320d654f5fc089abbbcb1fd2f70b14c909","impliedFormat":1},{"version":"d1d7e7d247badcbc50cf0bd6b1096dc7ab3cd36b31e9803b3c0acbbfacc493d2","impliedFormat":1},{"version":"6c2a2e7e8500f70a127dbb259d99c0f3951394df7c46a69eb2569f0e8c14665e","impliedFormat":1},{"version":"924e12558578f341179bb878e75cfd9aa648254f5ac6cf228832fae40a52c067","impliedFormat":1},{"version":"3f7705b6434455ff25ac2d336388564173179a4aed8cd0d1b1ea235f0fd3de23","impliedFormat":1},{"version":"b5f6aef5039b1b98a67bf3a3ed52f8693a56be698da9e4a41e2d67b0751ee005","affectsGlobalScope":true,"impliedFormat":1},{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"f473be7c909dbd10c40f013e70da40f24648b2abb01025436fe0a0eecd0e83be","impliedFormat":1},{"version":"c98583f02275727ead0256c97298c15fb77a1c1e473b03c3b61291c63c66d385","impliedFormat":1},{"version":"9a7904e39add402d71343ac8de5303e990d9abb1fc703c64991c655b718267a5","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"f671901909a26ae633328d6d899992193ca9ea718e6315f2c3d46f39c437f02c","impliedFormat":1},{"version":"7920b8aa27a7b6a90bf9f5dc21eedac7f38ca8717ebe70495ab616eb52b3247b","impliedFormat":1},{"version":"485fb40ef0ae61e1f8f5f494a2aa4a69df73dc860b5c94ef8fc8dc42679fdb26","impliedFormat":1},{"version":"1f53ae308869bfb894735576727f3dca47d0405ba7fee4f076a701b449ce6f94","impliedFormat":1},{"version":"84bdeff726a44cad4c07230ccdd2b777e53608d081eb8b27f6d28540ac22a915","impliedFormat":1},{"version":"1950e4d79983ccc330513fb28324280bbd138fc69e2739353008ae5a75f976e6","impliedFormat":1},{"version":"2e9b3ece2914738d48a674dc4d677a6cef576ef045356961120a7915735e13f4","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"3c8c852d93800512dc47f4554efe94789bd81733947e2066a916ba70fe6992fd","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"5a2ae43daf9d478f37780e3ae08089a46347e395812c7c4526684878e34b1401","impliedFormat":1},{"version":"d60984fcae46158649bf553c1a649428ced1dfaa789086a7fb79a819536b0023","impliedFormat":1},{"version":"ff90925b7aef60c568d491966f90f37cfe4eb126a590e68a33c017b9be483f84","impliedFormat":1},{"version":"cbd12dce7f4a3542b0f00690efcf1211e50ad87bd78cedbf7beb60acb27d20a0","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"6b6fdab709d30fbedb090e783a610662e60b4922843f42ef801e3073a23392ee","impliedFormat":1},{"version":"65b2a90560049039460015abe63b8fa7f205bb78796a8de48a3661cfe7e07e28","impliedFormat":1},{"version":"1b6173159974df8ff78f3b01b8b89449053c1912c2ec715a2dc664d8d93a54c1","impliedFormat":1},{"version":"2b4b6a59d7d1020b65f9c878850b1aa2ae8eceb26025224d6bee2c5d7883d815","impliedFormat":1},{"version":"d45acd2463649e59b4dafb4ee051426783c6a13a72c21fac94265676f7fc01d8","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"7ef6d45ce6f0ee16a0441063ca89cebfbe4c00647132f5fe31bbe5420e20843b","impliedFormat":1},{"version":"11c2481df1d73d5d667ce282d1ec9fbcedee39f0a0382fd591cf6434b21f05d0","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"ac7eec65e925055052e4c3d88a303457150e7ddf8f02256a674315335b95af70","impliedFormat":1},{"version":"bb61172ecd43ac71849821f49ef6afa6515230386b253817c380873bdc49da50","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"1b3a76621e54583d0f1a9fcde6b7aa7642283412b103744f7b2a5c3c19108959","impliedFormat":1},{"version":"6f0f5830c13abe710e1e7e97bed1ae039f3a9fc8b5ce2a076141eaf0c854fee6","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"3307e5b71a5eea118476097fde4580e60c20b187e945f42d7eb69a8dbbe7e09a","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"0a08db8f792dd2b329dfb09bb2c7805298d03888608acd9eb554a8ad820e1079","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"490725ebec9ddfc97663887989ff1a49323b7cce7293970732ef962cffed3699","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"cf3f331aad22bfead8f79aae52f022f25bf9ce25185cfc87f3c4a59c060a699e","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"da129261494c4094bf55c761ba5f0ae4d5426d83ed5e312bc7f8600727bb8a05","impliedFormat":1},{"version":"cd2f8f7d90d8d283bb4b91b57406bf793df731d39bc2c119e3fa514a057d21f8","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"1930700210612b5324055fd9d335f4f2a7bb3f1b1433e1adadd7bdc5ee50272f","impliedFormat":1},{"version":"b998db2d97135f8958613fd1d795fc58a17b8fcc452288eaec13e8c8d870d1ac","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"2d8df720a088cfdc1253782b120f400cbe0d4516bb06e98c88ae7c2af1447653","impliedFormat":1},{"version":"99acda6ceb0b1e5a754aa8e7af740702e50ab515561be3d987392f04d0f7078e","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"806f43175b88c9a2ef89448cef56bc95c4df32a27be99748c517e5ca076919e8","impliedFormat":1},{"version":"5832c4ed86047766c1d4cfe2aa5780e3ab5d8d842d12664d0f71faf78c80dd7e","impliedFormat":1},{"version":"a43d21378510cf4ed5aad29f64f3d0fc6e0a30bb2bb81af0ea776b239a77d068","impliedFormat":1},{"version":"60c4cb259d73efe80ca3854715efdf93710a8b11a560a7f9741d6638280b4a80","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"faa402775a4c220279f9c26074a0010f10a7f0293c506ffd0857ea45e8ba7733","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"08b603e3737ff32a685eefca3e7f21324b8b868f3322416cef759f8a54d234ef","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"14d8af44e19148423a5a0817544a229e3ba324e1cd814c1d7b4ca2690baf434c","impliedFormat":1},{"version":"91122fba45414382787d7cffbd90298118a2970f8f12d91cff302f3a482f01e1","impliedFormat":1},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"b6ac3e813f3bc41717619291caf2fbc75ee84b4f5bd3abd3e48885831ebdaf96","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"691e623f6b017a026baf823394aa6d74efabfe877b799c539e085e3f82247cd8","impliedFormat":1},{"version":"a4808116b12ab27b11b3800dbc2b64dd122d4748d48a111957b87b52fd3cda2d","impliedFormat":1},{"version":"2501feb6d0a73d980a9b8e5e03c7e15053788a7fbae6d55cf93df3b0e06dbedb","impliedFormat":1},{"version":"dc9412bbe64fc748d330f3e574c0440753daefc81cc74791198a0223f2114b5a","impliedFormat":1},{"version":"bbd9e6f68bf6e418bd44d7991a4860b1d386a30b798d1be773931ac7bd1e657a","impliedFormat":1},{"version":"f7ff9fd2db48fbabaf6516a4c3515b07325baf4c7a35766a7bc1ce72a1bb9b83","impliedFormat":1},{"version":"e383a277c8c485ffafdeea2bd0d28036bd8d1be4b2d6099a7b27ecc4419fe8d4","impliedFormat":1},{"version":"66a1d3c8e68134692c9784cfcd8ca275d8e24ace1bc01c432c5a2cc27ef27701","impliedFormat":1},{"version":"18b79e1c4ef00056857db2070ed947e32dae63dbbaefadee3cb6e8f21d5193d2","impliedFormat":1},{"version":"cbce9fb00ac5676380dafebfd7e5ce1561f17dfbe6356597d6e5d9b6b9bd5fe2","impliedFormat":1},{"version":"ae042e01074576c186a734888cd420dcf9eccf57053c9d7de5326cc235b7d3ac","impliedFormat":1},{"version":"040c519477a40f166f9d3d1f1e792761de759c5301466833b74d119957c794b3","impliedFormat":1},{"version":"d5a20d626aa5d02f7732d87050b9f3589627f36e4b4d01fe171d2cb9a958b21c","impliedFormat":1},{"version":"d36fb912245b9e1c7a4ac59cffe51d83546d2b03f52e2b3b9fff969d01257800","impliedFormat":1},{"version":"70ecd65df736dcf74d8304cd3767a863b7fab2bfa04a73c039c995cfd88489dc","impliedFormat":1},{"version":"53960fc36042dc4aef356c0273674bb0e7f65059720fb42ac36d29a8d2e3cbf1","impliedFormat":1},{"version":"8c607552166070130883b20fb7da9c7b7006e065239c2075f47e3349f3664c66","impliedFormat":1},{"version":"d3878648b6e0c7f8ca809b4a03d8d13ddccdde282c6c84aa1faf59f0780a888c","impliedFormat":1},{"version":"c1a24626823048792dc4440975646629ae984fa3354cd2f09270834d90fd997d","impliedFormat":1},{"version":"696e8b13ed6b15e0395fa6438f43e1363e09204f080640c6cb5437323f9ed8fb","impliedFormat":1},{"version":"a5d6fe2a52c03c4f5edb8c1ef06ccfc777ae377d0f0dbd7df3b066b0f9cec946","impliedFormat":1},{"version":"34b4698d4b6ccfb2b1e3e034d4463ecf490a6c700d229685f7b5b08ccc150393","impliedFormat":1},{"version":"f19baa96f4a8c3b23453401f7864ef337ebd2533dca12c042155cbd526341f29","impliedFormat":1},{"version":"a1604f4912418542596cf7598f199be7f276b7ad715416c59603d048894733e4","impliedFormat":1},{"version":"11b0c060c13dcf6fd09d60d9870f4921492a4d3c1b39a33f9d93f22f1dfb7c3b","impliedFormat":1},{"version":"a59bdaea7395061b93e12c89996770f196ada0f3e9197e2343763c65d0588dd8","impliedFormat":1},{"version":"9ffe848f345f1ac8c2fa2f4706c38840fe2beb455e19c5dce756e0ad09776235","impliedFormat":1},{"version":"013c10b8066b319a9dc033db24f0467737406810561d0c55d8bab3c8212788bb","impliedFormat":1},{"version":"b424df9fec80812448f7b2977e3220d5a2eb88e6c8e8b675c282f4eb1f4b8834","impliedFormat":1},{"version":"d66670300c6ad07603217e119240d129d327ee2cb4e05cdfc86f7f01e36a42ea","impliedFormat":1},{"version":"3dbba617428a6892f0e7a3c16d960738db464eb8df6724df7d95e7a4f116f110","impliedFormat":1},{"version":"3d7926e64b370e31cd4080bb432adb9e92fe096e31bee0685ee49d75cd317120","impliedFormat":1},{"version":"5862b0752f1eeef4061683d1311ebec322696c9ccd497e14b9d0c97545b317b6","impliedFormat":1},{"version":"c9829971663604cc72b30018b901c7cd97483587953e8a9535616ae04c808867","impliedFormat":1},{"version":"b0b73baeadd229c956da12d8b08f9c464b15e653d6dc5838bea41c733de7fe00","impliedFormat":1},{"version":"88ad86557665308c7957b0aeefbba159d9c99ed57e1d9a696cb4b068ea30f68d","impliedFormat":1},{"version":"8ce9716f8368167c631c4240de8cb2b5997c1c2ad9d885609079ec4c30877139","impliedFormat":1},{"version":"35595df80753dbc2b21a04ddb000835b32f0b9ad56ea259d4e6e9ee674debef4","impliedFormat":1},{"version":"efc5e846a8dcc7aeb97cdf4d6e529079e4ab45ac3cd39ab38ca96599bbcf232f","impliedFormat":1},{"version":"730450f8a576f827f2044ff9e3f0f7130e605b79087552c11ac5d92fda9a7e1d","impliedFormat":1},{"version":"9a62c9484c14c0cb33dbcdcc11e405821ee668e714799f7a125b840eeb8e89ef","impliedFormat":1},{"version":"1fb8ecfdc58a9071337c56072dd9b3c78c7d2f76730a1be8d27224ca083227a5","impliedFormat":1},{"version":"3bb99d9565690ee166e65b90817eb27c7c942b0efa84609bf2fcf0a8cc9405b8","impliedFormat":1},{"version":"c742fe995845140002d0baa8785af21a3bab8527b5584cdb0b407a226107f585","impliedFormat":1},{"version":"ffa065aa3455b257438ce8c9768c5e0f80ea3820094ee8a1120fb4437cc3e7a4","impliedFormat":1},{"version":"c325aac67ed6a692a807c9396d513ce37ed8f56c8d8ca7bf4ea76d4cd09e7c20","impliedFormat":1},{"version":"9d39a014e37dc53a1dafdb2ef5099417bd00174b815ac7e390414372b30a14bd","impliedFormat":1},{"version":"86a07b0fb1f46d39132ef555b215e7db97e906596697469df465c310646d3528","impliedFormat":1},{"version":"0e198c29a6251d421945c8d803c593eeaa2e92de8d8aee6412a2911195055162","impliedFormat":1},{"version":"f7df54c02497181cc6e63d6eada933f477a18b3a72776a0a77e63de603439061","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"a6292eb5c4a48e71b5f49c4ca89b9aa76108a93b7ac98c656a8f1dfc5a614bd7","impliedFormat":1},{"version":"7a9121b2912c6821f2783964444cac3050e17b3b75512965e0a32e66b414d592","impliedFormat":1},{"version":"9e8cb3ec89db85e85513bb89adbe63b8acccad3fffe11d6d8df01c865c77fb5a","impliedFormat":1},{"version":"f3dd8466af3baf161e0d203a1a28c7bbf9f863679c3b0e659371b1835b40f193","impliedFormat":1},{"version":"e8f141e5548179b835f699a1026f79ea581eeac1a4e57f5f22dcd0b4a772cbbc","impliedFormat":1},{"version":"2ef7e3af3848886c22ace971e69966b203eb67b2d1787d5e44c99519c09892aa","impliedFormat":1},{"version":"ddad846edb02abe8e625649c4a5dd64be1bde5d7631302d1fa4d45d14ed8b51f","impliedFormat":1},{"version":"a119ad4d2a84d13a333dbfa30e43bfccf4a0dc040c732d676adab436626f25ee","impliedFormat":1},{"version":"a7e006e3243d9746d204b7addb1f034e5deb4a0d157d8c85ecada87a86f222ff","impliedFormat":1},{"version":"fda09dd5bb69c3fdf9ae579b4b9f5a7db565223896f50aed99760821c1517bbc","impliedFormat":1},{"version":"261a9e319315e52f88b1cb347db2ce4277ea7a6eb6fccd90c289b119353d5b78","impliedFormat":1},{"version":"4871318522f755858f7edb640a4c3ea1614ff99be9d69340f5a51ce82fd809df","impliedFormat":1},{"version":"5208acbce57501f3d5dd58f4956d43734b3a007b8b86578c935785ec72408e04","impliedFormat":1},{"version":"41449e5c8ad2b4ad46497762cb72ec680457e35e03b658842f257a79da3d694c","impliedFormat":1},{"version":"2e567bb91461de2ab714bfd4261ce4f58c389cd3dba268958fdaef6cf20f7e3c","impliedFormat":1},{"version":"7c296bb31e778cea0fd700a14fbe683b665db7115f09700d8416cf24b83cdfcc","impliedFormat":1},{"version":"0b3109399eb9e01963064b099613e2f79810b0771aef56b628c4e6651f35440e","affectsGlobalScope":true,"impliedFormat":1},{"version":"284700f874fa1e32428eb6a18d4d6c36e1783dc9c315370f558d9e8d36f8a615","signature":"01a371d63558066ec9e08b3bcfccef9890517d98c483b08c5264677abb36d878","impliedFormat":1},{"version":"00c167f32444b220a604a8308f4466cb83b1e3de66ccffdcdefb65a49c26f161","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"b2546f0fbeae6ef5e232c04100e1d8c49d36d1fff8e4755f663a3e3f06e7f2d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4584e95c63371b5d507749924d94e324c7e041f964975a92e7c8a1abc840328","impliedFormat":1},{"version":"294985ec97b28343d1d6e2730a13a839c375a2ffb5f6b37acbf5dacf35613785","impliedFormat":1},{"version":"3896fddb08ec18856f5e88f9f7776c1c58c41d6129f8ee5158513a5de3febd01","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"4e2af0853ef2aa0bd0c97121d37255db91d57a5a5d67cc937f2367a949373f3f","impliedFormat":1},{"version":"d53ba569f15be8659ba0f726dddb7a24bb875b63b8614c6b007d38cabfa3217b","impliedFormat":1},{"version":"2e900e22ef301dafb3a35df7aaab4f139bf1602c8e5dc0bb0ca8b24305af388e","impliedFormat":1},{"version":"9c479340e2f7537bbd31dd0a08aeeec28db302d9bef096eef3cc09f20eb56097","impliedFormat":1},{"version":"952d81d65c1cb9a3bb736f233db638e50fdd4e7ae75a5624e7b8be24dad92851","impliedFormat":1},{"version":"2767eb79f4b9e754efff56d654aa71715baac18a6157170f423cbd460f2445ab","impliedFormat":1},{"version":"3d6f89fb6ab035027268da5a90e31369876b5f2c37339b1212590c8727bc920a","impliedFormat":1},{"version":"6b05adc37cce53629f7740a2ce72a17d231cb1332dd20d725f49918db5f90ec4","impliedFormat":1},{"version":"cb364f282ace685f66e8fa777804a36e96892e4c92cf4e8816ae9156c3551453","impliedFormat":1},{"version":"afe1be833b5a9e15f35b72d4aedaac24c0fd903e374c4eb4be90334a0e5ad9ae","impliedFormat":1},{"version":"42b59521c78a8daeaf087752adb5de9753e7c4b701fc7c3e435ef1d737140091","impliedFormat":1},{"version":"eedad1c380f5737f1220feb0ee83212f602acae8f0553837c098878e5c73c198","impliedFormat":1},{"version":"e0fdb256e83c39f7794908de553930ce2581ba109b8de90937bf972fa75485d5","impliedFormat":1},{"version":"dafdf0b0ccb55128f83fe0acaddadfb5d223887a7e8d59a0623860a68b1f59a7","impliedFormat":1},{"version":"6f3ef4208d2d6933180ac1bc813efbfb319b05e49ef0cdbeea15126b982578c4","impliedFormat":1},{"version":"02e7a692feb22c829d837e40e82070d47b696a0c64ea192ba2c438f6a55902a4","impliedFormat":1},{"version":"685b232bf1f8763afa58c62d964f677478fac68ccd9e761e4d9a0cf6b5f9a378","impliedFormat":1},{"version":"2d205c767099a9c1719b2884eeb878470d81e3418ffe9ae8db8139e597f3e34d","impliedFormat":1},{"version":"0c0ccc47a6e4cdaf336181d46a262c591dad7098f431a4234364fccf7ced258f","impliedFormat":1},{"version":"cf68f71517959967c83d4585d1cd37376fbbe8174ddd0140274c228488149190","impliedFormat":1},{"version":"d6cadb48c29a13aeb7be79d14980f2aa4ebfe9c6118726a906cc429fba582079","impliedFormat":1},{"version":"56e6a902d2aa94175f75bdc0ad822bf787b67bb6dbf52018c389d3643d203539","impliedFormat":1},{"version":"650b748b635b9299a8d2ba23ff02f403aac044a946b7e10bfb95942367bc1489","impliedFormat":1},{"version":"c4e474945611676435f1807a5ab049becffc54a32a1a4cfc96731cdb34fdc8c1","impliedFormat":1},{"version":"a23c0e88e5d4204898c2087a5950b974c594343f78aa8e3e758bb85c3d30dfde","impliedFormat":1},{"version":"8d071caad80707dc1853c718e6372349df8fdd4790ac57550cb243545ac91806","impliedFormat":1},{"version":"6138f6a183b6ab187becc7f4f37ea7b9b072874c75699d2bd10950fe07726aec","impliedFormat":1},{"version":"ddbafa89c2b1b11251b96deef3869fa0b567766c43bd31224838ecb024297b8b","impliedFormat":1},{"version":"3cc6ec5641587a673473f9613880b63f531446bc631a6f96adbb033672cf6d2d","impliedFormat":1},{"version":"3901548cb8b4d914800927f9def278f34dfa106e65be38ee47d59c4efdd45ef9","impliedFormat":1},{"version":"21856903077f053172be7ab1027ccfb94fecbb0d22dbc34e7208c4553575ccbc","impliedFormat":1},{"version":"6cf6409ce9b90a14cd1e146d00fd21973d5d6b2da875283f3da0f27e0b786eaa","impliedFormat":1},{"version":"2a527df5c4828328fa6b35cf8b8f5bf0640933a4602c517faace7a1c3af0d446","impliedFormat":1},{"version":"2a46d72fe8eac64f8337c839bba3e558a07cdf6f2574d88dd5852d6ee8bf7d9c","impliedFormat":1},{"version":"0787ec67c199917f7c0f2a127432dc65f5d422e15992b8a7c3d7765f94075390","impliedFormat":1},{"version":"8494cb4b789a1f5e0710a4db2e111b4e20ee373251cb958b79f2d19d8adb3743","impliedFormat":1},{"version":"b8a25d32e4a2a187e2169f0936416cfcac8926f56166f3895fb5f82942f3150e","impliedFormat":1},{"version":"7552cf0a2915702d6cf9a8c6a2a242b713214728dbb81353132d2d986e74e521","impliedFormat":1},{"version":"c3789c53874f2aba5a7c21e1ac1e467f95522ba5a0c8f9c8b8c519efa7aec51b","impliedFormat":1},{"version":"dec52a42c912503c35463f974fb86cb1a772cab001c2c9ed413093845be2f677","impliedFormat":1},{"version":"d2a2a7be324ab271073676edb22f5de259d4baf5bad32bd2e5545f957f503ac4","impliedFormat":1},{"version":"63fd6e8e4f5403337124c82bf46fb17ce24923d8a9223b387ad312a4b075e7c9","impliedFormat":1},{"version":"bce453d2e25d1104b3b84c97aee92111e194691e5b254af318499745c8e041c6","impliedFormat":1},{"version":"22f897e17f18b702f8aa1c6e6412fcd33d180f8ef61297fec6c395a2b18d9908","impliedFormat":1},{"version":"0afe2ed080fb1ca424bbcecca1874d7fa24aaba54535722b00607d38dd150f8a","impliedFormat":1},{"version":"04260ae2a15ef601034f94c4b4c91b76a4c4197d48137d04859d9aa9c83f2f16","impliedFormat":1},{"version":"507fe2b965da84e42b4d17d35264be1e70694a8692c75fc07207d38deda42ad7","impliedFormat":1},{"version":"4a9bdce843a6bc8bdc71287de2808e7438fd718e17c55d175f0f2d0a8883947e","impliedFormat":1},{"version":"8a0a5c90711b4d4d55b0edf7d097faf872f65d6f7be1a5a42fdcfb62c751a135","impliedFormat":1},{"version":"756c0a51db689803dcbcb94cec65edd6f0212fcda9abf264001ae975a5c6a18b","impliedFormat":1},{"version":"2873b8fe4083b54fb60dd1d03ee8b22496e41f96a4e536e06cd59a481aba01de","impliedFormat":1},{"version":"5fc9e50135f4163989ce74b83b68a5ee44d151f04ec44078adbe913c8dad694e","impliedFormat":1},{"version":"e2949c84dcb7b6a3fb40fc8bfcd9fa6b74d1e2c830de0d5ace7159cc4fb4b5a5","impliedFormat":1},{"version":"34a80ad568a06a539e43bde102bed1fcb8bec196811caa9abc3a0cf44a95fdde","impliedFormat":1},{"version":"e634a64172adde8d23f6df23f252d35e16eaa4bc33e881700967498a955e0b25","impliedFormat":1},{"version":"b1432d91fcf4cf709d71adc1a00e04ac1948380b8552310d0509dbdc3b2cf97a","impliedFormat":1},{"version":"e3d05607f9e532c806395e8765913736c42900c5c3ab5ab52d910da6fd57121c","impliedFormat":1},{"version":"eca0a0e9725ccbf8b13ee72cdab75b489992f2ce7f4dd198767831982463c294","impliedFormat":1},{"version":"26d1f4beb9d50d83557de587f5168dacb4dc81935f4880afa7d48dd7b13d5d10","impliedFormat":1},{"version":"67d2cca28154842dd7b1d5cde8c94b9fc24afad1089eab0f1de7294d143605d5","impliedFormat":1},{"version":"28c9bcc4c2323e859523b1edd20a69b66784bb3ca58568ac1c2448d90c1e1fce","impliedFormat":1},{"version":"b2434d709c9dcf1bee9223a19b449cf9d8a0b411fa5bb2ecc8ce25fa92889c77","impliedFormat":1},{"version":"6cbfcc72a73f25c47951ebb87118ecc43d04781e02b51236d4fab69dbc63926e","impliedFormat":1},{"version":"e0fdb256e83c39f7794908de553930ce2581ba109b8de90937bf972fa75485d5","impliedFormat":1},{"version":"dafdf0b0ccb55128f83fe0acaddadfb5d223887a7e8d59a0623860a68b1f59a7","impliedFormat":1},{"version":"ec314adb4116647307480f138c5c23f98bb5ad4efba51aeb1957fc4519429d8b","impliedFormat":1},{"version":"5297455afc3c8eff9ae459f28eeb846fd86a51678afbceb7c27696eefdcf1e5b","impliedFormat":1},{"version":"532aeb172f2a735739956f48d7862681212baeca1bbde9185eae73f6dcb95faa","impliedFormat":1},{"version":"2d205c767099a9c1719b2884eeb878470d81e3418ffe9ae8db8139e597f3e34d","impliedFormat":1},{"version":"cb33e3ca7c3b2cda0d04b6aafe6f9ddad719ef615bdeae9cb88384ad798807ec","impliedFormat":1},{"version":"2c9b150c52c2c876fd5e91e1c63be66a6e2d052a1f381d362ad649c6ffd8fba5","impliedFormat":1},{"version":"d6cadb48c29a13aeb7be79d14980f2aa4ebfe9c6118726a906cc429fba582079","impliedFormat":1},{"version":"1fecc438d1dbb692dcc38564aa5ea06a108cb37661327d8c0e0c065e07efb3aa","impliedFormat":1},{"version":"650b748b635b9299a8d2ba23ff02f403aac044a946b7e10bfb95942367bc1489","impliedFormat":1},{"version":"c4e474945611676435f1807a5ab049becffc54a32a1a4cfc96731cdb34fdc8c1","impliedFormat":1},{"version":"8d071caad80707dc1853c718e6372349df8fdd4790ac57550cb243545ac91806","impliedFormat":1},{"version":"3cc6ec5641587a673473f9613880b63f531446bc631a6f96adbb033672cf6d2d","impliedFormat":1},{"version":"3901548cb8b4d914800927f9def278f34dfa106e65be38ee47d59c4efdd45ef9","impliedFormat":1},{"version":"21856903077f053172be7ab1027ccfb94fecbb0d22dbc34e7208c4553575ccbc","impliedFormat":1},{"version":"6cf6409ce9b90a14cd1e146d00fd21973d5d6b2da875283f3da0f27e0b786eaa","impliedFormat":1},{"version":"2a527df5c4828328fa6b35cf8b8f5bf0640933a4602c517faace7a1c3af0d446","impliedFormat":1},{"version":"7f2eab4f5f276996d3e13aa12f589048fe198eea8dbd78ddcee60c38a8ff5606","impliedFormat":1},{"version":"0787ec67c199917f7c0f2a127432dc65f5d422e15992b8a7c3d7765f94075390","impliedFormat":1},{"version":"095b26151a4ce7b9da003174d4a22db9f867928d3bc7718966d0e95f0c9d160f","impliedFormat":1},{"version":"b8a25d32e4a2a187e2169f0936416cfcac8926f56166f3895fb5f82942f3150e","impliedFormat":1},{"version":"7552cf0a2915702d6cf9a8c6a2a242b713214728dbb81353132d2d986e74e521","impliedFormat":1},{"version":"c3789c53874f2aba5a7c21e1ac1e467f95522ba5a0c8f9c8b8c519efa7aec51b","impliedFormat":1},{"version":"dec52a42c912503c35463f974fb86cb1a772cab001c2c9ed413093845be2f677","impliedFormat":1},{"version":"d2a2a7be324ab271073676edb22f5de259d4baf5bad32bd2e5545f957f503ac4","impliedFormat":1},{"version":"e8125d329bd068dfa97035914b87f0d561f8bbc5a5883ad883c5484dd8315eee","impliedFormat":1},{"version":"22f897e17f18b702f8aa1c6e6412fcd33d180f8ef61297fec6c395a2b18d9908","impliedFormat":1},{"version":"9b48fb7d6521c10569a09921fea776719fab153e4b24d6bf4290fe6fab9be6d3","impliedFormat":1},{"version":"9c2c8c2162f810ac21c9a9df55ef59085b82790d9b17a916c6d025ba3e3b8edf","impliedFormat":1},{"version":"507fe2b965da84e42b4d17d35264be1e70694a8692c75fc07207d38deda42ad7","impliedFormat":1},{"version":"8a0a5c90711b4d4d55b0edf7d097faf872f65d6f7be1a5a42fdcfb62c751a135","impliedFormat":1},{"version":"3ae18d6fa578fc0025f43e6b2f26bc3d1ba110e9149273bd213a5cb7fb878848","impliedFormat":1},{"version":"2873b8fe4083b54fb60dd1d03ee8b22496e41f96a4e536e06cd59a481aba01de","impliedFormat":1},{"version":"5fc9e50135f4163989ce74b83b68a5ee44d151f04ec44078adbe913c8dad694e","impliedFormat":1},{"version":"e2949c84dcb7b6a3fb40fc8bfcd9fa6b74d1e2c830de0d5ace7159cc4fb4b5a5","impliedFormat":1},{"version":"34a80ad568a06a539e43bde102bed1fcb8bec196811caa9abc3a0cf44a95fdde","impliedFormat":1},{"version":"e0f1bf295d165e3e7fdb6bbd9910888e9c5645e19cb4ae4b86303ee5ba2c951d","impliedFormat":1},{"version":"7c6d7a526120d34a336b995d5a5b2f52d934b89d364b333b850c15ef3b5bffce","impliedFormat":1},{"version":"e3d05607f9e532c806395e8765913736c42900c5c3ab5ab52d910da6fd57121c","impliedFormat":1},{"version":"0a019658c43651da76cdbc673aab961f4c6e9fab4006e3aaedb5b13e5dbab37d","impliedFormat":1},{"version":"956b961306d285dc2c1d3b5020baf1e2c57f564876f50dd42e0976bc75a020d3","impliedFormat":1},{"version":"dcb2d6a6e0b8900a46f9cc664fc1c6e3cc9a4d99249bad1605749d651e8cdd2e","impliedFormat":1},{"version":"9b33ad40fa8b00650b695638c8e08df88bbbfed00283ff5eabbf11b8813e03f8","impliedFormat":1},{"version":"fa90ab24a39247e1e9874784e7b56a93ab9f1a04daadff9d9cb99d7223d91486","impliedFormat":1},{"version":"4b91eb2d2841e34c371710ec924e8ac947911d9941bdfb6a11730e741f287005","impliedFormat":1},{"version":"ce980562ed0d193d700d6d55ff717131e4bb58b88b5448e7e05dfceae719f47c","impliedFormat":1},{"version":"4d66be39bdb7a62696866426ec835920b2cdce7124b54aa14b1f9fef4d41cd93","impliedFormat":1},{"version":"dd679f95f944384711ac7c9ed85d6b46b15f82c023c4919ba3232fd753532c90","impliedFormat":1},{"version":"8b4a688f685193540c8164ebe48624c4e82b8769d74dfb3557c4dbb9fa567898","impliedFormat":1},{"version":"b5f9c5b2f54ce4c0baf948d885a7a21aeba477dc9356beefd63c4bddac366d6c","impliedFormat":1},{"version":"48079abf5a74f7028473652a9cf64e3d260c44bf4060b05485a6e3d7f0370dc2","impliedFormat":1},{"version":"ea22fbc1dbd8fac6df7dbd5870183a9d14ccb8358c253bf844ced890a7f38dd6","impliedFormat":1},{"version":"773078223907d9936c05dddfed60cafeebd4249acbcc189001370261718f0258","impliedFormat":1},{"version":"17e344c68488e5787eebf3ec125565d51a468af5701e214367a42ce8e5eef059","impliedFormat":1},{"version":"aadf00554ac0118fcf308d7ae1cafd86a7931b41e038022dd891af248d72ef35","impliedFormat":1},{"version":"733ec8bd6c210af3ea70cfd0ae7924949de5ecb384d9d1db3744b3af2f9d0f00","impliedFormat":1},{"version":"d95f40246c4a53a739dec1818a4f3cb39aac4965ae1a4faf614f78bf3b85c347","impliedFormat":1},{"version":"3a844741079e4c4e38e5dfa7b182ef7030a8c787bc08efacebe0d7b3bb685f37","impliedFormat":1},{"version":"5f5ff006e411f34b3ecf4fe66bbf7c9978bab7fb7f09646c91b8549acc8d487f","impliedFormat":1},{"version":"70e812cb0393e7100087a2203ee9349dab49974032429d29c84222be1356e6f8","impliedFormat":1},{"version":"856aae51a27c4c285b39701ee870dae66bd5b8e007c8dc153bd66fd56fa901ea","impliedFormat":1},{"version":"739130f4f55f33efe791911603f2276169bc0554dbb789bd907870774bbf30d0","impliedFormat":1},{"version":"9ee7eea77d7631e7d95b4f5efc9972fea3a82a3947bac97e0c5c3a9ad2f8d509","impliedFormat":1},{"version":"748b8a93f92a5e3c6c45e9252efe5f70312dbaabf23c32882b0901d530698b40","impliedFormat":1},{"version":"59a6a3f236c937dcc8a6d99557b4317712c0b82f53e73f7a0070c82fc795ed6e","impliedFormat":1},{"version":"dfd624f05e679a330f8b0b8c27b97cc6d09cb8c5547c229eedcf71ee60716f50","impliedFormat":1},{"version":"33bcff4a7c9c06dd05a7635f1a7ba8ccd1a26250caf6fef41fe4bf3677437356","impliedFormat":1},{"version":"001bb2fff6cc7d1cfb99e5eb13b745764230c0a48c9832cd4b8196acbb63a402","impliedFormat":1},{"version":"7f843004c1f9cc2d32f9778227813cfeb8f47733f4485130d999f51eb97a45df","impliedFormat":1},{"version":"1489c494f095baea8f9e67d37a9fdd4025c172c1e74ee783093ee2756a665a1d","impliedFormat":1},{"version":"d4946c3a7c18a8ba1e60a1578c676f51a81d1767fcbbf60b072803ed3fa7f9f9","impliedFormat":1},{"version":"a56648d6831b9b5552b56f0eae7536666d181c86fdcc422f9143e4a5cece6a39","impliedFormat":1},{"version":"f15ff88fe1895cda331b45ceaf23dca027937395a64daa6867cbde52dea7b8c2","impliedFormat":1},{"version":"37046d990462ee09b87b6045d32d62f04d2285351a0977aec83050d994cd6992","impliedFormat":1},{"version":"67294340fe22775adae3b562bdd25adbb1b0d9926b54dfca251418e0e9df8730","impliedFormat":1},{"version":"38b2ce306ab9f13712896b0a4aa876c3e0af5b4466266938e7c5988d822a3f76","impliedFormat":1},{"version":"40e954fecc5f79d6d0890a64713d5e2f8083ae960b6b4e541d44efb9b1c4a899","impliedFormat":1},{"version":"0203a29de8ad74bc916100aad38ccaef5efd37435c8e2f6f6fbfaf2449cf9c03","impliedFormat":1},{"version":"c7aedf7a48b01d06a7a163a63bf1d544fc0bd00417885bae592319cd3f8a97e9","impliedFormat":1},{"version":"e5873895fef4cf12c0bed5b157849e6784d24280bd41ed90854180eebdaa5026","impliedFormat":1},{"version":"65cfc8c1b0ef79383524acaf8151508cb09d163850c4a50dc53574583afd4761","impliedFormat":1},{"version":"c38a0a8b43a6403d1381c32af260513432885aa4c0ae03addad9bad07fd2a2d7","impliedFormat":1},{"version":"d34cbb43422395aa227955f37c7d2b5fcaa2e6675e2a7f7e4e25ee704ab912be","impliedFormat":1},{"version":"af560f62851c384acb21284b9127d53411951056010ff0971f0e66d88e66a7b5","impliedFormat":1},{"version":"b34a0615615cbc69750d9fffe16f31563d917330413219225915cbf4fd473fb7","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"82d7a9061cc31434ca602b01abf3bd3aa3d93eeba3d92ca4d7ec5ff0e401bcc1","impliedFormat":1},{"version":"4ca12ab9d4783b7180b61b96b798b62f6da47e3ee15ff54a5a41607349e15ffe","impliedFormat":1},{"version":"143c3bff41eab3e0d761a3cab2bd580a642beb7509d21fdae5ad6ef04eaec846","impliedFormat":1},{"version":"92538fb1b4ade68cef4fc7b35b8b919e1f2d0c95a080865f991bb10254bb198e","impliedFormat":1},{"version":"963a1f038a096850feadc16b1f4877bae9b98f70fb5471e8af07813fc440d9c8","impliedFormat":1},{"version":"636458e860b725e326083020eac20d68df8c765c22870550ad78727f08d354ab","impliedFormat":1},{"version":"b2597f8e5cc644c743602ec4a9196f1a4f981383bc666806c673061d5a974d7f","impliedFormat":1},{"version":"9ea5135bc86b361d9f7d7559979d3749945a5976bf85e7f5c63b5439f122e5fa","impliedFormat":1},{"version":"11606f2a7b32a47aa2fede3d93f3a4505cf57bb4fbae758b0cbebebed1dae817","impliedFormat":1},{"version":"ec5ef2d24ec079093f3e8aeafc36110e32d586c3f2c3af395823aae744e7b69f","impliedFormat":1},{"version":"181baa25db7c55954e1d4114485cd3ed96df14a6e26fb8c9ba702a8a118d9254","impliedFormat":1},{"version":"fb553e78cd953e6b36a394021bd392446638033c9e3388a9f1babb613617a20a","impliedFormat":1},{"version":"6139c7fcac07fead5b35781d146198019e176f8d32c9b6ae89acfa22b16a9fbc","impliedFormat":1},{"version":"86b2abd6ddc37ca8fbed9606367ce4b8fa1d6b2fa3c30cd8f5fcb6d3ae996268","impliedFormat":1},{"version":"5a699f07f692f146028a8d2a24dea3df3bebec19a2f6dc7e1624274b8a0765b8","impliedFormat":1},{"version":"e891cc403ec4588c43e67f20d4f44c2de1995e1a778e7a255e0a1f8c7d263005","impliedFormat":1},{"version":"7a07b0e6d8f5356cb3473723d1853c9505301e05329df8a72ba6c42a2657ca66","impliedFormat":1},{"version":"e54bfc9e643070779ab10e9d572a776562725c6533f9b8eefe30d5ee2e87b22e","impliedFormat":1},{"version":"b60efbac98231283107121b5b3327f56a6632c2d14d7616920bc309a4f6d4bc3","impliedFormat":1},{"version":"46036e7d150725b12b0ef99ca77cfd4ee662c6a0e011f85a679827dd65d1f42c","impliedFormat":99},{"version":"33235f0c8a3cdf9917c3a2b8eca15fba28d554a48d8eeca24c417a16e317d0ac","impliedFormat":99},{"version":"783a9a7d35f9b922e0d72452e85245829e5618776b3243c4adb9bcd554443ca5","impliedFormat":99},{"version":"dd9d62565b1d4e0885e9b1f1fb55c7a304e5710303d31821a7daeeada9662aa0","impliedFormat":99},{"version":"ef14aa59689ac1bd4b725220fafe753eff9acd8cdc445c04e5b98ac3fe28bff2","impliedFormat":99},{"version":"8c184a7193d318242db5e31ef4bbd73e88c3a0e333c0f4c8523ee2d9ad76cf84","impliedFormat":99},{"version":"dc7600229385bd96566e63a48e336a38a71f223de213b9a5c04f84a9c59d1342","impliedFormat":99},{"version":"907df4219dc9e9e4310be2f3e9e118aa092d073612b9ab1247e447c6ce902260","impliedFormat":99},{"version":"4f4f2beae13a724e7f1b45b5af86a94500d799c7a59181eae1098f549698b09a","impliedFormat":99},{"version":"62478b6c261fee944784c9039e465e03600d68b60d312aba7040143dc1189d91","impliedFormat":99},{"version":"72a845236a24235f598a7da1dc89c0e38a74e1c8cdf4db833c5618e12adc4a50","impliedFormat":99},{"version":"0d2a83bc35ebb75a347d16b72836cf7d407563a7827a585590fae7e2873fcdab","impliedFormat":99},{"version":"aa95d55cbdb02fd4cfcc5b52f04453dbaa86a1fcf31e051bcfb3716f398ccefa","impliedFormat":1},{"version":"55cc31850bb3aec591a02f4e2d2999f1484a52f0afa8ed6934dbb0cfa0635128","impliedFormat":1},{"version":"ae5648da65ae89098d2238037b8b739303ff1f1ed7f711f5e1dab85c0cde73dc","impliedFormat":1},{"version":"21cc4c106db99d082b2b726f4feea224fa40b10a6cc7de03c2ac8ecaded86faf","impliedFormat":1},{"version":"51b46e83520f9dc3e1380657071ab165ada01fee49e7b41b186da91bd287503d","impliedFormat":1},{"version":"f577f333d0679c82bbf346c3983de5f6e5730e264937021a506b13ab1cee5e52","impliedFormat":1},{"version":"47ec9752d4882a64ef06ce90067439f39e1f64831efb82d6b61a27e46c27665e","impliedFormat":1},{"version":"4550d4a71bfe8407890afd7c7953e4ff732e848e6569cd94fbf33b45c4339a94","impliedFormat":1},{"version":"79954720b311aed13a8b28effcf9f043816ff2a8f1887ffbc4f5ea604c3ab0ae","impliedFormat":1},{"version":"0c0f1398bc2cb82a901d38593309ab3e9a025718c31d2d41096373661fa943e8","impliedFormat":1},{"version":"ac994da1b115d9aed1ca0100a607032122ec0b1cac07436a3215e6c7f8c2ef2f","impliedFormat":1},{"version":"85a143aa41b4a16f8836a9c1059b84fcaf9380b37fb28624cc35b49bb2c834fc","impliedFormat":1},{"version":"b759e7b85c5337b457a1d61df4b47fb2e97665b05e666e75289d808f3aa4f1bf","impliedFormat":1},{"version":"fa36037b4be0f7c122eb03efb72e79c1799981028f6bfc6b8dea307c97f3529c","impliedFormat":1},{"version":"820fc91384a1b27caba7f2411a1535e9313bf46411e290b3480b030837c6f985","impliedFormat":1},{"version":"da7e68de00deb6259533046617b8a3cd35e61a1be103d0e0487584cef7f1da2c","impliedFormat":1},{"version":"ad4172e0e6d5be3841679dec15e80a2dd09d768a6936ae0df2c05c2c8d45523b","impliedFormat":1},{"version":"706230799de1bc03f4d1e927b0f535f4c9f74061b40138f5ade2e3a470b7f3ea","impliedFormat":1},{"version":"a09dc5f7d149bcbdbc83db02b54ba7cc83bda0148454782c41521e1e9a42233e","impliedFormat":1},{"version":"6fd319d50603e1200a24078e3e92dd1b17ff058681ef451dffa890ba8e84514b","impliedFormat":1},{"version":"2ad76a8f378c771219e4a1c9fc1fc6a66a4ad7192edc3e84a5e0cd79a806dbd5","impliedFormat":1},{"version":"bb40c13d89e52602b3af4cce60ccc46644e30cc2fa5f47d5c8d0fa645c85532a","impliedFormat":1},{"version":"8c2cb956a171e41734bf8ebf4308eac8e21025a4501d3729d0d378f6d259cd02","impliedFormat":1},{"version":"a6dbb9a79212baa8a46fdf91ab2b8210665d55cd739ed1668f109d1976f213f1","impliedFormat":1},{"version":"84dc7636681d2cd0ccc6a365e9123da5a0908b280b1cc485dc5d354a2ca79746","impliedFormat":1},{"version":"eb4f2a4043e45b0452ed473b674229d4a7fda48a8092b7e34d88188df0c8af47","impliedFormat":1},{"version":"95ebe1415645192fdf015b46b4c542bb60e736624bfee59559af8a7671016202","impliedFormat":1},{"version":"d19c66a5a7376840dc3811fa0465038e3e270fe2e9d0d17d1f0c1b2c27481b92","impliedFormat":1},{"version":"0e396f97cc7eae97b942cccbe7c17f60f8af207d8c4aa6c154267eaca86ab11c","impliedFormat":1},{"version":"f4c5d65fe7e93cecddd537d46af01820cdb9f72bb94b09c6309debbb50ad5ada","impliedFormat":1},{"version":"ff526238d3fbb56031ca203f8014f5e75077f04d842f441d2c050df01e849f7a","impliedFormat":1},{"version":"dad84d1b803af8326557fd1c7710ce845a6d590e462c802d380e9d947ec14c6e","impliedFormat":1},{"version":"5806973501dd13a50b30b3f23751f28d9eb8ee103228af39d07491e1de7484fc","impliedFormat":1},{"version":"a3caaf2245d2567ffdda491cbc817df385ef549dc186a39c2a3452daa07dc034","impliedFormat":1},{"version":"a8ff496bbaa5cf7145cc4ca8df03e2dc480bbe24dcbd1f9734200eb12d5aaad7","impliedFormat":1},{"version":"e236821607e4c3dc1adbdaca5cd7fe55ff8d19051672532639e76f045889e9ee","impliedFormat":1},{"version":"f9e2c40b4a0686af8576ad4aad9dfb9e62f5daf309101bc9956a497f38f92b39","impliedFormat":1},{"version":"fff48e97d33173e8b75b9a2b74ed71e6d0d3b7e4aa81b821a90c09a95e0423e0","impliedFormat":1},{"version":"928b23be870338067bbc9381ffb3de5cc3b088abe73c8e4995444fbabd7edaf1","impliedFormat":1},{"version":"a26d74bc8768e134734fa049d5a89fb674a560292f4bf1b39392416dc04cf49e","impliedFormat":1},{"version":"ea7f3d87bb25b8cf26c1b440de31b628c53b5e72e8f1ab1726356bf58acf5946","impliedFormat":1},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":1},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":1},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":1},{"version":"dfcf16e716338e9fe8cf790ac7756f61c85b83b699861df970661e97bf482692","impliedFormat":1},{"version":"3b3fe018cdd6ab5fc1c1b9de009f365e0d6653add071f5fcd383bc9a298cdcee","impliedFormat":1},{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":1},{"version":"f4a1eba860f7493d19df42373ddde4f3c6f31aa574b608e55e5b2bd459bba587","impliedFormat":1},{"version":"6b863463764ae572b9ada405bf77aac37b5e5089a3ab420d0862e4471051393b","impliedFormat":1},{"version":"ec69ebd1c4850514ebb6724911ad56e71caa0d076891ed6b67cb10d3ebbf2586","impliedFormat":1},{"version":"89783bd45ab35df55203b522f8271500189c3526976af533a599a86caaf31362","impliedFormat":1},{"version":"26e6c521a290630ea31f0205a46a87cab35faac96e2b30606f37bae7bcda4f9d","impliedFormat":1},{"version":"a51e18dc7e00eb6961c55b2a4ba4b70ab8c5cd601dc73337a0f5fd8292a5e944","impliedFormat":1},{"version":"3ff6e9ce7c3ad38dfe5165e90c826a27b289c9d0e7d9e934f654566867700fb7","impliedFormat":1},{"version":"f976134f9fc2369f6d4694eea7db6c2fb3c757ae5dbb047aeb06f02a21886443","impliedFormat":1},{"version":"d7e7199291e479bebe7f2bcefeba3498c80ce70c3b3440174fa211cfdab7bedb","impliedFormat":1},{"version":"233267a4a036c64aee95f66a0d31e3e0ef048cccc57dd66f9cf87582b38691e4","impliedFormat":1},{"version":"739fc10cb1f1c08f7578684ad660334e9617a81690d41d3dad234b3e4d5835b1","impliedFormat":1},{"version":"1af96cab9fbac290cbcaa07154ced5fb7a2b8bec02bcc6a34e77456d40fffc71","impliedFormat":1},{"version":"bed80e26fefb16b3eb7062e7878f38e1f0c0280fb61a6a608bdfb6dd64dbfc9b","impliedFormat":1},{"version":"39937ecb2516623611c287309f2b0e123fe5cb06d97487bb6fb6ec911e3ac652","impliedFormat":1},{"version":"9c171e2b0fa97a74c2437e746ea0127b49e6908e89ae6dc06ff238c3bc5c00fe","impliedFormat":1},{"version":"717cf65141e976becda69384a57148f4f6339ec04ff431ebb2ad19c558be4346","impliedFormat":1},{"version":"7f24ea5b058a109f8c9cf8f7711fb20cd2ead9817fa88415f94e47a108d9b149","impliedFormat":1},{"version":"3473f825e4648c65d597a0277245c250531c8fb946bdda179411e61a9eda50de","impliedFormat":1},{"version":"245125adc48737019481042b0e3dab6122528c1acc8933c5afd59e57dd2265cb","impliedFormat":1},{"version":"33f78f7ea02b6489407623b23b616dc8557fa8774c2e2528b33352c812fa1e68","impliedFormat":1},{"version":"e974b3d1188d8ecc1f08d82e9f03710005377d3a13d1af34bad5102aeb99a918","affectsGlobalScope":true,"impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"400db42c3a46984118bff14260d60cec580057dc1ab4c2d7310beb643e4f5935","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a37b8d00d03f0381d2db2fe31b0571dc9d7cc0f4b87ca103cc3cd2277690ba0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"afbe82d2b4857d674686255c44c8590dfe0b40927713876f875fdf4960473441","impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"d18f13c33148de7f0b1241734cb10dfe4c1e9505acad51ee48c3f4c1bd09e0dd","impliedFormat":1},{"version":"1cf82fb161af09ffaea6e23b9e319c760c136224a391fffbf0df3870433e11f2","impliedFormat":1},{"version":"8110e3abbdf7ee47ce8787813edab6dc79f6f178214ec0efdb9d5d0ebf1afd6a","signature":"081df8dd1109d4b1be003fc3e35beae79880eb7012992f432beb41ac97341ec2","impliedFormat":1},{"version":"7ef00db6015dea5c1c0c14e4974a87616695ce2c78934143d189853a398e2af3","signature":"1afb7e5024f4c7ced94c9b7efbd06967da114542851dc57085b2bcda83d1406e","impliedFormat":1},{"version":"8a490c241435125c6ae8ab6cfbca88de697726191f25f8c09fd378314576c806","signature":"b37cc76c2787c14293866b0a7a616c67e7ec8ac740a3d96c906259e83deaa145","impliedFormat":1},{"version":"d3e6842cfef26390d76cc1bbbcf1c3fdb306924ec76626003a2e16c70e3baf1a","signature":"9398147c02a5a6e1cfa1056ee3ee617c15db397244e372907542229e222fe92f","impliedFormat":1},{"version":"6fdca0b5481f175fd0600d021f2e842c7edffb5e1a4aae7b4f62a85659e6c640","signature":"215277ca189beae36fcbd2792c295f6fab4fea459a1688671605387d0aa9b9f9","impliedFormat":1},{"version":"049cf34dff60d9e701f134c66e0a1c620576df35d7251e70c9877db562067ba6","signature":"71b2d126e939c1ce534264d8bdaccc9f4444eca1afa3649732c383c69386e522","impliedFormat":1},{"version":"3684b02f98e890173229c2f140eeab5e9d15053c831fd276269d4f38d844c64e","signature":"4fccae5d922d4186b7a8c9dbd236f57593b600a056327d79b000d6acc592f4cf","impliedFormat":1},{"version":"2d327f300226ff08a24487e8cd8f8907486c3fdbe82093fc4299f3cda9308735","signature":"051ace40248ab48179838b720dc626daa82a0e03d8fd3076afffc537d7c43ad4","affectsGlobalScope":true,"impliedFormat":1},{"version":"57306bcd9e27c0066fd4960f47778ee3bfc3baadb7a804203e3bcbc07e1e8473","signature":"a97b75e1aa9ba79ca70be9447e9df2eb39bc0bafcb74f566f9a6a652e7c86b79","impliedFormat":1},{"version":"0f6eaa7bc8029e73058f9994d2b5083e0dcdab0a207397dc3446d82df6fc9a51","impliedFormat":1},{"version":"0ba4ae0808c4f9aff6bc8ad71680861aa124b2fb7579e648eed262a5bc6bfd4f","impliedFormat":1},{"version":"ef28deabba43cca7acfaf6f5d75a7ef65342c95c42e13abe0d60d70f2ada113d","impliedFormat":1},{"version":"22dac6bb7d3681dfc86509727deab4d3593ed81fdd1156ffe0f3196414372624","impliedFormat":1},{"version":"716388fac8967b1479097de38a9ecafbb06f65d479d80221c3cdf80c6b03bf8b","impliedFormat":1},{"version":"485ce84a2e2c29a7f50819be204670d079d4cf87fad634d025181872b66c10c4","impliedFormat":1},{"version":"8571d0d500038b851e99ea611fd51c41259550685a7afca8a921732ff758b01e","impliedFormat":1},{"version":"23028135160c7b164e6f09317ff80168b688ae150bd9a99954b3f8840a8046fd","impliedFormat":1},{"version":"f1faa3bad5cd9e57221700c0a25a306bc411971a00cfee559ad93e23f7ee663d","impliedFormat":1},{"version":"a11f87984c9661ea33da75c9582545900f2c900c6663b766518f8700a2e443ef","impliedFormat":1},{"version":"f91a7d05afb252a08ff7c867cbdf3d2a45758e28e3fd272a4c77ba2c940251a1","impliedFormat":1},{"version":"82b59f6e26149c9daee7d25458a8e92d9a6e831ff30c345c01ed7438c4b73fbb","impliedFormat":1},{"version":"daa771190928d0a5fb9d18135397087d63d13f23ebe899a9f2b72416492e1e75","impliedFormat":1},{"version":"7f9835185d1d2404c9a83bf516340f3ac0cd79f9363d4e48195ac6f70b8da62f","impliedFormat":1},{"version":"85d4be2bac99c440d93113d1613163bf3c8f11b5bd9112d3a26d9e16376cdc76","impliedFormat":1},{"version":"73e0fc700725b01d37fd169d71a6bcecc6a46c2ff81d5cc9f6b25eaf809c9889","impliedFormat":1},{"version":"00b5d0e3c24ce1d3f9feaef698b746fec7ed3594a69620e19b2f2dbe37c334be","impliedFormat":1},{"version":"3d52b11e160b46cc21959f96603225f203c05be09937bd158015ba3842659f9f","impliedFormat":1},{"version":"0a077f4a3167699a2641066e601f72de9473f36a7c8b82837388864e7eb607aa","impliedFormat":1},{"version":"8a15aa7c47b0bd7de370741ad2e918fd05a246166f2dd407673dac7ca2d3d36b","impliedFormat":1},{"version":"fffa755863c80aa266c9723381923cac427e737fd265e3a179c61ce0dd5ed3d2","impliedFormat":1},{"version":"b9a34c74d148a26614c30051c17bd98437c84b7202da3693bbb4138af453591f","impliedFormat":1},{"version":"0fed0e7547e58a507103a3798a3dbd704635abe6c5f1e12fd0be31ab8751c5f7","impliedFormat":1},{"version":"031be0c1405e8129404b2dc82894d7fffae8e3b8e7ea0890f3f18b07501132e5","signature":"33577734ee3acddcc3c015090fe6ce6ed3638e22eeb5647f291cbfd81a707489","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"bd1586cd0ce05d2acb582596d81dfa433d96cd81bfed6bf4e75445e755f27a26","impliedFormat":99},{"version":"fbdeada267fe6c0ee05b03ff761147ac2c7484ccf8aa5be8540bf13e50537543","signature":"c04c781355979c86de6e8f9561ad6bfa289dca866eebbba0a0371901d82e3a83","affectsGlobalScope":true,"impliedFormat":1},{"version":"4793f0912df98155da0f0a0e36a388c524fadb6767c8077e453f115b2c5ef278","signature":"ea951e2aee6f35e90cd6b38a66e8e660d2a02c9daa88e654c98000cc98aec91b","affectsGlobalScope":true,"impliedFormat":1},{"version":"c68eb17ea7b2ff7f8bcfe1a9e82b8210c3112820d9e74b56b0fbecaab5ce8866","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"a6613ee552418429af38391e37389036654a882c342a1b81f2711e8ddac597f2","impliedFormat":1},{"version":"da47cb979ae4a849f9b983f43ef34365b7050c4f5ae2ebf818195858774e1d67","impliedFormat":1},{"version":"ac3bcb82d7280fc313a967f311764258d18caf33db6d2b1a0243cde607ff01a0","impliedFormat":1},{"version":"c9b5632d6665177030428d02603aeac3e920d31ec83ac500b55d44c7da74bd84","impliedFormat":1},{"version":"46456824df16d60f243a7e386562b27bac838aaba66050b9bc0f31e1ab34c1f2","impliedFormat":1},{"version":"b91034069e217212d8dda6c92669ee9f180b4c36273b5244c3be2c657f9286c7","impliedFormat":1},{"version":"0697277dd829ac2610d68fe1b457c9e758105bb52d40e149d9c15e5e2fe6dca4","impliedFormat":1},{"version":"b0d06dbb409369169143ede5df1fb58b2fca8d44588e199bd624b6f6d966bf08","impliedFormat":1},{"version":"88dfdb2a44912a28aea3ebb657dc7fcec6ba59f7233005e3405824995b713dac","impliedFormat":1},{"version":"23d7168f75797443d2c05542d1ede64851b2cf14d713dc078febb0c6538b4ba0","impliedFormat":1},{"version":"d9aed3df3f4a1e42a18d442c85950f57decf2474a062f01ab9bf224c066a1d1e","impliedFormat":1},{"version":"c3886d64fc80d215640d9fbffa90ebfd387d8eb012243dd044c9810d9f33b136","impliedFormat":1},{"version":"6e50b2017454705ff94359fc0a2daeba2fa19c133f2f204213d33deed52cf7b4","impliedFormat":1},{"version":"5ffe93378264ba2dba287bce8eabc389b0bfe2266016cc95bd66b64c5a6492a0","impliedFormat":1},{"version":"7ca788d6efb81cf64221b171bbeadc65491fe2e0fc2918efe3ecdaca395ea748","impliedFormat":1},{"version":"da35d6a8ee45e3349b4d577148bdd20c9b29862872e3c40f5d428c32557e5e0c","impliedFormat":1},{"version":"62941034216275e4541d6cfeeb80ae805fcc9639582a540bab4252554f3a613c","impliedFormat":1},{"version":"13aeadb616f9d2b44ea9da3cbfca62e70d30eb616c35425b78a2af3c3bc65b30","impliedFormat":1},{"version":"6ba418e319a0200ab67c2277d9354b6fa8755eed39ab9b584a3acaac6754ff7c","impliedFormat":1},{"version":"4fe80f12b1d5189384a219095c2eabadbb389c2d3703aae7c5376dbaa56061df","impliedFormat":1},{"version":"9eb1d2dceae65d1c82fc6be7e9b6b19cf3ca93c364678611107362b6ad4d2d41","impliedFormat":1},{"version":"cf1dc1d2914dd0f9462bc04c394084304dff5196cce7b725029c792e4e622a5b","impliedFormat":1},{"version":"4523dfd2dda07c1ab19f97034ba371f6553327b2a7189411a70a442546660fd6","impliedFormat":1},{"version":"2e5afb93fc3e6da3486a10effebc44f62bf9c11bec1eebe1d3b03cae91e4434c","impliedFormat":1},{"version":"a8a3779913ddff18d1f516d51bec89f5e3eb149928b859ad3684fae0e10fb2d3","impliedFormat":1},{"version":"a87090ce4dff0ec78b895d3a8803b864680e0b60c457f6bba961892a19954272","impliedFormat":1},{"version":"1991baf0ed3c21f4db584389462764d0519353ef477406f7e4e783c2b2408750","impliedFormat":1},{"version":"388ac09a64783588f92a7787237c2f8a417f402ef8605f154977c395a054b6bc","impliedFormat":1},{"version":"bbd0fce6da05dd72dc1f7c23e31cdcb5088e18f66a5e54450b28de31cfc27ce3","impliedFormat":1},{"version":"c059d7e5d3105a9067e0c0a9e392344a9a16b34d7ce7e41cea3ae9e50e0639f0","impliedFormat":1},{"version":"feeb4514da40bd3c50f6c884c607adb142002b3c8e6a3fe76db41ba8cce644ad","impliedFormat":1},{"version":"e3b0808e9afa9dce875873c2785b771a326e665276099380319637516d8d1aac","impliedFormat":1},{"version":"7247fd1853426de8fdc38a7027b488498bb00ea62c9a99037a760520e3944a26","impliedFormat":1},{"version":"0b6a84d1c3a325b7ed90153f5aad8bf6c8a6fba26f0b6385503218cae4080e25","impliedFormat":1},{"version":"1fadd13460f0bf9e3ca9f9547ba2f422815b413219a148daea0ed999929d3567","impliedFormat":1},{"version":"7e69d416bcd7ed2de96b68192ef3428ab9f0030b5c22ccab5fb94f0559944c8f","impliedFormat":1},{"version":"c118188652cfabf30142e24ac112bcf9e05a80cbd25e60f34bf29746e2358d1e","signature":"ae703a66d8cc760eabbc2a0afe7fd00749f3612d36e732b8d89893809b6cbcc0","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3a6672ef484dc0516eabb76ee1b06d0d4dfd2576d715139e01b69bfc701ae30","impliedFormat":99},{"version":"6024e94b0c68b4092949f8a240398c51e7a6e3af55056064b8aa5db0bc7cf903","impliedFormat":99},{"version":"affa3ed45d5647f930f2bc335d51fbf6bc67cc0035e1c3e7a899b6ee347efc7c","impliedFormat":1},{"version":"72c0c2d2a621ee1c9c8676da0fb95d60da2fac306ff69c28e77815d192a4d05f","impliedFormat":1},{"version":"b3f5c18e3f40c78ac6cb98be36789242e0c218f2ad23d1121dfc6164546a9b4c","impliedFormat":1},{"version":"25d490c7b28a3358f6ec70f76334966775d446dc30ba36db3f3d58f289907b00","impliedFormat":1},{"version":"7b6c7ffb68dc666edeb3f648c207c80d00b42ff6d22bf10a4ce0628982418b7c","signature":"60c0971c8c6a1000be2cceabef7d431d678f493e8161c74001b0cb71c9be38c8","affectsGlobalScope":true,"impliedFormat":1},{"version":"d41393eec4438dd812940c3efa292499b3031d31b1d8d4d72a269b95b341f3cf","impliedFormat":1},{"version":"074388271346577d825792a48a86992091d913aaf31c9b5ea3cac25bd474c45a","impliedFormat":1},{"version":"984c26e8864dc326bf6f7a72f89625b3facd86a901d406b7e54aca3d6ef9d674","impliedFormat":1},{"version":"07af913df1d81e6d4c963ceea4d5deedc0b49e91f1cf14283976b19d3b2caffc","impliedFormat":1},{"version":"7b7ff39f07939974bf05d962473edf639147545fae61e39ae6734a4ede55b008","impliedFormat":1},{"version":"5c9b631fd684665b7ab77aadfae34060a03e049bf2b39166a4e3878a2fe978dc","impliedFormat":1},{"version":"65783c6213a9709a5b28a29e8c6602aa4f441fcd3428e5ef30c7d42ed762b34c","impliedFormat":1},{"version":"6d5b33f862a60d8a3ab06dbc703679a5fb1c7cc15d04fca31eda60244f8548e6","impliedFormat":1},{"version":"90195f314de6f89ab09c81406d3d4b5cfe684520f237e3f89941ba4c70d3383a","impliedFormat":1},{"version":"3fb52d31b8bcd5d78ce4d849e1fcefd5fbc5106dbf393a61c2e4c2c9ec936057","impliedFormat":1},{"version":"6f57d264fbb19264ae5aebe606037360c323871fe0287255d93ed864c8baa04d","impliedFormat":1},{"version":"b98e9017e21e894141be4c1811052825875a8f97f7a86fd9c8a9991f3b99cea4","impliedFormat":1},{"version":"ca3251ff37b9334ebe11efe63afb88c9f15cc4d6921456a86d697fc93d185d7f","impliedFormat":1},{"version":"3d70943897bc336fe28c721b463bab2fcda5def22457ea7881e7cd436c79bc34","impliedFormat":1},{"version":"84a488c5fe017f799e54ff0fda5eed362f01553ae989548ded98865cb3930c51","impliedFormat":1},{"version":"69804cd696f09a0a877bc9753a0446cd3f625849026a54c9e20a2f9c544b9d61","impliedFormat":1},{"version":"ac944faf4e74128595eefd0cc96a0a06f9005365b626091c60854001cbcfa5c0","signature":"0c2154fdaf1678880f13464e3ee05c2a4097c4253e4a2add0a9a89b67370354a","affectsGlobalScope":true,"impliedFormat":1},{"version":"87f287f296f3ff07dbd14ea7853c2400d995dccd7bd83206196d6c0974774e96","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"6847334317c1bc1e6fc4b679b0095bbd2b6ee3b85fe3f26fc26bac462f68ef5e","impliedFormat":1},{"version":"2224f3072e3cc07906eeed5c71746779511fba2dd224addc5489bcdb489bdee5","impliedFormat":1},{"version":"fbf802b3a028f5eb22ad406ee5fc7c368f0acfd3a2a6d0f805120766f5717ec8","impliedFormat":1},{"version":"0504070e7eaba788f5d0d5926782ed177f1db01cee28363c488fae94950c0bbc","impliedFormat":1},{"version":"7e8d3f08435ad2cefe67f58182618bfc9a0a29db08cf2544b94cbcae754a9bd9","impliedFormat":1},{"version":"8cf9b9045a614f883b623c2f1a631ec6a93321747e933330b2eec0ee47164a34","impliedFormat":1},{"version":"d86d3470d8b9b63fedb10dcc6af7e8c798e3524acb45722adc9b1faa4d579096","signature":"ab62444ce0ea2b41a0b3eeffc7bd9f57cc9f57021f808024629d14f8aee983fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"78ef0198c323d0f7b16f993ada3459f0e7e20567e7f56fe0c5ee78f31cb0840c","impliedFormat":1},{"version":"01dea450d742aa55ce9b8ab8877bbda8eb73bf88609e440cc34f6f59f35080db","impliedFormat":1},{"version":"5ec614ed82e045de15417a47e2568be5310d43d4764ee43d295ea38caafbfd17","impliedFormat":1},{"version":"b788ef070e70003842cbd03c3e04f87d46b67a47b71e9e7d8713fd8c58c5f5ec","impliedFormat":1},{"version":"583d365dc19f813f1e2767771e844c7c4ea9ab1a01e85e0119f2e083488379c2","impliedFormat":1},{"version":"b82fc3869c625b828dd3feac4b5ebf335ed007d586dc16176602db73bc4e7c65","impliedFormat":1},{"version":"05e30605274c26f405c411eebed776fa2102418c05beec885e5c9bd0fa716f32","impliedFormat":1},{"version":"58c7f7820dc027a539b0437be7e1f8bdf663f91fbc9e861d80bb9368a38d4a94","impliedFormat":1},{"version":"d67d6b779d0dece9450d7a4170d3ee58ea7fcae0af2ab5e1d0ad711474b4f7f5","impliedFormat":1},{"version":"1066c11177d085898185548e1b38ed15fcea50061508f7c313ab8bec35d46b95","impliedFormat":1},{"version":"bbc49fd9dc6ee162ba3d270c834398e0c1d44e657ac4edfa55ac837902b7e0da","impliedFormat":1},{"version":"6993f360de4984b6743764fad3b88246d5dc6cfa45567783fc23833ad4e50c13","impliedFormat":1},{"version":"f11eb1fb4e569b293a7cae9e7cdae57e13efc12b0e4510e927868c93ec055e82","impliedFormat":1},{"version":"715682cddbefe50e27e5e7896acf4af0ffc48f9e18f64b0a0c2f8041e3ea869b","impliedFormat":1},{"version":"6d2f5a67bfe2034aa77b38f10977a57e762fd64e53c14372bcc5f1d3175ca322","impliedFormat":1},{"version":"4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","impliedFormat":1},{"version":"33859aa36b264dd91bef77c279a5a0d259c6b63684d0c6ad538e515c69a489ec","impliedFormat":1},{"version":"33fa69f400b34c83e541dd5f4474f1c6fb2788614a1790c6c7b346b5c7eaa7dd","impliedFormat":1},{"version":"be213d7cbc3e5982b22df412cf223c2ac9d841c75014eae4c263761cd9d5e4c0","impliedFormat":1},{"version":"66451f9540fdf68a5fd93898257ccd7428cf7e49029f2e71b8ce70c8d927b87a","impliedFormat":1},{"version":"8a051690018330af516fd9ea42b460d603f0839f44d3946ebb4b551fe3bc7703","impliedFormat":1},{"version":"301fb04ef91ae1340bec1ebc3acdd223861c887a4a1127303d8eef7638b2d893","impliedFormat":1},{"version":"06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","impliedFormat":1},{"version":"fc26991e51514bfc82e0f20c25132268b1d41e8928552dbaed7cc6f3d08fc3ac","impliedFormat":1},{"version":"5d82bb58dec5014c02aaeb3da465d34f4b7d5c724afea07559e3dfca6d8da5bc","impliedFormat":1},{"version":"44448f58f4d731dc28a02b5987ab6f20b9f77ad407dcf57b68c853fe52195cd7","impliedFormat":1},{"version":"b2818e8d05d6e6ad0f1899abf90a70309240a15153ea4b8d5e0c151e117b7338","impliedFormat":1},{"version":"1c708c15bb96473ce8ec2a946bd024ecded341169a0b84846931f979172244ba","impliedFormat":1},{"version":"ed0f5e1f45dc7c3f40356e0a855e8594aa57c125a5d8dfeef118e0a3024f98ff","impliedFormat":1},{"version":"dc187f457333356ddc1ab8ec7833cd836f85e0bbcade61290dc55116244867cb","impliedFormat":1},{"version":"25525e173de74143042e824eaa786fa18c6b19e9dafb64da71a5faacc5bd2a5c","impliedFormat":1},{"version":"7a3d649f2de01db4b316cf4a0ce5d96832ee83641f1dc84d3e9981accf29c3a1","impliedFormat":1},{"version":"26e4260ee185d4af23484d8c11ef422807fb8f51d33aa68d83fab72eb568f228","impliedFormat":1},{"version":"c4d52d78e3fb4f66735d81663e351cf56037270ed7d00a9b787e35c1fc7183ce","impliedFormat":1},{"version":"864a5505d0e9db2e1837dce8d8aae8b7eeaa5450754d8a1967bf2843124cc262","impliedFormat":1},{"version":"2d045f00292ac7a14ead30d1f83269f1f0ad3e75d1f8e5a245ab87159523cf98","impliedFormat":1},{"version":"54bcb32ab0c7c72b61becd622499a0ae1c309af381801a30878667e21cba85bb","impliedFormat":1},{"version":"20666518864143f162a9a43249db66ca1d142e445e2d363d5650a524a399b992","impliedFormat":1},{"version":"28439c9ebd31185ae3353dd8524115eaf595375cd94ca157eefcf1280920436a","impliedFormat":1},{"version":"84344d56f84577d4ac1d0d59749bb2fde14c0fb460d0bfb04e57c023748c48a6","impliedFormat":1},{"version":"89bcaf21b0531640604ca9e0796f54a6e1b4e2d43c07422ffa1e3d2e1bb0e456","impliedFormat":1},{"version":"66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","impliedFormat":1},{"version":"35a0eac48984d20f6da39947cf81cd71e0818feefc03dcb28b4ac7b87a636cfd","impliedFormat":1},{"version":"f6c226d8222108b3485eb0745e8b0ee48b0b901952660db20e983741e8852654","impliedFormat":1},{"version":"93c3b758c4dc64ea499c9416b1ed0e69725133644b299b86c5435e375d823c75","impliedFormat":1},{"version":"4e85f443714cff4858fdaffed31052492fdd03ff7883b22ed938fc0e34b48093","impliedFormat":1},{"version":"0146912d3cad82e53f779a0b7663f181824bba60e32715adb0e9bd02c560b8c6","impliedFormat":1},{"version":"70754650d1eba1fc96a4ed9bbbc8458b341b41063fe79f8fa828db7059696712","impliedFormat":1},{"version":"220783c7ca903c6ce296b210fae5d7e5c5cc1942c5a469b23d537f0fbd37eb18","impliedFormat":1},{"version":"0974c67cf3e2d539d0046c84a5e816e235b81c8516b242ece2ed1bdbb5dbd3d6","impliedFormat":1},{"version":"b4186237e7787a397b6c5ae64e155e70ac2a43fdd13ff24dfb6c1e3d2f930570","impliedFormat":1},{"version":"2647784fffa95a08af418c179b7b75cf1d20c3d32ed71418f0a13259bf505c54","impliedFormat":1},{"version":"0480102d1a385b96c05316b10de45c3958512bb9e834dbecbbde9cc9c0b22db3","impliedFormat":1},{"version":"eea44cfed69c9b38cc6366bd149a5cfa186776ca2a9fb87a3746e33b7e4f5e74","impliedFormat":1},{"version":"7f375e5ef1deb2c2357cba319b51a8872063d093cab750675ac2eb1cef77bee9","impliedFormat":1},{"version":"b7f06aec971823244f909996a30ef2bbeae69a31c40b0b208d0dfd86a8c16d4f","impliedFormat":1},{"version":"0421510c9570dfae34b3911e1691f606811818df00354df7abd028cee454979f","impliedFormat":1},{"version":"1517236728263863a79500653cc15ceb286f048907b3dba3141a482ca6946bd7","impliedFormat":1},{"version":"7c7b418e467a88a714b4c6dac321923b933f82875f063f48abf952021a2c2df1","impliedFormat":1},{"version":"33120063a7e106818ce109be9238569edca74d4e8530f853bd30d298d1375fd8","impliedFormat":1},{"version":"60ff18bf41b7b6293a6f4038644952b8a7ad3b1d0a6588d8ef0c735d0a69d605","signature":"370a63f01c5f7c0767cfb9309121077ca905c729626e018664fc02a6c2927f40","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"7f15c8d21ca2c062f4760ff3408e1e0ec235bad2ca4e2842d1da7fc76bb0b12f","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","impliedFormat":1},{"version":"fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"63786b6f821dee19eb898afb385bd58f1846e6cba593a35edcf9631ace09ba25","impliedFormat":1},{"version":"ff954afaefd9bd5fad03678cae63fd23e0aaaf4d311b27bfb35e1d6d83833997","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"818e7c86776c67f49dbd781d445e13297b59aa7262e54b065b1332d7dcc6f59a","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"cee62e64fc4bdfb3798ab8e21486fadd2027ce4128349989acc63905366f91c5","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"ee736931bcb117efdd2118795ccfa4b2d0beb8fec426f91ae448e51b03510707","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"9068fb04d9df0cb5de85ced5c4d70a935096c4cb289ab76b038e0a2496c92503","impliedFormat":1},{"version":"1f2bcc8836f72a2ff7a6804dc5379e9b73bf94a51d8e60c43cf5b874b5f4f6ff","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"100985057cdd198e32b471b9c92a39080e5e50720b2cb290d04ddf40fbe71c84","impliedFormat":99},{"version":"333d9b9067c0213cd7b275d1d78bab0577ba31ef7a63306ab65a74e83a546a65","impliedFormat":99},{"version":"85566a0b81339b43e063f5cd8cc49a9b9bc177bc5ad3ffd5e4874700040ec11e","impliedFormat":99},{"version":"c2688779f6804c3bc6dfa33d05a810464c684a74f92aee6b0f0d4bcd7dbeed6d","impliedFormat":99},{"version":"16331f489efb6af7d06037074020644d9175f70a7a6466d926f63e74af5a77d8","impliedFormat":99},{"version":"2b2b8b64b39f152439ecb9f04b3d6c1d88d35c75bf14a4eb98f1cc791f092366","impliedFormat":99},{"version":"395548b309c8fe9ffadd8b1055898fffa29bd28ea1f8079f33e48a65601589e2","impliedFormat":99},{"version":"e38871affeac7cf4dd4cc3a55714ff38d55f137c30788d30e454a6e3058f36bc","impliedFormat":99},{"version":"783a0f8fb88d659272c1ac541719e32235881815705b44fb63b6af579885ea75","impliedFormat":99},{"version":"6a60957e322c4c060ddf3073130cbcbcbc5e639e21cd2279df43184bfa8cb9a3","impliedFormat":99},{"version":"5b353617eeb8a37c7a9497ebaeacc027bd7487eec10ffbebca41dcdc2634af70","impliedFormat":99},{"version":"cedbd20d98f3fd7c1fa00742292ab5b13c3fec266ae41b90c47b716ef06cd983","impliedFormat":99},{"version":"9713bcf79cd728919262a2a543484a5f9bd24a15cfec1cee096d9d17a9f5524d","impliedFormat":99},{"version":"35fb129972553f809a7045f3cb952c2598299548018a23238304c020cb16945f","impliedFormat":99},{"version":"855b0379a6b6e96eda055cff16da442b4a7a4548101848b9ae48bce22879569e","impliedFormat":99},{"version":"ea2ac8d236dddbce748dbaffcaa1bfcadae6fbcae1fd0a67e17d5e35d5e38dfc","impliedFormat":99},{"version":"a7750935d6a1cbd259861b5acf1c912f9d3b10efd8602f61fc858f04f261595d","impliedFormat":99},{"version":"e0aa3276d014f3c798dd3101af8c8545b56d79665a7a982b4cf6fe28551a3b56","impliedFormat":99},{"version":"ea744987345eb5ae036495b0185e95eeb7d2d999b0ef80265f79434e83863e9e","impliedFormat":99},{"version":"c3bc54ba21655aaf1db5bb97c42f56bbfe5a3a3c40e3884ef3ba2cdaa9f34c1f","impliedFormat":99},{"version":"705917c38d2e92347b5e57c1c6007da46f1005874ef2257cc8dfff59cba4710f","impliedFormat":99},{"version":"40925b4938b527a6267b1fe56a2e97cc52ea9d73eec90ea8e05df773a182101e","impliedFormat":99},{"version":"2930156137f4885c3ad168804c557edfc9bb88ae0e1df487f4adcdc771286ad7","impliedFormat":99},{"version":"b63e990c632eeee9375c2c43bbd5cdcb23418b79edcb57afa53edf4dd597b33c","impliedFormat":99},{"version":"721dcf072e75b71b5ab7a0bbbd6578f908c36a0bfaefa1454d3e43938bde67a5","impliedFormat":99},{"version":"5704f5ee2642dd0b810bb07ce6e4e51319ed4d6db78747ff54675e72c3fede06","impliedFormat":99},{"version":"da2be38a98356fdd540580a68338df2d2450ec071b1cb5bdbfe8e52075ddde9e","impliedFormat":99},{"version":"3af0bb87094d80e20b0d451626eef1e2da701891c41998ac0a6a6c91cff86f74","impliedFormat":99},{"version":"30a211e9de0dd587f8c690f9ed9378c15c79bcbe762dd85a61c548e5058c3fd6","impliedFormat":99},{"version":"a7cda498cd929d2f958ce49abbaef1abf999ec40884a04cd28ff34317d844e54","impliedFormat":99},{"version":"e48b510f40f29a89d9dbe19a9fca96d7f02b721aec6754fd5c242f9893d06508","impliedFormat":99},{"version":"30d88e2e7c4ca1cdfeb37cf05a2d7a351c68b14ac472e6238401ecb7b75686ea","impliedFormat":99},{"version":"03b34718c02b6225c2f7d7c374cb701ab04461a5cfa66d150531c9f31e39da49","impliedFormat":99},{"version":"7dfe7da785eafad3e3d0cc66545e97f1acf934ebe5b2ec8f4a34341a9ca76ed4","impliedFormat":99},{"version":"8c7829855345152b7b3c196e82147153115d5b568ff97be0e40d161e8d9d2f51","impliedFormat":99},{"version":"f30a36ff98b099ea8c635146dfdd1d810bc14ec303acb653ca938445047b0e41","impliedFormat":99},{"version":"07fa63aca536ca8d8d8c6a56eabcf77f746609921fe23d780a69e2c0a2a65701","impliedFormat":99},{"version":"c8fe48c4437d4ead0a841128d179f8bb99e0e38f9ccb80ca6be14833e30bc129","impliedFormat":99},{"version":"5eac3facc9f59e960c00f41502b34a908776cfba6d7e1a5a4ead5030682b7434","impliedFormat":99},{"version":"d44f8de16b9c6ef4ebd88d4162bc24942bee9975f88162a8962bb572e62dc5df","impliedFormat":99},{"version":"0251c18e8c863bf5ef510043644299aceab6debf3d87aab8c8cfded5aef7d6af","impliedFormat":99},{"version":"292f7dc6b4be74f148f5e5b57b9e8a7f515d7d4f6183d3f9162e127e50959ba9","impliedFormat":99},{"version":"c1608d867d6ddda5c0f4736cf4959e2b2c6bcda660c4c72f7feb36b3998df2bb","impliedFormat":99},{"version":"02d77b0d27ecb78e28d3a376c6cdce05fabcf58f2fd01c102f031d8e375191da","impliedFormat":99},{"version":"daef84b3b89e60054fab1abaafe38eda673f88abdedc3920015d61f1cc5358b8","impliedFormat":99},{"version":"f3318054dc392b6661785263095ed8f1555f0d8f3ce534c8c2de8895b4ec7bd3","impliedFormat":99},{"version":"6c3aa7e0c4eb4d8d7fc24df037980369e70a28f9237cae77511b4cfc6a1b74d0","impliedFormat":99},{"version":"ecc7e0840690cc4b9a2587a4f550b292c35d36150c6c108803bbdfc3bead5b91","impliedFormat":99},{"version":"e11a23b343084cdec24d718fc64369dc8b6dece71314b41d4b5938f2a568834d","impliedFormat":99},{"version":"ce678766176812e8eda3f4925304d4159d806f50fa8a93a72da56e95dae8bbc8","impliedFormat":99},{"version":"bb21d35a36dc1db80a2cf29383bb7304919708cde205bbe246ec47176336e255","impliedFormat":99},{"version":"df657f732e32af7c7550da93e66dfdfa142fc1282b4a392ec78fc9aefbd6fdd0","impliedFormat":99},{"version":"b20ef0766a8a578e5c542aafaa8c53b7e2b0e32a5522f9cf18bc021a81d54dd7","impliedFormat":99},{"version":"9ea0cd8a367cab9b1c632740d1bd998f8c4dbbbda4505f47bebd38a46afbaaa6","impliedFormat":99},{"version":"97980bb49a7e4b15df6f988f914070c831a39426cd9a29a6f7a9af82f397b28c","impliedFormat":99},{"version":"3ddf05b5259b9a0e2b1da1559585655202670e1f78396b4d4efccea0195a41b4","impliedFormat":99},{"version":"1e99c59aadb1af6d090976ade8280ea37208e8f064f79e9a18231fe5b7232890","impliedFormat":99},{"version":"c7ee77eec320d6312899cd8c16484c82b98385e175c57ff00d49cc5a2c291e0d","impliedFormat":99},{"version":"b38d9a4927465a8a5d1ae84e00d323bedfc7f5e77f4bc360078c6f283b964acb","impliedFormat":99},{"version":"27d6b338ff280dc86ff167217c29d7e71b52bd25a3c3b8eb1f5a56c887571d00","impliedFormat":99},{"version":"da60046c4cc6b018869ea8fc71a7b7bf5591d9f5d90ee52c4a614ecc69ff3433","impliedFormat":99},{"version":"8bee1fe0b3dd1b324f08189d81e55f9952007ce2304df07a15568b821b7e524f","impliedFormat":99},{"version":"a3dd2d53781729214a67f4b91d9a65d5310c1bbdcd0595789a5152a493cded91","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e20fc6cca2cf901917bc09c88bf9ee380383717ed990900aa99962ff9e3f786","impliedFormat":99},{"version":"7410b87e621ce92f484a13dfbe72069a6470fb72cc418df865f31b601193595c","impliedFormat":99},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"c96ac2cf9b266d5606f79d99191e3e2c2bede081f60aab6377d16b1e73841429","impliedFormat":99},{"version":"30a4dd54f1f39dee17bafcc0fb9a877932d607d8f24d3f1ac7f8998cf07f2649","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"ccb5f2cdd46a60b0aa3b43aeeac9f0d499640f589806f2486f35ff8a9565784b","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"5e8c09adb8be1b932100a9374cb0f8def9dda6a16a973e91c2322983ed669dd9","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"cc89688d19046618e7f88ea7c25ff04560d939902bf49e60bd38fb4662e38b5b","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"fc67adfb454cf82752ab00e969d14a95fa762f55c34e25327dc77174b0d5f742","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"bc79bd6403aa643e99c8e6733d5a8c7bf214e4528e79c882e77e9e441049e45e","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"8fa1dc3b4a2f43c688f6f4cf1721e1d26d641ef322c14adac867ecfa41aa2109","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"2d9ad35b54c1413e9ee0e74945cd5c8a99516c1fbbd0a12f673c75073436a931","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"23e028cc298226d1f8e87d57950673b3a19b91f23538ee9287d52e77540af8cf","impliedFormat":99},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1},{"version":"b95f2a78de34a873c6dd76dc538b7a5fec77da6a0e0e7efc7aa58f58ddfce270","impliedFormat":1},{"version":"1231f32d791b0fcc13e0c836543b34e83dea6e0b494ee35194a66a50dd25427e","impliedFormat":1},{"version":"66880e558be5ee57d23c12ffd0a90bf07840e088f8fa9b608fadeaf45af78969","impliedFormat":1},{"version":"058186f212307a621cd51160e2124c26208649600b4f0a27835f1d1caae81e65","impliedFormat":1},{"version":"c2bfeeadb18ba18386d7549a69c2049e57f31758b71343543a5c27919197b0fa","impliedFormat":1},{"version":"63b0be497f88d815c410b76985b798132d6c470199f2f31e1390a48480619758","impliedFormat":1},{"version":"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","impliedFormat":1},{"version":"95a31f8eea43d175dfeda85accc45bddce5678acae4e22e2f683b48e0e0188de","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26","impliedFormat":1},{"version":"a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"c21e3729094ed9ecdcb97724ce5b20625bb9ac3b9146d681cafa97d667c12bb5","impliedFormat":1},{"version":"5adf3c3c7204b3614dbc585681a33ef598c68df387298859f9a2521cfb449437","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"bbf7c864f1ffbacf54b524d028b6a77da9f0be0b8fff5c088e3185ee50496762","impliedFormat":1},{"version":"9df147746b0cbd11d022b564e6fdd43ac79b643dc579d2123317ee01cc4f0d70","impliedFormat":1},{"version":"fa244c20411dd53d853ce4b85e7146860be364946da477dad721e66301097460","impliedFormat":1},{"version":"fab2754e047c7818a8eb650cc2194aef4388193acdc4606eb601cb60923f7798","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","impliedFormat":1},{"version":"041597c12abeaa2ef07766775955fc87cfc65c43e0fe86c836071bea787e967c","impliedFormat":1},{"version":"0838507efff4f479c6f603ec812810ddfe14ab32abf8f4a8def140be970fe439","impliedFormat":1},{"version":"f67c92f5cb2bf5a9929ee73216f08749db4f22b04a18e5205ed6e75ca48e9feb","impliedFormat":1},{"version":"7212c2d58855b8df35275180e97903a4b6093d4fbaefea863d8d028da63938c6","impliedFormat":1},{"version":"de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","impliedFormat":1},{"version":"1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","impliedFormat":1},{"version":"854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","impliedFormat":1},{"version":"dd9faff42b456b5f03b85d8fbd64838eb92f6f7b03b36322cbc59c005b7033d3","impliedFormat":1},{"version":"6ff702721d87c0ba8e7f8950e7b0a3b009dfd912fab3997e0b63fab8d83919c3","impliedFormat":1},{"version":"9dce9fc12e9a79d1135699d525aa6b44b71a45e32e3fa0cf331060b980b16317","impliedFormat":1},{"version":"586b2fd8a7d582329658aaceec22f8a5399e05013deb49bcfde28f95f093c8ee","impliedFormat":1},{"version":"dedc0ab5f7babe4aef870618cd2d4bc43dc67d1584ee43b68fc6e05554ef8f34","impliedFormat":1},{"version":"ef1f3eadd7bed282de45bafd7c2c00105cf1db93e22f6cd763bec8a9c2cf6df1","impliedFormat":1},{"version":"3d8885d13f76ff35b7860039e83c936ff37553849707c2fd1d580d193a52be5b","impliedFormat":1},{"version":"b75188f1d06bba9e266aad819df75b51ed1fcc19ac0750dc6a55a8eb1b7c2134","impliedFormat":1},{"version":"d8272401aa994ed8a60f71067acbcc9a73d847be6badf1b9397a8ce965af6318","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1087c6c9066684d3e72a8fcc5445f34e85572792bc16f5aab01208bcbbbe64be","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"eb27bc1c8d46234252298d3d7252c8459667daa0953b974f9d2c581c46703b2a","impliedFormat":1},{"version":"1b096ca6b209d1fed9ce68edd110ff6de8bec4fab2689d2adc481ffc1b1dc20b","impliedFormat":1},{"version":"9c02f12da30d30dd5f5ccaeedfb9b925ed4e5114059e9be6ed2ecf87a492fd16","impliedFormat":1},{"version":"8c8f8e816a38f1a0cc2dd3813d3bede2d773df36e72f4cb55d9daabd22016925","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"f86d0150d5abc55bf5bb479beacc34a7e9d4ab4e3014315fb74626baf1558857","impliedFormat":1},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"d77523951427fca92c7fdcaafb776bfb5d76cb0dfd8a7b18f38710332386ad6d","impliedFormat":1},{"version":"d9dcda644a9ecb57df163cbeaaca093c696335a53f47b5dbbf7cf0671b76e2eb","impliedFormat":1},{"version":"2d4d871246a21c785aec2a5b745ad79cdc877de3866f586887c8c74ddec97b8d","impliedFormat":1},{"version":"0cfa403fc15d0fda3214c3d8b75a42abcfa60c07e739de908e57d1f76220b7f9","impliedFormat":1},{"version":"d99cef4ae065cde21bd536998282a9882d8fb36a902725f03d71c3a9e3a24aa4","impliedFormat":1},{"version":"f3d4606a83fbdeedeeecd982ac35945bc02d50499cc65c72d71a143afa7e7334","impliedFormat":1},{"version":"bc919e8ad895c43568f8125523ab0f91810d5208afcc5bff2ba4713dffda0d97","impliedFormat":1},{"version":"6771b9c4bb2253e2a51c5ef7155419558289b885857e275ff61f90a979049cc3","impliedFormat":1},{"version":"6a1fb700b666a19112cddb4ab24e671c83ce40f6bfe64d1e7cb59c88263d0ec2","impliedFormat":1},{"version":"cc060af11b9bc0ed723d1200951bdc3255ff189475183a1f9ed06fd9c57206a6","impliedFormat":1},{"version":"a0aa9907949f7688394904c4d16b93c8d3154a9eda70ab096e0cfb37ef48e9b1","impliedFormat":1},{"version":"816dd83b87f2f1986f4c9072d38262ae96ee6589fab8a9ebc3b8d8f30263b8d3","impliedFormat":1},{"version":"5512a0ca56d3a21dd2843b62c939ff885d8853e55524bada67d1e393649e4bd6","impliedFormat":1},{"version":"3cd6ea92f13a0bf3c120ac271bc0ba57bf4cc3078e010150887c657f78b41959","impliedFormat":1},{"version":"4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","impliedFormat":1},{"version":"d9a256f69f3956993e65efd88336644be8f8dd36d149e859c14704ef6c6c0eec","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","impliedFormat":1}],"root":[81,262,[623,631],655,668,669,751,758,775,784,845],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationDir":"./dist","declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"stripInternal":true,"target":9,"useDefineForClassFields":false,"useUnknownInCatchVariables":false},"referencedMap":[[1263,1],[527,1],[259,2],[193,1],[192,1],[239,1],[247,1],[231,3],[235,4],[248,5],[249,6],[233,7],[232,8],[236,9],[250,10],[244,1],[251,10],[245,11],[230,12],[261,13],[242,14],[246,15],[252,16],[206,17],[253,18],[241,9],[254,9],[234,19],[195,20],[237,21],[238,15],[218,15],[219,22],[220,23],[194,24],[221,25],[197,26],[196,27],[215,28],[222,17],[223,15],[224,5],[199,29],[200,5],[201,30],[202,5],[203,30],[204,31],[225,32],[205,33],[229,34],[207,35],[208,31],[209,36],[210,20],[198,37],[226,38],[211,39],[243,40],[212,33],[227,32],[228,5],[213,5],[214,5],[216,41],[217,35],[255,9],[256,1],[257,42],[82,1],[240,43],[260,1],[263,44],[81,45],[629,46],[655,47],[262,48],[630,49],[626,50],[627,51],[628,52],[624,53],[625,54],[669,55],[751,56],[758,57],[775,58],[784,59],[845,60],[668,61],[623,62],[631,51],[519,63],[520,64],[986,1],[848,65],[846,1],[642,66],[653,1],[654,67],[651,66],[644,66],[648,68],[649,66],[645,69],[647,66],[650,66],[646,66],[652,66],[643,70],[641,71],[640,72],[638,73],[637,74],[634,75],[635,74],[639,76],[636,77],[633,72],[724,78],[725,1],[727,79],[749,80],[272,81],[273,82],[460,83],[455,84],[457,85],[459,86],[462,87],[270,88],[453,89],[463,90],[454,91],[456,92],[461,93],[269,94],[458,95],[464,96],[465,97],[467,98],[468,99],[469,97],[470,99],[471,98],[472,98],[473,97],[474,97],[475,100],[476,97],[477,101],[466,102],[478,103],[479,104],[480,105],[481,106],[489,107],[516,108],[482,100],[485,109],[483,110],[484,105],[486,1],[512,107],[513,99],[515,111],[514,112],[491,107],[490,107],[498,113],[505,112],[511,114],[506,107],[507,107],[508,107],[510,115],[488,1],[487,107],[442,116],[443,116],[441,117],[444,1],[445,44],[446,44],[447,44],[452,118],[448,1],[451,119],[450,120],[449,119],[399,121],[400,44],[401,122],[330,123],[398,124],[396,44],[397,125],[378,126],[395,127],[352,44],[375,1],[372,44],[345,44],[344,44],[365,44],[373,128],[359,44],[346,129],[340,130],[350,129],[349,129],[334,44],[335,44],[336,44],[343,44],[368,44],[348,129],[358,44],[347,44],[333,44],[364,131],[377,132],[331,44],[370,1],[371,44],[332,129],[362,1],[351,129],[355,1],[366,1],[341,133],[342,129],[338,130],[354,130],[360,44],[353,134],[376,44],[357,129],[356,44],[361,130],[337,44],[363,44],[339,135],[369,1],[367,129],[374,1],[379,136],[383,137],[384,138],[385,138],[386,138],[387,138],[394,139],[388,138],[389,138],[390,136],[382,138],[381,140],[391,138],[392,138],[393,138],[380,44],[304,44],[326,44],[294,44],[296,44],[313,141],[293,44],[280,1],[318,44],[327,141],[311,44],[295,141],[289,142],[281,1],[282,1],[302,141],[301,141],[283,44],[284,44],[285,44],[292,44],[322,44],[300,141],[310,44],[297,44],[279,44],[317,44],[329,143],[277,144],[324,1],[325,44],[278,145],[315,1],[303,141],[307,1],[320,1],[290,146],[291,141],[287,142],[306,142],[312,44],[305,141],[298,147],[276,44],[309,141],[308,44],[319,44],[314,142],[286,44],[316,44],[288,148],[323,1],[321,141],[299,147],[328,1],[948,1],[982,149],[981,149],[980,1],[984,150],[985,150],[983,1],[951,1],[949,151],[952,152],[950,152],[953,1],[992,1],[993,1],[997,1],[994,1],[1004,151],[1003,1],[1005,1],[1006,153],[998,154],[1002,155],[999,156],[995,1],[1000,157],[1001,158],[996,1],[968,151],[964,151],[967,151],[966,151],[965,151],[961,151],[960,151],[963,151],[962,151],[955,151],[956,159],[954,1],[959,160],[957,151],[1010,161],[989,162],[991,162],[990,162],[987,163],[988,162],[1008,1],[1007,1],[1009,1],[969,164],[970,1],[973,1],[976,1],[971,1],[978,1],[979,165],[975,1],[972,1],[974,1],[977,1],[958,1],[916,1],[919,166],[499,167],[492,107],[497,168],[494,167],[504,169],[495,167],[503,170],[501,171],[496,167],[493,107],[502,172],[509,173],[500,1],[918,1],[776,174],[594,1],[785,1],[786,1],[787,1],[844,175],[788,176],[833,177],[790,178],[789,179],[791,176],[792,176],[794,180],[793,176],[795,181],[796,181],[797,176],[799,182],[800,176],[801,182],[802,176],[804,176],[805,176],[806,176],[807,183],[803,176],[808,1],[809,184],[810,184],[811,184],[812,184],[813,184],[822,185],[814,184],[815,184],[816,184],[817,184],[819,184],[818,184],[820,184],[821,184],[823,176],[824,176],[798,176],[825,182],[827,186],[826,176],[828,176],[829,176],[830,187],[832,176],[831,176],[834,176],[836,176],[837,188],[835,176],[838,176],[839,176],[840,176],[841,176],[842,176],[843,176],[851,189],[847,65],[849,190],[850,65],[664,191],[852,192],[853,1],[268,1],[854,193],[663,174],[781,1],[779,194],[777,195],[855,1],[857,196],[858,196],[859,1],[860,1],[862,197],[863,1],[864,1],[865,196],[866,1],[867,1],[868,198],[869,1],[870,1],[871,199],[872,1],[873,200],[874,1],[875,1],[876,1],[877,1],[880,1],[879,201],[856,1],[881,202],[882,1],[878,1],[883,1],[884,196],[885,203],[886,204],[888,205],[894,206],[893,207],[892,208],[889,1],[891,209],[890,1],[660,210],[666,211],[665,210],[897,212],[861,1],[899,213],[900,214],[902,215],[904,216],[905,216],[906,216],[903,1],[909,217],[907,218],[908,218],[910,1],[780,1],[661,1],[911,219],[912,220],[913,1],[914,221],[915,222],[924,223],[421,1],[895,224],[896,1],[925,225],[778,1],[926,226],[927,227],[782,227],[783,228],[933,229],[935,230],[936,231],[934,232],[937,233],[938,234],[939,235],[940,236],[941,237],[942,238],[943,239],[944,240],[945,241],[946,242],[947,215],[656,1],[898,1],[1139,1],[1140,1],[1146,243],[1143,244],[1142,245],[1145,246],[1141,1],[1144,244],[887,1],[1147,220],[567,247],[568,247],[569,248],[526,249],[570,250],[571,251],[572,252],[521,1],[524,253],[522,1],[523,1],[573,254],[574,255],[575,256],[576,257],[577,258],[578,259],[579,259],[581,260],[580,261],[582,262],[583,263],[584,264],[566,265],[525,1],[585,266],[586,267],[587,268],[620,269],[588,270],[589,271],[590,272],[544,273],[554,274],[543,273],[564,275],[535,276],[534,277],[563,220],[557,278],[562,279],[537,280],[551,281],[536,282],[560,283],[532,284],[531,220],[561,285],[533,286],[538,287],[539,1],[542,287],[529,1],[565,288],[555,289],[546,290],[547,291],[549,292],[545,293],[548,294],[558,220],[540,295],[541,296],[550,297],[530,298],[553,289],[552,287],[556,1],[559,299],[591,300],[592,301],[593,302],[595,303],[596,304],[597,305],[598,306],[599,306],[600,307],[601,1],[602,308],[604,309],[603,310],[605,311],[606,312],[607,313],[608,314],[609,315],[610,316],[611,317],[612,318],[613,319],[614,320],[615,321],[616,322],[617,323],[618,324],[619,325],[1148,220],[1149,1],[1150,1],[1156,326],[1151,1],[1157,1],[1160,1],[266,1],[1161,1],[658,1],[1164,327],[1163,328],[659,1],[1165,107],[1170,329],[1169,330],[1172,329],[1171,331],[1168,332],[1166,1],[1167,333],[264,1],[267,334],[271,107],[1173,335],[1174,1],[1191,336],[1216,337],[1217,338],[1192,339],[1195,339],[1214,337],[1215,337],[1205,337],[1204,340],[1202,337],[1197,337],[1210,337],[1208,337],[1212,337],[1196,337],[1209,337],[1213,337],[1198,337],[1199,337],[1211,337],[1193,337],[1200,337],[1201,337],[1203,337],[1207,337],[1218,341],[1206,337],[1194,337],[1231,342],[1230,1],[1225,341],[1227,343],[1226,341],[1219,341],[1220,341],[1222,341],[1224,341],[1228,343],[1229,343],[1221,343],[1223,343],[657,344],[1233,345],[1232,195],[662,346],[1234,174],[1235,1],[1236,1],[1237,1],[1240,347],[1239,348],[1238,349],[1013,350],[1012,1],[1242,351],[901,1],[1258,352],[1256,353],[1255,354],[1246,355],[1247,356],[1254,357],[1248,356],[1249,355],[1250,355],[1251,355],[1252,358],[1245,359],[1253,354],[1244,1],[1257,360],[1259,361],[1260,1],[667,362],[621,362],[1261,1],[1262,363],[632,1],[714,364],[671,1],[673,365],[672,366],[677,367],[712,368],[709,369],[711,370],[674,369],[675,371],[679,371],[678,372],[676,373],[710,374],[723,375],[708,369],[713,376],[706,1],[707,1],[680,377],[685,369],[687,369],[682,369],[683,377],[689,369],[690,378],[681,369],[686,369],[688,369],[684,369],[704,379],[703,369],[705,380],[699,369],[720,381],[718,382],[717,369],[715,367],[722,383],[719,384],[716,382],[721,382],[701,369],[700,369],[696,369],[702,385],[697,369],[698,386],[691,369],[692,369],[693,369],[694,369],[695,369],[670,1],[1243,1],[528,1],[917,1],[435,387],[436,388],[755,1],[753,389],[752,1],[265,1],[1130,390],[1126,1],[1127,1],[1125,1],[1128,1],[1129,1],[1131,1],[1123,1],[1124,391],[1132,392],[1014,393],[191,1],[923,394],[726,395],[748,396],[734,174],[736,397],[735,226],[745,398],[743,399],[746,400],[741,401],[740,402],[737,403],[738,404],[739,405],[733,406],[744,407],[742,408],[731,409],[747,410],[732,411],[730,412],[728,413],[1186,414],[1187,415],[1185,416],[1188,417],[1182,418],[1183,419],[1184,420],[1178,418],[1179,418],[1181,421],[1180,418],[1177,422],[517,423],[518,424],[406,425],[407,1],[404,426],[402,427],[408,428],[403,429],[405,430],[275,1],[434,431],[418,432],[419,432],[429,433],[430,434],[432,435],[431,436],[433,437],[414,438],[410,439],[415,432],[416,440],[413,441],[412,439],[411,439],[409,442],[417,443],[422,44],[420,44],[424,444],[427,445],[423,446],[428,447],[425,444],[426,44],[438,448],[437,44],[440,449],[439,448],[750,450],[622,451],[99,452],[167,453],[166,454],[165,455],[104,456],[120,457],[118,458],[119,459],[105,460],[190,461],[90,1],[94,1],[92,462],[93,1],[97,463],[100,1],[117,464],[95,1],[112,465],[98,466],[113,467],[116,468],[114,468],[111,469],[91,1],[96,1],[115,470],[121,471],[109,1],[103,472],[101,473],[110,474],[107,475],[106,475],[102,476],[108,477],[186,478],[180,479],[173,480],[172,481],[181,482],[182,468],[174,483],[187,484],[168,485],[169,486],[170,487],[189,488],[171,481],[175,484],[176,489],[183,490],[184,466],[185,489],[188,468],[177,487],[122,491],[178,492],[179,493],[164,494],[162,495],[163,495],[126,495],[127,495],[128,495],[129,495],[130,495],[131,495],[132,495],[133,495],[134,495],[154,495],[135,495],[136,495],[137,495],[138,495],[139,495],[140,495],[161,495],[141,495],[142,495],[143,495],[144,495],[159,495],[145,495],[160,495],[146,495],[157,495],[158,495],[147,495],[148,495],[149,495],[155,495],[156,495],[150,495],[151,495],[152,495],[153,495],[125,496],[124,497],[123,498],[89,1],[757,499],[771,500],[772,501],[770,502],[767,503],[774,504],[768,505],[769,506],[773,507],[765,508],[759,1],[763,509],[764,510],[760,1],[761,1],[766,1],[762,1],[756,1],[258,1],[921,511],[922,512],[729,513],[1176,1],[1015,514],[1058,515],[1057,516],[1056,517],[1059,1],[1135,518],[1134,1],[1138,519],[1136,520],[1011,521],[1137,522],[1060,523],[1133,524],[1122,525],[1062,526],[1063,526],[1064,526],[1065,526],[1066,526],[1119,526],[1067,526],[1068,526],[1069,526],[1070,526],[1071,526],[1072,526],[1073,526],[1074,526],[1118,526],[1075,526],[1076,526],[1077,526],[1078,526],[1079,526],[1080,526],[1081,526],[1082,526],[1083,526],[1084,526],[1085,526],[1086,526],[1121,526],[1087,526],[1088,526],[1089,526],[1090,526],[1091,526],[1092,526],[1093,526],[1094,526],[1095,526],[1096,526],[1097,526],[1098,526],[1120,526],[1099,526],[1100,526],[1101,526],[1102,526],[1103,526],[1104,526],[1105,526],[1106,526],[1107,526],[1108,526],[1109,526],[1110,526],[1111,526],[1112,526],[1113,526],[1114,526],[1115,526],[1116,526],[1117,526],[1061,527],[1054,528],[1055,529],[1175,530],[1155,531],[1152,220],[1154,532],[1153,1],[1158,1],[1159,533],[920,534],[1190,535],[1189,536],[930,537],[929,538],[928,539],[1241,1],[931,1],[1162,328],[79,1],[1046,540],[1032,541],[1043,542],[1016,1],[1034,543],[1033,1],[1035,544],[1041,545],[1040,1],[1017,1],[1038,1],[1039,1],[1025,546],[1020,1],[1019,547],[1018,1],[1027,1],[1044,548],[1023,546],[1026,1],[1031,1],[1024,546],[1021,547],[1022,1],[1028,547],[1029,547],[1042,1],[1037,1],[1045,1],[1036,1],[1047,1],[1030,1],[1048,549],[1049,549],[1053,550],[1050,551],[1051,552],[1052,551],[77,1],[78,1],[14,1],[13,1],[2,1],[15,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[3,1],[23,1],[24,1],[4,1],[25,1],[29,1],[26,1],[27,1],[28,1],[30,1],[31,1],[32,1],[5,1],[33,1],[34,1],[35,1],[36,1],[6,1],[40,1],[37,1],[38,1],[39,1],[41,1],[7,1],[42,1],[47,1],[48,1],[43,1],[44,1],[45,1],[46,1],[8,1],[52,1],[49,1],[50,1],[51,1],[53,1],[9,1],[54,1],[55,1],[56,1],[58,1],[57,1],[59,1],[60,1],[10,1],[61,1],[62,1],[63,1],[11,1],[64,1],[65,1],[66,1],[67,1],[68,1],[1,1],[69,1],[70,1],[12,1],[74,1],[72,1],[76,1],[71,1],[75,1],[73,1],[754,1],[274,1],[932,553],[84,554],[85,555],[88,556],[83,1],[86,554],[87,554],[80,1]],"latestChangedDtsFile":"./dist/servers/lambda/v1/index.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Copy.d.ts b/grafast/ruru-components/dist/components/Copy.d.ts new file mode 100644 index 0000000000..acb5525382 --- /dev/null +++ b/grafast/ruru-components/dist/components/Copy.d.ts @@ -0,0 +1,7 @@ +import type { FC } from "react"; +export declare const Copy: FC<{ + text?: string; + json?: any; + children: string | JSX.Element | JSX.Element[]; +}>; +//# sourceMappingURL=Copy.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Copy.d.ts.map b/grafast/ruru-components/dist/components/Copy.d.ts.map new file mode 100644 index 0000000000..ba3b91d17e --- /dev/null +++ b/grafast/ruru-components/dist/components/Copy.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Copy.d.ts","sourceRoot":"","sources":["../../src/components/Copy.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;CAChD,CA8BA,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Copy.js b/grafast/ruru-components/dist/components/Copy.js new file mode 100644 index 0000000000..3c72492b41 --- /dev/null +++ b/grafast/ruru-components/dist/components/Copy.js @@ -0,0 +1,20 @@ +import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; +import { useCallback, useMemo, useRef } from "react"; +export const Copy = ({ text: rawText, json, children }) => { + const text = useMemo(() => rawText ?? (json !== undefined ? JSON.stringify(json) : undefined), [rawText, json]); + const ref = useRef(null); + const copy = useCallback(() => { + const el = ref.current; + if (el) { + /* Select the text field */ + el.select(); + el.setSelectionRange(0, 99999); /* For mobile devices */ + /* Copy the text inside the text field */ + navigator.clipboard.writeText(el.value); + } + }, []); + return (_jsxs(_Fragment, { children: [_jsx("textarea", { ref: (el) => { + ref.current = el; + }, value: text, readOnly: true, style: { display: "none" } }), _jsx("button", { onClick: copy, children: children })] })); +}; +//# sourceMappingURL=Copy.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Copy.js.map b/grafast/ruru-components/dist/components/Copy.js.map new file mode 100644 index 0000000000..6695352ef7 --- /dev/null +++ b/grafast/ruru-components/dist/components/Copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Copy.js","sourceRoot":"","sources":["../../src/components/Copy.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAErD,MAAM,CAAC,MAAM,IAAI,GAIZ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzC,MAAM,IAAI,GAAG,OAAO,CAClB,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EACxE,CAAC,OAAO,EAAE,IAAI,CAAC,CAChB,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAA6B,IAAI,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,IAAI,EAAE,EAAE,CAAC;YACP,2BAA2B;YAC3B,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;YAExD,yCAAyC;YACzC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,CACL,8BACE,mBACE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;oBACV,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;gBACnB,CAAC,EACD,KAAK,EAAE,IAAI,EACX,QAAQ,QACR,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAC1B,EACF,iBAAQ,OAAO,EAAE,IAAI,YAAG,QAAQ,GAAU,IACzC,CACJ,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/ErrorPopup.d.ts b/grafast/ruru-components/dist/components/ErrorPopup.d.ts new file mode 100644 index 0000000000..46c2b3ae84 --- /dev/null +++ b/grafast/ruru-components/dist/components/ErrorPopup.d.ts @@ -0,0 +1,6 @@ +import type { FC } from "react"; +export declare const ErrorPopup: FC<{ + error: Error; + onClose: () => void; +}>; +//# sourceMappingURL=ErrorPopup.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/ErrorPopup.d.ts.map b/grafast/ruru-components/dist/components/ErrorPopup.d.ts.map new file mode 100644 index 0000000000..faa53d5348 --- /dev/null +++ b/grafast/ruru-components/dist/components/ErrorPopup.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ErrorPopup.d.ts","sourceRoot":"","sources":["../../src/components/ErrorPopup.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAUhE,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/ErrorPopup.js b/grafast/ruru-components/dist/components/ErrorPopup.js new file mode 100644 index 0000000000..3ab15d5bd2 --- /dev/null +++ b/grafast/ruru-components/dist/components/ErrorPopup.js @@ -0,0 +1,4 @@ +import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; +// TODO: this needs proper design and accessibility considerations +export const ErrorPopup = ({ error, onClose, }) => (_jsxs("div", { className: "errorPopup", children: [_jsx("button", { className: "errorPopupClose", onClick: onClose, children: "\uD83D\uDDD9" }), _jsx("div", { className: "errorPopupError", children: String(error) })] })); +//# sourceMappingURL=ErrorPopup.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/ErrorPopup.js.map b/grafast/ruru-components/dist/components/ErrorPopup.js.map new file mode 100644 index 0000000000..580fda91ce --- /dev/null +++ b/grafast/ruru-components/dist/components/ErrorPopup.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ErrorPopup.js","sourceRoot":"","sources":["../../src/components/ErrorPopup.tsx"],"names":[],"mappings":";AAEA,kEAAkE;AAElE,MAAM,CAAC,MAAM,UAAU,GAA8C,CAAC,EACpE,KAAK,EACL,OAAO,GACR,EAAE,EAAE,CAAC,CACJ,eAAK,SAAS,EAAC,YAAY,aACzB,iBAAQ,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,OAAO,6BAE3C,EACT,cAAK,SAAS,EAAC,iBAAiB,YAAE,MAAM,CAAC,KAAK,CAAC,GAAO,IAClD,CACP,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Explain.d.ts b/grafast/ruru-components/dist/components/Explain.d.ts new file mode 100644 index 0000000000..8fbcc1b1a9 --- /dev/null +++ b/grafast/ruru-components/dist/components/Explain.d.ts @@ -0,0 +1,19 @@ +import type { FC } from "react"; +import type { ExplainHelpers } from "../hooks/useExplain.js"; +import type { ExplainResults } from "../hooks/useFetcher.js"; +declare global { + interface Window { + mermaid?: any; + } +} +export declare const Explain: FC<{ + explain: boolean; + setExplain: (newExplain: boolean) => void; + helpers: ExplainHelpers; + results: ExplainResults | null; +}>; +export declare const ExplainMain: FC<{ + helpers: ExplainHelpers; + results: ExplainResults; +}>; +//# sourceMappingURL=Explain.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Explain.d.ts.map b/grafast/ruru-components/dist/components/Explain.d.ts.map new file mode 100644 index 0000000000..1bef8969c1 --- /dev/null +++ b/grafast/ruru-components/dist/components/Explain.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Explain.d.ts","sourceRoot":"","sources":["../../src/components/Explain.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAIhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAK7D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,OAAO,CAAC,EAAE,GAAG,CAAC;KACf;CACF;AAED,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAChC,CA6BA,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;CACzB,CAgJA,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Explain.js b/grafast/ruru-components/dist/components/Explain.js new file mode 100644 index 0000000000..475994567e --- /dev/null +++ b/grafast/ruru-components/dist/components/Explain.js @@ -0,0 +1,82 @@ +import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; +import { planToMermaid } from "grafast/mermaid"; +import { useCallback, useEffect, useRef, useState } from "react"; +import { createPortal } from "react-dom"; +import { Copy } from "./Copy.js"; +import { FormatSQL } from "./FormatSQL.js"; +import { Mermaid } from "./Mermaid.js"; +export const Explain = ({ explain, setExplain, helpers, results }) => { + return (_jsx(_Fragment, { children: !results ? (!explain ? (_jsxs(_Fragment, { children: [_jsx("p", { children: "WARNING: you've not enabled the 'explain' functionality" }), _jsx("p", { children: _jsx("button", { onClick: () => setExplain(true), children: "Enable explain" }) })] })) : (_jsx("p", { children: "There are no explain results to display - perhaps you have not yet ran an operation against a server that supports this feature?" }))) : results.operations.length === 0 ? (_jsx("p", { children: "Empty explain results" })) : (_jsx("div", { children: _jsx(ExplainMain, { helpers: helpers, results: results }) })) })); +}; +export const ExplainMain = ({ results }) => { + const [selectedIndex, setSelectedIndex] = useState(0); + useEffect(() => { + setSelectedIndex(0); + }, [results]); + const selectedResult = results.operations[selectedIndex]; + const [expanded, setExpanded] = useState(false); + const expand = useCallback(() => { + setExpanded(true); + }, []); + const nodeRef = useRef(); + if (!nodeRef.current) { + nodeRef.current = document.createElement("div"); + } + const node = nodeRef.current; + useEffect(() => { + document.body.appendChild(node); + return () => { + document.body.removeChild(node); + }; + }, [node]); + const [saving, setSaving] = useState(false); + const saveSVG = useCallback(() => { + if (!selectedResult || selectedResult.type !== "plan") + return; + setSaving(true); + setTimeout(() => { + if (window.mermaid) { + const diagram = planToMermaid(selectedResult.plan); + window.mermaid.mermaidAPI + .render("id1", diagram) + .then(({ svg }) => { + const file = new File([svg.replace(/
/g, "
")], "grafast-plan.svg"); + const a = document.createElement("a"); + a.href = URL.createObjectURL(file); + a.download = file.name; + a.style.display = "none"; + document.body.appendChild(a); + a.click(); + setSaving(false); + setTimeout(() => { + URL.revokeObjectURL(a.href); + a.parentNode.removeChild(a); + }, 0); + }); + } + else { + alert("Mermaid hasn't loaded (yet)"); + } + }, 0); + }, [selectedResult]); + const component = (() => { + switch (selectedResult?.type) { + case "sql": { + return (_jsxs("div", { children: [selectedResult.explain ? (_jsxs(_Fragment, { children: [_jsxs("h4", { children: ["Result from SQL", " ", _jsx("a", { href: "https://www.postgresql.org/docs/current/sql-explain.html", children: "EXPLAIN" }), " ", "on executed query:"] }), _jsx("pre", { className: "explain-plan", children: _jsx("code", { children: selectedResult.explain }) }), _jsx(Copy, { text: selectedResult.explain, children: "Copy plan" })] })) : null, _jsx("h4", { children: "Executed SQL query:" }), _jsx(FormatSQL, { sql: selectedResult.query }), _jsx(Copy, { text: selectedResult.query, children: "Copy SQL" })] })); + } + case "plan": { + return (_jsxs(_Fragment, { children: [_jsx(Copy, { json: selectedResult.plan, children: "Copy plan JSON" }), _jsx("button", { onClick: saveSVG, disabled: saving, children: "Save Mermaid Diagram" }), _jsx("div", { onClick: expand, children: _jsx(Mermaid, { plan: selectedResult.plan }) }), expanded + ? createPortal(_jsxs("div", { className: "explainExpandedContainer", children: [_jsx("div", { className: "explainExpandedTitle", children: "Operation Plan" }), _jsx("div", { className: "explainExpandedCloseContainer", children: _jsx("button", { className: "explainExpandedCloseButton", onClick: () => setExpanded(false), children: "\u00D7" }) }), _jsx("div", { className: "explainExpandedMain", children: _jsx(Mermaid, { plan: selectedResult.plan }) })] }), node) + : null] })); + } + case undefined: { + return (_jsxs("div", { children: ["Explain result type '$", selectedResult.type, "' not yet supported."] })); + } + default: { + return _jsx("div", {}); + } + } + })(); + return (_jsxs("div", { children: [_jsx("select", { value: String(selectedIndex), onChange: (e) => setSelectedIndex(parseInt(e.target.value, 10)), children: results.operations.map((o, i) => (_jsx("option", { value: String(i), children: o.title }, i))) }), component] })); +}; +//# sourceMappingURL=Explain.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Explain.js.map b/grafast/ruru-components/dist/components/Explain.js.map new file mode 100644 index 0000000000..d3d8641d14 --- /dev/null +++ b/grafast/ruru-components/dist/components/Explain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Explain.js","sourceRoot":"","sources":["../../src/components/Explain.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Footer.d.ts b/grafast/ruru-components/dist/components/Footer.d.ts new file mode 100644 index 0000000000..14d3717f3d --- /dev/null +++ b/grafast/ruru-components/dist/components/Footer.d.ts @@ -0,0 +1,3 @@ +import type { FC } from "react"; +export declare const RuruFooter: FC; +//# sourceMappingURL=Footer.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Footer.d.ts.map b/grafast/ruru-components/dist/components/Footer.d.ts.map new file mode 100644 index 0000000000..d6c1db40e4 --- /dev/null +++ b/grafast/ruru-components/dist/components/Footer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,eAAO,MAAM,UAAU,EAAE,EAYxB,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Footer.js b/grafast/ruru-components/dist/components/Footer.js new file mode 100644 index 0000000000..5a45b04c7f --- /dev/null +++ b/grafast/ruru-components/dist/components/Footer.js @@ -0,0 +1,3 @@ +import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; +export const RuruFooter = () => (_jsxs("div", { style: { padding: 7 }, children: ["Community-funded OSS \uD83D\uDE4F", " ", _jsx("a", { title: "All our projects are supported by the community, please sponsor ongoing development", href: "https://graphile.org/sponsor/", target: "new", children: "please sponsor" }), " ", "\uD83D\uDC96"] })); +//# sourceMappingURL=Footer.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Footer.js.map b/grafast/ruru-components/dist/components/Footer.js.map new file mode 100644 index 0000000000..29b5928a8a --- /dev/null +++ b/grafast/ruru-components/dist/components/Footer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/components/Footer.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,MAAM,UAAU,GAAO,GAAG,EAAE,CAAC,CAClC,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,kDACA,GAAG,EAC3B,YACE,KAAK,EAAC,qFAAqF,EAC3F,IAAI,EAAC,+BAA+B,EACpC,MAAM,EAAC,KAAK,+BAGV,EAAC,GAAG,oBAEJ,CACP,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/FormatSQL.d.ts b/grafast/ruru-components/dist/components/FormatSQL.d.ts new file mode 100644 index 0000000000..e215ea1dd9 --- /dev/null +++ b/grafast/ruru-components/dist/components/FormatSQL.d.ts @@ -0,0 +1,5 @@ +import type { FC } from "react"; +export declare const FormatSQL: FC<{ + sql: string; +}>; +//# sourceMappingURL=FormatSQL.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/FormatSQL.d.ts.map b/grafast/ruru-components/dist/components/FormatSQL.d.ts.map new file mode 100644 index 0000000000..35a87ad308 --- /dev/null +++ b/grafast/ruru-components/dist/components/FormatSQL.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FormatSQL.d.ts","sourceRoot":"","sources":["../../src/components/FormatSQL.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAGhC,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CA+DzC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/FormatSQL.js b/grafast/ruru-components/dist/components/FormatSQL.js new file mode 100644 index 0000000000..9af5e94d55 --- /dev/null +++ b/grafast/ruru-components/dist/components/FormatSQL.js @@ -0,0 +1,83 @@ +import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime"; +import { useCallback, useMemo, useState } from "react"; +export const FormatSQL = ({ sql }) => { + const [highlitIndex, setHighlitIndex] = useState(null); + const formattedSQL = useMemo(() => { + const lines = sql.split("\n"); + const elements = []; + const knownIdentifiers = new Map(); + let identifierCount = 0; + const makeParts = (line) => { + const parts = []; + let idx = 0; + const re = /__([a-zA-Z0-9](_?[a-zA-Z0-9])*)(__|_[0-9]+(?![a-zA-Z0-9_]))/g; + let matches; + while ((matches = re.exec(line))) { + const start = matches.index; + const fin = re.lastIndex; + if (start > idx) { + parts.push(_jsx(_Fragment, { children: line.substring(idx, start) })); + } + idx = fin; + const [full] = matches; + const f = knownIdentifiers.get(full); + if (f) { + parts.push(f); + } + else { + const index = identifierCount++; + const sub = (_jsx(Highlight, { n: index, highlit: index === highlitIndex, setHighlitIndex: setHighlitIndex, children: full })); + knownIdentifiers.set(full, sub); + parts.push(sub); + } + } + if (idx < line.length) { + parts.push(_jsx(_Fragment, { children: line.substring(idx) })); + } + return parts; + }; + for (let i = 0, l = lines.length; i < l; i++) { + const line = lines[i]; + const parts = makeParts(line); + elements.push(_jsx("code", { style: { + display: "block", + marginLeft: "1.8rem", + textIndent: "-1.8rem", + }, children: parts }, i)); + } + return elements; + }, [sql, highlitIndex]); + return _jsx("pre", { className: "explain-sql", children: formattedSQL }); +}; +const COLORS = [ + "#00bfff", + "#ffa500", + "#7fff00", + "#ff1493", + "#808000", + "#dda0dd", + "#ff0000", + "#4169e1", + "#3cb371", + "#a52a2a", + "#ff00ff", +]; +const Highlight = ({ n, highlit, setHighlitIndex, children }) => { + const color = COLORS[n % COLORS.length]; + const style = highlit + ? { + color, + borderRadius: "3px", + fontWeight: "900", + backgroundColor: "hsla(var(--color-primary),var(--alpha-background-medium))", + } + : { color }; + const onMouseEnter = useCallback(() => { + setHighlitIndex(n); + }, [setHighlitIndex, n]); + const onMouseLeave = useCallback(() => { + setHighlitIndex(null); + }, [setHighlitIndex]); + return (_jsx("strong", { style: style, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, children: children })); +}; +//# sourceMappingURL=FormatSQL.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/FormatSQL.js.map b/grafast/ruru-components/dist/components/FormatSQL.js.map new file mode 100644 index 0000000000..08d37c244b --- /dev/null +++ b/grafast/ruru-components/dist/components/FormatSQL.js.map @@ -0,0 +1 @@ +{"version":3,"file":"FormatSQL.js","sourceRoot":"","sources":["../../src/components/FormatSQL.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Mermaid.d.ts b/grafast/ruru-components/dist/components/Mermaid.d.ts new file mode 100644 index 0000000000..524c818c9e --- /dev/null +++ b/grafast/ruru-components/dist/components/Mermaid.d.ts @@ -0,0 +1,6 @@ +import type { GrafastPlanJSON } from "grafast/mermaid"; +import type { FC } from "react"; +export declare const Mermaid: FC<{ + plan: GrafastPlanJSON; +}>; +//# sourceMappingURL=Mermaid.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Mermaid.d.ts.map b/grafast/ruru-components/dist/components/Mermaid.d.ts.map new file mode 100644 index 0000000000..e28fc2edd1 --- /dev/null +++ b/grafast/ruru-components/dist/components/Mermaid.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Mermaid.d.ts","sourceRoot":"","sources":["../../src/components/Mermaid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAKhC,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CA2BjD,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Mermaid.js b/grafast/ruru-components/dist/components/Mermaid.js new file mode 100644 index 0000000000..a45d9c2586 --- /dev/null +++ b/grafast/ruru-components/dist/components/Mermaid.js @@ -0,0 +1,28 @@ +import { jsx as _jsx } from "react/jsx-runtime"; +import { planToMermaid } from "grafast/mermaid"; +import { useEffect, useMemo } from "react"; +let initialized = false; +export const Mermaid = ({ plan }) => { + const diagram = useMemo(() => planToMermaid(plan), [plan]); + useEffect(() => { + if (window.mermaid) { + if (!initialized) { + initialized = true; + window.mermaid.initialize({ + startOnLoad: true, + maxTextSize: 1000000, + }); + } + if (diagram) { + window.mermaid.contentLoaded(); + } + } + }, [diagram]); + if (window.mermaid) { + return (_jsx("div", { className: "mermaid", children: diagram }, diagram)); + } + else { + return (_jsx("div", { children: "Mermaid hasn't (yet) loaded, so we cannot render plan diagrams" })); + } +}; +//# sourceMappingURL=Mermaid.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/components/Mermaid.js.map b/grafast/ruru-components/dist/components/Mermaid.js.map new file mode 100644 index 0000000000..8d9451820f --- /dev/null +++ b/grafast/ruru-components/dist/components/Mermaid.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Mermaid.js","sourceRoot":"","sources":["../../src/components/Mermaid.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE3C,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,OAAO,GAAkC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;IACjE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;oBACxB,WAAW,EAAE,IAAI;oBACjB,WAAW,EAAE,OAAO;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACd,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CACL,cAAK,SAAS,EAAC,SAAS,YACrB,OAAO,IADoB,OAAO,CAE/B,CACP,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO,CACL,2FAAyE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/defaultQuery.d.ts b/grafast/ruru-components/dist/defaultQuery.d.ts new file mode 100644 index 0000000000..22a5525bd0 --- /dev/null +++ b/grafast/ruru-components/dist/defaultQuery.d.ts @@ -0,0 +1,2 @@ +export declare const defaultQuery = "# Welcome to Ruru, our distribution of GraphiQL and related tooling to\n# inspect your GraphQL API.\n#\n# GraphiQL is an in-browser tool for writing, validating, and\n# testing GraphQL queries.\n#\n# Type queries into this side of the screen, and you will see intelligent\n# typeaheads aware of the current GraphQL type schema and live syntax and\n# validation errors highlighted within the text.\n#\n# GraphQL queries typically start with a \"{\" character. Lines that starts\n# with a # are ignored.\n#\n# An example GraphQL query might look like:\n#\n# {\n# field(arg: \"value\") {\n# subField\n# }\n# }\n#\n# Keyboard shortcuts:\n#\n# Prettify Query: Shift-Ctrl-P (or press the prettify button above)\n#\n# Merge Query: Shift-Ctrl-M (or press the merge button above)\n#\n# Run Query: Ctrl-Enter (or press the play button above)\n#\n# Auto Complete: Ctrl-Space (or just start typing)\n#\n"; +//# sourceMappingURL=defaultQuery.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/defaultQuery.d.ts.map b/grafast/ruru-components/dist/defaultQuery.d.ts.map new file mode 100644 index 0000000000..a954c3a1c4 --- /dev/null +++ b/grafast/ruru-components/dist/defaultQuery.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"defaultQuery.d.ts","sourceRoot":"","sources":["../src/defaultQuery.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,66BAgCxB,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/defaultQuery.js b/grafast/ruru-components/dist/defaultQuery.js new file mode 100644 index 0000000000..a93ed65303 --- /dev/null +++ b/grafast/ruru-components/dist/defaultQuery.js @@ -0,0 +1,34 @@ +export const defaultQuery = `\ +# Welcome to Ruru, our distribution of GraphiQL and related tooling to +# inspect your GraphQL API. +# +# GraphiQL is an in-browser tool for writing, validating, and +# testing GraphQL queries. +# +# Type queries into this side of the screen, and you will see intelligent +# typeaheads aware of the current GraphQL type schema and live syntax and +# validation errors highlighted within the text. +# +# GraphQL queries typically start with a "{" character. Lines that starts +# with a # are ignored. +# +# An example GraphQL query might look like: +# +# { +# field(arg: "value") { +# subField +# } +# } +# +# Keyboard shortcuts: +# +# Prettify Query: Shift-Ctrl-P (or press the prettify button above) +# +# Merge Query: Shift-Ctrl-M (or press the merge button above) +# +# Run Query: Ctrl-Enter (or press the play button above) +# +# Auto Complete: Ctrl-Space (or just start typing) +# +`; +//# sourceMappingURL=defaultQuery.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/defaultQuery.js.map b/grafast/ruru-components/dist/defaultQuery.js.map new file mode 100644 index 0000000000..f7d9ee3f8b --- /dev/null +++ b/grafast/ruru-components/dist/defaultQuery.js.map @@ -0,0 +1 @@ +{"version":3,"file":"defaultQuery.js","sourceRoot":"","sources":["../src/defaultQuery.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC3B,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useExplain.d.ts b/grafast/ruru-components/dist/hooks/useExplain.d.ts new file mode 100644 index 0000000000..e501f4ad36 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useExplain.d.ts @@ -0,0 +1,18 @@ +import type { ExplainResults } from "./useFetcher.js"; +import type { RuruStorage } from "./useStorage.js"; +export interface ExplainHelpers { + showExplain: boolean; + explainSize: number; + explainAtBottom: boolean; + setExplainSize: (newSize: number) => void; + setExplainAtBottom: (atBottom: boolean) => void; + setShowExplain: (newShow: boolean) => void; +} +export declare const ExplainContext: import("react").Context<{ + explainHelpers: ExplainHelpers; + explain: boolean; + setExplain: (newExplain: boolean) => void; + explainResults: ExplainResults | null; +}>; +export declare const useExplain: (storage: RuruStorage) => ExplainHelpers; +//# sourceMappingURL=useExplain.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useExplain.d.ts.map b/grafast/ruru-components/dist/hooks/useExplain.d.ts.map new file mode 100644 index 0000000000..b9e4d112ee --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useExplain.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useExplain.d.ts","sourceRoot":"","sources":["../../src/hooks/useExplain.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED,eAAO,MAAM,cAAc;oBACT,cAAc;aACrB,OAAO;gBACJ,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI;oBACzB,cAAc,GAAG,IAAI;EAarC,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,KAAG,cA0CjD,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useExplain.js b/grafast/ruru-components/dist/hooks/useExplain.js new file mode 100644 index 0000000000..8e4ff5756f --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useExplain.js @@ -0,0 +1,43 @@ +import { createContext, useCallback, useState } from "react"; +export const ExplainContext = createContext({ + explainHelpers: { + showExplain: false, + explainSize: 0, + explainAtBottom: true, + setExplainSize: () => { }, + setExplainAtBottom: () => { }, + setShowExplain: () => { }, + }, + explain: true, + setExplain: () => { }, + explainResults: null, +}); +export const useExplain = (storage) => { + const [showExplain, _setShowExplain] = useState(storage.get("explainIsOpen") === "true"); + const [explainSize, _setExplainSize] = useState(parseInt(storage.get("explainSize") ?? "", 10) || 300); + const [explainAtBottom, _setExplainAtBottom] = useState([null, "true"].includes(storage.get("explainAtBottom"))); + const setShowExplain = useCallback((nextShowExplain) => { + _setShowExplain(nextShowExplain); + if (nextShowExplain) { + storage.set("explain", "true"); + } + storage.set("explainIsOpen", nextShowExplain ? "true" : ""); + }, [storage]); + const setExplainAtBottom = useCallback((nextAtBottom) => { + _setExplainAtBottom(nextAtBottom); + storage.set("explainAtBottom", nextAtBottom ? "true" : ""); + }, [storage]); + const setExplainSize = useCallback((nextSize) => { + _setExplainSize(nextSize); + storage.set("explainSize", String(nextSize)); + }, [storage]); + return { + showExplain, + explainSize, + explainAtBottom, + setExplainSize, + setExplainAtBottom, + setShowExplain, + }; +}; +//# sourceMappingURL=useExplain.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useExplain.js.map b/grafast/ruru-components/dist/hooks/useExplain.js.map new file mode 100644 index 0000000000..1e7b6f833c --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useExplain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"useExplain.js","sourceRoot":"","sources":["../../src/hooks/useExplain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAc7D,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAKxC;IACD,cAAc,EAAE;QACd,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,IAAI;QACrB,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;QACxB,kBAAkB,EAAE,GAAG,EAAE,GAAE,CAAC;QAC5B,cAAc,EAAE,GAAG,EAAE,GAAE,CAAC;KACzB;IACD,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;IACpB,cAAc,EAAE,IAAI;CACrB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAkB,EAAE;IACjE,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,QAAQ,CAC7C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,MAAM,CACxC,CAAC;IACF,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,QAAQ,CAC7C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CACtD,CAAC;IACF,MAAM,CAAC,eAAe,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CACrD,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CACxD,CAAC;IACF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,eAAwB,EAAE,EAAE;QAC3B,eAAe,CAAC,eAAe,CAAC,CAAC;QACjC,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IACF,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,YAAqB,EAAE,EAAE;QACxB,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IACF,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,QAAgB,EAAE,EAAE;QACnB,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IACF,OAAO;QACL,WAAW;QACX,WAAW;QACX,eAAe;QACf,cAAc;QACd,kBAAkB;QAClB,cAAc;KACf,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useFetcher.d.ts b/grafast/ruru-components/dist/hooks/useFetcher.d.ts new file mode 100644 index 0000000000..f5e1fa5be7 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useFetcher.d.ts @@ -0,0 +1,29 @@ +import type { FetcherParams, FetcherReturnType } from "@graphiql/toolkit"; +import type { GrafastPlanJSON } from "grafast"; +import type { RuruProps } from "../interfaces.js"; +export interface IExplainedOperation { + type: string; + title: string; +} +export interface ExplainedSQLOperation extends IExplainedOperation { + type: "sql"; + query: string; + explain?: string; +} +export interface ExplainedPlanOperation extends IExplainedOperation { + type: "plan"; + plan: GrafastPlanJSON; +} +export type ExplainedOperation = ExplainedSQLOperation | ExplainedPlanOperation; +export interface ExplainResults { + operations: Array; +} +export declare const useFetcher: (props: RuruProps, options?: { + explain?: boolean; + verbose?: boolean; +}) => { + fetcher: (graphQLParams: FetcherParams, opts?: import("@graphiql/toolkit").FetcherOpts | undefined) => Promise>; + explainResults: ExplainResults | null; + streamEndpoint: string | null; +}; +//# sourceMappingURL=useFetcher.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useFetcher.d.ts.map b/grafast/ruru-components/dist/hooks/useFetcher.d.ts.map new file mode 100644 index 0000000000..9f58cfd700 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useFetcher.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useFetcher.d.ts","sourceRoot":"","sources":["../../src/hooks/useFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EACb,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAK/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,MAAM,kBAAkB,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;CACvC;AAwDD,eAAO,MAAM,UAAU,GACrB,OAAO,SAAS,EAChB,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO;2GAqIjD,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;;;CA0CzC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useFetcher.js b/grafast/ruru-components/dist/hooks/useFetcher.js new file mode 100644 index 0000000000..ed2eb67f5e --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useFetcher.js @@ -0,0 +1,191 @@ +import { createGraphiQLFetcher, isAsyncIterable, isPromise, } from "@graphiql/toolkit"; +import { getOperationAST, parse } from "graphql"; +import { useEffect, useMemo, useState } from "react"; +const isExplainOperationLike = (op) => { + return (typeof op === "object" && + op && + typeof op.type === "string" && + typeof op.title === "string"); +}; +const isExplainResultsLike = (explain) => { + return (explain && + Array.isArray(explain.operations) && + explain.operations.every(isExplainOperationLike)); +}; +const isIntrospectionQuery = (params) => { + try { + if (params.operationName === "IntrospectionQuery") { + return true; + } + if (params.operationName) { + return false; + } + const ast = parse(params.query); + const def = getOperationAST(ast, params.operationName); + if (def?.name?.value === "IntrospectionQuery") { + return true; + } + return false; + } + catch (e) { + return false; + } +}; +function makeWsUrl(url) { + if (url.startsWith("/")) { + return `ws${window.location.protocol === "https:" ? "s" : ""}://${window.location.host}${url}`; + } + else if (/^https?:\/\//.test(url)) { + return `ws${url.substring(4)}`; + } + else { + return url; + } +} +function hideProperty(obj, property) { + const value = obj[property]; + delete obj[property]; + Object.defineProperty(obj, property, { value, enumerable: false }); +} +export const useFetcher = (props, options = {}) => { + const [streamEndpoint, setStreamEndpoint] = useState(null); + const endpoint = props.endpoint ?? "/graphql"; + const url = endpoint.startsWith("/") + ? (typeof window !== "undefined" ? window.location.origin : "") + endpoint + : endpoint; + const subscriptionUrl = props.subscriptionEndpoint + ? makeWsUrl(props.subscriptionEndpoint) + : props.endpoint + ? makeWsUrl(props.endpoint) + : undefined; + const [explainResults, setExplainResults] = useState(null); + // Reset the stream endpoint every time the URL changes. + useEffect(() => { + if (url) { + setStreamEndpoint(null); + } + }, [url]); + const explain = options.explain && + (!props.debugTools || props.debugTools.includes("explain")); + const verbose = !!options.verbose; + const ourFetch = useMemo(() => { + return (...args) => { + const result = fetch(...args); + result.then((response) => { + const stream = response.headers.get("X-GraphQL-Event-Stream"); + if (typeof stream === "string") { + const streamUrl = new URL(stream, url); + setStreamEndpoint(streamUrl.toString()); + } + }, () => { }); + return result; + }; + }, [url]); + const fetcherOptions = useMemo(() => { + const headers = explain + ? { "X-PostGraphile-Explain": "on", "X-GraphQL-Explain": "plan,sql" } + : {}; + return { + url, + headers, + wsConnectionParams: headers, + fetch: ourFetch, + subscriptionUrl, + }; + }, [explain, url, subscriptionUrl, ourFetch]); + const fetcher = useMemo(() => props.fetcher ?? createGraphiQLFetcher(fetcherOptions), [fetcherOptions, props.fetcher]); + const wrappedFetcher = useMemo(() => { + const processPayload = (inResult) => { + if (inResult == null) { + return inResult; + } + if (Array.isArray(inResult)) { + return inResult.map(processPayload); + } + // Mutable result + const result = { + ...inResult, + ...(inResult.extensions + ? { extensions: { ...inResult.extensions } } + : null), + }; + // Legacy PostGraphile v4 support + const legacy = result.explain; + if (result.extensions?.explain) { + const explain = result.extensions.explain; + if (typeof explain === "object" && isExplainResultsLike(explain)) { + setTimeout(() => { + setExplainResults(explain); + }, 100); + } + else { + console.warn("The response had `extensions.explain` set, but in an incompatible format."); + } + // Hide it if not verbose + if (!verbose) { + if (Object.keys(result.extensions).length === 1) { + hideProperty(result, "extensions"); + } + else { + hideProperty(result.extensions, "explain"); + } + } + } + else if (legacy) { + setTimeout(() => { + setExplainResults({ + operations: legacy.map((l, i) => ({ + type: "sql", + title: `Legacy explain ${i + 1}`, + query: l.query, + explain: l.plan, + })), + }); + }, 100); + } + return result; + }; + return async function (...args) { + const result = await fetcher(...args); + // Short circuit the introspection query so as to not confuse people + if (isIntrospectionQuery(args[0])) { + return result; + } + setTimeout(() => { + setExplainResults(null); + }, 100); + if ("subscribe" in result) { + // TODO: support wrapping subscriptions + return result; + } + else if (isAsyncIterable(result)) { + const iterator = result[Symbol.asyncIterator](); + // Return a new iterator, equivalent to the old, but that calls 'processPayload' + return { + throw: iterator.throw?.bind(iterator), + return: iterator.return?.bind(iterator), + next(...args) { + const n = iterator.next(...args); + if (isPromise(n)) { + return n.then(({ done, value }) => { + return { done, value: processPayload(value) }; + }); + } + else { + const { done, value } = n; + return { done, value: processPayload(value) }; + } + }, + [Symbol.asyncIterator]() { + return this; + }, + }; + } + else { + return processPayload(result); + } + }; + }, [fetcher, verbose]); + return { fetcher: wrappedFetcher, explainResults, streamEndpoint }; +}; +//# sourceMappingURL=useFetcher.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useFetcher.js.map b/grafast/ruru-components/dist/hooks/useFetcher.js.map new file mode 100644 index 0000000000..90a6116b1e --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useFetcher.js.map @@ -0,0 +1 @@ +{"version":3,"file":"useFetcher.js","sourceRoot":"","sources":["../../src/hooks/useFetcher.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts new file mode 100644 index 0000000000..d9f4a15ca0 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts @@ -0,0 +1,5 @@ +import type { RuruProps } from "../interfaces.js"; +export declare const useGraphQLChangeStream: (props: RuruProps, refetch: () => void, streamEndpoint: string | null) => { + error: Error | null; +}; +//# sourceMappingURL=useGraphQLChangeStream.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts.map b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts.map new file mode 100644 index 0000000000..214a433b10 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useGraphQLChangeStream.d.ts","sourceRoot":"","sources":["../../src/hooks/useGraphQLChangeStream.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,sBAAsB,GACjC,OAAO,SAAS,EAChB,SAAS,MAAM,IAAI,EACnB,gBAAgB,MAAM,GAAG,IAAI;;CA0D9B,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js new file mode 100644 index 0000000000..91b986cc0f --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js @@ -0,0 +1,52 @@ +import { useEffect, useRef, useState } from "react"; +export const useGraphQLChangeStream = (props, refetch, streamEndpoint) => { + const [error, setError] = useState(null); + const eventSourceRef = useRef(null); + // Starts listening to the event stream at the `sourceUrl`. + useEffect(() => { + eventSourceRef.current = streamEndpoint + ? new EventSource(streamEndpoint, props.eventSourceInit) + : null; + const eventSource = eventSourceRef.current; + return () => { + if (eventSource) { + eventSource.close(); + if (eventSourceRef.current !== eventSource) { + console.error("Logic error in EventSource handling in useGraphQLChangeStream"); + } + eventSourceRef.current = null; + } + }; + }, [streamEndpoint]); + const eventSource = eventSourceRef.current; + useEffect(() => { + if (eventSource) { + if (eventSource.readyState === eventSource.CLOSED) { + console.warn("Ruru: EventSource is closed, reopening"); + setError(new Error("Ruru: EventSource is closed, reopening")); + } + const onOpen = () => { + console.log("Ruru: Listening for server sent events"); + setError(null); + refetch(); + }; + const onError = (error) => { + console.error("Ruru: Failed to connect to event stream", error); + setError(new Error("Failed to connect to event stream")); + }; + // When we get a change notification, we want to update our schema. + eventSource.addEventListener("change", refetch, false); + // Add event listeners that just log things in the console. + eventSource.addEventListener("open", onOpen, false); + eventSource.addEventListener("error", onError, false); + // Make sure to unsubscribe when we're not needed any more. + return () => { + eventSource.removeEventListener("change", refetch, false); + eventSource.removeEventListener("open", onOpen, false); + eventSource.removeEventListener("error", onError, false); + }; + } + }, [error, eventSource, refetch, streamEndpoint]); + return { error }; +}; +//# sourceMappingURL=useGraphQLChangeStream.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js.map b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js.map new file mode 100644 index 0000000000..6e4efa6fd6 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useGraphQLChangeStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"useGraphQLChangeStream.js","sourceRoot":"","sources":["../../src/hooks/useGraphQLChangeStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAgB,EAChB,OAAmB,EACnB,cAA6B,EAC7B,EAAE;IACF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,cAAc,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAExD,2DAA2D;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,cAAc;YACrC,CAAC,CAAC,IAAI,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC;YACxD,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;QAC3C,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW,CAAC,KAAK,EAAE,CAAC;gBACpB,IAAI,cAAc,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;oBAC3C,OAAO,CAAC,KAAK,CACX,+DAA+D,CAChE,CAAC;gBACJ,CAAC;gBACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAChC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,WAAW,CAAC,UAAU,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;gBAClD,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACvD,QAAQ,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAChE,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC,CAAC;gBAChE,QAAQ,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC3D,CAAC,CAAC;YAEF,mEAAmE;YACnE,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACvD,2DAA2D;YAC3D,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACpD,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAEtD,2DAA2D;YAC3D,OAAO,GAAG,EAAE;gBACV,WAAW,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC1D,WAAW,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBACvD,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/usePrettify.d.ts b/grafast/ruru-components/dist/hooks/usePrettify.d.ts new file mode 100644 index 0000000000..f7e4d09518 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/usePrettify.d.ts @@ -0,0 +1,12 @@ +declare global { + interface Window { + prettier: any; + prettierPlugins: any; + } +} +/** + * Prettifies with 'prettier' if available, otherwise using GraphiQL's built in + * prettify. + */ +export declare const usePrettify: () => () => void; +//# sourceMappingURL=usePrettify.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/usePrettify.d.ts.map b/grafast/ruru-components/dist/hooks/usePrettify.d.ts.map new file mode 100644 index 0000000000..bb1c9afe04 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/usePrettify.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"usePrettify.d.ts","sourceRoot":"","sources":["../../src/hooks/usePrettify.tsx"],"names":[],"mappings":"AAGA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,QAAQ,EAAE,GAAG,CAAC;QACd,eAAe,EAAE,GAAG,CAAC;KACtB;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,kBAwBvB,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/usePrettify.js b/grafast/ruru-components/dist/hooks/usePrettify.js new file mode 100644 index 0000000000..313e0114e1 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/usePrettify.js @@ -0,0 +1,29 @@ +import { useEditorContext, usePrettifyEditors } from "@graphiql/react"; +import { useCallback } from "react"; +/** + * Prettifies with 'prettier' if available, otherwise using GraphiQL's built in + * prettify. + */ +export const usePrettify = () => { + const editorContext = useEditorContext(); + const fallbackPrettify = usePrettifyEditors(); + return useCallback(() => { + const queryEditor = editorContext?.queryEditor; + if (!queryEditor) { + return; + } + if (queryEditor && + typeof window.prettier !== "undefined" && + typeof window.prettierPlugins !== "undefined") { + // TODO: window.prettier.formatWithCursor + queryEditor.setValue(window.prettier.format(queryEditor.getValue(), { + parser: "graphql", + plugins: window.prettierPlugins, + })); + } + else { + fallbackPrettify(); + } + }, [editorContext?.queryEditor, fallbackPrettify]); +}; +//# sourceMappingURL=usePrettify.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/usePrettify.js.map b/grafast/ruru-components/dist/hooks/usePrettify.js.map new file mode 100644 index 0000000000..91c411ba19 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/usePrettify.js.map @@ -0,0 +1 @@ +{"version":3,"file":"usePrettify.js","sourceRoot":"","sources":["../../src/hooks/usePrettify.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AASpC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,gBAAgB,GAAG,kBAAkB,EAAE,CAAC;IAC9C,OAAO,WAAW,CAAC,GAAG,EAAE;QACtB,MAAM,WAAW,GAAG,aAAa,EAAE,WAAW,CAAC;QAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IACE,WAAW;YACX,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW;YACtC,OAAO,MAAM,CAAC,eAAe,KAAK,WAAW,EAC7C,CAAC;YACD,yCAAyC;YACzC,WAAW,CAAC,QAAQ,CAClB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE;gBAC7C,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,MAAM,CAAC,eAAe;aAChC,CAAC,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,gBAAgB,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useStorage.d.ts b/grafast/ruru-components/dist/hooks/useStorage.d.ts new file mode 100644 index 0000000000..7ee6b4b7a7 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useStorage.d.ts @@ -0,0 +1,16 @@ +export interface StoredKeys { + saveHeaders: "true" | ""; + explain: "true" | ""; + explorerIsOpen: "true" | ""; + explainIsOpen: "true" | ""; + explainAtBottom: "true" | ""; + explainSize: string; + verbose: "true" | ""; +} +export interface RuruStorage { + get(key: TKey): StoredKeys[TKey] | null; + set(key: TKey, value: StoredKeys[TKey]): void; + toggle(key: TKey): void; +} +export declare const useStorage: () => RuruStorage; +//# sourceMappingURL=useStorage.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useStorage.d.ts.map b/grafast/ruru-components/dist/hooks/useStorage.d.ts.map new file mode 100644 index 0000000000..6074393653 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useStorage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"useStorage.d.ts","sourceRoot":"","sources":["../../src/hooks/useStorage.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,GAAG,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,GAAG,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC;CACtB;AAcD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,IAAI,SAAS,MAAM,UAAU,EAAE,GAAG,EAAE,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACvE,GAAG,CAAC,IAAI,SAAS,MAAM,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7E,MAAM,CAAC,IAAI,SAAS,MAAM,UAAU,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;CACxD;AAED,eAAO,MAAM,UAAU,QAAO,WA4C7B,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useStorage.js b/grafast/ruru-components/dist/hooks/useStorage.js new file mode 100644 index 0000000000..62b286a18e --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useStorage.js @@ -0,0 +1,57 @@ +import { useMemo, useState } from "react"; +const KEYS = { + saveHeaders: "Ruru:saveHeadersText", + explain: "Ruru:explain", + explainSize: "Ruru:explainSize", + explainIsOpen: "Ruru:explainIsOpen", + explainAtBottom: "Ruru:explainAtBottom", + explorerIsOpen: "graphiql:explorerIsOpen", + verbose: "Ruru:verbose", +}; +const up = (v) => v + 1; +export const useStorage = () => { + const storage = typeof window !== "undefined" ? window.localStorage : null; + // Trigger re-render every time we set + const [revision, bump] = useState(0); + const [cache] = useState(Object.create(null)); + return useMemo(() => { + if (!storage) { + return { + _revision: revision, + get(key) { + return cache[key] ?? null; + }, + set(key, value) { + cache[key] = value; + }, + toggle(key) { + cache[key] = cache[key] ? "" : "true"; + }, + }; + } + return { + _revision: revision, + get(key) { + const val = storage.getItem(KEYS[key]); + if (val === "null" || val === "undefined") { + storage.removeItem(KEYS[key]); + return null; + } + return val ?? null; + }, + set(key, value) { + storage.setItem(KEYS[key], value); + bump(up); + }, + toggle(key) { + if (this.get(key)) { + this.set(key, ""); + } + else { + this.set(key, "true"); + } + }, + }; + }, [storage, revision, cache]); +}; +//# sourceMappingURL=useStorage.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/hooks/useStorage.js.map b/grafast/ruru-components/dist/hooks/useStorage.js.map new file mode 100644 index 0000000000..f4fda5f156 --- /dev/null +++ b/grafast/ruru-components/dist/hooks/useStorage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"useStorage.js","sourceRoot":"","sources":["../../src/hooks/useStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAY1C,MAAM,IAAI,GAA0C;IAClD,WAAW,EAAE,sBAAsB;IACnC,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,kBAAkB;IAC/B,aAAa,EAAE,oBAAoB;IACnC,eAAe,EAAE,sBAAsB;IACvC,cAAc,EAAE,yBAAyB;IACzC,OAAO,EAAE,cAAc;CACxB,CAAC;AAEF,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAQhC,MAAM,CAAC,MAAM,UAAU,GAAG,GAAgB,EAAE;IAC1C,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,sCAAsC;IACtC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAsB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnE,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,SAAS,EAAE,QAAQ;gBACnB,GAAG,CAAC,GAAG;oBACL,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;gBAC5B,CAAC;gBACD,GAAG,CAAC,GAAG,EAAE,KAAK;oBACZ,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACrB,CAAC;gBACD,MAAM,CAAC,GAAG;oBACR,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;gBACxC,CAAC;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,SAAS,EAAE,QAAQ;YACnB,GAAG,CAAC,GAAG;gBACL,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAQ,CAAC;gBAC9C,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;oBAC1C,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC9B,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,GAAG,IAAI,IAAI,CAAC;YACrB,CAAC;YACD,GAAG,CAAC,GAAG,EAAE,KAAK;gBACZ,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;gBAClC,IAAI,CAAC,EAAE,CAAC,CAAC;YACX,CAAC;YACD,MAAM,CAAC,GAAG;gBACR,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACpB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACjC,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/index.d.ts b/grafast/ruru-components/dist/index.d.ts new file mode 100644 index 0000000000..bcbcd53302 --- /dev/null +++ b/grafast/ruru-components/dist/index.d.ts @@ -0,0 +1,3 @@ +export { Fetcher, RuruProps } from "./interfaces.js"; +export { Ruru } from "./ruru.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/index.d.ts.map b/grafast/ruru-components/dist/index.d.ts.map new file mode 100644 index 0000000000..4655fdd00c --- /dev/null +++ b/grafast/ruru-components/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/index.js b/grafast/ruru-components/dist/index.js new file mode 100644 index 0000000000..8e4bf251eb --- /dev/null +++ b/grafast/ruru-components/dist/index.js @@ -0,0 +1,2 @@ +export { Ruru } from "./ruru.js"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/index.js.map b/grafast/ruru-components/dist/index.js.map new file mode 100644 index 0000000000..8009e7b462 --- /dev/null +++ b/grafast/ruru-components/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/interfaces.d.ts b/grafast/ruru-components/dist/interfaces.d.ts new file mode 100644 index 0000000000..cf33165822 --- /dev/null +++ b/grafast/ruru-components/dist/interfaces.d.ts @@ -0,0 +1,71 @@ +import type { Fetcher } from "@graphiql/toolkit"; +import type { GraphiQLProps } from "graphiql"; +export { Fetcher }; +/** + * The `EventSource` specification only specifies the `withCredentials` option, + * but some implementations support additional options. Our configuration + * allows arbitrary options. + */ +interface RuruEventSourceInit extends EventSourceInit, Record { +} +export interface RuruProps { + /** + * Optionally override the fetcher. + */ + fetcher?: Fetcher; + /** + * The URL to the GraphQL endpoint. (http:// or https://) + */ + endpoint?: string; + /** + * The URL to the GraphQL subscriptions endpoint. (ws:// or wss://) + */ + subscriptionEndpoint?: string; + editorTheme?: GraphiQLProps["editorTheme"]; + /** + * The list of debug tools available to the user. + * + * explain - output the SQL executed + * plan - output the plan executed + */ + debugTools?: Array<"explain" | "plan">; + /** + * The query to use when the user has never visited the page before (unless `initialQuery` is set). + */ + defaultQuery?: string; + /** + * @deprecated Use `query` instead + */ + initialQuery?: string; + /** + * @deprecated Use `variables` instead + */ + initialVariables?: string; + /** + * The query to prepopulate the editor with. + */ + query?: string; + /** + * The variables to prepopulate the editor with. + */ + variables?: string; + /** + * Callback executed when the current query changes. + */ + onEditQuery?: GraphiQLProps["onEditQuery"]; + /** + * Callback executed when the variables change. + */ + onEditVariables?: GraphiQLProps["onEditVariables"]; + /** + * Will be passed to `new EventSource(url, eventSourceInit)`. + * + * Per the specification, the only option is `withCredentials`; however, some + * implementations support additional options. For example: + * + * - `reconnectInterval: 1000` + * - `maxReconnectAttempts: 3` + */ + eventSourceInit?: RuruEventSourceInit; +} +//# sourceMappingURL=interfaces.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/interfaces.d.ts.map b/grafast/ruru-components/dist/interfaces.d.ts.map new file mode 100644 index 0000000000..743cb21f15 --- /dev/null +++ b/grafast/ruru-components/dist/interfaces.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB;;;;GAIG;AACH,UAAU,mBAAoB,SAAQ,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;CAAG;AAE7E,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAE3C;;;;;OAKG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAEvC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAE3C;;OAEG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAEnD;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/interfaces.js b/grafast/ruru-components/dist/interfaces.js new file mode 100644 index 0000000000..c30bb68c19 --- /dev/null +++ b/grafast/ruru-components/dist/interfaces.js @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=interfaces.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/interfaces.js.map b/grafast/ruru-components/dist/interfaces.js.map new file mode 100644 index 0000000000..8fb5f7d179 --- /dev/null +++ b/grafast/ruru-components/dist/interfaces.js.map @@ -0,0 +1 @@ +{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/grafast/ruru-components/dist/plugins/explain.d.ts b/grafast/ruru-components/dist/plugins/explain.d.ts new file mode 100644 index 0000000000..6d80ba6949 --- /dev/null +++ b/grafast/ruru-components/dist/plugins/explain.d.ts @@ -0,0 +1,3 @@ +import type { GraphiQLPlugin } from "@graphiql/react"; +export declare const EXPLAIN_PLUGIN: GraphiQLPlugin; +//# sourceMappingURL=explain.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/plugins/explain.d.ts.map b/grafast/ruru-components/dist/plugins/explain.d.ts.map new file mode 100644 index 0000000000..9db8160b4d --- /dev/null +++ b/grafast/ruru-components/dist/plugins/explain.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/plugins/explain.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA6BtD,eAAO,MAAM,cAAc,EAAE,cAI5B,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/plugins/explain.js b/grafast/ruru-components/dist/plugins/explain.js new file mode 100644 index 0000000000..da8a6f31a1 --- /dev/null +++ b/grafast/ruru-components/dist/plugins/explain.js @@ -0,0 +1,15 @@ +import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; +import { MagnifyingGlassIcon } from "@graphiql/react"; +import { useContext } from "react"; +import { Explain } from "../components/Explain.js"; +import { ExplainContext } from "../hooks/useExplain.js"; +const ExplainPanel = () => { + const { explainHelpers, explain, explainResults, setExplain } = useContext(ExplainContext); + return (_jsxs("div", { children: [_jsx("div", { className: "graphiql-doc-explorer-header", children: _jsx("div", { className: "graphiql-doc-explorer-title", children: "Explain" }) }), _jsx("div", { className: "graphiql-doc-explorer-content", children: _jsx(Explain, { explain: explain, setExplain: setExplain, helpers: explainHelpers, results: explainResults }) })] })); +}; +export const EXPLAIN_PLUGIN = { + title: "Explain", + icon: MagnifyingGlassIcon, + content: ExplainPanel, +}; +//# sourceMappingURL=explain.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/plugins/explain.js.map b/grafast/ruru-components/dist/plugins/explain.js.map new file mode 100644 index 0000000000..bb60889443 --- /dev/null +++ b/grafast/ruru-components/dist/plugins/explain.js.map @@ -0,0 +1 @@ +{"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/plugins/explain.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,YAAY,GAAO,GAAG,EAAE;IAC5B,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,GAC3D,UAAU,CAAC,cAAc,CAAC,CAAC;IAE7B,OAAO,CACL,0BACE,cAAK,SAAS,EAAC,8BAA8B,YAC3C,cAAK,SAAS,EAAC,6BAA6B,wBAAc,GACtD,EACN,cAAK,SAAS,EAAC,+BAA+B,YAC5C,KAAC,OAAO,IACN,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,GACvB,GACE,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,YAAY;CACtB,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/ruru.d.ts b/grafast/ruru-components/dist/ruru.d.ts new file mode 100644 index 0000000000..cedea0ce03 --- /dev/null +++ b/grafast/ruru-components/dist/ruru.d.ts @@ -0,0 +1,15 @@ +import type { GraphiQLProps } from "graphiql"; +import type { FC } from "react"; +import type { RuruStorage } from "./hooks/useStorage.js"; +import type { RuruProps } from "./interfaces.js"; +export declare const Ruru: FC; +export declare const RuruInner: FC<{ + editorTheme?: string; + storage: RuruStorage; + error: Error | null; + setError: React.Dispatch>; + onEditQuery?: GraphiQLProps["onEditQuery"]; + onEditVariables?: GraphiQLProps["onEditVariables"]; + streamEndpoint: string | null; +}>; +//# sourceMappingURL=ruru.d.ts.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/ruru.d.ts.map b/grafast/ruru-components/dist/ruru.d.ts.map new file mode 100644 index 0000000000..be6e83999c --- /dev/null +++ b/grafast/ruru-components/dist/ruru.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ruru.d.ts","sourceRoot":"","sources":["../src/ruru.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAUhC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAkD9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7D,WAAW,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC3C,eAAe,CAAC,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CA2HA,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/dist/ruru.js b/grafast/ruru-components/dist/ruru.js new file mode 100644 index 0000000000..2a123aa0fa --- /dev/null +++ b/grafast/ruru-components/dist/ruru.js @@ -0,0 +1,70 @@ +import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; +import { explorerPlugin as makeExplorerPlugin } from "@graphiql/plugin-explorer"; +import { CopyIcon, GraphiQLProvider as GP2, MergeIcon, PrettifyIcon, SettingsIcon, ToolbarButton, ToolbarMenu, useCopyQuery, useMergeQuery, useSchemaContext, } from "@graphiql/react"; +import { GraphiQL, GraphiQLInterface, GraphiQLProvider } from "graphiql"; +import { useCallback, useState } from "react"; +import { ErrorPopup } from "./components/ErrorPopup.js"; +import { RuruFooter } from "./components/Footer.js"; +import { defaultQuery as DEFAULT_QUERY } from "./defaultQuery.js"; +import { ExplainContext, useExplain } from "./hooks/useExplain.js"; +import { useFetcher } from "./hooks/useFetcher.js"; +import { useGraphQLChangeStream } from "./hooks/useGraphQLChangeStream.js"; +import { usePrettify } from "./hooks/usePrettify.js"; +import { useStorage } from "./hooks/useStorage.js"; +import { EXPLAIN_PLUGIN } from "./plugins/explain.js"; +if (GP2 !== GraphiQLProvider) { + throw new Error("PACKAGE MANAGEMENT ERROR! The providers don't match up!"); +} +const checkCss = { width: "1.5rem", display: "inline-block" }; +const check = _jsx("span", { style: checkCss, children: "\u2714" }); +const nocheck = _jsx("span", { style: checkCss }); +const explorerPlugin = makeExplorerPlugin({ + showAttribution: false, +}); +const plugins = [explorerPlugin, EXPLAIN_PLUGIN]; +export const Ruru = (props) => { + const storage = useStorage(); + const explain = storage.get("explain") === "true"; + const verbose = storage.get("verbose") === "true"; + const saveHeaders = storage.get("saveHeaders") === "true"; + const setExplain = useCallback((newExplain) => { + storage.set("explain", newExplain ? "true" : ""); + }, [storage]); + const { fetcher, explainResults, streamEndpoint } = useFetcher(props, { + explain, + verbose, + }); + const [error, setError] = useState(null); + const explainHelpers = useExplain(storage); + const defaultQuery = props.defaultQuery ?? DEFAULT_QUERY; + return ( + //EditorContextProvider + _jsx(ExplainContext.Provider, { value: { + explainHelpers, + explain, + setExplain, + explainResults, + }, children: _jsx(GraphiQLProvider, { inputValueDeprecation: true, schemaDescription: true, fetcher: fetcher, defaultQuery: defaultQuery, query: props.query ?? props.initialQuery, variables: props.variables ?? props.initialVariables, plugins: plugins, shouldPersistHeaders: saveHeaders, children: _jsx(RuruInner, { storage: storage, editorTheme: props.editorTheme, error: error, setError: setError, onEditQuery: props.onEditQuery, onEditVariables: props.onEditVariables, streamEndpoint: streamEndpoint }) }) })); +}; +export const RuruInner = (props) => { + const { storage, editorTheme, error, setError, onEditQuery, onEditVariables, streamEndpoint, } = props; + const prettify = usePrettify(); + const mergeQuery = useMergeQuery(); + const copyQuery = useCopyQuery(); + const schemaContext = useSchemaContext({ nonNull: true }); + useGraphQLChangeStream(props, schemaContext.introspect, streamEndpoint); + return (_jsxs("div", { className: "graphiql-container", style: { + position: "absolute", + width: "100%", + height: "100%", + display: "flex", + flexDirection: "column", + overflow: "hidden", + }, children: [_jsx("div", { style: { + display: "flex", + flex: "1 1 100%", + overflow: "hidden", + position: "relative", + }, children: _jsxs(GraphiQLInterface, { editorTheme: editorTheme ?? "graphiql", onEditQuery: onEditQuery, onEditVariables: onEditVariables, children: [_jsx(GraphiQL.Logo, { children: _jsx("a", { href: "https://grafast.org/ruru", style: { textDecoration: "none" }, target: "_blank", rel: "noreferrer", children: "Ruru" }) }), _jsxs(GraphiQL.Toolbar, { children: [_jsx(ToolbarButton, { onClick: prettify, label: "Prettify Query (Shift-Ctrl-P)", children: _jsx(PrettifyIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" }) }), _jsx(ToolbarButton, { onSelect: mergeQuery, label: "Merge Query (Shift-Ctrl-M)", children: _jsx(MergeIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" }) }), _jsx(ToolbarButton, { onClick: copyQuery, label: "Copy query (Shift-Ctrl-C)", children: _jsx(CopyIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" }) }), _jsxs(ToolbarMenu, { label: "Options", button: _jsx(ToolbarButton, { label: "Options", children: _jsx(SettingsIcon, { className: "graphiql-toolbar-icon", "aria-hidden": "true" }) }), children: [_jsx(ToolbarMenu.Item, { title: "View the SQL statements that this query invokes", onSelect: () => storage.toggle("explain"), children: _jsxs("span", { children: [storage.get("explain") === "true" ? check : nocheck, "Explain (if supported)"] }) }), _jsx(ToolbarMenu.Item, { title: "Don't hide explain from results", onSelect: () => storage.toggle("verbose"), children: _jsxs("span", { children: [storage.get("verbose") === "true" ? check : nocheck, "Verbose"] }) }), _jsx(ToolbarMenu.Item, { title: "Should we persist the headers to localStorage? Header editor is next to variable editor at the bottom.", onSelect: () => storage.toggle("saveHeaders"), children: _jsxs("span", { children: [storage.get("saveHeaders") === "true" ? check : nocheck, "Save headers"] }) })] })] }), _jsx(GraphiQL.Footer, { children: _jsx(RuruFooter, {}) })] }) }), error ? (_jsx(ErrorPopup, { error: error, onClose: () => setError(null) })) : null] })); +}; +//# sourceMappingURL=ruru.js.map \ No newline at end of file diff --git a/grafast/ruru-components/dist/ruru.js.map b/grafast/ruru-components/dist/ruru.js.map new file mode 100644 index 0000000000..f213189872 --- /dev/null +++ b/grafast/ruru-components/dist/ruru.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ruru.js","sourceRoot":"","sources":["../src/ruru.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EACL,QAAQ,EACR,gBAAgB,IAAI,GAAG,EACvB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEzE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,YAAY,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;IAC7B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AAC9D,MAAM,KAAK,GAAG,eAAM,KAAK,EAAE,QAAQ,uBAAU,CAAC;AAC9C,MAAM,OAAO,GAAG,eAAM,KAAK,EAAE,QAAQ,GAAS,CAAC;AAE/C,MAAM,cAAc,GAAG,kBAAkB,CAAC;IACxC,eAAe,EAAE,KAAK;CACvB,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,IAAI,GAAkB,CAAC,KAAK,EAAE,EAAE;IAC3C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC;IAClD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,MAAM,CAAC;IAC1D,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,UAAmB,EAAE,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE;QACpE,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,aAAa,CAAC;IACzD,OAAO;IACL,uBAAuB;IACvB,KAAC,cAAc,CAAC,QAAQ,IACtB,KAAK,EAAE;YACL,cAAc;YACd,OAAO;YACP,UAAU;YACV,cAAc;SACf,YAED,KAAC,gBAAgB,IACf,qBAAqB,EAAE,IAAI,EAC3B,iBAAiB,EAAE,IAAI,EACvB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,EACxC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,gBAAgB,EACpD,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,WAAW,YAEjC,KAAC,SAAS,IACR,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,cAAc,EAAE,cAAc,GAC9B,GACe,GACK,CAC3B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAQjB,CAAC,KAAK,EAAE,EAAE;IACb,MAAM,EACJ,OAAO,EACP,WAAW,EACX,KAAK,EACL,QAAQ,EACR,WAAW,EACX,eAAe,EACf,cAAc,GACf,GAAG,KAAK,CAAC;IACV,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,sBAAsB,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAExE,OAAO,CACL,eACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,QAAQ,EAAE,QAAQ;SACnB,aAED,cACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAE,UAAU;iBACrB,YAED,MAAC,iBAAiB,IAChB,WAAW,EAAE,WAAW,IAAI,UAAU,EACtC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,aAEhC,KAAC,QAAQ,CAAC,IAAI,cACZ,YACE,IAAI,EAAC,0BAA0B,EAC/B,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EACjC,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,YAAY,qBAGd,GACU,EAChB,MAAC,QAAQ,CAAC,OAAO,eACf,KAAC,aAAa,IACZ,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAC,+BAA+B,YAErC,KAAC,YAAY,IACX,SAAS,EAAC,uBAAuB,iBACrB,MAAM,GAClB,GACY,EAChB,KAAC,aAAa,IACZ,QAAQ,EAAE,UAAU,EACpB,KAAK,EAAC,4BAA4B,YAElC,KAAC,SAAS,IAAC,SAAS,EAAC,uBAAuB,iBAAa,MAAM,GAAG,GACpD,EAChB,KAAC,aAAa,IACZ,OAAO,EAAE,SAAS,EAClB,KAAK,EAAC,2BAA2B,YAEjC,KAAC,QAAQ,IAAC,SAAS,EAAC,uBAAuB,iBAAa,MAAM,GAAG,GACnD,EAChB,MAAC,WAAW,IACV,KAAK,EAAC,SAAS,EACf,MAAM,EACJ,KAAC,aAAa,IAAC,KAAK,EAAC,SAAS,YAC5B,KAAC,YAAY,IACX,SAAS,EAAC,uBAAuB,iBACrB,MAAM,GAClB,GACY,aAGlB,KAAC,WAAW,CAAC,IAAI,IACf,KAAK,EAAC,iDAAiD,EACvD,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAEzC,2BACG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,8BAE/C,GACU,EACnB,KAAC,WAAW,CAAC,IAAI,IACf,KAAK,EAAC,iCAAiC,EACvC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,YAEzC,2BACG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,eAE/C,GACU,EACnB,KAAC,WAAW,CAAC,IAAI,IACf,KAAK,EAAC,wGAAwG,EAC9G,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,YAE7C,2BACG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,oBAEnD,GACU,IACP,IACG,EACnB,KAAC,QAAQ,CAAC,MAAM,cACd,KAAC,UAAU,KAAG,GACE,IACA,GAChB,EACL,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAI,CAC5D,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/grafast/ruru-components/tsconfig.tsbuildinfo b/grafast/ruru-components/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..57cf395972 --- /dev/null +++ b/grafast/ruru-components/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"fileNames":["../../node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/typescript/lib/lib.es2023.d.ts","../../node_modules/typescript/lib/lib.es2024.d.ts","../../node_modules/typescript/lib/lib.esnext.d.ts","../../node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/typescript/lib/lib.es2023.array.d.ts","../../node_modules/typescript/lib/lib.es2023.collection.d.ts","../../node_modules/typescript/lib/lib.es2023.intl.d.ts","../../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../node_modules/typescript/lib/lib.es2024.collection.d.ts","../../node_modules/typescript/lib/lib.es2024.object.d.ts","../../node_modules/typescript/lib/lib.es2024.promise.d.ts","../../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../node_modules/typescript/lib/lib.es2024.string.d.ts","../../node_modules/typescript/lib/lib.esnext.array.d.ts","../../node_modules/typescript/lib/lib.esnext.collection.d.ts","../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../../node_modules/typescript/lib/lib.esnext.promise.d.ts","../../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../../node_modules/typescript/lib/lib.esnext.float16.d.ts","../../node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/tslib/tslib.d.ts","../../node_modules/tslib/modules/index.d.ts","../../node_modules/@types/react/global.d.ts","../../node_modules/csstype/index.d.ts","../../node_modules/@types/prop-types/index.d.ts","../../node_modules/@types/react/index.d.ts","../../node_modules/@types/react/jsx-runtime.d.ts","./src/defaultquery.ts","../../node_modules/graphql/version.d.ts","../../node_modules/graphql/jsutils/maybe.d.ts","../../node_modules/graphql/language/source.d.ts","../../node_modules/graphql/jsutils/path.d.ts","../../node_modules/graphql/jsutils/promiseorvalue.d.ts","../../node_modules/graphql/jsutils/objmap.d.ts","../../node_modules/graphql/language/kinds.d.ts","../../node_modules/graphql/language/tokenkind.d.ts","../../node_modules/graphql/language/ast.d.ts","../../node_modules/graphql/language/location.d.ts","../../node_modules/graphql/error/graphqlerror.d.ts","../../node_modules/graphql/language/directivelocation.d.ts","../../node_modules/graphql/type/directives.d.ts","../../node_modules/graphql/type/schema.d.ts","../../node_modules/graphql/type/definition.d.ts","../../node_modules/graphql/execution/execute.d.ts","../../node_modules/graphql/graphql.d.ts","../../node_modules/graphql/type/scalars.d.ts","../../node_modules/graphql/type/introspection.d.ts","../../node_modules/graphql/type/validate.d.ts","../../node_modules/graphql/type/assertname.d.ts","../../node_modules/graphql/type/index.d.ts","../../node_modules/graphql/language/printlocation.d.ts","../../node_modules/graphql/language/lexer.d.ts","../../node_modules/graphql/language/parser.d.ts","../../node_modules/graphql/language/printer.d.ts","../../node_modules/graphql/language/visitor.d.ts","../../node_modules/graphql/language/predicates.d.ts","../../node_modules/graphql/language/index.d.ts","../../node_modules/graphql/execution/subscribe.d.ts","../../node_modules/graphql/execution/values.d.ts","../../node_modules/graphql/execution/index.d.ts","../../node_modules/graphql/subscription/index.d.ts","../../node_modules/graphql/utilities/typeinfo.d.ts","../../node_modules/graphql/validation/validationcontext.d.ts","../../node_modules/graphql/validation/validate.d.ts","../../node_modules/graphql/validation/specifiedrules.d.ts","../../node_modules/graphql/validation/rules/deferstreamdirectiveonrootfieldrule.d.ts","../../node_modules/graphql/validation/rules/executabledefinitionsrule.d.ts","../../node_modules/graphql/validation/rules/fieldsoncorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/fragmentsoncompositetypesrule.d.ts","../../node_modules/graphql/validation/rules/knownargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowndirectivesrule.d.ts","../../node_modules/graphql/validation/rules/knownfragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/knowntypenamesrule.d.ts","../../node_modules/graphql/validation/rules/loneanonymousoperationrule.d.ts","../../node_modules/graphql/validation/rules/nofragmentcyclesrule.d.ts","../../node_modules/graphql/validation/rules/noundefinedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/nounusedfragmentsrule.d.ts","../../node_modules/graphql/validation/rules/nounusedvariablesrule.d.ts","../../node_modules/graphql/validation/rules/overlappingfieldscanbemergedrule.d.ts","../../node_modules/graphql/validation/rules/possiblefragmentspreadsrule.d.ts","../../node_modules/graphql/validation/rules/providedrequiredargumentsrule.d.ts","../../node_modules/graphql/validation/rules/scalarleafsrule.d.ts","../../node_modules/graphql/validation/rules/singlefieldsubscriptionsrule.d.ts","../../node_modules/graphql/validation/rules/streamdirectiveonlistfieldrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivesperlocationrule.d.ts","../../node_modules/graphql/validation/rules/uniquefragmentnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueinputfieldnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquevariablenamesrule.d.ts","../../node_modules/graphql/validation/rules/valuesofcorrecttyperule.d.ts","../../node_modules/graphql/validation/rules/variablesareinputtypesrule.d.ts","../../node_modules/graphql/validation/rules/variablesinallowedpositionrule.d.ts","../../node_modules/graphql/validation/rules/loneschemadefinitionrule.d.ts","../../node_modules/graphql/validation/rules/uniqueoperationtypesrule.d.ts","../../node_modules/graphql/validation/rules/uniquetypenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueenumvaluenamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquefielddefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniqueargumentdefinitionnamesrule.d.ts","../../node_modules/graphql/validation/rules/uniquedirectivenamesrule.d.ts","../../node_modules/graphql/validation/rules/possibletypeextensionsrule.d.ts","../../node_modules/graphql/validation/rules/custom/nodeprecatedcustomrule.d.ts","../../node_modules/graphql/validation/rules/custom/noschemaintrospectioncustomrule.d.ts","../../node_modules/graphql/validation/index.d.ts","../../node_modules/graphql/error/syntaxerror.d.ts","../../node_modules/graphql/error/locatederror.d.ts","../../node_modules/graphql/error/index.d.ts","../../node_modules/graphql/utilities/getintrospectionquery.d.ts","../../node_modules/graphql/utilities/getoperationast.d.ts","../../node_modules/graphql/utilities/getoperationroottype.d.ts","../../node_modules/graphql/utilities/introspectionfromschema.d.ts","../../node_modules/graphql/utilities/buildclientschema.d.ts","../../node_modules/graphql/utilities/buildastschema.d.ts","../../node_modules/graphql/utilities/extendschema.d.ts","../../node_modules/graphql/utilities/lexicographicsortschema.d.ts","../../node_modules/graphql/utilities/printschema.d.ts","../../node_modules/graphql/utilities/typefromast.d.ts","../../node_modules/graphql/utilities/valuefromast.d.ts","../../node_modules/graphql/utilities/valuefromastuntyped.d.ts","../../node_modules/graphql/utilities/astfromvalue.d.ts","../../node_modules/graphql/utilities/coerceinputvalue.d.ts","../../node_modules/graphql/utilities/concatast.d.ts","../../node_modules/graphql/utilities/separateoperations.d.ts","../../node_modules/graphql/utilities/stripignoredcharacters.d.ts","../../node_modules/graphql/utilities/typecomparators.d.ts","../../node_modules/graphql/utilities/assertvalidname.d.ts","../../node_modules/graphql/utilities/findbreakingchanges.d.ts","../../node_modules/graphql/utilities/typedquerydocumentnode.d.ts","../../node_modules/graphql/utilities/index.d.ts","../../node_modules/graphql/index.d.ts","../../node_modules/graphql-ws/lib/common.d.ts","../../node_modules/graphql-ws/lib/client.d.ts","../../node_modules/graphql-ws/lib/server.d.ts","../../node_modules/graphql-ws/lib/index.d.ts","../../node_modules/@graphiql/toolkit/dist/esm/create-fetcher/types.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/async-helpers/index.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/create-fetcher/createfetcher.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/format/index.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/auto-complete.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/merge-ast.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/graphql-helpers/operation-name.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/base.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/query.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/history.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/storage/custom.d.mts","../../node_modules/@graphiql/toolkit/dist/esm/index.d.mts","../../node_modules/@types/codemirror/index.d.ts","../../node_modules/@graphiql/react/types/editor/types.d.ts","../../node_modules/@graphiql/react/types/editor/header-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/header-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/image-preview.d.ts","../../node_modules/vscode-languageserver-types/lib/umd/main.d.ts","../../node_modules/graphql-config/types.d.ts","../../node_modules/@graphql-tools/utils/schemavisitor.d.ts","../../node_modules/@graphql-tools/utils/interfaces.d.ts","../../node_modules/@graphql-tools/utils/loaders.d.ts","../../node_modules/@graphql-tools/utils/helpers.d.ts","../../node_modules/@graphql-tools/utils/debug-log.d.ts","../../node_modules/@graphql-tools/utils/fix-windows-path.d.ts","../../node_modules/@graphql-tools/utils/flatten-array.d.ts","../../node_modules/@graphql-tools/utils/get-directives.d.ts","../../node_modules/@graphql-tools/utils/get-fields-with-directives.d.ts","../../node_modules/@graphql-tools/utils/get-implementing-types.d.ts","../../node_modules/@graphql-tools/utils/types.d.ts","../../node_modules/@graphql-tools/utils/print-schema-with-directives.d.ts","../../node_modules/@graphql-tools/utils/validate-documents.d.ts","../../node_modules/@graphql-tools/utils/fix-schema-ast.d.ts","../../node_modules/@graphql-tools/utils/parse-graphql-json.d.ts","../../node_modules/@graphql-tools/utils/parse-graphql-sdl.d.ts","../../node_modules/@graphql-tools/utils/get-user-types-from-schema.d.ts","../../node_modules/@graphql-tools/utils/create-schema-definition.d.ts","../../node_modules/@graphql-tools/utils/build-operation-for-field.d.ts","../../node_modules/@graphql-tools/utils/filterschema.d.ts","../../node_modules/@graphql-tools/utils/clone.d.ts","../../node_modules/@graphql-tools/utils/heal.d.ts","../../node_modules/@graphql-tools/utils/schemadirectivevisitor.d.ts","../../node_modules/@graphql-tools/utils/visitschema.d.ts","../../node_modules/@graphql-tools/utils/getresolversfromschema.d.ts","../../node_modules/@graphql-tools/utils/foreachfield.d.ts","../../node_modules/@graphql-tools/utils/foreachdefaultvalue.d.ts","../../node_modules/@graphql-tools/utils/mapschema.d.ts","../../node_modules/@graphql-tools/utils/addtypes.d.ts","../../node_modules/@graphql-tools/utils/rewire.d.ts","../../node_modules/@graphql-tools/utils/prune.d.ts","../../node_modules/@graphql-tools/utils/mergedeep.d.ts","../../node_modules/@graphql-tools/utils/stub.d.ts","../../node_modules/@graphql-tools/utils/selectionsets.d.ts","../../node_modules/@graphql-tools/utils/getresponsekeyfrominfo.d.ts","../../node_modules/@graphql-tools/utils/fields.d.ts","../../node_modules/@graphql-tools/utils/renametype.d.ts","../../node_modules/@graphql-tools/utils/collectfields.d.ts","../../node_modules/@graphql-tools/utils/transforminputvalue.d.ts","../../node_modules/@graphql-tools/utils/mapasynciterator.d.ts","../../node_modules/@graphql-tools/utils/updateargument.d.ts","../../node_modules/@graphql-tools/utils/implementsabstracttype.d.ts","../../node_modules/@graphql-tools/utils/errors.d.ts","../../node_modules/@graphql-tools/utils/toconfig.d.ts","../../node_modules/@graphql-tools/utils/observabletoasynciterable.d.ts","../../node_modules/@graphql-tools/utils/visitresult.d.ts","../../node_modules/@graphql-tools/utils/getargumentvalues.d.ts","../../node_modules/@graphql-tools/utils/valuematchescriteria.d.ts","../../node_modules/@graphql-tools/utils/isasynciterable.d.ts","../../node_modules/@graphql-tools/utils/isdocumentnode.d.ts","../../node_modules/@graphql-tools/utils/astfromvalueuntyped.d.ts","../../node_modules/@graphql-tools/utils/executor.d.ts","../../node_modules/@graphql-tools/utils/withcancel.d.ts","../../node_modules/@graphql-tools/utils/index.d.ts","../../node_modules/@graphql-tools/load/load-typedefs.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/interfaces.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/loaders.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/helpers.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-fields-with-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-implementing-types.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/types.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/print-schema-with-directives.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/validate-documents.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/fix-schema-ast.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/parse-graphql-json.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/parse-graphql-sdl.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/get-user-types-from-schema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/create-schema-definition.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/build-operation-for-field.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/filterschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/heal.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getresolversfromschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/foreachfield.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/foreachdefaultvalue.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mapschema.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/addtypes.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/rewire.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/prune.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mergedeep.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/stub.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/selectionsets.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getresponsekeyfrominfo.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/fields.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/renametype.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/transforminputvalue.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/mapasynciterator.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/updateargument.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/implementsabstracttype.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/errors.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/observabletoasynciterable.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/visitresult.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/getargumentvalues.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/valuematchescriteria.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/isasynciterable.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/isdocumentnode.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/astfromvalueuntyped.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/executor.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/withcancel.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/aggregateerror.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/roottypes.d.ts","../../node_modules/@graphql-tools/merge/node_modules/@graphql-tools/utils/index.d.ts","../../node_modules/@graphql-tools/merge/merge-resolvers.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/arguments.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/utils.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-typedefs.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-nodes.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/comments.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/directives.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/enum-values.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/enum.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/fields.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/input-type.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/interface.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/merge-named-type-array.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/scalar.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/type.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/union.d.ts","../../node_modules/@graphql-tools/merge/typedefs-mergers/index.d.ts","../../node_modules/@graphql-tools/merge/merge-schemas.d.ts","../../node_modules/@graphql-tools/merge/extensions.d.ts","../../node_modules/@graphql-tools/merge/index.d.ts","../../node_modules/@graphql-tools/load/schema.d.ts","../../node_modules/@graphql-tools/load/documents.d.ts","../../node_modules/@graphql-tools/load/filter-document-kind.d.ts","../../node_modules/@graphql-tools/load/index.d.ts","../../node_modules/graphql-config/helpers/utils.d.ts","../../node_modules/graphql-config/loaders.d.ts","../../node_modules/graphql-config/extension.d.ts","../../node_modules/graphql-config/project-config.d.ts","../../node_modules/graphql-config/config.d.ts","../../node_modules/graphql-config/errors.d.ts","../../node_modules/graphql-config/index.d.ts","../../node_modules/graphql-language-service/dist/parser/types.d.ts","../../node_modules/graphql-language-service/dist/parser/characterstream.d.ts","../../node_modules/graphql-language-service/dist/parser/rules.d.ts","../../node_modules/graphql-language-service/dist/parser/rulehelpers.d.ts","../../node_modules/graphql-language-service/dist/parser/onlineparser.d.ts","../../node_modules/graphql-language-service/dist/parser/api.d.ts","../../node_modules/graphql-language-service/dist/parser/gettypeinfo.d.ts","../../node_modules/graphql-language-service/dist/parser/index.d.ts","../../node_modules/graphql-language-service/dist/types.d.ts","../../node_modules/graphql-language-service/dist/interface/autocompleteutils.d.ts","../../node_modules/graphql-language-service/dist/interface/getautocompletesuggestions.d.ts","../../node_modules/graphql-language-service/dist/utils/fragmentdependencies.d.ts","../../node_modules/@types/json-schema/index.d.ts","../../node_modules/graphql-language-service/dist/utils/collectvariables.d.ts","../../node_modules/graphql-language-service/dist/utils/getvariablesjsonschema.d.ts","../../node_modules/graphql-language-service/dist/utils/getastnodeatposition.d.ts","../../node_modules/graphql-language-service/dist/utils/range.d.ts","../../node_modules/graphql-language-service/dist/utils/validatewithcustomrules.d.ts","../../node_modules/graphql-language-service/dist/utils/getoperationfacts.d.ts","../../node_modules/graphql-language-service/dist/utils/index.d.ts","../../node_modules/graphql-language-service/dist/interface/getdefinition.d.ts","../../node_modules/graphql-language-service/dist/interface/getdiagnostics.d.ts","../../node_modules/graphql-language-service/dist/interface/getoutline.d.ts","../../node_modules/graphql-language-service/dist/interface/gethoverinformation.d.ts","../../node_modules/graphql-language-service/dist/interface/index.d.ts","../../node_modules/graphql-language-service/dist/index.d.ts","../../node_modules/codemirror-graphql/utils/gettypeinfo.d.ts","../../node_modules/codemirror-graphql/utils/schemareference.d.ts","../../node_modules/@graphiql/react/types/editor/hooks.d.ts","../../node_modules/@graphiql/react/types/editor/query-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/query-editor.d.ts","../../node_modules/@graphiql/react/types/editor/response-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/response-editor.d.ts","../../node_modules/@graphiql/react/types/editor/variable-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/variable-editor.d.ts","../../node_modules/@graphiql/react/types/editor/components/index.d.ts","../../node_modules/@graphiql/react/types/editor/tabs.d.ts","../../node_modules/@graphiql/react/types/editor/context.d.ts","../../node_modules/@graphiql/react/types/editor/index.d.ts","../../node_modules/@graphiql/react/types/execution.d.ts","../../node_modules/@graphiql/react/types/explorer/components/argument.d.ts","../../node_modules/@graphiql/react/types/explorer/context.d.ts","../../node_modules/@graphiql/react/types/explorer/components/default-value.d.ts","../../node_modules/@graphiql/react/types/explorer/components/deprecation-reason.d.ts","../../node_modules/@graphiql/react/types/explorer/components/directive.d.ts","../../node_modules/@graphiql/react/types/explorer/components/doc-explorer.d.ts","../../node_modules/@graphiql/react/types/explorer/components/field-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/field-link.d.ts","../../node_modules/@graphiql/react/types/explorer/components/schema-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/search.d.ts","../../node_modules/@graphiql/react/types/explorer/components/section.d.ts","../../node_modules/@graphiql/react/types/explorer/components/type-documentation.d.ts","../../node_modules/@graphiql/react/types/explorer/components/type-link.d.ts","../../node_modules/@graphiql/react/types/explorer/index.d.ts","../../node_modules/@graphiql/react/types/history/components.d.ts","../../node_modules/@graphiql/react/types/history/context.d.ts","../../node_modules/@graphiql/react/types/history/index.d.ts","../../node_modules/@graphiql/react/types/plugin.d.ts","../../node_modules/@graphiql/react/types/schema.d.ts","../../node_modules/@graphiql/react/types/storage.d.ts","../../node_modules/@graphiql/react/types/provider.d.ts","../../node_modules/@graphiql/react/types/theme.d.ts","../../node_modules/@graphiql/react/types/utility/resize.d.ts","../../node_modules/@graphiql/react/types/utility/is-macos.d.ts","../../node_modules/@graphiql/react/types/icons/index.d.ts","../../node_modules/@graphiql/react/types/ui/button.d.ts","../../node_modules/@graphiql/react/types/ui/button-group.d.ts","../../node_modules/@radix-ui/react-context/dist/index.d.ts","../../node_modules/@radix-ui/react-primitive/dist/index.d.ts","../../node_modules/@radix-ui/react-dismissable-layer/dist/index.d.ts","../../node_modules/@radix-ui/react-focus-scope/dist/index.d.ts","../../node_modules/@radix-ui/react-portal/dist/index.d.ts","../../node_modules/@radix-ui/react-dialog/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/dialog.d.ts","../../node_modules/@radix-ui/react-arrow/dist/index.d.ts","../../node_modules/@radix-ui/rect/dist/index.d.ts","../../node_modules/@radix-ui/react-popper/dist/index.d.ts","../../node_modules/@radix-ui/react-roving-focus/dist/index.d.ts","../../node_modules/@radix-ui/react-menu/dist/index.d.ts","../../node_modules/@radix-ui/react-dropdown-menu/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/dropdown.d.ts","../../node_modules/@graphiql/react/types/ui/markdown.d.ts","../../node_modules/@graphiql/react/types/ui/spinner.d.ts","../../node_modules/@graphiql/react/types/ui/tabs.d.ts","../../node_modules/@radix-ui/react-tooltip/dist/index.d.ts","../../node_modules/@graphiql/react/types/ui/tooltip.d.ts","../../node_modules/@graphiql/react/types/ui/index.d.ts","../../node_modules/@graphiql/react/types/toolbar/button.d.ts","../../node_modules/@graphiql/react/types/toolbar/execute.d.ts","../../node_modules/@graphiql/react/types/toolbar/menu.d.ts","../../node_modules/@graphiql/react/types/toolbar/index.d.ts","../../node_modules/@graphiql/react/types/index.d.ts","../../node_modules/graphiql/dist/graphiql.d.ts","../../node_modules/graphiql/dist/index.d.ts","./src/interfaces.ts","../../node_modules/@graphiql/plugin-explorer/types/graphiql-explorer.d.ts","../../node_modules/@graphiql/plugin-explorer/types/index.d.ts","./src/components/errorpopup.tsx","./src/components/footer.tsx","../grafast/dist/therecanbeonlyone.d.ts","../../utils/lru/dist/index.d.ts","../../utils/graphile-config/dist/interfaces.d.ts","../../utils/graphile-config/dist/functionality.d.ts","../../utils/graphile-config/dist/hooks.d.ts","../../utils/graphile-config/dist/middleware.d.ts","../../utils/graphile-config/dist/resolvepresets.d.ts","../../utils/graphile-config/dist/index.d.ts","../../node_modules/eventemitter3/index.d.ts","../grafast/dist/constraints.d.ts","../grafast/dist/bucket.d.ts","../grafast/dist/steps/__item.d.ts","../grafast/dist/steps/__flag.d.ts","../grafast/dist/steps/access.d.ts","../grafast/dist/steps/__value.d.ts","../grafast/dist/steps/listtransform.d.ts","../grafast/dist/steps/connection.d.ts","../grafast/dist/steps/constant.d.ts","../grafast/dist/steps/each.d.ts","../grafast/dist/steps/error.d.ts","../grafast/dist/steps/filter.d.ts","../grafast/dist/steps/first.d.ts","../grafast/dist/steps/groupby.d.ts","../grafast/dist/multistep.d.ts","../grafast/dist/steps/lambda.d.ts","../grafast/dist/steps/last.d.ts","../grafast/dist/steps/list.d.ts","../grafast/dist/steps/listen.d.ts","../grafast/dist/steps/node.d.ts","../grafast/dist/steps/partitionbyindex.d.ts","../grafast/dist/steps/remapkeys.d.ts","../grafast/dist/steps/reverse.d.ts","../grafast/dist/steps/applyinput.d.ts","../grafast/dist/steps/setter.d.ts","../grafast/dist/steps/sideeffect.d.ts","../grafast/dist/steps/__inputlist.d.ts","../grafast/dist/steps/__inputobject.d.ts","../grafast/dist/steps/__inputstaticleaf.d.ts","../grafast/dist/steps/__trackedvalue.d.ts","../grafast/dist/steps/applytransforms.d.ts","../grafast/dist/steps/bakedinput.d.ts","../grafast/dist/steps/condition.d.ts","../grafast/dist/steps/graphqlresolver.d.ts","../grafast/dist/steps/load.d.ts","../grafast/dist/steps/polymorphicbranch.d.ts","../grafast/dist/steps/proxy.d.ts","../grafast/dist/steps/index.d.ts","../grafast/dist/graphqlcollectfields.d.ts","../grafast/dist/engine/executeoutputplan.d.ts","../grafast/dist/engine/outputplan.d.ts","../grafast/dist/engine/operationplan.d.ts","../grafast/dist/step.d.ts","../grafast/dist/engine/layerplan.d.ts","../grafast/dist/error.d.ts","../grafast/dist/steps/__inputdefault.d.ts","../grafast/dist/steps/__inputdynamicscalar.d.ts","../grafast/dist/deferred.d.ts","../grafast/dist/utils.d.ts","../grafast/dist/planjsoninterfaces.d.ts","../grafast/dist/interfaces.d.ts","../grafast/dist/steps/object.d.ts","../grafast/dist/exportas.d.ts","../grafast/dist/grafastprint.d.ts","../grafast/dist/makegrafastschema.d.ts","../grafast/dist/dev.d.ts","../grafast/dist/engine/lib/defaultplanresolver.d.ts","../grafast/dist/engine/lib/withgloballayerplan.d.ts","../grafast/dist/execute.d.ts","../grafast/dist/grafastgraphql.d.ts","../grafast/dist/middleware.d.ts","../grafast/dist/operationplan-input.d.ts","../grafast/dist/polymorphic.d.ts","../grafast/dist/stringifypayload.d.ts","../grafast/dist/stripansi.d.ts","../grafast/dist/subscribe.d.ts","../../node_modules/iterall/index.d.ts","../grafast/dist/args.d.ts","../grafast/dist/version.d.ts","../grafast/dist/index.d.ts","./src/hooks/usefetcher.ts","./src/hooks/usestorage.ts","./src/hooks/useexplain.ts","./src/hooks/usegraphqlchangestream.ts","./src/hooks/useprettify.tsx","../grafast/dist/mermaid.d.ts","../../node_modules/@iconify/types/types.d.ts","../../node_modules/@iconify/utils/lib/customisations/defaults.d.ts","../../node_modules/@iconify/utils/lib/customisations/merge.d.ts","../../node_modules/@iconify/utils/lib/customisations/bool.d.ts","../../node_modules/@iconify/utils/lib/customisations/flip.d.ts","../../node_modules/@iconify/utils/lib/customisations/rotate.d.ts","../../node_modules/@iconify/utils/lib/icon/name.d.ts","../../node_modules/@iconify/utils/lib/icon/defaults.d.ts","../../node_modules/@iconify/utils/lib/icon/merge.d.ts","../../node_modules/@iconify/utils/lib/icon/transformations.d.ts","../../node_modules/@iconify/utils/lib/svg/viewbox.d.ts","../../node_modules/@iconify/utils/lib/icon/square.d.ts","../../node_modules/@iconify/utils/lib/icon-set/tree.d.ts","../../node_modules/@iconify/utils/lib/icon-set/parse.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate.d.ts","../../node_modules/@iconify/utils/lib/icon-set/validate-basic.d.ts","../../node_modules/@iconify/utils/lib/icon-set/expand.d.ts","../../node_modules/@iconify/utils/lib/icon-set/minify.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icons.d.ts","../../node_modules/@iconify/utils/lib/icon-set/get-icon.d.ts","../../node_modules/@iconify/utils/lib/icon-set/convert-info.d.ts","../../node_modules/@iconify/utils/lib/svg/build.d.ts","../../node_modules/@iconify/utils/lib/svg/defs.d.ts","../../node_modules/@iconify/utils/lib/svg/id.d.ts","../../node_modules/@iconify/utils/lib/svg/size.d.ts","../../node_modules/@iconify/utils/lib/svg/encode-svg-for-css.d.ts","../../node_modules/@iconify/utils/lib/svg/trim.d.ts","../../node_modules/@iconify/utils/lib/svg/pretty.d.ts","../../node_modules/@iconify/utils/lib/svg/html.d.ts","../../node_modules/@iconify/utils/lib/svg/url.d.ts","../../node_modules/@iconify/utils/lib/svg/inner-html.d.ts","../../node_modules/@iconify/utils/lib/svg/parse.d.ts","../../node_modules/@iconify/utils/lib/colors/types.d.ts","../../node_modules/@iconify/utils/lib/colors/keywords.d.ts","../../node_modules/@iconify/utils/lib/colors/index.d.ts","../../node_modules/@iconify/utils/lib/css/types.d.ts","../../node_modules/@iconify/utils/lib/css/icon.d.ts","../../node_modules/@iconify/utils/lib/css/icons.d.ts","../../node_modules/@antfu/utils/dist/index.d.mts","../../node_modules/@iconify/utils/lib/loader/types.d.ts","../../node_modules/@iconify/utils/lib/loader/utils.d.ts","../../node_modules/@iconify/utils/lib/loader/custom.d.ts","../../node_modules/@iconify/utils/lib/loader/modern.d.ts","../../node_modules/@iconify/utils/lib/loader/loader.d.ts","../../node_modules/@iconify/utils/lib/emoji/cleanup.d.ts","../../node_modules/@iconify/utils/lib/emoji/convert.d.ts","../../node_modules/@iconify/utils/lib/emoji/format.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/variations.d.ts","../../node_modules/@iconify/utils/lib/emoji/data.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/components.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/name.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/similar.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/tree.d.ts","../../node_modules/@iconify/utils/lib/emoji/test/missing.d.ts","../../node_modules/@iconify/utils/lib/emoji/regex/create.d.ts","../../node_modules/@iconify/utils/lib/emoji/parse.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/find.d.ts","../../node_modules/@iconify/utils/lib/emoji/replace/replace.d.ts","../../node_modules/@iconify/utils/lib/misc/strings.d.ts","../../node_modules/@iconify/utils/lib/misc/objects.d.ts","../../node_modules/@iconify/utils/lib/misc/title.d.ts","../../node_modules/@iconify/utils/lib/index.d.ts","../../node_modules/mermaid/dist/rendering-util/icons.d.ts","../../node_modules/@types/trusted-types/lib/index.d.ts","../../node_modules/@types/trusted-types/index.d.ts","../../node_modules/dompurify/dist/purify.es.d.mts","../../node_modules/mermaid/dist/config.type.d.ts","../../node_modules/@types/d3-array/index.d.ts","../../node_modules/@types/d3-selection/index.d.ts","../../node_modules/@types/d3-axis/index.d.ts","../../node_modules/@types/d3-brush/index.d.ts","../../node_modules/@types/d3-chord/index.d.ts","../../node_modules/@types/d3-color/index.d.ts","../../node_modules/@types/geojson/index.d.ts","../../node_modules/@types/d3-contour/index.d.ts","../../node_modules/@types/d3-delaunay/index.d.ts","../../node_modules/@types/d3-dispatch/index.d.ts","../../node_modules/@types/d3-drag/index.d.ts","../../node_modules/@types/d3-dsv/index.d.ts","../../node_modules/@types/d3-ease/index.d.ts","../../node_modules/@types/d3-fetch/index.d.ts","../../node_modules/@types/d3-force/index.d.ts","../../node_modules/@types/d3-format/index.d.ts","../../node_modules/@types/d3-geo/index.d.ts","../../node_modules/@types/d3-hierarchy/index.d.ts","../../node_modules/@types/d3-interpolate/index.d.ts","../../node_modules/@types/d3-path/index.d.ts","../../node_modules/@types/d3-polygon/index.d.ts","../../node_modules/@types/d3-quadtree/index.d.ts","../../node_modules/@types/d3-random/index.d.ts","../../node_modules/@types/d3-time/index.d.ts","../../node_modules/@types/d3-scale/index.d.ts","../../node_modules/@types/d3-scale-chromatic/index.d.ts","../../node_modules/@types/d3-shape/index.d.ts","../../node_modules/@types/d3-time-format/index.d.ts","../../node_modules/@types/d3-timer/index.d.ts","../../node_modules/@types/d3-transition/index.d.ts","../../node_modules/@types/d3-zoom/index.d.ts","../../node_modules/@types/d3/index.d.ts","../../node_modules/type-fest/source/basic.d.ts","../../node_modules/type-fest/source/except.d.ts","../../node_modules/type-fest/source/mutable.d.ts","../../node_modules/type-fest/source/merge.d.ts","../../node_modules/type-fest/source/merge-exclusive.d.ts","../../node_modules/type-fest/source/require-at-least-one.d.ts","../../node_modules/type-fest/source/require-exactly-one.d.ts","../../node_modules/type-fest/source/partial-deep.d.ts","../../node_modules/type-fest/source/readonly-deep.d.ts","../../node_modules/type-fest/source/literal-union.d.ts","../../node_modules/type-fest/source/promisable.d.ts","../../node_modules/type-fest/source/opaque.d.ts","../../node_modules/type-fest/source/set-optional.d.ts","../../node_modules/type-fest/source/set-required.d.ts","../../node_modules/type-fest/source/value-of.d.ts","../../node_modules/type-fest/source/promise-value.d.ts","../../node_modules/type-fest/source/async-return-type.d.ts","../../node_modules/type-fest/source/conditional-keys.d.ts","../../node_modules/type-fest/source/conditional-except.d.ts","../../node_modules/type-fest/source/conditional-pick.d.ts","../../node_modules/type-fest/source/union-to-intersection.d.ts","../../node_modules/type-fest/source/stringified.d.ts","../../node_modules/type-fest/source/fixed-length-array.d.ts","../../node_modules/type-fest/source/iterable-element.d.ts","../../node_modules/type-fest/source/entry.d.ts","../../node_modules/type-fest/source/entries.d.ts","../../node_modules/type-fest/source/set-return-type.d.ts","../../node_modules/type-fest/source/asyncify.d.ts","../../node_modules/type-fest/source/package-json.d.ts","../../node_modules/type-fest/source/tsconfig-json.d.ts","../../node_modules/type-fest/base.d.ts","../../node_modules/type-fest/source/utilities.d.ts","../../node_modules/type-fest/ts41/camel-case.d.ts","../../node_modules/type-fest/ts41/delimiter-case.d.ts","../../node_modules/type-fest/ts41/kebab-case.d.ts","../../node_modules/type-fest/ts41/pascal-case.d.ts","../../node_modules/type-fest/ts41/snake-case.d.ts","../../node_modules/type-fest/ts41/index.d.ts","../../node_modules/mermaid/dist/types.d.ts","../../node_modules/mermaid/dist/utils.d.ts","../../node_modules/mermaid/dist/diagram.d.ts","../../node_modules/mermaid/dist/diagram-api/types.d.ts","../../node_modules/mermaid/dist/diagram-api/detecttype.d.ts","../../node_modules/mermaid/dist/errors.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/clusters.d.ts","../../node_modules/mermaid/dist/rendering-util/types.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/anchor.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/bowtierect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/card.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/choice.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/circle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/crossedcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraceright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curlybraces.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/curvedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/cylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/dividedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/doublecircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/filledcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/flippedtriangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/forkjoin.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/halfroundedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hexagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/hourglass.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/icon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconcircle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconrounded.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/iconsquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/imagesquare.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/invertedtrapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/labelrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanleft.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/leanright.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/lightningbolt.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/linedwaveedgedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multirect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/multiwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/note.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/question.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectleftinvarrow.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/rectwithtitle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/roundedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/shadedprocess.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/slopedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/squarerect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stadium.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/state.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/stateend.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/statestart.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/subroutine.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedrect.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/taggedwaveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/text.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/tiltedcylinder.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoid.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/trapezoidalpentagon.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/triangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waveedgedrectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/waverectangle.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/windowpane.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/erbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/classbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/requirementbox.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes/kanbanitem.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/shapes.d.ts","../../node_modules/dagre-d3-es/src/graphlib/graph.d.ts","../../node_modules/dagre-d3-es/src/graphlib/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/intersect/index.d.ts","../../node_modules/dagre-d3-es/src/dagre-js/render.d.ts","../../node_modules/dagre-d3-es/src/index.d.ts","../../node_modules/mermaid/dist/rendering-util/rendering-elements/nodes.d.ts","../../node_modules/mermaid/dist/logger.d.ts","../../node_modules/mermaid/dist/internals.d.ts","../../node_modules/mermaid/dist/mermaidapi.d.ts","../../node_modules/mermaid/dist/rendering-util/render.d.ts","../../node_modules/mermaid/dist/mermaid.d.ts","../../node_modules/@types/react-dom/index.d.ts","./src/components/copy.tsx","./src/components/formatsql.tsx","./src/components/mermaid.tsx","./src/components/explain.tsx","./src/plugins/explain.tsx","./src/ruru.tsx","./src/index.tsx","../../node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/@types/node/compatibility/index.d.ts","../../node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/@types/events/index.d.ts","../../node_modules/buffer/index.d.ts","../../node_modules/@types/node/node_modules/undici-types/header.d.ts","../../node_modules/@types/node/node_modules/undici-types/readable.d.ts","../../node_modules/@types/node/node_modules/undici-types/file.d.ts","../../node_modules/@types/node/node_modules/undici-types/fetch.d.ts","../../node_modules/@types/node/node_modules/undici-types/formdata.d.ts","../../node_modules/@types/node/node_modules/undici-types/connector.d.ts","../../node_modules/@types/node/node_modules/undici-types/client.d.ts","../../node_modules/@types/node/node_modules/undici-types/errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/@types/node/node_modules/undici-types/global-origin.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool-stats.d.ts","../../node_modules/@types/node/node_modules/undici-types/pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/handlers.d.ts","../../node_modules/@types/node/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-client.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-pool.d.ts","../../node_modules/@types/node/node_modules/undici-types/mock-errors.d.ts","../../node_modules/@types/node/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-handler.d.ts","../../node_modules/@types/node/node_modules/undici-types/retry-agent.d.ts","../../node_modules/@types/node/node_modules/undici-types/api.d.ts","../../node_modules/@types/node/node_modules/undici-types/interceptors.d.ts","../../node_modules/@types/node/node_modules/undici-types/util.d.ts","../../node_modules/@types/node/node_modules/undici-types/cookies.d.ts","../../node_modules/@types/node/node_modules/undici-types/patch.d.ts","../../node_modules/@types/node/node_modules/undici-types/websocket.d.ts","../../node_modules/@types/node/node_modules/undici-types/eventsource.d.ts","../../node_modules/@types/node/node_modules/undici-types/filereader.d.ts","../../node_modules/@types/node/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/@types/node/node_modules/undici-types/content-type.d.ts","../../node_modules/@types/node/node_modules/undici-types/cache.d.ts","../../node_modules/@types/node/node_modules/undici-types/index.d.ts","../../node_modules/@types/node/globals.d.ts","../../node_modules/@types/node/assert.d.ts","../../node_modules/@types/node/assert/strict.d.ts","../../node_modules/@types/node/async_hooks.d.ts","../../node_modules/@types/node/buffer.d.ts","../../node_modules/@types/node/child_process.d.ts","../../node_modules/@types/node/cluster.d.ts","../../node_modules/@types/node/console.d.ts","../../node_modules/@types/node/constants.d.ts","../../node_modules/@types/node/crypto.d.ts","../../node_modules/@types/node/dgram.d.ts","../../node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/@types/node/dns.d.ts","../../node_modules/@types/node/dns/promises.d.ts","../../node_modules/@types/node/domain.d.ts","../../node_modules/@types/node/dom-events.d.ts","../../node_modules/@types/node/events.d.ts","../../node_modules/@types/node/fs.d.ts","../../node_modules/@types/node/fs/promises.d.ts","../../node_modules/@types/node/http.d.ts","../../node_modules/@types/node/http2.d.ts","../../node_modules/@types/node/https.d.ts","../../node_modules/@types/node/inspector.d.ts","../../node_modules/@types/node/module.d.ts","../../node_modules/@types/node/net.d.ts","../../node_modules/@types/node/os.d.ts","../../node_modules/@types/node/path.d.ts","../../node_modules/@types/node/perf_hooks.d.ts","../../node_modules/@types/assert/index.d.ts","../../node_modules/@types/node/process.d.ts","../../node_modules/@types/node/punycode.d.ts","../../node_modules/@types/node/querystring.d.ts","../../node_modules/@types/node/readline.d.ts","../../node_modules/@types/node/readline/promises.d.ts","../../node_modules/@types/node/repl.d.ts","../../node_modules/@types/node/sea.d.ts","../../node_modules/@types/node/stream.d.ts","../../node_modules/@types/node/stream/promises.d.ts","../../node_modules/@types/node/stream/consumers.d.ts","../../node_modules/@types/node/stream/web.d.ts","../../node_modules/@types/node/string_decoder.d.ts","../../node_modules/@types/node/test.d.ts","../../node_modules/@types/node/timers.d.ts","../../node_modules/@types/node/timers/promises.d.ts","../../node_modules/@types/node/tls.d.ts","../../node_modules/@types/node/trace_events.d.ts","../../node_modules/@types/node/tty.d.ts","../../node_modules/@types/node/url.d.ts","../../node_modules/@types/node/util.d.ts","../../node_modules/@types/node/v8.d.ts","../../node_modules/@types/node/vm.d.ts","../../node_modules/@types/node/wasi.d.ts","../../node_modules/@types/node/worker_threads.d.ts","../../node_modules/@types/node/zlib.d.ts","../../node_modules/@types/node/index.d.ts","../../node_modules/@types/accepts/index.d.ts","../../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../../node_modules/@types/aws-lambda/handler.d.ts","../../node_modules/@types/aws-lambda/trigger/alb.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/autoscaling.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-alarm.d.ts","../../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../../node_modules/@types/aws-lambda/trigger/codecommit.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-sms-sender.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/guard-duty-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/iot.d.ts","../../node_modules/@types/aws-lambda/trigger/iot-authorizer.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../../node_modules/@types/aws-lambda/trigger/lambda-function-url.d.ts","../../node_modules/@types/aws-lambda/trigger/lex.d.ts","../../node_modules/@types/aws-lambda/trigger/lex-v2.d.ts","../../node_modules/@types/aws-lambda/trigger/amplify-resolver.d.ts","../../node_modules/@types/aws-lambda/trigger/msk.d.ts","../../node_modules/@types/aws-lambda/trigger/s3.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../../node_modules/@types/aws-lambda/trigger/s3-event-notification.d.ts","../../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../../node_modules/@types/aws-lambda/trigger/self-managed-kafka.d.ts","../../node_modules/@types/aws-lambda/trigger/ses.d.ts","../../node_modules/@types/aws-lambda/trigger/sns.d.ts","../../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../../node_modules/@types/aws-lambda/trigger/transfer-family-authorizer.d.ts","../../node_modules/@types/aws-lambda/index.d.ts","../../node_modules/@babel/types/lib/index.d.ts","../../node_modules/@types/babel__generator/index.d.ts","../../node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/@types/babel__template/index.d.ts","../../node_modules/@types/babel__traverse/index.d.ts","../../node_modules/@types/babel__core/index.d.ts","../../node_modules/@types/connect/index.d.ts","../../node_modules/@types/body-parser/index.d.ts","../../node_modules/@types/bonjour/index.d.ts","../../node_modules/@types/chai/index.d.ts","../../node_modules/@types/mime/index.d.ts","../../node_modules/@types/send/index.d.ts","../../node_modules/@types/qs/index.d.ts","../../node_modules/@types/range-parser/index.d.ts","../../node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/connect-history-api-fallback/index.d.ts","../../node_modules/@types/content-disposition/index.d.ts","../../node_modules/@types/http-errors/index.d.ts","../../node_modules/@types/serve-static/index.d.ts","../../node_modules/@types/cookies/node_modules/@types/express/index.d.ts","../../node_modules/@types/keygrip/index.d.ts","../../node_modules/@types/cookies/index.d.ts","../../node_modules/@types/ms/index.d.ts","../../node_modules/@types/debug/index.d.ts","../../node_modules/@types/eslint/helpers.d.ts","../../node_modules/@types/estree/index.d.ts","../../node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/use-at-your-own-risk.d.ts","../../node_modules/@types/eslint-scope/node_modules/@types/eslint/index.d.ts","../../node_modules/@types/eslint-scope/index.d.ts","../../node_modules/@types/express/node_modules/@types/express-serve-static-core/index.d.ts","../../node_modules/@types/express/index.d.ts","../../node_modules/@types/jsonfile/index.d.ts","../../node_modules/@types/jsonfile/utils.d.ts","../../node_modules/@types/fs-extra/index.d.ts","../../node_modules/@types/minimatch/index.d.ts","../../node_modules/@types/glob/index.d.ts","../../node_modules/@types/graceful-fs/index.d.ts","../../node_modules/@types/unist/index.d.ts","../../node_modules/@types/hast/index.d.ts","../../node_modules/@types/history/domutils.d.ts","../../node_modules/@types/history/createbrowserhistory.d.ts","../../node_modules/@types/history/createhashhistory.d.ts","../../node_modules/@types/history/creatememoryhistory.d.ts","../../node_modules/@types/history/locationutils.d.ts","../../node_modules/@types/history/pathutils.d.ts","../../node_modules/@types/history/index.d.ts","../../node_modules/@types/html-minifier-terser/index.d.ts","../../node_modules/@types/http-assert/index.d.ts","../../node_modules/@types/http-proxy/index.d.ts","../../node_modules/@types/interpret/index.d.ts","../../node_modules/@types/istanbul-lib-coverage/index.d.ts","../../node_modules/@types/istanbul-lib-report/index.d.ts","../../node_modules/@types/istanbul-reports/index.d.ts","../../node_modules/@jest/expect-utils/build/index.d.ts","../../node_modules/chalk/index.d.ts","../../node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/@jest/schemas/build/index.d.ts","../../node_modules/pretty-format/build/index.d.ts","../../node_modules/jest-diff/build/index.d.ts","../../node_modules/jest-matcher-utils/build/index.d.ts","../../node_modules/expect/build/index.d.ts","../../node_modules/@types/jest/index.d.ts","../../node_modules/@types/jsonwebtoken/index.d.ts","../../node_modules/@types/keyv/index.d.ts","../../node_modules/@types/koa-compose/index.d.ts","../../node_modules/@types/koa/index.d.ts","../../node_modules/@types/koa-bodyparser/index.d.ts","../../node_modules/schema-utils/declarations/validationerror.d.ts","../../node_modules/ajv/node_modules/fast-uri/types/index.d.ts","../../node_modules/ajv/dist/compile/codegen/code.d.ts","../../node_modules/ajv/dist/compile/codegen/scope.d.ts","../../node_modules/ajv/dist/compile/codegen/index.d.ts","../../node_modules/ajv/dist/compile/rules.d.ts","../../node_modules/ajv/dist/compile/util.d.ts","../../node_modules/ajv/dist/compile/validate/subschema.d.ts","../../node_modules/ajv/dist/compile/errors.d.ts","../../node_modules/ajv/dist/compile/validate/index.d.ts","../../node_modules/ajv/dist/compile/validate/datatype.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalitems.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/contains.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/propertynames.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/additionalproperties.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/not.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/anyof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/oneof.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/if.d.ts","../../node_modules/ajv/dist/vocabularies/applicator/index.d.ts","../../node_modules/ajv/dist/vocabularies/validation/limitnumber.d.ts","../../node_modules/ajv/dist/vocabularies/validation/multipleof.d.ts","../../node_modules/ajv/dist/vocabularies/validation/pattern.d.ts","../../node_modules/ajv/dist/vocabularies/validation/required.d.ts","../../node_modules/ajv/dist/vocabularies/validation/uniqueitems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/const.d.ts","../../node_modules/ajv/dist/vocabularies/validation/enum.d.ts","../../node_modules/ajv/dist/vocabularies/validation/index.d.ts","../../node_modules/ajv/dist/vocabularies/format/format.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedproperties.d.ts","../../node_modules/ajv/dist/vocabularies/unevaluated/unevaluateditems.d.ts","../../node_modules/ajv/dist/vocabularies/validation/dependentrequired.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/types.d.ts","../../node_modules/ajv/dist/vocabularies/discriminator/index.d.ts","../../node_modules/ajv/dist/vocabularies/errors.d.ts","../../node_modules/ajv/dist/types/json-schema.d.ts","../../node_modules/ajv/dist/types/jtd-schema.d.ts","../../node_modules/ajv/dist/runtime/validation_error.d.ts","../../node_modules/ajv/dist/compile/ref_error.d.ts","../../node_modules/ajv/dist/core.d.ts","../../node_modules/ajv/dist/compile/resolve.d.ts","../../node_modules/ajv/dist/compile/index.d.ts","../../node_modules/ajv/dist/types/index.d.ts","../../node_modules/ajv/dist/ajv.d.ts","../../node_modules/schema-utils/declarations/validate.d.ts","../../node_modules/schema-utils/declarations/index.d.ts","../../node_modules/tapable/tapable.d.ts","../../node_modules/webpack/types.d.ts","../../node_modules/@types/license-checker-webpack-plugin/index.d.ts","../../node_modules/@types/lodash/common/common.d.ts","../../node_modules/@types/lodash/common/array.d.ts","../../node_modules/@types/lodash/common/collection.d.ts","../../node_modules/@types/lodash/common/date.d.ts","../../node_modules/@types/lodash/common/function.d.ts","../../node_modules/@types/lodash/common/lang.d.ts","../../node_modules/@types/lodash/common/math.d.ts","../../node_modules/@types/lodash/common/number.d.ts","../../node_modules/@types/lodash/common/object.d.ts","../../node_modules/@types/lodash/common/seq.d.ts","../../node_modules/@types/lodash/common/string.d.ts","../../node_modules/@types/lodash/common/util.d.ts","../../node_modules/@types/lodash/index.d.ts","../../node_modules/@types/mdast/index.d.ts","../../node_modules/@types/minimist/index.d.ts","../../node_modules/@types/mocha/index.d.ts","../../node_modules/@types/mock-fs/lib/item.d.ts","../../node_modules/@types/mock-fs/lib/file.d.ts","../../node_modules/@types/mock-fs/lib/directory.d.ts","../../node_modules/@types/mock-fs/lib/symlink.d.ts","../../node_modules/@types/mock-fs/lib/filesystem.d.ts","../../node_modules/@types/mock-fs/index.d.ts","../../node_modules/@types/node-forge/index.d.ts","../../node_modules/@types/nodemon/index.d.ts","../../node_modules/@types/parse-json/index.d.ts","../../node_modules/@types/parse5/index.d.ts","../../node_modules/@types/pg/node_modules/pg-types/index.d.ts","../../node_modules/pg-protocol/dist/messages.d.ts","../../node_modules/pg-protocol/dist/serializer.d.ts","../../node_modules/pg-protocol/dist/parser.d.ts","../../node_modules/pg-protocol/dist/index.d.ts","../../node_modules/@types/pg/index.d.ts","../../node_modules/@types/pluralize/index.d.ts","../../node_modules/prettier/doc.d.ts","../../node_modules/prettier/index.d.ts","../../node_modules/@types/prismjs/index.d.ts","../../node_modules/@types/ps-tree/index.d.ts","../../node_modules/ts-toolbelt/out/index.d.ts","../../node_modules/@types/ramda/tools.d.ts","../../node_modules/@types/ramda/index.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-config/index.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/index.d.ts","../../node_modules/@types/react-router-dom/index.d.ts","../../node_modules/@types/responselike/index.d.ts","../../node_modules/@types/retry/index.d.ts","../../node_modules/minipass/dist/commonjs/index.d.ts","../../node_modules/lru-cache/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/path-scurry/dist/commonjs/index.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts","../../node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts","../../node_modules/glob/dist/commonjs/pattern.d.ts","../../node_modules/glob/dist/commonjs/processor.d.ts","../../node_modules/glob/dist/commonjs/walker.d.ts","../../node_modules/glob/dist/commonjs/ignore.d.ts","../../node_modules/glob/dist/commonjs/glob.d.ts","../../node_modules/glob/dist/commonjs/has-magic.d.ts","../../node_modules/glob/dist/commonjs/index.d.ts","../../node_modules/rimraf/dist/commonjs/opt-arg.d.ts","../../node_modules/rimraf/dist/commonjs/index.d.ts","../../node_modules/@types/sax/index.d.ts","../../node_modules/@types/semver/classes/semver.d.ts","../../node_modules/@types/semver/functions/parse.d.ts","../../node_modules/@types/semver/functions/valid.d.ts","../../node_modules/@types/semver/functions/clean.d.ts","../../node_modules/@types/semver/functions/inc.d.ts","../../node_modules/@types/semver/functions/diff.d.ts","../../node_modules/@types/semver/functions/major.d.ts","../../node_modules/@types/semver/functions/minor.d.ts","../../node_modules/@types/semver/functions/patch.d.ts","../../node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/@types/semver/functions/compare.d.ts","../../node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/@types/semver/functions/sort.d.ts","../../node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/@types/semver/functions/gt.d.ts","../../node_modules/@types/semver/functions/lt.d.ts","../../node_modules/@types/semver/functions/eq.d.ts","../../node_modules/@types/semver/functions/neq.d.ts","../../node_modules/@types/semver/functions/gte.d.ts","../../node_modules/@types/semver/functions/lte.d.ts","../../node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/@types/semver/classes/range.d.ts","../../node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/@types/semver/index.d.ts","../../node_modules/@types/serve-index/node_modules/@types/express/index.d.ts","../../node_modules/@types/serve-index/index.d.ts","../../node_modules/@types/sockjs/index.d.ts","../../node_modules/@types/source-list-map/index.d.ts","../../node_modules/@types/stack-utils/index.d.ts","../../node_modules/@types/tapable/index.d.ts","../../node_modules/@types/tern/lib/tern/index.d.ts","../../node_modules/@types/tern/lib/infer/index.d.ts","../../node_modules/@types/tern/index.d.ts","../../node_modules/source-map/source-map.d.ts","../../node_modules/@types/uglify-js/index.d.ts","../../node_modules/anymatch/index.d.ts","../../node_modules/@types/webpack-sources/node_modules/source-map/source-map.d.ts","../../node_modules/@types/webpack-sources/lib/source.d.ts","../../node_modules/@types/webpack-sources/lib/compatsource.d.ts","../../node_modules/@types/webpack-sources/lib/concatsource.d.ts","../../node_modules/@types/webpack-sources/lib/originalsource.d.ts","../../node_modules/@types/webpack-sources/lib/prefixsource.d.ts","../../node_modules/@types/webpack-sources/lib/rawsource.d.ts","../../node_modules/@types/webpack-sources/lib/replacesource.d.ts","../../node_modules/@types/webpack-sources/lib/sizeonlysource.d.ts","../../node_modules/@types/webpack-sources/lib/sourcemapsource.d.ts","../../node_modules/@types/webpack-sources/lib/index.d.ts","../../node_modules/@types/webpack-sources/lib/cachedsource.d.ts","../../node_modules/@types/webpack-sources/index.d.ts","../../node_modules/@types/webpack/index.d.ts","../../node_modules/@types/webpack-bundle-analyzer/index.d.ts","../../node_modules/@types/websocket/index.d.ts","../../node_modules/@types/which/index.d.ts","../../node_modules/@types/ws/index.d.ts","../../node_modules/@types/yargs-parser/index.d.ts","../../node_modules/@types/yargs/index.d.ts","../../../../node_modules/@types/color-name/index.d.ts","../../node_modules/@types/react-router-config/node_modules/@types/react/global.d.ts","../../node_modules/@types/react-router-dom/node_modules/@types/react/global.d.ts"],"fileIdsList":[[766,810],[189,502,504,523,766,810],[455,494,766,810],[455,490,495,496,766,810],[490,496,504,766,810],[497,523,766,810],[189,454,492,494,497,502,504,523,766,810],[189,446,455,490,493,496,497,502,504,523,766,810],[504,766,810],[92,189,502,504,523,766,810],[455,766,810],[189,491,502,523,766,810],[189,445,446,452,468,490,491,495,496,498,501,502,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,766,810],[93,189,452,453,454,477,490,491,495,496,497,498,499,500,502,503,523,766,810],[189,490,496,502,504,523,766,810],[503,504,766,810],[452,766,810],[490,496,766,810],[189,490,495,496,502,504,523,766,810],[189,491,495,497,502,504,523,766,810],[456,490,496,504,766,810],[483,490,496,504,766,810],[189,462,490,496,502,504,523,766,810],[189,462,490,496,502,523,766,810],[490,496,504,523,766,810],[189,454,457,458,459,490,496,502,504,523,766,810],[458,490,496,523,766,810],[457,490,496,504,766,810],[189,490,491,496,502,504,523,766,810],[460,490,496,504,766,810],[456,460,461,490,496,766,810],[461,490,496,504,766,810],[189,490,496,502,523,766,810],[460,461,490,496,766,810],[456,457,458,459,460,461,462,463,464,465,466,467,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,505,523,766,810],[468,490,496,504,766,810],[457,462,490,496,504,766,810],[456,461,490,496,504,523,766,810],[457,468,490,496,504,523,766,810],[189,469,490,496,502,504,523,766,810],[462,490,496,504,766,810],[477,523,766,810],[92,189,502,523,766,810],[189,490,495,496,501,502,504,523,766,810],[81,85,86,766,810],[81,85,86,524,526,529,752,753,754,755,756,766,810],[81,85,86,529,766,810],[81,86,766,810],[81,85,86,524,525,766,810],[81,85,86,189,205,440,502,523,766,810],[81,85,86,440,766,810],[81,85,86,437,766,810],[81,86,440,759,766,810],[81,86,205,439,766,810],[81,85,86,437,526,757,766,810],[81,85,86,87,437,439,440,442,443,444,524,525,526,527,528,758,766,810],[766,810,922],[85,189,502,523,766,810],[437,441,766,810],[86,208,766,810],[86,206,766,810],[209,210,376,378,380,766,810],[86,375,766,810],[86,377,766,810],[86,379,766,810],[85,86,189,207,371,382,502,523,766,810],[85,207,766,810],[205,206,207,373,766,810],[207,208,374,375,377,379,381,382,383,766,810],[85,189,207,373,374,502,523,766,810],[85,206,207,766,810],[205,207,383,766,810],[206,766,810],[85,207,373,766,810],[85,86,205,374,766,810],[86,189,502,523,766,810],[86,387,766,810],[86,766,810],[85,86,766,810],[85,86,189,502,523,766,810],[386,387,388,389,390,391,392,393,394,395,396,397,398,766,810],[86,205,766,810],[85,86,205,766,810],[400,401,766,810],[85,766,810],[384,385,399,402,403,404,405,406,407,408,409,410,432,436,766,810],[86,384,385,387,402,403,404,405,766,810],[85,86,189,205,502,523,766,810],[433,434,435,766,810],[85,86,425,766,810],[85,418,766,810],[411,412,419,426,427,428,429,431,766,810],[85,430,766,810],[189,193,194,502,523,766,810],[189,193,502,523,766,810],[189,502,523,766,810],[189,193,194,195,196,197,198,199,200,201,202,203,204,502,523,766,810],[201,766,810],[201,202,766,810],[266,267,766,810],[267,335,336,337,766,810],[266,766,810],[189,267,334,502,523,766,810],[315,331,332,333,766,810],[314,766,810],[189,314,318,502,523,766,810],[268,766,810],[189,268,502,523,766,810],[189,274,502,523,766,810],[189,314,502,523,766,810],[268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,766,810],[189,269,274,502,523,766,810],[101,189,502,523,766,810],[189,269,502,523,766,810],[189,331,502,523,766,810],[189,319,502,523,766,810],[189,318,502,523,766,810],[316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,766,810],[189,314,317,502,523,766,810],[189,214,502,523,766,810],[189,223,502,523,766,810],[213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,766,810],[189,213,502,523,766,810],[101,189,214,502,523,766,810],[101,189,215,223,502,523,766,810],[189,213,214,502,523,766,810],[189,215,502,523,766,810],[562,766,810],[530,565,766,810],[530,766,810],[530,531,766,810],[587,766,810],[577,579,766,810],[577,579,580,581,582,583,766,810],[577,579,580,766,810],[577,579,580,581,766,810],[577,579,580,581,582,766,810],[530,537,766,810],[530,540,766,810],[530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,766,810],[530,531,568,569,766,810],[530,531,568,766,810],[530,531,540,766,810],[530,531,540,551,766,810],[766,810,978],[85,414,766,810],[85,413,414,415,416,417,766,810],[85,413,414,424,766,810],[85,413,414,415,416,417,422,423,766,810],[85,413,414,420,421,766,810],[85,413,414,766,810],[85,413,414,415,417,422,766,810],[766,810,825,860],[766,810,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920],[766,810,864],[766,810,864,868],[766,810,862,864,866],[766,810,862,864],[766,810,864,870],[766,810,863,864],[766,810,875],[766,810,864,881,882,883],[766,810,864,885],[766,810,864,886,887,888,889,890,891,892,893,894,895,896,897,898],[766,810,864,867],[766,810,864,866],[766,810,864,875],[766,810,922,923,924,925,926],[766,810,922,924],[766,810,825,860,928],[766,810,816,860],[766,810,853,860,936],[766,810,825,860,928,941,942],[766,810,929,936,940],[599,627,766,810],[598,604,766,810],[609,766,810],[604,766,810],[603,766,810],[621,766,810],[617,766,810],[599,616,627,766,810],[598,599,600,601,602,603,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,766,810],[766,810,944],[766,810,947,950],[358,766,810,947,949],[766,810,950],[358,766,810,946,947],[766,810,822,825,860,933,934,935],[766,810,929,934,936,940,952],[766,810,823,860,954,955],[766,810,822,823,860,957],[766,810,823,860],[766,810,960],[766,810,962,968],[766,810,963,964,965,966,967],[766,810,968],[766,810,822,825,827,830,842,853,860],[766,810,860],[766,810,973],[766,810,974],[766,810,980,983],[766,810,823,853,860],[766,810,815,860,944],[766,810,822,860],[766,810,988],[766,809,810,822,825,826,830,837,853,860,861,938,939,942,943,970,987],[766,810,1039],[766,810,1041,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053],[766,810,1041,1042,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053],[766,810,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053],[766,810,1041,1042,1043,1045,1046,1047,1048,1049,1050,1051,1052,1053],[766,810,1041,1042,1043,1044,1046,1047,1048,1049,1050,1051,1052,1053],[766,810,1041,1042,1043,1044,1045,1047,1048,1049,1050,1051,1052,1053],[766,810,1041,1042,1043,1044,1045,1046,1048,1049,1050,1051,1052,1053],[766,810,1041,1042,1043,1044,1045,1046,1047,1049,1050,1051,1052,1053],[766,810,1041,1042,1043,1044,1045,1046,1047,1048,1050,1051,1052,1053],[766,810,1041,1042,1043,1044,1045,1046,1047,1048,1049,1051,1052,1053],[766,810,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1052,1053],[766,810,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1053],[766,810,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052],[766,810,1058,1059,1060,1061],[766,810,1057],[766,810,860,1057],[766,810,1057,1058,1059,1060],[766,807,810],[766,809,810],[810],[766,810,815,845],[766,810,811,816,822,823,830,842,853],[766,810,811,812,822,830],[761,762,763,766,810],[766,810,813,854],[766,810,814,815,823,831],[766,810,815,842,850],[766,810,816,818,822,830],[766,809,810,817],[766,810,818,819],[766,810,822],[766,810,820,822],[766,809,810,822],[766,810,822,823,824,842,853],[766,810,822,823,824,838,842,845],[766,805,810,858],[766,810,818,822,825,830,842,853],[766,810,822,823,825,826,830,842,850,853],[766,810,825,827,842,850,853],[764,765,766,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859],[766,810,822,828],[766,810,829,853,858],[766,810,818,822,830,842],[766,777,781,810,853],[766,777,810,842,853],[766,772,810],[766,774,777,810,850,853],[766,810,830,850],[766,772,810,860],[766,774,777,810,830,853],[766,769,770,773,776,810,822,842,853],[766,777,784,810],[766,769,775,810],[766,777,798,799,810],[766,773,777,810,845,853,860],[766,798,810,860],[766,771,772,810,860],[766,777,810],[766,771,772,773,774,775,776,777,778,779,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,799,800,801,802,803,804,810],[766,777,792,810],[766,777,784,785,810],[766,775,777,785,786,810],[766,776,810],[766,769,772,777,810],[766,777,781,785,786,810],[766,781,810],[766,775,777,780,810,853],[766,769,774,777,784,810],[766,810,842],[766,772,777,798,810,858,860],[766,810,831],[766,810,832],[766,809,810,833],[766,807,808,809,810,811,812,813,814,815,816,817,818,819,820,822,823,824,825,826,827,828,829,830,831,832,833,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859],[766,810,836],[766,810,837],[766,810,822,838,839],[766,810,838,840,854,856],[766,810,822,842,843,845],[766,810,844,845],[766,810,842,843],[766,810,845],[766,810,846],[766,807,810,842],[766,810,822,848,849],[766,810,848,849],[766,810,815,830,842,850],[766,810,851],[766,810,830,852],[766,810,825,837,853],[766,810,815,854],[766,810,842,855],[766,810,829,856],[766,810,857],[766,810,815,822,824,833,842,853,856,858],[766,810,842,859],[766,810,822,842,850,860,1067,1068,1071,1072],[766,810,1078,1079],[766,810,1078],[766,810,968,1082,1083],[83,766,810,1180],[83,766,810,1181],[766,810,968,1082],[83,766,810,1081],[82,83,84,766,810],[766,810,825,842,860],[766,810,842,860],[766,810,1107,1146],[766,810,1107,1131,1146],[766,810,1146],[766,810,1107],[766,810,1107,1132,1146],[766,810,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145],[766,810,1132,1146],[766,810,823,842,860,932],[766,810,823,941],[766,810,825,860,933,939],[766,810,1153,1154],[766,810,947,1153],[766,810,947,1154],[594,766,810],[766,810,1156],[766,810,825,830,860,1039],[766,810,860,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170],[766,810,1159,1160,1169],[766,810,1160,1169],[766,810,1150,1159,1160,1169],[766,810,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1170],[766,810,1160],[766,810,815,1159,1169],[766,810,815,860,1038,1156,1157,1158,1171],[766,810,822,825,827,830,853,860],[766,810,822,825,827,830,842,850,853,859,860],[766,810,1177],[766,810,994,995,999,1026,1027,1029,1030,1031,1033,1034],[766,810,992,993],[766,810,992],[766,810,994,1034],[766,810,994,995,1031,1032,1034],[766,810,1034],[766,810,991,1034,1035],[766,810,994,995,1033,1034],[766,810,994,995,997,998,1033,1034],[766,810,994,995,996,1033,1034],[766,810,994,995,999,1026,1027,1028,1029,1030,1033,1034],[766,810,991,994,995,999,1031,1033],[766,810,999,1034],[766,810,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1034],[766,810,1024,1034],[766,810,1000,1011,1019,1020,1021,1022,1023,1025],[766,810,1004,1034],[766,810,1012,1013,1014,1015,1016,1017,1018,1034],[189,371,502,523,766,810],[89,189,372,502,523,766,810],[739,740,741,742,743,766,810],[737,766,810],[738,744,745,766,810],[595,766,810],[766,810,976,982],[766,810,1090,1092,1096,1097,1100],[766,810,1101],[766,810,1092,1096,1099],[766,810,1090,1092,1096,1099,1100,1101,1102],[766,810,1096],[766,810,1092,1096,1097,1099],[766,810,1090,1092,1097,1098,1100],[766,810,1093,1094,1095],[766,810,823,832,860,1090,1091],[85,437,766,810],[437,438,766,810],[212,341,342,766,810],[340,766,810],[212,766,810],[212,266,341,342,343,344,766,810],[189,266,338,339,502,523,766,810],[189,212,266,338,341,502,523,766,810],[353,354,365,370,766,810],[189,353,354,502,523,766,810],[189,354,365,502,523,766,810],[189,211,354,502,523,766,810],[189,211,353,354,502,523,766,810],[354,766,810],[355,356,366,367,368,369,766,810],[189,353,371,502,523,766,810],[346,766,810],[346,347,348,349,350,351,352,766,810],[346,347,348,766,810],[189,347,354,502,523,766,810],[189,211,345,353,502,523,766,810],[189,354,502,523,766,810],[189,359,502,523,766,810],[358,359,766,810],[357,359,360,361,362,363,364,766,810],[189,190,502,523,766,810],[190,191,192,766,810],[89,90,96,97,766,810],[98,164,165,766,810],[89,96,98,766,810],[90,98,766,810],[89,91,92,93,96,98,101,102,766,810],[91,103,117,118,766,810],[89,96,101,102,103,766,810],[89,93,96,98,100,101,102,766,810],[89,90,101,102,103,766,810],[88,104,109,116,119,120,163,166,188,766,810],[89,766,810],[90,94,95,766,810],[90,94,95,96,97,99,110,111,112,113,114,115,766,810],[90,95,96,766,810],[90,766,810],[89,90,95,96,98,111,766,810],[96,766,810],[90,96,97,766,810],[94,96,766,810],[103,117,766,810],[89,91,92,93,96,101,766,810],[89,96,99,102,766,810],[91,100,101,102,105,106,107,108,766,810],[102,766,810],[89,93,96,98,100,102,766,810],[98,101,766,810],[98,766,810],[89,96,102,766,810],[90,96,101,112,766,810],[101,167,766,810],[98,102,766,810],[96,101,766,810],[101,766,810],[89,99,766,810],[89,96,766,810],[96,101,102,766,810],[121,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,766,810],[101,102,766,810],[93,96,766,810],[89,96,100,101,102,114,766,810],[89,93,96,102,766,810],[89,93,96,766,810],[122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,766,810],[114,122,766,810],[122,766,810],[89,96,98,101,121,122,766,810],[89,96,98,100,101,102,114,121,766,810],[766,810,980],[766,810,977,981],[596,766,810],[597,671,766,810],[597,629,667,670,766,810],[669,671,766,810],[597,599,627,668,669,675,747,748,766,810],[593,597,668,669,670,671,672,673,675,749,750,751,766,810],[597,668,670,671,766,810],[530,592,766,810],[671,675,749,766,810],[675,766,810],[599,627,668,675,736,746,752,766,810],[668,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,766,810],[599,627,668,675,766,810],[597,674,736,766,810],[597,766,810],[597,599,627,629,668,766,810],[766,810,822,846,860],[766,810,860,1068,1069,1070],[766,810,842,860,1068],[766,810,1074],[766,810,979],[766,810,1104],[766,810,823,1103],[766,810,1036],[358,766,810,990,1035],[358,766,810,1036],[80,766,810],[630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,766,810],[645,766,810],[645,656,766,810],[631,647,766,810],[647,766,810],[654,766,810],[630,766,810],[631,766,810],[639,766,810],[661,766,810],[660,662,663,664,665,666,766,810],[663,766,810],[662,766,810],[766,810,825,830,850,853,856,947,951,990,1036,1037,1038],[447,766,810],[447,448,766,810],[447,448,449,450,451,766,810]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"8bf8b5e44e3c9c36f98e1007e8b7018c0f38d8adc07aecef42f5200114547c70","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"4245fee526a7d1754529d19227ecbf3be066ff79ebb6a380d78e41648f2f224d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a8eb4ebffd85e589a1cc7c178e291626c359543403d58c9cd22b81fab5b1fb9","impliedFormat":1},{"version":"65ff5a0aefd7817a03c1ad04fee85c9cdd3ec415cc3c9efec85d8008d4d5e4ee","impliedFormat":1},{"version":"b2546f0fbeae6ef5e232c04100e1d8c49d36d1fff8e4755f663a3e3f06e7f2d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"cf34a21f6c44f83469723a66b660c1495f7f030d64f8f9595c621f4b6f713aa3","signature":"60e870100c81f21aa79a91d9f486e3f10b4a1fe20baf577b885b793c78b8c4c4","impliedFormat":99},{"version":"78647004e18e4c16b8a2e8345fca9267573d1c5a29e11ddfee71858fd077ef6e","impliedFormat":1},{"version":"0804044cd0488cb7212ddbc1d0f8e1a5bd32970335dbfc613052304a1b0318f9","impliedFormat":1},{"version":"b725acb041d2a18fde8f46c48a1408418489c4aa222f559b1ef47bf267cb4be0","impliedFormat":1},{"version":"898ec2410fae172e0a9416448b0838bed286322a5c0c8959e8e39400cd4c5697","impliedFormat":1},{"version":"692345a43bac37c507fa7065c554258435ab821bbe4fb44b513a70063e932b45","impliedFormat":1},{"version":"85084ae98c1d319e38ef99b1216d3372a9afd7a368022c01c3351b339d52cb58","impliedFormat":1},{"version":"f473be7c909dbd10c40f013e70da40f24648b2abb01025436fe0a0eecd0e83be","impliedFormat":1},{"version":"c98583f02275727ead0256c97298c15fb77a1c1e473b03c3b61291c63c66d385","impliedFormat":1},{"version":"9a7904e39add402d71343ac8de5303e990d9abb1fc703c64991c655b718267a5","impliedFormat":1},{"version":"522edc786ed48304671b935cf7d3ed63acc6636ab9888c6e130b97a6aea92b46","impliedFormat":1},{"version":"f671901909a26ae633328d6d899992193ca9ea718e6315f2c3d46f39c437f02c","impliedFormat":1},{"version":"7920b8aa27a7b6a90bf9f5dc21eedac7f38ca8717ebe70495ab616eb52b3247b","impliedFormat":1},{"version":"485fb40ef0ae61e1f8f5f494a2aa4a69df73dc860b5c94ef8fc8dc42679fdb26","impliedFormat":1},{"version":"1f53ae308869bfb894735576727f3dca47d0405ba7fee4f076a701b449ce6f94","impliedFormat":1},{"version":"84bdeff726a44cad4c07230ccdd2b777e53608d081eb8b27f6d28540ac22a915","impliedFormat":1},{"version":"1950e4d79983ccc330513fb28324280bbd138fc69e2739353008ae5a75f976e6","impliedFormat":1},{"version":"2e9b3ece2914738d48a674dc4d677a6cef576ef045356961120a7915735e13f4","impliedFormat":1},{"version":"8decb32fc5d44b403b46c3bb4741188df4fbc3c66d6c65669000c5c9cd506523","impliedFormat":1},{"version":"3c8c852d93800512dc47f4554efe94789bd81733947e2066a916ba70fe6992fd","impliedFormat":1},{"version":"c26dd198f2793bbdcc55103823a2767d6223a7fdb92486c18b86deaf63208354","impliedFormat":1},{"version":"93551b302a808f226f0846ad8012354f2d53d6dedc33b540d6ca69836781a574","impliedFormat":1},{"version":"5a2ae43daf9d478f37780e3ae08089a46347e395812c7c4526684878e34b1401","impliedFormat":1},{"version":"d60984fcae46158649bf553c1a649428ced1dfaa789086a7fb79a819536b0023","impliedFormat":1},{"version":"ff90925b7aef60c568d491966f90f37cfe4eb126a590e68a33c017b9be483f84","impliedFormat":1},{"version":"cbd12dce7f4a3542b0f00690efcf1211e50ad87bd78cedbf7beb60acb27d20a0","impliedFormat":1},{"version":"be8f369f8d7e887eab87a3e4e41f1afcf61bf06056801383152aa83bda1f6a72","impliedFormat":1},{"version":"352bfb5f3a9d8a9c2464ad2dc0b2dc56a8212650a541fb550739c286dd341de1","impliedFormat":1},{"version":"6b6fdab709d30fbedb090e783a610662e60b4922843f42ef801e3073a23392ee","impliedFormat":1},{"version":"65b2a90560049039460015abe63b8fa7f205bb78796a8de48a3661cfe7e07e28","impliedFormat":1},{"version":"1b6173159974df8ff78f3b01b8b89449053c1912c2ec715a2dc664d8d93a54c1","impliedFormat":1},{"version":"2b4b6a59d7d1020b65f9c878850b1aa2ae8eceb26025224d6bee2c5d7883d815","impliedFormat":1},{"version":"d45acd2463649e59b4dafb4ee051426783c6a13a72c21fac94265676f7fc01d8","impliedFormat":1},{"version":"70441eda704feffd132be0c1541f2c7f6bbaafce25cb9b54b181e26af3068e79","impliedFormat":1},{"version":"7ef6d45ce6f0ee16a0441063ca89cebfbe4c00647132f5fe31bbe5420e20843b","impliedFormat":1},{"version":"11c2481df1d73d5d667ce282d1ec9fbcedee39f0a0382fd591cf6434b21f05d0","impliedFormat":1},{"version":"ea4b5d319625203a5a96897b057fddf6017d0f9a902c16060466fe69cc007243","impliedFormat":1},{"version":"ac7eec65e925055052e4c3d88a303457150e7ddf8f02256a674315335b95af70","impliedFormat":1},{"version":"bb61172ecd43ac71849821f49ef6afa6515230386b253817c380873bdc49da50","impliedFormat":1},{"version":"ab01d8fcb89fae8eda22075153053fefac69f7d9571a389632099e7a53f1922d","impliedFormat":1},{"version":"bac0ec1f4c61abc7c54ccebb0f739acb0cdbc22b1b19c91854dc142019492961","impliedFormat":1},{"version":"566b0806f9016fa067b7fecf3951fcc295c30127e5141223393bde16ad04aa4a","impliedFormat":1},{"version":"1b3a76621e54583d0f1a9fcde6b7aa7642283412b103744f7b2a5c3c19108959","impliedFormat":1},{"version":"6f0f5830c13abe710e1e7e97bed1ae039f3a9fc8b5ce2a076141eaf0c854fee6","impliedFormat":1},{"version":"a3727a926e697919fb59407938bd8573964b3bf543413b685996a47df5645863","impliedFormat":1},{"version":"3307e5b71a5eea118476097fde4580e60c20b187e945f42d7eb69a8dbbe7e09a","impliedFormat":1},{"version":"dce7d69c17a438554c11bbf930dec2bee5b62184c0494d74da336daee088ab69","impliedFormat":1},{"version":"1e8f2cda9735002728017933c54ccea7ebee94b9c68a59a4aac1c9a58aa7da7d","impliedFormat":1},{"version":"e327a2b222cf9e5c93d7c1ed6468ece2e7b9d738e5da04897f1a99f49d42cca1","impliedFormat":1},{"version":"65165246b59654ec4e1501dd87927a0ef95d57359709e00e95d1154ad8443bc7","impliedFormat":1},{"version":"f1bacba19e2fa2eb26c499e36b5ab93d6764f2dba44be3816f12d2bc9ac9a35b","impliedFormat":1},{"version":"bce38da5fd851520d0cb4d1e6c3c04968cec2faa674ed321c118e97e59872edc","impliedFormat":1},{"version":"3398f46037f21fb6c33560ceca257259bd6d2ea03737179b61ea9e17cbe07455","impliedFormat":1},{"version":"0a08db8f792dd2b329dfb09bb2c7805298d03888608acd9eb554a8ad820e1079","impliedFormat":1},{"version":"12b9bcf8395d33837f301a8e6d545a24dfff80db9e32f8e8e6cf4b11671bb442","impliedFormat":1},{"version":"04295cc38689e32a4ea194c954ea6604e6afb6f1c102104f74737cb8cf744422","impliedFormat":1},{"version":"490725ebec9ddfc97663887989ff1a49323b7cce7293970732ef962cffed3699","impliedFormat":1},{"version":"7418f434c136734b23f634e711cf44613ca4c74e63a5ae7429acaee46c7024c8","impliedFormat":1},{"version":"27d40290b7caba1c04468f2b53cf7112f247f8acdd7c20589cd7decf9f762ad0","impliedFormat":1},{"version":"2608b8b83639baf3f07316df29202eead703102f1a7e32f74a1b18cf1eee54b5","impliedFormat":1},{"version":"c93657567a39bd589effe89e863aaadbc339675fca6805ae4d97eafbcce0a05d","impliedFormat":1},{"version":"909d5db5b3b19f03dfb4a8f1d00cf41d2f679857c28775faf1f10794cbbe9db9","impliedFormat":1},{"version":"e4504bffce13574bab83ab900b843590d85a0fd38faab7eff83d84ec55de4aff","impliedFormat":1},{"version":"8ab707f3c833fc1e8a51106b8746c8bc0ce125083ea6200ad881625ae35ce11e","impliedFormat":1},{"version":"730ddc2386276ac66312edbcc60853fedbb1608a99cb0b1ff82ebf26911dba1f","impliedFormat":1},{"version":"c1b3fa201aa037110c43c05ea97800eb66fea3f2ecc5f07c6fd47f2b6b5b21d2","impliedFormat":1},{"version":"636b44188dc6eb326fd566085e6c1c6035b71f839d62c343c299a35888c6f0a9","impliedFormat":1},{"version":"3b2105bf9823b53c269cabb38011c5a71360c8daabc618fec03102c9514d230c","impliedFormat":1},{"version":"f96e63eb56e736304c3aef6c745b9fe93db235ddd1fec10b45319c479de1a432","impliedFormat":1},{"version":"acb4f3cee79f38ceba975e7ee3114eb5cd96ccc02742b0a4c7478b4619f87cd6","impliedFormat":1},{"version":"cfc85d17c1493b6217bad9052a8edc332d1fde81a919228edab33c14aa762939","impliedFormat":1},{"version":"eebda441c4486c26de7a8a7343ebbc361d2b0109abff34c2471e45e34a93020a","impliedFormat":1},{"version":"727b4b8eb62dd98fa4e3a0937172c1a0041eb715b9071c3de96dad597deddcab","impliedFormat":1},{"version":"708e2a347a1b9868ccdb48f3e43647c6eccec47b8591b220afcafc9e7eeb3784","impliedFormat":1},{"version":"6bb598e2d45a170f302f113a5b68e518c8d7661ae3b59baf076be9120afa4813","impliedFormat":1},{"version":"c28e058db8fed2c81d324546f53d2a7aaefff380cbe70f924276dbad89acd7d1","impliedFormat":1},{"version":"cf3f331aad22bfead8f79aae52f022f25bf9ce25185cfc87f3c4a59c060a699e","impliedFormat":1},{"version":"826a98cb79deab45ccc4e5a8b90fa64510b2169781a7cbb83c4a0a8867f4cc58","impliedFormat":1},{"version":"618189f94a473b7fdc5cb5ba8b94d146a0d58834cd77cd24d56995f41643ccd5","impliedFormat":1},{"version":"da129261494c4094bf55c761ba5f0ae4d5426d83ed5e312bc7f8600727bb8a05","impliedFormat":1},{"version":"cd2f8f7d90d8d283bb4b91b57406bf793df731d39bc2c119e3fa514a057d21f8","impliedFormat":1},{"version":"91b0965538a5eaafa8c09cf9f62b46d6125aa1b3c0e0629dce871f5f41413f90","impliedFormat":1},{"version":"1930700210612b5324055fd9d335f4f2a7bb3f1b1433e1adadd7bdc5ee50272f","impliedFormat":1},{"version":"b998db2d97135f8958613fd1d795fc58a17b8fcc452288eaec13e8c8d870d1ac","impliedFormat":1},{"version":"608dbaf8c8bb64f4024013e73d7107c16dba4664999a8c6e58f3e71545e48f66","impliedFormat":1},{"version":"2d8df720a088cfdc1253782b120f400cbe0d4516bb06e98c88ae7c2af1447653","impliedFormat":1},{"version":"99acda6ceb0b1e5a754aa8e7af740702e50ab515561be3d987392f04d0f7078e","impliedFormat":1},{"version":"d6ce98a960f1b99a72de771fb0ba773cb202c656b8483f22d47d01d68f59ea86","impliedFormat":1},{"version":"806f43175b88c9a2ef89448cef56bc95c4df32a27be99748c517e5ca076919e8","impliedFormat":1},{"version":"5832c4ed86047766c1d4cfe2aa5780e3ab5d8d842d12664d0f71faf78c80dd7e","impliedFormat":1},{"version":"a43d21378510cf4ed5aad29f64f3d0fc6e0a30bb2bb81af0ea776b239a77d068","impliedFormat":1},{"version":"60c4cb259d73efe80ca3854715efdf93710a8b11a560a7f9741d6638280b4a80","impliedFormat":1},{"version":"9e3e3932fe16b9288ec8c948048aef4edf1295b09a5412630d63f4a42265370e","impliedFormat":1},{"version":"8bdba132259883bac06056f7bacd29a4dcf07e3f14ce89edb022fe9b78dcf9b3","impliedFormat":1},{"version":"5a5406107d9949d83e1225273bcee1f559bb5588942907d923165d83251a0e37","impliedFormat":1},{"version":"ca0ca4ca5ad4772161ee2a99741d616fea780d777549ba9f05f4a24493ab44e1","impliedFormat":1},{"version":"e7ee7be996db0d7cce41a85e4cae3a5fc86cf26501ad94e0a20f8b6c1c55b2d4","impliedFormat":1},{"version":"faa402775a4c220279f9c26074a0010f10a7f0293c506ffd0857ea45e8ba7733","impliedFormat":1},{"version":"b498375d015f01585269588b6221008aae6f0c0dc53ead8796ace64bdfcf62ea","impliedFormat":1},{"version":"08b603e3737ff32a685eefca3e7f21324b8b868f3322416cef759f8a54d234ef","impliedFormat":1},{"version":"34534c0ead52cc753bdfdd486430ef67f615ace54a4c0e5a3652b4116af84d6d","impliedFormat":1},{"version":"14d8af44e19148423a5a0817544a229e3ba324e1cd814c1d7b4ca2690baf434c","impliedFormat":1},{"version":"91122fba45414382787d7cffbd90298118a2970f8f12d91cff302f3a482f01e1","impliedFormat":1},{"version":"e891cc403ec4588c43e67f20d4f44c2de1995e1a778e7a255e0a1f8c7d263005","impliedFormat":1},{"version":"7a07b0e6d8f5356cb3473723d1853c9505301e05329df8a72ba6c42a2657ca66","impliedFormat":1},{"version":"e54bfc9e643070779ab10e9d572a776562725c6533f9b8eefe30d5ee2e87b22e","impliedFormat":1},{"version":"b60efbac98231283107121b5b3327f56a6632c2d14d7616920bc309a4f6d4bc3","impliedFormat":1},{"version":"46036e7d150725b12b0ef99ca77cfd4ee662c6a0e011f85a679827dd65d1f42c","impliedFormat":99},{"version":"33235f0c8a3cdf9917c3a2b8eca15fba28d554a48d8eeca24c417a16e317d0ac","impliedFormat":99},{"version":"783a9a7d35f9b922e0d72452e85245829e5618776b3243c4adb9bcd554443ca5","impliedFormat":99},{"version":"dd9d62565b1d4e0885e9b1f1fb55c7a304e5710303d31821a7daeeada9662aa0","impliedFormat":99},{"version":"ef14aa59689ac1bd4b725220fafe753eff9acd8cdc445c04e5b98ac3fe28bff2","impliedFormat":99},{"version":"8c184a7193d318242db5e31ef4bbd73e88c3a0e333c0f4c8523ee2d9ad76cf84","impliedFormat":99},{"version":"dc7600229385bd96566e63a48e336a38a71f223de213b9a5c04f84a9c59d1342","impliedFormat":99},{"version":"907df4219dc9e9e4310be2f3e9e118aa092d073612b9ab1247e447c6ce902260","impliedFormat":99},{"version":"4f4f2beae13a724e7f1b45b5af86a94500d799c7a59181eae1098f549698b09a","impliedFormat":99},{"version":"62478b6c261fee944784c9039e465e03600d68b60d312aba7040143dc1189d91","impliedFormat":99},{"version":"72a845236a24235f598a7da1dc89c0e38a74e1c8cdf4db833c5618e12adc4a50","impliedFormat":99},{"version":"0d2a83bc35ebb75a347d16b72836cf7d407563a7827a585590fae7e2873fcdab","impliedFormat":99},{"version":"f4584e95c63371b5d507749924d94e324c7e041f964975a92e7c8a1abc840328","impliedFormat":1},{"version":"294985ec97b28343d1d6e2730a13a839c375a2ffb5f6b37acbf5dacf35613785","impliedFormat":1},{"version":"3896fddb08ec18856f5e88f9f7776c1c58c41d6129f8ee5158513a5de3febd01","impliedFormat":1},{"version":"4e2af0853ef2aa0bd0c97121d37255db91d57a5a5d67cc937f2367a949373f3f","impliedFormat":1},{"version":"d53ba569f15be8659ba0f726dddb7a24bb875b63b8614c6b007d38cabfa3217b","impliedFormat":1},{"version":"2e900e22ef301dafb3a35df7aaab4f139bf1602c8e5dc0bb0ca8b24305af388e","impliedFormat":1},{"version":"9c479340e2f7537bbd31dd0a08aeeec28db302d9bef096eef3cc09f20eb56097","impliedFormat":1},{"version":"952d81d65c1cb9a3bb736f233db638e50fdd4e7ae75a5624e7b8be24dad92851","impliedFormat":1},{"version":"2767eb79f4b9e754efff56d654aa71715baac18a6157170f423cbd460f2445ab","impliedFormat":1},{"version":"3d6f89fb6ab035027268da5a90e31369876b5f2c37339b1212590c8727bc920a","impliedFormat":1},{"version":"6b05adc37cce53629f7740a2ce72a17d231cb1332dd20d725f49918db5f90ec4","impliedFormat":1},{"version":"cb364f282ace685f66e8fa777804a36e96892e4c92cf4e8816ae9156c3551453","impliedFormat":1},{"version":"afe1be833b5a9e15f35b72d4aedaac24c0fd903e374c4eb4be90334a0e5ad9ae","impliedFormat":1},{"version":"42b59521c78a8daeaf087752adb5de9753e7c4b701fc7c3e435ef1d737140091","impliedFormat":1},{"version":"eedad1c380f5737f1220feb0ee83212f602acae8f0553837c098878e5c73c198","impliedFormat":1},{"version":"e0fdb256e83c39f7794908de553930ce2581ba109b8de90937bf972fa75485d5","impliedFormat":1},{"version":"dafdf0b0ccb55128f83fe0acaddadfb5d223887a7e8d59a0623860a68b1f59a7","impliedFormat":1},{"version":"6f3ef4208d2d6933180ac1bc813efbfb319b05e49ef0cdbeea15126b982578c4","impliedFormat":1},{"version":"02e7a692feb22c829d837e40e82070d47b696a0c64ea192ba2c438f6a55902a4","impliedFormat":1},{"version":"685b232bf1f8763afa58c62d964f677478fac68ccd9e761e4d9a0cf6b5f9a378","impliedFormat":1},{"version":"2d205c767099a9c1719b2884eeb878470d81e3418ffe9ae8db8139e597f3e34d","impliedFormat":1},{"version":"0c0ccc47a6e4cdaf336181d46a262c591dad7098f431a4234364fccf7ced258f","impliedFormat":1},{"version":"cf68f71517959967c83d4585d1cd37376fbbe8174ddd0140274c228488149190","impliedFormat":1},{"version":"d6cadb48c29a13aeb7be79d14980f2aa4ebfe9c6118726a906cc429fba582079","impliedFormat":1},{"version":"56e6a902d2aa94175f75bdc0ad822bf787b67bb6dbf52018c389d3643d203539","impliedFormat":1},{"version":"650b748b635b9299a8d2ba23ff02f403aac044a946b7e10bfb95942367bc1489","impliedFormat":1},{"version":"c4e474945611676435f1807a5ab049becffc54a32a1a4cfc96731cdb34fdc8c1","impliedFormat":1},{"version":"a23c0e88e5d4204898c2087a5950b974c594343f78aa8e3e758bb85c3d30dfde","impliedFormat":1},{"version":"8d071caad80707dc1853c718e6372349df8fdd4790ac57550cb243545ac91806","impliedFormat":1},{"version":"6138f6a183b6ab187becc7f4f37ea7b9b072874c75699d2bd10950fe07726aec","impliedFormat":1},{"version":"ddbafa89c2b1b11251b96deef3869fa0b567766c43bd31224838ecb024297b8b","impliedFormat":1},{"version":"3cc6ec5641587a673473f9613880b63f531446bc631a6f96adbb033672cf6d2d","impliedFormat":1},{"version":"3901548cb8b4d914800927f9def278f34dfa106e65be38ee47d59c4efdd45ef9","impliedFormat":1},{"version":"21856903077f053172be7ab1027ccfb94fecbb0d22dbc34e7208c4553575ccbc","impliedFormat":1},{"version":"6cf6409ce9b90a14cd1e146d00fd21973d5d6b2da875283f3da0f27e0b786eaa","impliedFormat":1},{"version":"2a527df5c4828328fa6b35cf8b8f5bf0640933a4602c517faace7a1c3af0d446","impliedFormat":1},{"version":"2a46d72fe8eac64f8337c839bba3e558a07cdf6f2574d88dd5852d6ee8bf7d9c","impliedFormat":1},{"version":"0787ec67c199917f7c0f2a127432dc65f5d422e15992b8a7c3d7765f94075390","impliedFormat":1},{"version":"8494cb4b789a1f5e0710a4db2e111b4e20ee373251cb958b79f2d19d8adb3743","impliedFormat":1},{"version":"b8a25d32e4a2a187e2169f0936416cfcac8926f56166f3895fb5f82942f3150e","impliedFormat":1},{"version":"7552cf0a2915702d6cf9a8c6a2a242b713214728dbb81353132d2d986e74e521","impliedFormat":1},{"version":"c3789c53874f2aba5a7c21e1ac1e467f95522ba5a0c8f9c8b8c519efa7aec51b","impliedFormat":1},{"version":"dec52a42c912503c35463f974fb86cb1a772cab001c2c9ed413093845be2f677","impliedFormat":1},{"version":"d2a2a7be324ab271073676edb22f5de259d4baf5bad32bd2e5545f957f503ac4","impliedFormat":1},{"version":"63fd6e8e4f5403337124c82bf46fb17ce24923d8a9223b387ad312a4b075e7c9","impliedFormat":1},{"version":"bce453d2e25d1104b3b84c97aee92111e194691e5b254af318499745c8e041c6","impliedFormat":1},{"version":"22f897e17f18b702f8aa1c6e6412fcd33d180f8ef61297fec6c395a2b18d9908","impliedFormat":1},{"version":"0afe2ed080fb1ca424bbcecca1874d7fa24aaba54535722b00607d38dd150f8a","impliedFormat":1},{"version":"04260ae2a15ef601034f94c4b4c91b76a4c4197d48137d04859d9aa9c83f2f16","impliedFormat":1},{"version":"507fe2b965da84e42b4d17d35264be1e70694a8692c75fc07207d38deda42ad7","impliedFormat":1},{"version":"4a9bdce843a6bc8bdc71287de2808e7438fd718e17c55d175f0f2d0a8883947e","impliedFormat":1},{"version":"8a0a5c90711b4d4d55b0edf7d097faf872f65d6f7be1a5a42fdcfb62c751a135","impliedFormat":1},{"version":"756c0a51db689803dcbcb94cec65edd6f0212fcda9abf264001ae975a5c6a18b","impliedFormat":1},{"version":"2873b8fe4083b54fb60dd1d03ee8b22496e41f96a4e536e06cd59a481aba01de","impliedFormat":1},{"version":"5fc9e50135f4163989ce74b83b68a5ee44d151f04ec44078adbe913c8dad694e","impliedFormat":1},{"version":"e2949c84dcb7b6a3fb40fc8bfcd9fa6b74d1e2c830de0d5ace7159cc4fb4b5a5","impliedFormat":1},{"version":"34a80ad568a06a539e43bde102bed1fcb8bec196811caa9abc3a0cf44a95fdde","impliedFormat":1},{"version":"e634a64172adde8d23f6df23f252d35e16eaa4bc33e881700967498a955e0b25","impliedFormat":1},{"version":"b1432d91fcf4cf709d71adc1a00e04ac1948380b8552310d0509dbdc3b2cf97a","impliedFormat":1},{"version":"e3d05607f9e532c806395e8765913736c42900c5c3ab5ab52d910da6fd57121c","impliedFormat":1},{"version":"eca0a0e9725ccbf8b13ee72cdab75b489992f2ce7f4dd198767831982463c294","impliedFormat":1},{"version":"26d1f4beb9d50d83557de587f5168dacb4dc81935f4880afa7d48dd7b13d5d10","impliedFormat":1},{"version":"67d2cca28154842dd7b1d5cde8c94b9fc24afad1089eab0f1de7294d143605d5","impliedFormat":1},{"version":"28c9bcc4c2323e859523b1edd20a69b66784bb3ca58568ac1c2448d90c1e1fce","impliedFormat":1},{"version":"b2434d709c9dcf1bee9223a19b449cf9d8a0b411fa5bb2ecc8ce25fa92889c77","impliedFormat":1},{"version":"6cbfcc72a73f25c47951ebb87118ecc43d04781e02b51236d4fab69dbc63926e","impliedFormat":1},{"version":"e0fdb256e83c39f7794908de553930ce2581ba109b8de90937bf972fa75485d5","impliedFormat":1},{"version":"dafdf0b0ccb55128f83fe0acaddadfb5d223887a7e8d59a0623860a68b1f59a7","impliedFormat":1},{"version":"ec314adb4116647307480f138c5c23f98bb5ad4efba51aeb1957fc4519429d8b","impliedFormat":1},{"version":"5297455afc3c8eff9ae459f28eeb846fd86a51678afbceb7c27696eefdcf1e5b","impliedFormat":1},{"version":"532aeb172f2a735739956f48d7862681212baeca1bbde9185eae73f6dcb95faa","impliedFormat":1},{"version":"2d205c767099a9c1719b2884eeb878470d81e3418ffe9ae8db8139e597f3e34d","impliedFormat":1},{"version":"cb33e3ca7c3b2cda0d04b6aafe6f9ddad719ef615bdeae9cb88384ad798807ec","impliedFormat":1},{"version":"2c9b150c52c2c876fd5e91e1c63be66a6e2d052a1f381d362ad649c6ffd8fba5","impliedFormat":1},{"version":"d6cadb48c29a13aeb7be79d14980f2aa4ebfe9c6118726a906cc429fba582079","impliedFormat":1},{"version":"1fecc438d1dbb692dcc38564aa5ea06a108cb37661327d8c0e0c065e07efb3aa","impliedFormat":1},{"version":"650b748b635b9299a8d2ba23ff02f403aac044a946b7e10bfb95942367bc1489","impliedFormat":1},{"version":"c4e474945611676435f1807a5ab049becffc54a32a1a4cfc96731cdb34fdc8c1","impliedFormat":1},{"version":"8d071caad80707dc1853c718e6372349df8fdd4790ac57550cb243545ac91806","impliedFormat":1},{"version":"3cc6ec5641587a673473f9613880b63f531446bc631a6f96adbb033672cf6d2d","impliedFormat":1},{"version":"3901548cb8b4d914800927f9def278f34dfa106e65be38ee47d59c4efdd45ef9","impliedFormat":1},{"version":"21856903077f053172be7ab1027ccfb94fecbb0d22dbc34e7208c4553575ccbc","impliedFormat":1},{"version":"6cf6409ce9b90a14cd1e146d00fd21973d5d6b2da875283f3da0f27e0b786eaa","impliedFormat":1},{"version":"2a527df5c4828328fa6b35cf8b8f5bf0640933a4602c517faace7a1c3af0d446","impliedFormat":1},{"version":"7f2eab4f5f276996d3e13aa12f589048fe198eea8dbd78ddcee60c38a8ff5606","impliedFormat":1},{"version":"0787ec67c199917f7c0f2a127432dc65f5d422e15992b8a7c3d7765f94075390","impliedFormat":1},{"version":"095b26151a4ce7b9da003174d4a22db9f867928d3bc7718966d0e95f0c9d160f","impliedFormat":1},{"version":"b8a25d32e4a2a187e2169f0936416cfcac8926f56166f3895fb5f82942f3150e","impliedFormat":1},{"version":"7552cf0a2915702d6cf9a8c6a2a242b713214728dbb81353132d2d986e74e521","impliedFormat":1},{"version":"c3789c53874f2aba5a7c21e1ac1e467f95522ba5a0c8f9c8b8c519efa7aec51b","impliedFormat":1},{"version":"dec52a42c912503c35463f974fb86cb1a772cab001c2c9ed413093845be2f677","impliedFormat":1},{"version":"d2a2a7be324ab271073676edb22f5de259d4baf5bad32bd2e5545f957f503ac4","impliedFormat":1},{"version":"e8125d329bd068dfa97035914b87f0d561f8bbc5a5883ad883c5484dd8315eee","impliedFormat":1},{"version":"22f897e17f18b702f8aa1c6e6412fcd33d180f8ef61297fec6c395a2b18d9908","impliedFormat":1},{"version":"9b48fb7d6521c10569a09921fea776719fab153e4b24d6bf4290fe6fab9be6d3","impliedFormat":1},{"version":"9c2c8c2162f810ac21c9a9df55ef59085b82790d9b17a916c6d025ba3e3b8edf","impliedFormat":1},{"version":"507fe2b965da84e42b4d17d35264be1e70694a8692c75fc07207d38deda42ad7","impliedFormat":1},{"version":"8a0a5c90711b4d4d55b0edf7d097faf872f65d6f7be1a5a42fdcfb62c751a135","impliedFormat":1},{"version":"3ae18d6fa578fc0025f43e6b2f26bc3d1ba110e9149273bd213a5cb7fb878848","impliedFormat":1},{"version":"2873b8fe4083b54fb60dd1d03ee8b22496e41f96a4e536e06cd59a481aba01de","impliedFormat":1},{"version":"5fc9e50135f4163989ce74b83b68a5ee44d151f04ec44078adbe913c8dad694e","impliedFormat":1},{"version":"e2949c84dcb7b6a3fb40fc8bfcd9fa6b74d1e2c830de0d5ace7159cc4fb4b5a5","impliedFormat":1},{"version":"34a80ad568a06a539e43bde102bed1fcb8bec196811caa9abc3a0cf44a95fdde","impliedFormat":1},{"version":"e0f1bf295d165e3e7fdb6bbd9910888e9c5645e19cb4ae4b86303ee5ba2c951d","impliedFormat":1},{"version":"7c6d7a526120d34a336b995d5a5b2f52d934b89d364b333b850c15ef3b5bffce","impliedFormat":1},{"version":"e3d05607f9e532c806395e8765913736c42900c5c3ab5ab52d910da6fd57121c","impliedFormat":1},{"version":"0a019658c43651da76cdbc673aab961f4c6e9fab4006e3aaedb5b13e5dbab37d","impliedFormat":1},{"version":"956b961306d285dc2c1d3b5020baf1e2c57f564876f50dd42e0976bc75a020d3","impliedFormat":1},{"version":"dcb2d6a6e0b8900a46f9cc664fc1c6e3cc9a4d99249bad1605749d651e8cdd2e","impliedFormat":1},{"version":"9b33ad40fa8b00650b695638c8e08df88bbbfed00283ff5eabbf11b8813e03f8","impliedFormat":1},{"version":"fa90ab24a39247e1e9874784e7b56a93ab9f1a04daadff9d9cb99d7223d91486","impliedFormat":1},{"version":"4b91eb2d2841e34c371710ec924e8ac947911d9941bdfb6a11730e741f287005","impliedFormat":1},{"version":"ce980562ed0d193d700d6d55ff717131e4bb58b88b5448e7e05dfceae719f47c","impliedFormat":1},{"version":"4d66be39bdb7a62696866426ec835920b2cdce7124b54aa14b1f9fef4d41cd93","impliedFormat":1},{"version":"dd679f95f944384711ac7c9ed85d6b46b15f82c023c4919ba3232fd753532c90","impliedFormat":1},{"version":"8b4a688f685193540c8164ebe48624c4e82b8769d74dfb3557c4dbb9fa567898","impliedFormat":1},{"version":"b5f9c5b2f54ce4c0baf948d885a7a21aeba477dc9356beefd63c4bddac366d6c","impliedFormat":1},{"version":"48079abf5a74f7028473652a9cf64e3d260c44bf4060b05485a6e3d7f0370dc2","impliedFormat":1},{"version":"ea22fbc1dbd8fac6df7dbd5870183a9d14ccb8358c253bf844ced890a7f38dd6","impliedFormat":1},{"version":"773078223907d9936c05dddfed60cafeebd4249acbcc189001370261718f0258","impliedFormat":1},{"version":"17e344c68488e5787eebf3ec125565d51a468af5701e214367a42ce8e5eef059","impliedFormat":1},{"version":"aadf00554ac0118fcf308d7ae1cafd86a7931b41e038022dd891af248d72ef35","impliedFormat":1},{"version":"733ec8bd6c210af3ea70cfd0ae7924949de5ecb384d9d1db3744b3af2f9d0f00","impliedFormat":1},{"version":"d95f40246c4a53a739dec1818a4f3cb39aac4965ae1a4faf614f78bf3b85c347","impliedFormat":1},{"version":"3a844741079e4c4e38e5dfa7b182ef7030a8c787bc08efacebe0d7b3bb685f37","impliedFormat":1},{"version":"5f5ff006e411f34b3ecf4fe66bbf7c9978bab7fb7f09646c91b8549acc8d487f","impliedFormat":1},{"version":"70e812cb0393e7100087a2203ee9349dab49974032429d29c84222be1356e6f8","impliedFormat":1},{"version":"856aae51a27c4c285b39701ee870dae66bd5b8e007c8dc153bd66fd56fa901ea","impliedFormat":1},{"version":"739130f4f55f33efe791911603f2276169bc0554dbb789bd907870774bbf30d0","impliedFormat":1},{"version":"9ee7eea77d7631e7d95b4f5efc9972fea3a82a3947bac97e0c5c3a9ad2f8d509","impliedFormat":1},{"version":"748b8a93f92a5e3c6c45e9252efe5f70312dbaabf23c32882b0901d530698b40","impliedFormat":1},{"version":"59a6a3f236c937dcc8a6d99557b4317712c0b82f53e73f7a0070c82fc795ed6e","impliedFormat":1},{"version":"dfd624f05e679a330f8b0b8c27b97cc6d09cb8c5547c229eedcf71ee60716f50","impliedFormat":1},{"version":"33bcff4a7c9c06dd05a7635f1a7ba8ccd1a26250caf6fef41fe4bf3677437356","impliedFormat":1},{"version":"001bb2fff6cc7d1cfb99e5eb13b745764230c0a48c9832cd4b8196acbb63a402","impliedFormat":1},{"version":"7f843004c1f9cc2d32f9778227813cfeb8f47733f4485130d999f51eb97a45df","impliedFormat":1},{"version":"1489c494f095baea8f9e67d37a9fdd4025c172c1e74ee783093ee2756a665a1d","impliedFormat":1},{"version":"d4946c3a7c18a8ba1e60a1578c676f51a81d1767fcbbf60b072803ed3fa7f9f9","impliedFormat":1},{"version":"a56648d6831b9b5552b56f0eae7536666d181c86fdcc422f9143e4a5cece6a39","impliedFormat":1},{"version":"f15ff88fe1895cda331b45ceaf23dca027937395a64daa6867cbde52dea7b8c2","impliedFormat":1},{"version":"37046d990462ee09b87b6045d32d62f04d2285351a0977aec83050d994cd6992","impliedFormat":1},{"version":"67294340fe22775adae3b562bdd25adbb1b0d9926b54dfca251418e0e9df8730","impliedFormat":1},{"version":"38b2ce306ab9f13712896b0a4aa876c3e0af5b4466266938e7c5988d822a3f76","impliedFormat":1},{"version":"40e954fecc5f79d6d0890a64713d5e2f8083ae960b6b4e541d44efb9b1c4a899","impliedFormat":1},{"version":"0203a29de8ad74bc916100aad38ccaef5efd37435c8e2f6f6fbfaf2449cf9c03","impliedFormat":1},{"version":"c7aedf7a48b01d06a7a163a63bf1d544fc0bd00417885bae592319cd3f8a97e9","impliedFormat":1},{"version":"e5873895fef4cf12c0bed5b157849e6784d24280bd41ed90854180eebdaa5026","impliedFormat":1},{"version":"65cfc8c1b0ef79383524acaf8151508cb09d163850c4a50dc53574583afd4761","impliedFormat":1},{"version":"c38a0a8b43a6403d1381c32af260513432885aa4c0ae03addad9bad07fd2a2d7","impliedFormat":1},{"version":"d34cbb43422395aa227955f37c7d2b5fcaa2e6675e2a7f7e4e25ee704ab912be","impliedFormat":1},{"version":"af560f62851c384acb21284b9127d53411951056010ff0971f0e66d88e66a7b5","impliedFormat":1},{"version":"b34a0615615cbc69750d9fffe16f31563d917330413219225915cbf4fd473fb7","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"82d7a9061cc31434ca602b01abf3bd3aa3d93eeba3d92ca4d7ec5ff0e401bcc1","impliedFormat":1},{"version":"4ca12ab9d4783b7180b61b96b798b62f6da47e3ee15ff54a5a41607349e15ffe","impliedFormat":1},{"version":"143c3bff41eab3e0d761a3cab2bd580a642beb7509d21fdae5ad6ef04eaec846","impliedFormat":1},{"version":"92538fb1b4ade68cef4fc7b35b8b919e1f2d0c95a080865f991bb10254bb198e","impliedFormat":1},{"version":"963a1f038a096850feadc16b1f4877bae9b98f70fb5471e8af07813fc440d9c8","impliedFormat":1},{"version":"636458e860b725e326083020eac20d68df8c765c22870550ad78727f08d354ab","impliedFormat":1},{"version":"b2597f8e5cc644c743602ec4a9196f1a4f981383bc666806c673061d5a974d7f","impliedFormat":1},{"version":"9ea5135bc86b361d9f7d7559979d3749945a5976bf85e7f5c63b5439f122e5fa","impliedFormat":1},{"version":"11606f2a7b32a47aa2fede3d93f3a4505cf57bb4fbae758b0cbebebed1dae817","impliedFormat":1},{"version":"ec5ef2d24ec079093f3e8aeafc36110e32d586c3f2c3af395823aae744e7b69f","impliedFormat":1},{"version":"181baa25db7c55954e1d4114485cd3ed96df14a6e26fb8c9ba702a8a118d9254","impliedFormat":1},{"version":"fb553e78cd953e6b36a394021bd392446638033c9e3388a9f1babb613617a20a","impliedFormat":1},{"version":"6139c7fcac07fead5b35781d146198019e176f8d32c9b6ae89acfa22b16a9fbc","impliedFormat":1},{"version":"86b2abd6ddc37ca8fbed9606367ce4b8fa1d6b2fa3c30cd8f5fcb6d3ae996268","impliedFormat":1},{"version":"5a699f07f692f146028a8d2a24dea3df3bebec19a2f6dc7e1624274b8a0765b8","impliedFormat":1},{"version":"aa95d55cbdb02fd4cfcc5b52f04453dbaa86a1fcf31e051bcfb3716f398ccefa","impliedFormat":1},{"version":"55cc31850bb3aec591a02f4e2d2999f1484a52f0afa8ed6934dbb0cfa0635128","impliedFormat":1},{"version":"ae5648da65ae89098d2238037b8b739303ff1f1ed7f711f5e1dab85c0cde73dc","impliedFormat":1},{"version":"21cc4c106db99d082b2b726f4feea224fa40b10a6cc7de03c2ac8ecaded86faf","impliedFormat":1},{"version":"51b46e83520f9dc3e1380657071ab165ada01fee49e7b41b186da91bd287503d","impliedFormat":1},{"version":"f577f333d0679c82bbf346c3983de5f6e5730e264937021a506b13ab1cee5e52","impliedFormat":1},{"version":"47ec9752d4882a64ef06ce90067439f39e1f64831efb82d6b61a27e46c27665e","impliedFormat":1},{"version":"4550d4a71bfe8407890afd7c7953e4ff732e848e6569cd94fbf33b45c4339a94","impliedFormat":1},{"version":"79954720b311aed13a8b28effcf9f043816ff2a8f1887ffbc4f5ea604c3ab0ae","impliedFormat":1},{"version":"0c0f1398bc2cb82a901d38593309ab3e9a025718c31d2d41096373661fa943e8","impliedFormat":1},{"version":"ac994da1b115d9aed1ca0100a607032122ec0b1cac07436a3215e6c7f8c2ef2f","impliedFormat":1},{"version":"85a143aa41b4a16f8836a9c1059b84fcaf9380b37fb28624cc35b49bb2c834fc","impliedFormat":1},{"version":"b759e7b85c5337b457a1d61df4b47fb2e97665b05e666e75289d808f3aa4f1bf","impliedFormat":1},{"version":"fa36037b4be0f7c122eb03efb72e79c1799981028f6bfc6b8dea307c97f3529c","impliedFormat":1},{"version":"820fc91384a1b27caba7f2411a1535e9313bf46411e290b3480b030837c6f985","impliedFormat":1},{"version":"da7e68de00deb6259533046617b8a3cd35e61a1be103d0e0487584cef7f1da2c","impliedFormat":1},{"version":"ad4172e0e6d5be3841679dec15e80a2dd09d768a6936ae0df2c05c2c8d45523b","impliedFormat":1},{"version":"706230799de1bc03f4d1e927b0f535f4c9f74061b40138f5ade2e3a470b7f3ea","impliedFormat":1},{"version":"a09dc5f7d149bcbdbc83db02b54ba7cc83bda0148454782c41521e1e9a42233e","impliedFormat":1},{"version":"6fd319d50603e1200a24078e3e92dd1b17ff058681ef451dffa890ba8e84514b","impliedFormat":1},{"version":"2ad76a8f378c771219e4a1c9fc1fc6a66a4ad7192edc3e84a5e0cd79a806dbd5","impliedFormat":1},{"version":"bb40c13d89e52602b3af4cce60ccc46644e30cc2fa5f47d5c8d0fa645c85532a","impliedFormat":1},{"version":"8c2cb956a171e41734bf8ebf4308eac8e21025a4501d3729d0d378f6d259cd02","impliedFormat":1},{"version":"a6dbb9a79212baa8a46fdf91ab2b8210665d55cd739ed1668f109d1976f213f1","impliedFormat":1},{"version":"84dc7636681d2cd0ccc6a365e9123da5a0908b280b1cc485dc5d354a2ca79746","impliedFormat":1},{"version":"eb4f2a4043e45b0452ed473b674229d4a7fda48a8092b7e34d88188df0c8af47","impliedFormat":1},{"version":"95ebe1415645192fdf015b46b4c542bb60e736624bfee59559af8a7671016202","impliedFormat":1},{"version":"d19c66a5a7376840dc3811fa0465038e3e270fe2e9d0d17d1f0c1b2c27481b92","impliedFormat":1},{"version":"0e396f97cc7eae97b942cccbe7c17f60f8af207d8c4aa6c154267eaca86ab11c","impliedFormat":1},{"version":"f4c5d65fe7e93cecddd537d46af01820cdb9f72bb94b09c6309debbb50ad5ada","impliedFormat":1},{"version":"ff526238d3fbb56031ca203f8014f5e75077f04d842f441d2c050df01e849f7a","impliedFormat":1},{"version":"dad84d1b803af8326557fd1c7710ce845a6d590e462c802d380e9d947ec14c6e","impliedFormat":1},{"version":"5806973501dd13a50b30b3f23751f28d9eb8ee103228af39d07491e1de7484fc","impliedFormat":1},{"version":"a3caaf2245d2567ffdda491cbc817df385ef549dc186a39c2a3452daa07dc034","impliedFormat":1},{"version":"a8ff496bbaa5cf7145cc4ca8df03e2dc480bbe24dcbd1f9734200eb12d5aaad7","impliedFormat":1},{"version":"e236821607e4c3dc1adbdaca5cd7fe55ff8d19051672532639e76f045889e9ee","impliedFormat":1},{"version":"f9e2c40b4a0686af8576ad4aad9dfb9e62f5daf309101bc9956a497f38f92b39","impliedFormat":1},{"version":"fff48e97d33173e8b75b9a2b74ed71e6d0d3b7e4aa81b821a90c09a95e0423e0","impliedFormat":1},{"version":"928b23be870338067bbc9381ffb3de5cc3b088abe73c8e4995444fbabd7edaf1","impliedFormat":1},{"version":"a26d74bc8768e134734fa049d5a89fb674a560292f4bf1b39392416dc04cf49e","impliedFormat":1},{"version":"ea7f3d87bb25b8cf26c1b440de31b628c53b5e72e8f1ab1726356bf58acf5946","impliedFormat":1},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":1},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":1},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":1},{"version":"dfcf16e716338e9fe8cf790ac7756f61c85b83b699861df970661e97bf482692","impliedFormat":1},{"version":"3b3fe018cdd6ab5fc1c1b9de009f365e0d6653add071f5fcd383bc9a298cdcee","impliedFormat":1},{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":1},{"version":"f4a1eba860f7493d19df42373ddde4f3c6f31aa574b608e55e5b2bd459bba587","impliedFormat":1},{"version":"6b863463764ae572b9ada405bf77aac37b5e5089a3ab420d0862e4471051393b","impliedFormat":1},{"version":"ec69ebd1c4850514ebb6724911ad56e71caa0d076891ed6b67cb10d3ebbf2586","impliedFormat":1},{"version":"89783bd45ab35df55203b522f8271500189c3526976af533a599a86caaf31362","impliedFormat":1},{"version":"26e6c521a290630ea31f0205a46a87cab35faac96e2b30606f37bae7bcda4f9d","impliedFormat":1},{"version":"a51e18dc7e00eb6961c55b2a4ba4b70ab8c5cd601dc73337a0f5fd8292a5e944","impliedFormat":1},{"version":"3ff6e9ce7c3ad38dfe5165e90c826a27b289c9d0e7d9e934f654566867700fb7","impliedFormat":1},{"version":"f976134f9fc2369f6d4694eea7db6c2fb3c757ae5dbb047aeb06f02a21886443","impliedFormat":1},{"version":"d7e7199291e479bebe7f2bcefeba3498c80ce70c3b3440174fa211cfdab7bedb","impliedFormat":1},{"version":"233267a4a036c64aee95f66a0d31e3e0ef048cccc57dd66f9cf87582b38691e4","impliedFormat":1},{"version":"739fc10cb1f1c08f7578684ad660334e9617a81690d41d3dad234b3e4d5835b1","impliedFormat":1},{"version":"1af96cab9fbac290cbcaa07154ced5fb7a2b8bec02bcc6a34e77456d40fffc71","impliedFormat":1},{"version":"bed80e26fefb16b3eb7062e7878f38e1f0c0280fb61a6a608bdfb6dd64dbfc9b","impliedFormat":1},{"version":"39937ecb2516623611c287309f2b0e123fe5cb06d97487bb6fb6ec911e3ac652","impliedFormat":1},{"version":"9c171e2b0fa97a74c2437e746ea0127b49e6908e89ae6dc06ff238c3bc5c00fe","impliedFormat":1},{"version":"717cf65141e976becda69384a57148f4f6339ec04ff431ebb2ad19c558be4346","impliedFormat":1},{"version":"7f24ea5b058a109f8c9cf8f7711fb20cd2ead9817fa88415f94e47a108d9b149","impliedFormat":1},{"version":"3473f825e4648c65d597a0277245c250531c8fb946bdda179411e61a9eda50de","impliedFormat":1},{"version":"245125adc48737019481042b0e3dab6122528c1acc8933c5afd59e57dd2265cb","impliedFormat":1},{"version":"ec5510125c844298eccc5fc88ef4ad95e6b8b2b01e9f8c1fb386caa5c977accc","signature":"c0bc5355c16006ea922ca857e0c4c5f7f1aaac38a2995e90bc2a358135373b91","impliedFormat":99},{"version":"97def7e74834d3459b1b2f60157d402bfac36f8948423e3e7a97653a445c6f2f","impliedFormat":1},{"version":"6082f7412f0db000b1c4e32724c1fb8effff05724250fd2f65646c63cc427cb5","impliedFormat":1},{"version":"a9f912dd4203649b12db6d4ddac9d97cd38ef14b70194c2274ffc81ee5b861b3","signature":"79d057cb85a55359b91235e0f854de114a2ecce354489b88dbfac42564703f64","impliedFormat":99},{"version":"d978b01e53c41bd8c9cac4ac4a3c0e61d24c90b128a2bfbbea67dc2369fe5905","signature":"86474f854973e6890cc624ef7aed9c584a06bcc891f2a0d9946ab7049a73587f","impliedFormat":99},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8c2f60c3192f66fe9e5e7a7a941534583cdff4f5a059fad30b1b863a547f388a","impliedFormat":1},{"version":"27b4308d9e3db258a09b8b7bd92677320d654f5fc089abbbcb1fd2f70b14c909","impliedFormat":1},{"version":"d1d7e7d247badcbc50cf0bd6b1096dc7ab3cd36b31e9803b3c0acbbfacc493d2","impliedFormat":1},{"version":"6c2a2e7e8500f70a127dbb259d99c0f3951394df7c46a69eb2569f0e8c14665e","impliedFormat":1},{"version":"924e12558578f341179bb878e75cfd9aa648254f5ac6cf228832fae40a52c067","impliedFormat":1},{"version":"3f7705b6434455ff25ac2d336388564173179a4aed8cd0d1b1ea235f0fd3de23","impliedFormat":1},{"version":"b5f6aef5039b1b98a67bf3a3ed52f8693a56be698da9e4a41e2d67b0751ee005","affectsGlobalScope":true,"impliedFormat":1},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"b6ac3e813f3bc41717619291caf2fbc75ee84b4f5bd3abd3e48885831ebdaf96","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"691e623f6b017a026baf823394aa6d74efabfe877b799c539e085e3f82247cd8","impliedFormat":1},{"version":"a4808116b12ab27b11b3800dbc2b64dd122d4748d48a111957b87b52fd3cda2d","impliedFormat":1},{"version":"2501feb6d0a73d980a9b8e5e03c7e15053788a7fbae6d55cf93df3b0e06dbedb","impliedFormat":1},{"version":"dc9412bbe64fc748d330f3e574c0440753daefc81cc74791198a0223f2114b5a","impliedFormat":1},{"version":"bbd9e6f68bf6e418bd44d7991a4860b1d386a30b798d1be773931ac7bd1e657a","impliedFormat":1},{"version":"f7ff9fd2db48fbabaf6516a4c3515b07325baf4c7a35766a7bc1ce72a1bb9b83","impliedFormat":1},{"version":"e383a277c8c485ffafdeea2bd0d28036bd8d1be4b2d6099a7b27ecc4419fe8d4","impliedFormat":1},{"version":"66a1d3c8e68134692c9784cfcd8ca275d8e24ace1bc01c432c5a2cc27ef27701","impliedFormat":1},{"version":"18b79e1c4ef00056857db2070ed947e32dae63dbbaefadee3cb6e8f21d5193d2","impliedFormat":1},{"version":"cbce9fb00ac5676380dafebfd7e5ce1561f17dfbe6356597d6e5d9b6b9bd5fe2","impliedFormat":1},{"version":"ae042e01074576c186a734888cd420dcf9eccf57053c9d7de5326cc235b7d3ac","impliedFormat":1},{"version":"040c519477a40f166f9d3d1f1e792761de759c5301466833b74d119957c794b3","impliedFormat":1},{"version":"d5a20d626aa5d02f7732d87050b9f3589627f36e4b4d01fe171d2cb9a958b21c","impliedFormat":1},{"version":"d36fb912245b9e1c7a4ac59cffe51d83546d2b03f52e2b3b9fff969d01257800","impliedFormat":1},{"version":"70ecd65df736dcf74d8304cd3767a863b7fab2bfa04a73c039c995cfd88489dc","impliedFormat":1},{"version":"53960fc36042dc4aef356c0273674bb0e7f65059720fb42ac36d29a8d2e3cbf1","impliedFormat":1},{"version":"8c607552166070130883b20fb7da9c7b7006e065239c2075f47e3349f3664c66","impliedFormat":1},{"version":"d3878648b6e0c7f8ca809b4a03d8d13ddccdde282c6c84aa1faf59f0780a888c","impliedFormat":1},{"version":"c1a24626823048792dc4440975646629ae984fa3354cd2f09270834d90fd997d","impliedFormat":1},{"version":"696e8b13ed6b15e0395fa6438f43e1363e09204f080640c6cb5437323f9ed8fb","impliedFormat":1},{"version":"a5d6fe2a52c03c4f5edb8c1ef06ccfc777ae377d0f0dbd7df3b066b0f9cec946","impliedFormat":1},{"version":"34b4698d4b6ccfb2b1e3e034d4463ecf490a6c700d229685f7b5b08ccc150393","impliedFormat":1},{"version":"f19baa96f4a8c3b23453401f7864ef337ebd2533dca12c042155cbd526341f29","impliedFormat":1},{"version":"a1604f4912418542596cf7598f199be7f276b7ad715416c59603d048894733e4","impliedFormat":1},{"version":"11b0c060c13dcf6fd09d60d9870f4921492a4d3c1b39a33f9d93f22f1dfb7c3b","impliedFormat":1},{"version":"a59bdaea7395061b93e12c89996770f196ada0f3e9197e2343763c65d0588dd8","impliedFormat":1},{"version":"9ffe848f345f1ac8c2fa2f4706c38840fe2beb455e19c5dce756e0ad09776235","impliedFormat":1},{"version":"013c10b8066b319a9dc033db24f0467737406810561d0c55d8bab3c8212788bb","impliedFormat":1},{"version":"b424df9fec80812448f7b2977e3220d5a2eb88e6c8e8b675c282f4eb1f4b8834","impliedFormat":1},{"version":"d66670300c6ad07603217e119240d129d327ee2cb4e05cdfc86f7f01e36a42ea","impliedFormat":1},{"version":"3dbba617428a6892f0e7a3c16d960738db464eb8df6724df7d95e7a4f116f110","impliedFormat":1},{"version":"3d7926e64b370e31cd4080bb432adb9e92fe096e31bee0685ee49d75cd317120","impliedFormat":1},{"version":"5862b0752f1eeef4061683d1311ebec322696c9ccd497e14b9d0c97545b317b6","impliedFormat":1},{"version":"c9829971663604cc72b30018b901c7cd97483587953e8a9535616ae04c808867","impliedFormat":1},{"version":"b0b73baeadd229c956da12d8b08f9c464b15e653d6dc5838bea41c733de7fe00","impliedFormat":1},{"version":"88ad86557665308c7957b0aeefbba159d9c99ed57e1d9a696cb4b068ea30f68d","impliedFormat":1},{"version":"8ce9716f8368167c631c4240de8cb2b5997c1c2ad9d885609079ec4c30877139","impliedFormat":1},{"version":"35595df80753dbc2b21a04ddb000835b32f0b9ad56ea259d4e6e9ee674debef4","impliedFormat":1},{"version":"efc5e846a8dcc7aeb97cdf4d6e529079e4ab45ac3cd39ab38ca96599bbcf232f","impliedFormat":1},{"version":"730450f8a576f827f2044ff9e3f0f7130e605b79087552c11ac5d92fda9a7e1d","impliedFormat":1},{"version":"9a62c9484c14c0cb33dbcdcc11e405821ee668e714799f7a125b840eeb8e89ef","impliedFormat":1},{"version":"1fb8ecfdc58a9071337c56072dd9b3c78c7d2f76730a1be8d27224ca083227a5","impliedFormat":1},{"version":"3bb99d9565690ee166e65b90817eb27c7c942b0efa84609bf2fcf0a8cc9405b8","impliedFormat":1},{"version":"c742fe995845140002d0baa8785af21a3bab8527b5584cdb0b407a226107f585","impliedFormat":1},{"version":"ffa065aa3455b257438ce8c9768c5e0f80ea3820094ee8a1120fb4437cc3e7a4","impliedFormat":1},{"version":"c325aac67ed6a692a807c9396d513ce37ed8f56c8d8ca7bf4ea76d4cd09e7c20","impliedFormat":1},{"version":"9d39a014e37dc53a1dafdb2ef5099417bd00174b815ac7e390414372b30a14bd","impliedFormat":1},{"version":"86a07b0fb1f46d39132ef555b215e7db97e906596697469df465c310646d3528","impliedFormat":1},{"version":"0e198c29a6251d421945c8d803c593eeaa2e92de8d8aee6412a2911195055162","impliedFormat":1},{"version":"f7df54c02497181cc6e63d6eada933f477a18b3a72776a0a77e63de603439061","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"a6292eb5c4a48e71b5f49c4ca89b9aa76108a93b7ac98c656a8f1dfc5a614bd7","impliedFormat":1},{"version":"7a9121b2912c6821f2783964444cac3050e17b3b75512965e0a32e66b414d592","impliedFormat":1},{"version":"9e8cb3ec89db85e85513bb89adbe63b8acccad3fffe11d6d8df01c865c77fb5a","impliedFormat":1},{"version":"f3dd8466af3baf161e0d203a1a28c7bbf9f863679c3b0e659371b1835b40f193","impliedFormat":1},{"version":"e8f141e5548179b835f699a1026f79ea581eeac1a4e57f5f22dcd0b4a772cbbc","impliedFormat":1},{"version":"2ef7e3af3848886c22ace971e69966b203eb67b2d1787d5e44c99519c09892aa","impliedFormat":1},{"version":"ddad846edb02abe8e625649c4a5dd64be1bde5d7631302d1fa4d45d14ed8b51f","impliedFormat":1},{"version":"a119ad4d2a84d13a333dbfa30e43bfccf4a0dc040c732d676adab436626f25ee","impliedFormat":1},{"version":"a7e006e3243d9746d204b7addb1f034e5deb4a0d157d8c85ecada87a86f222ff","impliedFormat":1},{"version":"fda09dd5bb69c3fdf9ae579b4b9f5a7db565223896f50aed99760821c1517bbc","impliedFormat":1},{"version":"261a9e319315e52f88b1cb347db2ce4277ea7a6eb6fccd90c289b119353d5b78","impliedFormat":1},{"version":"4871318522f755858f7edb640a4c3ea1614ff99be9d69340f5a51ce82fd809df","impliedFormat":1},{"version":"5208acbce57501f3d5dd58f4956d43734b3a007b8b86578c935785ec72408e04","impliedFormat":1},{"version":"41449e5c8ad2b4ad46497762cb72ec680457e35e03b658842f257a79da3d694c","impliedFormat":1},{"version":"2e567bb91461de2ab714bfd4261ce4f58c389cd3dba268958fdaef6cf20f7e3c","impliedFormat":1},{"version":"7c296bb31e778cea0fd700a14fbe683b665db7115f09700d8416cf24b83cdfcc","impliedFormat":1},{"version":"0b3109399eb9e01963064b099613e2f79810b0771aef56b628c4e6651f35440e","affectsGlobalScope":true,"impliedFormat":1},{"version":"82b3f65b26feecbe204f8211604187c10cf4eda0250d49e0b7a7c971b4fa07dc","signature":"ecc3d40c7cb9029820c260751d09dd27676f478894edabb70fc482e3e727525e","impliedFormat":99},{"version":"9dd85bafaa78a8745582373d61c04cfb2d571a2cf0866d0030a5167dbd28c279","signature":"a2edbc939d6db071d85add433b82d0c3d1b3d1a71b021d6ee9995cf16d7d473b","impliedFormat":99},{"version":"d0dcecca28b9ec8c739817af29346a481d28a3013fdd73b09be230dde34cf504","signature":"576790593cc4195a6b6d45f18bb574cfd305601f0bb5638e7091e4aa952f809a","impliedFormat":99},{"version":"efca436d013b17baf462e07101b0c52414ff99708205ec6f1dfacdd5f1bc5489","signature":"07fae2cd3ed547f36b27eeac1a822d84eb4bbcd70fe27da5581fcaac896e3bf3","impliedFormat":99},{"version":"b69566c78b9f6ee07b0e0101477b34ddddd6aeaf3574e5e14a9f440accb55f8a","signature":"51d2233c56db532b32632537b67298d226d08bc56ee5810b4bf2ec5ce4047b05","affectsGlobalScope":true,"impliedFormat":99},{"version":"0fd310a550f41282f2331513b61cc3add05d3126c9fa4440d7501c42deeb6af2","impliedFormat":1},{"version":"12baec7a4e2c3acddd09ab665e0ae262395044396e41ecde616fefdd33dc75ff","impliedFormat":99},{"version":"100985057cdd198e32b471b9c92a39080e5e50720b2cb290d04ddf40fbe71c84","impliedFormat":99},{"version":"333d9b9067c0213cd7b275d1d78bab0577ba31ef7a63306ab65a74e83a546a65","impliedFormat":99},{"version":"85566a0b81339b43e063f5cd8cc49a9b9bc177bc5ad3ffd5e4874700040ec11e","impliedFormat":99},{"version":"c2688779f6804c3bc6dfa33d05a810464c684a74f92aee6b0f0d4bcd7dbeed6d","impliedFormat":99},{"version":"16331f489efb6af7d06037074020644d9175f70a7a6466d926f63e74af5a77d8","impliedFormat":99},{"version":"2b2b8b64b39f152439ecb9f04b3d6c1d88d35c75bf14a4eb98f1cc791f092366","impliedFormat":99},{"version":"395548b309c8fe9ffadd8b1055898fffa29bd28ea1f8079f33e48a65601589e2","impliedFormat":99},{"version":"e38871affeac7cf4dd4cc3a55714ff38d55f137c30788d30e454a6e3058f36bc","impliedFormat":99},{"version":"783a0f8fb88d659272c1ac541719e32235881815705b44fb63b6af579885ea75","impliedFormat":99},{"version":"6a60957e322c4c060ddf3073130cbcbcbc5e639e21cd2279df43184bfa8cb9a3","impliedFormat":99},{"version":"5b353617eeb8a37c7a9497ebaeacc027bd7487eec10ffbebca41dcdc2634af70","impliedFormat":99},{"version":"cedbd20d98f3fd7c1fa00742292ab5b13c3fec266ae41b90c47b716ef06cd983","impliedFormat":99},{"version":"9713bcf79cd728919262a2a543484a5f9bd24a15cfec1cee096d9d17a9f5524d","impliedFormat":99},{"version":"35fb129972553f809a7045f3cb952c2598299548018a23238304c020cb16945f","impliedFormat":99},{"version":"855b0379a6b6e96eda055cff16da442b4a7a4548101848b9ae48bce22879569e","impliedFormat":99},{"version":"ea2ac8d236dddbce748dbaffcaa1bfcadae6fbcae1fd0a67e17d5e35d5e38dfc","impliedFormat":99},{"version":"a7750935d6a1cbd259861b5acf1c912f9d3b10efd8602f61fc858f04f261595d","impliedFormat":99},{"version":"e0aa3276d014f3c798dd3101af8c8545b56d79665a7a982b4cf6fe28551a3b56","impliedFormat":99},{"version":"ea744987345eb5ae036495b0185e95eeb7d2d999b0ef80265f79434e83863e9e","impliedFormat":99},{"version":"c3bc54ba21655aaf1db5bb97c42f56bbfe5a3a3c40e3884ef3ba2cdaa9f34c1f","impliedFormat":99},{"version":"705917c38d2e92347b5e57c1c6007da46f1005874ef2257cc8dfff59cba4710f","impliedFormat":99},{"version":"40925b4938b527a6267b1fe56a2e97cc52ea9d73eec90ea8e05df773a182101e","impliedFormat":99},{"version":"2930156137f4885c3ad168804c557edfc9bb88ae0e1df487f4adcdc771286ad7","impliedFormat":99},{"version":"b63e990c632eeee9375c2c43bbd5cdcb23418b79edcb57afa53edf4dd597b33c","impliedFormat":99},{"version":"721dcf072e75b71b5ab7a0bbbd6578f908c36a0bfaefa1454d3e43938bde67a5","impliedFormat":99},{"version":"5704f5ee2642dd0b810bb07ce6e4e51319ed4d6db78747ff54675e72c3fede06","impliedFormat":99},{"version":"da2be38a98356fdd540580a68338df2d2450ec071b1cb5bdbfe8e52075ddde9e","impliedFormat":99},{"version":"3af0bb87094d80e20b0d451626eef1e2da701891c41998ac0a6a6c91cff86f74","impliedFormat":99},{"version":"30a211e9de0dd587f8c690f9ed9378c15c79bcbe762dd85a61c548e5058c3fd6","impliedFormat":99},{"version":"a7cda498cd929d2f958ce49abbaef1abf999ec40884a04cd28ff34317d844e54","impliedFormat":99},{"version":"e48b510f40f29a89d9dbe19a9fca96d7f02b721aec6754fd5c242f9893d06508","impliedFormat":99},{"version":"30d88e2e7c4ca1cdfeb37cf05a2d7a351c68b14ac472e6238401ecb7b75686ea","impliedFormat":99},{"version":"03b34718c02b6225c2f7d7c374cb701ab04461a5cfa66d150531c9f31e39da49","impliedFormat":99},{"version":"7dfe7da785eafad3e3d0cc66545e97f1acf934ebe5b2ec8f4a34341a9ca76ed4","impliedFormat":99},{"version":"8c7829855345152b7b3c196e82147153115d5b568ff97be0e40d161e8d9d2f51","impliedFormat":99},{"version":"f30a36ff98b099ea8c635146dfdd1d810bc14ec303acb653ca938445047b0e41","impliedFormat":99},{"version":"07fa63aca536ca8d8d8c6a56eabcf77f746609921fe23d780a69e2c0a2a65701","impliedFormat":99},{"version":"c8fe48c4437d4ead0a841128d179f8bb99e0e38f9ccb80ca6be14833e30bc129","impliedFormat":99},{"version":"5eac3facc9f59e960c00f41502b34a908776cfba6d7e1a5a4ead5030682b7434","impliedFormat":99},{"version":"d44f8de16b9c6ef4ebd88d4162bc24942bee9975f88162a8962bb572e62dc5df","impliedFormat":99},{"version":"0251c18e8c863bf5ef510043644299aceab6debf3d87aab8c8cfded5aef7d6af","impliedFormat":99},{"version":"292f7dc6b4be74f148f5e5b57b9e8a7f515d7d4f6183d3f9162e127e50959ba9","impliedFormat":99},{"version":"c1608d867d6ddda5c0f4736cf4959e2b2c6bcda660c4c72f7feb36b3998df2bb","impliedFormat":99},{"version":"02d77b0d27ecb78e28d3a376c6cdce05fabcf58f2fd01c102f031d8e375191da","impliedFormat":99},{"version":"daef84b3b89e60054fab1abaafe38eda673f88abdedc3920015d61f1cc5358b8","impliedFormat":99},{"version":"f3318054dc392b6661785263095ed8f1555f0d8f3ce534c8c2de8895b4ec7bd3","impliedFormat":99},{"version":"6c3aa7e0c4eb4d8d7fc24df037980369e70a28f9237cae77511b4cfc6a1b74d0","impliedFormat":99},{"version":"ecc7e0840690cc4b9a2587a4f550b292c35d36150c6c108803bbdfc3bead5b91","impliedFormat":99},{"version":"e11a23b343084cdec24d718fc64369dc8b6dece71314b41d4b5938f2a568834d","impliedFormat":99},{"version":"ce678766176812e8eda3f4925304d4159d806f50fa8a93a72da56e95dae8bbc8","impliedFormat":99},{"version":"bb21d35a36dc1db80a2cf29383bb7304919708cde205bbe246ec47176336e255","impliedFormat":99},{"version":"df657f732e32af7c7550da93e66dfdfa142fc1282b4a392ec78fc9aefbd6fdd0","impliedFormat":99},{"version":"b20ef0766a8a578e5c542aafaa8c53b7e2b0e32a5522f9cf18bc021a81d54dd7","impliedFormat":99},{"version":"9ea0cd8a367cab9b1c632740d1bd998f8c4dbbbda4505f47bebd38a46afbaaa6","impliedFormat":99},{"version":"97980bb49a7e4b15df6f988f914070c831a39426cd9a29a6f7a9af82f397b28c","impliedFormat":99},{"version":"3ddf05b5259b9a0e2b1da1559585655202670e1f78396b4d4efccea0195a41b4","impliedFormat":99},{"version":"1e99c59aadb1af6d090976ade8280ea37208e8f064f79e9a18231fe5b7232890","impliedFormat":99},{"version":"c7ee77eec320d6312899cd8c16484c82b98385e175c57ff00d49cc5a2c291e0d","impliedFormat":99},{"version":"b38d9a4927465a8a5d1ae84e00d323bedfc7f5e77f4bc360078c6f283b964acb","impliedFormat":99},{"version":"27d6b338ff280dc86ff167217c29d7e71b52bd25a3c3b8eb1f5a56c887571d00","impliedFormat":99},{"version":"da60046c4cc6b018869ea8fc71a7b7bf5591d9f5d90ee52c4a614ecc69ff3433","impliedFormat":99},{"version":"8bee1fe0b3dd1b324f08189d81e55f9952007ce2304df07a15568b821b7e524f","impliedFormat":99},{"version":"a3dd2d53781729214a67f4b91d9a65d5310c1bbdcd0595789a5152a493cded91","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e20fc6cca2cf901917bc09c88bf9ee380383717ed990900aa99962ff9e3f786","impliedFormat":99},{"version":"7410b87e621ce92f484a13dfbe72069a6470fb72cc418df865f31b601193595c","impliedFormat":99},{"version":"e0c868a08451c879984ccf4d4e3c1240b3be15af8988d230214977a3a3dad4ce","impliedFormat":1},{"version":"469532350a366536390c6eb3bde6839ec5c81fe1227a6b7b6a70202954d70c40","impliedFormat":1},{"version":"17c9f569be89b4c3c17dc17a9fb7909b6bab34f73da5a9a02d160f502624e2e8","impliedFormat":1},{"version":"003df7b9a77eaeb7a524b795caeeb0576e624e78dea5e362b053cb96ae89132a","impliedFormat":1},{"version":"7ba17571f91993b87c12b5e4ecafe66b1a1e2467ac26fcb5b8cee900f6cf8ff4","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"d30e67059f5c545c5f8f0cc328a36d2e03b8c4a091b4301bc1d6afb2b1491a3a","impliedFormat":1},{"version":"8b219399c6a743b7c526d4267800bd7c84cf8e27f51884c86ad032d662218a9d","impliedFormat":1},{"version":"bad6d83a581dbd97677b96ee3270a5e7d91b692d220b87aab53d63649e47b9ad","impliedFormat":1},{"version":"7f15c8d21ca2c062f4760ff3408e1e0ec235bad2ca4e2842d1da7fc76bb0b12f","impliedFormat":1},{"version":"54e79224429e911b5d6aeb3cf9097ec9fd0f140d5a1461bbdece3066b17c232c","impliedFormat":1},{"version":"e1b666b145865bc8d0d843134b21cf589c13beba05d333c7568e7c30309d933a","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"c836b5d8d84d990419548574fc037c923284df05803b098fe5ddaa49f88b898a","impliedFormat":1},{"version":"3a2b8ed9d6b687ab3e1eac3350c40b1624632f9e837afe8a4b5da295acf491cb","impliedFormat":1},{"version":"189266dd5f90a981910c70d7dfa05e2bca901a4f8a2680d7030c3abbfb5b1e23","impliedFormat":1},{"version":"5ec8dcf94c99d8f1ed7bb042cdfa4ef6a9810ca2f61d959be33bcaf3f309debe","impliedFormat":1},{"version":"a80e02af710bdac31f2d8308890ac4de4b6a221aafcbce808123bfc2903c5dc2","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"0f345151cece7be8d10df068b58983ea8bcbfead1b216f0734037a6c63d8af87","impliedFormat":1},{"version":"37fd7bde9c88aa142756d15aeba872498f45ad149e0d1e56f3bccc1af405c520","impliedFormat":1},{"version":"2a920fd01157f819cf0213edfb801c3fb970549228c316ce0a4b1885020bad35","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"a67774ceb500c681e1129b50a631fa210872bd4438fae55e5e8698bac7036b19","impliedFormat":1},{"version":"bb220eaac1677e2ad82ac4e7fd3e609a0c7b6f2d6d9c673a35068c97f9fcd5cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"dd8936160e41420264a9d5fade0ff95cc92cab56032a84c74a46b4c38e43121e","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"421c3f008f6ef4a5db2194d58a7b960ef6f33e94b033415649cd557be09ef619","impliedFormat":1},{"version":"57568ff84b8ba1a4f8c817141644b49252cc39ec7b899e4bfba0ec0557c910a0","impliedFormat":1},{"version":"e6f10f9a770dedf552ca0946eef3a3386b9bfb41509233a30fc8ca47c49db71c","impliedFormat":1},{"version":"f20c9c09c8a0fea4784952305a937bdb092417908bad669dc789d3e54d8a5386","affectsGlobalScope":true,"impliedFormat":1},{"version":"c58be3e560989a877531d3ff7c9e5db41c5dd9282480ccf197abfcc708a95b8d","impliedFormat":1},{"version":"91f23ddc3971b1c8938c638fb55601a339483953e1eb800675fa5b5e8113db72","impliedFormat":1},{"version":"50d22844db90a0dcd359afeb59dd1e9a384d977b4b363c880b4e65047237a29e","impliedFormat":1},{"version":"d33782b82eea0ee17b99ca563bd19b38259a3aaf096d306ceaf59cd4422629be","impliedFormat":1},{"version":"55a84db1ca921c86709117fabae152ab802511dd395c26d6049e6d4fb1e78112","impliedFormat":1},{"version":"2d14198b25428b7b8010a895085add8edfaae476ab863c0c15fe2867fc214fe4","impliedFormat":1},{"version":"61046f12c3cfafd353d2d03febc96b441c1a0e3bb82a5a88de78cc1be9e10520","impliedFormat":1},{"version":"f4e7f5824ac7b35539efc3bef36b3e6be89603b88224cb5c0ad3526a454fc895","impliedFormat":1},{"version":"b29ef0a32e75e0d2a08762d6af502c0ffcd7a83fec07ed7a153e95329b89d761","impliedFormat":1},{"version":"537aff717746703d2157ec563b5de4f6393ce9f69a84ae62b49e9b6c80b6e587","impliedFormat":1},{"version":"d4220a16027ddf0cc7d105d80cbb01f5070ca7ddd8b2d007cfb024b27e22b912","impliedFormat":1},{"version":"fb3aa3fb5f4fcd0d57d389a566c962e92dbfdaea3c38e3eaf27d466e168871c6","impliedFormat":1},{"version":"0af1485d84516c1a080c1f4569fea672caac8051e29f33733bf8d01df718d213","impliedFormat":1},{"version":"69630ad0e50189fb7a6b8f138c5492450394cb45424a903c8b53b2d5dd1dbce2","impliedFormat":1},{"version":"c585e44fdf120eba5f6b12c874966f152792af727115570b21cb23574f465ce1","impliedFormat":1},{"version":"8e067d3c170e56dfe3502fc8ebd092ae76a5235baad6f825726f3bbcc8a3836a","impliedFormat":1},{"version":"ae7f57067310d6c4acbc4862b91b5799e88831f4ab77f865443a9bc5057b540a","impliedFormat":1},{"version":"955d0c60502897e9735fcd08d2c1ad484b6166786328b89386074aebcd735776","impliedFormat":1},{"version":"2fa69d202a513f2a6553f263d473cba85d598ce250261715d78e8aab42df6b93","impliedFormat":1},{"version":"55480aa69f3984607fa60b3862b5cd24c2ee7bdd4edaed1eef6a8b46554e947f","impliedFormat":1},{"version":"3c19e77a05c092cab5f4fd57f6864aa2657f3ad524882f917a05fdb025905199","impliedFormat":1},{"version":"708350608d7483a4c585233b95d2dc86d992d36e7da312d5802e9a8837b5829d","impliedFormat":1},{"version":"41ceb13974711a87f182145196a641ad804125baf1fca181595f1be8cb0a2cc1","impliedFormat":1},{"version":"13897f9cb8ddf535e2cc6448942410f18298c1540338c1276a17880362b1eb45","impliedFormat":1},{"version":"4d2f7644abb97ec0d681d89b455170cf2bd0e72ee2a3e52d396074d0def264c4","impliedFormat":1},{"version":"671da85fc40086ce6f7309c428511bd77aebc0405b88700a26590a75cf37ff10","impliedFormat":1},{"version":"6e95aab5b3ba30cdbc9d4ad350ae7cbeb519a1eda30a214d2b1ec1f53eecdf9c","impliedFormat":1},{"version":"e11ff96a6e720e91e52ac54c53ee5bea99929bf096ae6b34bca2276e2b277ef8","impliedFormat":1},{"version":"08ce78e8c4c047bb08ccadc6587f6b45f025d85829854199db891cf1de7b209e","impliedFormat":1},{"version":"3afed5176dbb8e33d3366dff69f6fb0948b6849e0d2b53f6d61f41357cd617a3","impliedFormat":1},{"version":"51f8343ee830b7003a644ac90122bd092413344f957f9f9bec64d5945f179927","impliedFormat":1},{"version":"15eb363cdbe0004d3db00bce07892a5f5eb55d281761f768ee0545df54b04a0c","impliedFormat":1},{"version":"9b83354a819146569dfe74a2468b7c11e287286d58b5654555ed1fec10688649","impliedFormat":1},{"version":"e90e58ad52b0d25a238f6a794be594bf647280a6e8478b2337ff729dce62a63c","impliedFormat":1},{"version":"ea1393c82a0cd229de6915d3682db9571c9b65803b971a04f6042bd3b3826b60","impliedFormat":1},{"version":"d4978c3f743921aefd2609c001cf4a6baf74dd5e67337b5088bb29cb6d832ebb","impliedFormat":1},{"version":"973aa2a5bc9b967d9c2ada4edc050ffe2832b09860bfa0ba0cb79b8253e81dd6","impliedFormat":1},{"version":"c96ac2cf9b266d5606f79d99191e3e2c2bede081f60aab6377d16b1e73841429","impliedFormat":99},{"version":"30a4dd54f1f39dee17bafcc0fb9a877932d607d8f24d3f1ac7f8998cf07f2649","impliedFormat":99},{"version":"5aa8b50a334af93ff1bb3da686178871a7e27e03791d07fd6107980076ddb90e","impliedFormat":99},{"version":"ccb5f2cdd46a60b0aa3b43aeeac9f0d499640f589806f2486f35ff8a9565784b","impliedFormat":99},{"version":"25c1448dafc60e4ee55022d86c9deb322b669b93743a01f415c7f3974e5eb265","impliedFormat":99},{"version":"43ac78f8e0c5defecc2e501f77d1e61d078c79975af401702c16b9828ab12ca8","impliedFormat":99},{"version":"ce7fb4fdf24dcaebb1fdcf2f36cf954da3b53d8f06fca67b89ef50898eeca489","impliedFormat":99},{"version":"5e8c09adb8be1b932100a9374cb0f8def9dda6a16a973e91c2322983ed669dd9","impliedFormat":99},{"version":"dcab5635cd67fbabb85fff25d7cebbe7f5ab4aaecba0d076376a467a628a892d","impliedFormat":99},{"version":"c8698ce13a61d68036ac8eb97141c168b619d80f3c1a5c6c435fe5b7700a7ece","impliedFormat":99},{"version":"7b90746131607190763112f9edb5f3319b6b2a695c2fa7a8d0227d9486e934c7","impliedFormat":99},{"version":"269b06e0b7605316080b5e34602dee2f228400076950bd58c56ffad1300a1ff1","impliedFormat":99},{"version":"cc89688d19046618e7f88ea7c25ff04560d939902bf49e60bd38fb4662e38b5b","impliedFormat":99},{"version":"73e7fad963b6273a64a9db125286890871f8cf11c8e8a0c6ace94f2fa476c260","impliedFormat":99},{"version":"8496476b1f719d9f197069fe18932133870a73e3aacf7e234c460e886e33a04d","impliedFormat":99},{"version":"3cb5ccb27576538fb71adba1fa647da73fae5d80c6cf6a76e1a229a0a8580ede","impliedFormat":99},{"version":"e66490a581bea6aeaa5779a10f3b59e2d021a46c1920713ae063baaba89e9a57","impliedFormat":99},{"version":"aea830b89cbed15feb1a4f82e944a18e4de8cecc8e1fbfaf480946265714e94e","impliedFormat":99},{"version":"1600536cd61f84efed3bb5e803df52c3fc13b3e1727d3230738476bcb179f176","impliedFormat":99},{"version":"b350b567766483689603b5df1b91ccaab40bb0b1089835265c21e1c290370e7e","impliedFormat":99},{"version":"d5a3e982d9d5610f7711be40d0c5da0f06bbb6bd50c154012ac1e6ce534561da","impliedFormat":99},{"version":"ddbe1301fdf5670f0319b7fb1d2567dc08da0343cb16bf95dc63108922c781dc","impliedFormat":99},{"version":"ff5321e692b2310e1eb714e2bc787d30c45f7b47b96665549953ccfd5b0b6d55","impliedFormat":99},{"version":"8a0e4db16deae4e4d8c91ee6e5027b85899b6431ace9f2d5cec7d590170d83cd","impliedFormat":99},{"version":"c6d6182d16bf45a4875bf8e64a755eb3997faeb1dfc7ef6c5ead3096f4922cb6","impliedFormat":99},{"version":"d5585e9bae6909f69918ea370d6003887ea379663001afccca14c0f1f9e3243f","impliedFormat":99},{"version":"2103118e29cf7d25535bde1bae30667a27891aae1e6898df5f42fd84775ae852","impliedFormat":99},{"version":"58c28d9cb640cac0b9a3e46449e134b137ec132c315f8cb8041a1132202c6ff1","impliedFormat":99},{"version":"d7efb2609ff11f5b746238d42a621afcfb489a9f26ac31da9dff1ab3c55fc8f3","impliedFormat":99},{"version":"556b4615c5bf4e83a73cbf5b8670cb9b8fd46ee2439e2da75e869f29e79c4145","impliedFormat":99},{"version":"51fc38fbb3e2793ec77ef8ffa886530b1fed9118df02943679f1c4a7479f565d","impliedFormat":99},{"version":"03a4f9132fe1ffa58f1889e3a2f8ae047dcb6d0a1a52aa2454de84edc705e918","impliedFormat":99},{"version":"437dd98ff7257140b495b4ff5911da0363a26f2d59df1042d6849ecb42c1ee84","impliedFormat":99},{"version":"8345eadc4cceddc707e9e386c4ad19df40ed6a1e47f07e3f44d8ecf4fe06d37f","impliedFormat":99},{"version":"2df69f11080a8916d3d570f75ddf5c51e701fc408fd1f07629c2f9a20f37f1ea","impliedFormat":99},{"version":"2c19fb4e886b618b989d1f28d4ee4bee16296f0521d800b93fd20e7c013344fe","impliedFormat":99},{"version":"61085fe7d6889b5fc65c30c49506a240f5fbb1d51024f4b79eef12254e374e76","impliedFormat":99},{"version":"aad42bbf26fe21915c6a0f90ef5c8f1e9972771a22f0ea0e0f3658e696d01717","impliedFormat":99},{"version":"7a504df16e0b4b65f4c1f20f584df45bc75301e8e35c8a800bcdec83fc59e340","impliedFormat":99},{"version":"37077b8bf4928dcc3effd21898b9b54fa7b4b55ff40d2e0df844c11aed58197b","impliedFormat":99},{"version":"a508144cd34322c6ad98f75b909ba18fa764db86c32e7098f6a786a5dcca7e03","impliedFormat":99},{"version":"021bf96e46520559d2d9cc3d6d12fb03ca82598e910876fdb7ee2f708add4ce9","impliedFormat":99},{"version":"44cbc604b6e5c96d23704a6b3228bd7ca970b8b982f7b240b1c6d975b2753e4c","impliedFormat":99},{"version":"7bfb0450c4de8f1d62b11e05bbfdc3b25ccb9d0c39ae730233b6c93d1d47aea2","impliedFormat":99},{"version":"51696f7c8c3794dcf5f0250f43eda013d588f0db74b102def76d3055e039afff","impliedFormat":99},{"version":"fc67adfb454cf82752ab00e969d14a95fa762f55c34e25327dc77174b0d5f742","impliedFormat":99},{"version":"39d8d14a745c2a567b8c25d24bb06d76dbffc5409ab1f348fde5bc1290abd690","impliedFormat":99},{"version":"6d9aeea6853ed156d226f2411d82cb1951c8bb81c7a882eeb92083f974f15197","impliedFormat":99},{"version":"1fed41ee4ba0fb55df2fbf9c26ec1b560179ea6227709742ec83f415cebef33e","impliedFormat":99},{"version":"d5982015553b9672974a08f12fc21dcee67d812eeb626fcaf19930bc25c2a709","impliedFormat":99},{"version":"6ad9d297c0feca586c7b55e52dbd5015f0e92001a80105059b092a1d3ecfc105","impliedFormat":99},{"version":"13fa4f4ee721c2740a26fe7058501c9ba10c34398cdf47ad73431b3951eea4e2","impliedFormat":99},{"version":"3a9b807bd0e0b0cd0e4b6028bec2301838a8d172bcc7f18f2205b9974c5d1ecc","impliedFormat":99},{"version":"8c5b994a640ef2a5f6c551d1b53b00fbbd893a1743cbae010e922ac32e207737","impliedFormat":99},{"version":"688424fbbef17ee891e1066c3fb04d61d0d0f68be31a70123415f824b633720a","impliedFormat":99},{"version":"25eafa9f24b7d938a895ab15ed5d295bc000187d4a6aa5bfd310f32ba2d4eea5","impliedFormat":99},{"version":"d9df062c57b3795e2cae045c72a881fb24c4137cea283557669d3e393aa10031","impliedFormat":99},{"version":"72f4b1dc4c34418935d4d87a90486b86d5450286139e4c25eeee8b905d2886b2","impliedFormat":99},{"version":"92efd5d38691eece63952e89297adcc9cb4c9b8878d635c76d5473c20489fd4d","impliedFormat":99},{"version":"a4b4d0ac8882e2d857f76f75ca33694d315715cdc19d275ac37e9ef2a8d8693b","impliedFormat":99},{"version":"e185a44b6e46dc9621704f471ed0a39b56ce5b5027dbc81949b67cbcb59da7d0","impliedFormat":99},{"version":"5102e449a65c1f816d6ac1199b683f9ddf21b107f4eec5ce8316e957350d1b8d","impliedFormat":99},{"version":"73397fcaa8afa955ae1ac27c8ff5473418195ecacc90b275abbac0b8099b7e91","impliedFormat":99},{"version":"3a8b3e4e8ee1784e46e8151b4b0717b8a22e045b20257ad4491815f7cdb3ab22","impliedFormat":99},{"version":"823a190056fa78cfe888a24a0679624cfc36cab0ce9cfc875b1856e8a535bc9f","impliedFormat":99},{"version":"28b5d252374af23b8db3d80154078d76ab4af7635d6f20ec892cf86651bb5f52","impliedFormat":99},{"version":"d6d72de42c0a81f3d22b71fca1ff348f4bc3a50deb9382ebdfd71214794ec58e","impliedFormat":99},{"version":"1a4fae85bd066e1f57250ecd3be398f45c0ee35fd639d1a91f2b816ad37cf4db","impliedFormat":99},{"version":"bc79bd6403aa643e99c8e6733d5a8c7bf214e4528e79c882e77e9e441049e45e","impliedFormat":99},{"version":"3828353b7c352649166506cefb1bc4de2d98591796e4b7afda4650eadefb3c2b","impliedFormat":99},{"version":"c6fb620f7d3160662e9bae07262b192fd257259220c46b090c84b7e7f02e2da3","impliedFormat":99},{"version":"2a7bd12de58b9b8cb10dabf6c1eb933b4d4efe1d1b57dcc541f43061d0e0f70b","impliedFormat":99},{"version":"0e8e5b2568b6b1bebacc2b4a10d84badf973554f069ded173c88c59d74ce7524","impliedFormat":99},{"version":"f3159181773938d1ecd732e44ce25abe7e5c08dd1d90770e2fd9f8b92fab6c22","impliedFormat":99},{"version":"a574154c958cdaaee26294e338024932d9cc403bae2d85ff1de76363aad04bbe","impliedFormat":99},{"version":"5fa60c104a981a5430b937b09b5b9a06ceb392f6bb724d4a2f527c60f6f768b8","impliedFormat":99},{"version":"006dabdcdcc1f1fa70b71da50791f380603dd2fe2ef3da9dec4f70c8c7a72fd9","impliedFormat":99},{"version":"8fa1dc3b4a2f43c688f6f4cf1721e1d26d641ef322c14adac867ecfa41aa2109","impliedFormat":99},{"version":"e351fc610efbbdbe1d92a7df4b75e0bc4b7678ee3585f416df1e0cc8894d2b20","impliedFormat":99},{"version":"33c06a102df241666a34e69fe5f9a6808e575d684fcfcf95886d470517a456cd","impliedFormat":99},{"version":"404818f4f7cfc01054eeb0a3568da67a02b67b9ed375e745fdc20c2c22ad9f9b","impliedFormat":99},{"version":"2d9ad35b54c1413e9ee0e74945cd5c8a99516c1fbbd0a12f673c75073436a931","impliedFormat":99},{"version":"586f4a88fffdfa6f4d2e2fae23d55c946d4aad8c81573aa851b18884b185b67e","impliedFormat":99},{"version":"ad4b3aa66c7d3c3e7a5fb2126ca0aedafcded91b2d175fca89f50fcb6d3a1258","impliedFormat":99},{"version":"23e028cc298226d1f8e87d57950673b3a19b91f23538ee9287d52e77540af8cf","impliedFormat":99},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"3811b0e3366620e3899d6d35241685481ee2f9dec8df37eb3d06462ced2fc202","signature":"5f75adebdbbad4f3d72826415684caeaa20e2fa77f99793928c64dc4ae23da35","impliedFormat":99},{"version":"f341af0934dab65b7984a60662a866b274a0a49e3912312103709d87400f23a9","signature":"44c285d55eb3cdba203fcdad811ba021bb2aedb51ee53c22892ab6cb6dbcb930","impliedFormat":99},{"version":"f15d634848721e1cab785e0d011e651692fcf6d0dc38f444995ee896ffb525bc","signature":"89affcf871a301443816f03765bbdcc9f2ef972ae1900a22805f357eb0d5d04b","impliedFormat":99},{"version":"ecf8dc9486bde27d8edd264a2c38fcb7fdbf2ba310ba00ca43085645252bc9d9","signature":"949911a800215dadfc4b08258cbf9c7c73f4f924e76de451e2f61279ab5cb3cf","affectsGlobalScope":true,"impliedFormat":99},{"version":"155c5e60782c46636991cd66cf474b60d119d9430c78a8f3e13ac39a21fbb53b","signature":"701315316b41d72ab97a1ae8ab114d0a90b300aa1fde9da7a13ec7f7d715e79e","impliedFormat":99},{"version":"4369526cfe2baf3d1a846eeb967978a314cd50a401591f239755b03357ebde49","signature":"0b698cc8f21cfc3b6767bbbee9de830254378e36d3eabc2cc88c86ac1f97b4fb","impliedFormat":99},{"version":"738b15b5cb8fab7eb7b0141d444f2b0cd2a04ff0bb6f665655999796efc308d1","impliedFormat":99},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"a79e62f1e20467e11a904399b8b18b18c0c6eea6b50c1168bf215356d5bebfaf","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b80c6175da9de59bace50a72c2d68490d4ab5b07016ff5367bc7ba33cf2f219","affectsGlobalScope":true,"impliedFormat":1},{"version":"400db42c3a46984118bff14260d60cec580057dc1ab4c2d7310beb643e4f5935","impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"24bd580b5743dc56402c440dc7f9a4f5d592ad7a419f25414d37a7bfe11e342b","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"6bdc71028db658243775263e93a7db2fd2abfce3ca569c3cca5aee6ed5eb186d","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"4d2b0eb911816f66abe4970898f97a2cfc902bcd743cbfa5017fad79f7ef90d8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","impliedFormat":1},{"version":"24b8685c62562f5d98615c5a0c1d05f297cf5065f15246edfe99e81ec4c0e011","impliedFormat":1},{"version":"93507c745e8f29090efb99399c3f77bec07db17acd75634249dc92f961573387","impliedFormat":1},{"version":"339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"08faa97886e71757779428dd4c69a545c32c85fd629d1116d42710b32c6378bc","affectsGlobalScope":true,"impliedFormat":1},{"version":"6b042aa5d277ad6963e2837179fd2f8fbb01968ac67115b0833c0244e93d1d50","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"3d77c73be94570813f8cadd1f05ebc3dc5e2e4fdefe4d340ca20cd018724ee36","impliedFormat":1},{"version":"23cfd70b42094e54cc3c5dab996d81b97e2b6f38ccb24ead85454b8ddfe2fc4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3e58c4c18a031cbb17abec7a4ad0bd5ae9fc70c1f4ba1e7fb921ad87c504aca","impliedFormat":1},{"version":"a3e8bafb2af8e850c644f4be7f5156cf7d23b7bfdc3b786bd4d10ed40329649c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4b87f767c7bc841511113c876a6b8bf1fd0cb0b718c888ad84478b372ec486b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d04e3640dd9eb67f7f1e5bd3d0bf96c784666f7aefc8ac1537af6f2d38d4c29","impliedFormat":1},{"version":"3c884d9d9ec454bdf0d5a0b8465bf8297d2caa4d853851d92cc417ac6f30b969","impliedFormat":1},{"version":"5a369483ac4cfbdf0331c248deeb36140e6907db5e1daed241546b4a2055f82c","impliedFormat":1},{"version":"e8f5b5cc36615c17d330eaf8eebbc0d6bdd942c25991f96ef122f246f4ff722f","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"ee1ee365d88c4c6c0c0a5a5701d66ebc27ccd0bcfcfaa482c6e2e7fe7b98edf7","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ada07543808f3b967624645a8e1ccd446f8b01ade47842acf1328aec899fed0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a37b8d00d03f0381d2db2fe31b0571dc9d7cc0f4b87ca103cc3cd2277690ba0","impliedFormat":1},{"version":"71adf5dbc59568663d252a46179e71e4d544c053978bfc526d11543a3f716f42","impliedFormat":1},{"version":"38bf8ff1b403c861e9052c9ea651cb4f38c1ecc084a34d79f8acc6d6477a7321","impliedFormat":1},{"version":"93bd413918fa921c8729cef45302b24d8b6c7855d72d5bf82d3972595ae8dcbf","impliedFormat":1},{"version":"4ff41188773cbf465807dd2f7059c7494cbee5115608efc297383832a1150c43","impliedFormat":1},{"version":"dccdf1677e531e33f8ac961a68bc537418c9a414797c1ea7e91307501cdc3f5e","impliedFormat":1},{"version":"e184c4b8918ef56c8c9e68bd79f3f3780e2d0d75bf2b8a41da1509a40c2deb46","affectsGlobalScope":true,"impliedFormat":1},{"version":"d206b4baf4ddcc15d9d69a9a2f4999a72a2c6adeaa8af20fa7a9960816287555","impliedFormat":1},{"version":"93f437e1398a4f06a984f441f7fa7a9f0535c04399619b5c22e0b87bdee182cb","impliedFormat":1},{"version":"afbe24ab0d74694372baa632ecb28bb375be53f3be53f9b07ecd7fc994907de5","impliedFormat":1},{"version":"70731d10d5311bd4cf710ef7f6539b62660f4b0bfdbb3f9fbe1d25fe6366a7fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"afbe82d2b4857d674686255c44c8590dfe0b40927713876f875fdf4960473441","impliedFormat":1},{"version":"6b19db3600a17af69d4f33d08cc7076a7d19fb65bb36e442cac58929ec7c9482","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"137c2894e8f3e9672d401cc0a305dc7b1db7c69511cf6d3970fb53302f9eae09","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"8145e07aad6da5f23f2fcd8c8e4c5c13fb26ee986a79d03b0829b8fce152d8b2","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"ba1f814c22fd970255ddd60d61fb7e00c28271c933ab5d5cc19cd3ca66b8f57c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"125d792ec6c0c0f657d758055c494301cc5fdb327d9d9d5960b3f129aff76093","impliedFormat":1},{"version":"295f068af94245ee9d780555351bef98adfd58f8baf0b9dadbc31a489b881f8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1851a3b4db78664f83901bb9cac9e45e03a37bb5933cc5bf37e10bb7e91ab4eb","impliedFormat":1},{"version":"09d479208911ac3ac6a7c2fe86217fc1abe6c4f04e2d52e4890e500699eeab32","affectsGlobalScope":true,"impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"4f029899f9bae07e225c43aef893590541b2b43267383bf5e32e3a884d219ed5","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"5b566927cad2ed2139655d55d690ffa87df378b956e7fe1c96024c4d9f75c4cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"bce947017cb7a2deebcc4f5ba04cead891ce6ad1602a4438ae45ed9aa1f39104","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3dffd70e6375b872f0b4e152de4ae682d762c61a24881ecc5eb9f04c5caf76f","impliedFormat":1},{"version":"e2c72c065a36bc9ab2a00ac6a6f51e71501619a72c0609defd304d46610487a4","impliedFormat":1},{"version":"d91a7d8b5655c42986f1bdfe2105c4408f472831c8f20cf11a8c3345b6b56c8c","impliedFormat":1},{"version":"616075a6ac578cf5a013ee12964188b4412823796ce0b202c6f1d2e4ca8480d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8a979b8af001c9fc2e774e7809d233c8ca955a28756f52ee5dee88ccb0611d2","impliedFormat":1},{"version":"cac793cc47c29e26e4ac3601dcb00b4435ebed26203485790e44f2ad8b6ad847","impliedFormat":1},{"version":"87f287f296f3ff07dbd14ea7853c2400d995dccd7bd83206196d6c0974774e96","impliedFormat":1},{"version":"78ef0198c323d0f7b16f993ada3459f0e7e20567e7f56fe0c5ee78f31cb0840c","impliedFormat":1},{"version":"01dea450d742aa55ce9b8ab8877bbda8eb73bf88609e440cc34f6f59f35080db","impliedFormat":1},{"version":"5ec614ed82e045de15417a47e2568be5310d43d4764ee43d295ea38caafbfd17","impliedFormat":1},{"version":"b788ef070e70003842cbd03c3e04f87d46b67a47b71e9e7d8713fd8c58c5f5ec","impliedFormat":1},{"version":"583d365dc19f813f1e2767771e844c7c4ea9ab1a01e85e0119f2e083488379c2","impliedFormat":1},{"version":"b82fc3869c625b828dd3feac4b5ebf335ed007d586dc16176602db73bc4e7c65","impliedFormat":1},{"version":"05e30605274c26f405c411eebed776fa2102418c05beec885e5c9bd0fa716f32","impliedFormat":1},{"version":"58c7f7820dc027a539b0437be7e1f8bdf663f91fbc9e861d80bb9368a38d4a94","impliedFormat":1},{"version":"d67d6b779d0dece9450d7a4170d3ee58ea7fcae0af2ab5e1d0ad711474b4f7f5","impliedFormat":1},{"version":"1066c11177d085898185548e1b38ed15fcea50061508f7c313ab8bec35d46b95","impliedFormat":1},{"version":"bbc49fd9dc6ee162ba3d270c834398e0c1d44e657ac4edfa55ac837902b7e0da","impliedFormat":1},{"version":"6993f360de4984b6743764fad3b88246d5dc6cfa45567783fc23833ad4e50c13","impliedFormat":1},{"version":"f11eb1fb4e569b293a7cae9e7cdae57e13efc12b0e4510e927868c93ec055e82","impliedFormat":1},{"version":"715682cddbefe50e27e5e7896acf4af0ffc48f9e18f64b0a0c2f8041e3ea869b","impliedFormat":1},{"version":"6d2f5a67bfe2034aa77b38f10977a57e762fd64e53c14372bcc5f1d3175ca322","impliedFormat":1},{"version":"4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","impliedFormat":1},{"version":"33859aa36b264dd91bef77c279a5a0d259c6b63684d0c6ad538e515c69a489ec","impliedFormat":1},{"version":"33fa69f400b34c83e541dd5f4474f1c6fb2788614a1790c6c7b346b5c7eaa7dd","impliedFormat":1},{"version":"be213d7cbc3e5982b22df412cf223c2ac9d841c75014eae4c263761cd9d5e4c0","impliedFormat":1},{"version":"66451f9540fdf68a5fd93898257ccd7428cf7e49029f2e71b8ce70c8d927b87a","impliedFormat":1},{"version":"8a051690018330af516fd9ea42b460d603f0839f44d3946ebb4b551fe3bc7703","impliedFormat":1},{"version":"301fb04ef91ae1340bec1ebc3acdd223861c887a4a1127303d8eef7638b2d893","impliedFormat":1},{"version":"06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","impliedFormat":1},{"version":"fc26991e51514bfc82e0f20c25132268b1d41e8928552dbaed7cc6f3d08fc3ac","impliedFormat":1},{"version":"5d82bb58dec5014c02aaeb3da465d34f4b7d5c724afea07559e3dfca6d8da5bc","impliedFormat":1},{"version":"44448f58f4d731dc28a02b5987ab6f20b9f77ad407dcf57b68c853fe52195cd7","impliedFormat":1},{"version":"b2818e8d05d6e6ad0f1899abf90a70309240a15153ea4b8d5e0c151e117b7338","impliedFormat":1},{"version":"1c708c15bb96473ce8ec2a946bd024ecded341169a0b84846931f979172244ba","impliedFormat":1},{"version":"ed0f5e1f45dc7c3f40356e0a855e8594aa57c125a5d8dfeef118e0a3024f98ff","impliedFormat":1},{"version":"dc187f457333356ddc1ab8ec7833cd836f85e0bbcade61290dc55116244867cb","impliedFormat":1},{"version":"25525e173de74143042e824eaa786fa18c6b19e9dafb64da71a5faacc5bd2a5c","impliedFormat":1},{"version":"7a3d649f2de01db4b316cf4a0ce5d96832ee83641f1dc84d3e9981accf29c3a1","impliedFormat":1},{"version":"26e4260ee185d4af23484d8c11ef422807fb8f51d33aa68d83fab72eb568f228","impliedFormat":1},{"version":"c4d52d78e3fb4f66735d81663e351cf56037270ed7d00a9b787e35c1fc7183ce","impliedFormat":1},{"version":"864a5505d0e9db2e1837dce8d8aae8b7eeaa5450754d8a1967bf2843124cc262","impliedFormat":1},{"version":"2d045f00292ac7a14ead30d1f83269f1f0ad3e75d1f8e5a245ab87159523cf98","impliedFormat":1},{"version":"54bcb32ab0c7c72b61becd622499a0ae1c309af381801a30878667e21cba85bb","impliedFormat":1},{"version":"20666518864143f162a9a43249db66ca1d142e445e2d363d5650a524a399b992","impliedFormat":1},{"version":"28439c9ebd31185ae3353dd8524115eaf595375cd94ca157eefcf1280920436a","impliedFormat":1},{"version":"84344d56f84577d4ac1d0d59749bb2fde14c0fb460d0bfb04e57c023748c48a6","impliedFormat":1},{"version":"89bcaf21b0531640604ca9e0796f54a6e1b4e2d43c07422ffa1e3d2e1bb0e456","impliedFormat":1},{"version":"66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","impliedFormat":1},{"version":"35a0eac48984d20f6da39947cf81cd71e0818feefc03dcb28b4ac7b87a636cfd","impliedFormat":1},{"version":"f6c226d8222108b3485eb0745e8b0ee48b0b901952660db20e983741e8852654","impliedFormat":1},{"version":"93c3b758c4dc64ea499c9416b1ed0e69725133644b299b86c5435e375d823c75","impliedFormat":1},{"version":"4e85f443714cff4858fdaffed31052492fdd03ff7883b22ed938fc0e34b48093","impliedFormat":1},{"version":"0146912d3cad82e53f779a0b7663f181824bba60e32715adb0e9bd02c560b8c6","impliedFormat":1},{"version":"70754650d1eba1fc96a4ed9bbbc8458b341b41063fe79f8fa828db7059696712","impliedFormat":1},{"version":"220783c7ca903c6ce296b210fae5d7e5c5cc1942c5a469b23d537f0fbd37eb18","impliedFormat":1},{"version":"0974c67cf3e2d539d0046c84a5e816e235b81c8516b242ece2ed1bdbb5dbd3d6","impliedFormat":1},{"version":"b4186237e7787a397b6c5ae64e155e70ac2a43fdd13ff24dfb6c1e3d2f930570","impliedFormat":1},{"version":"2647784fffa95a08af418c179b7b75cf1d20c3d32ed71418f0a13259bf505c54","impliedFormat":1},{"version":"0480102d1a385b96c05316b10de45c3958512bb9e834dbecbbde9cc9c0b22db3","impliedFormat":1},{"version":"eea44cfed69c9b38cc6366bd149a5cfa186776ca2a9fb87a3746e33b7e4f5e74","impliedFormat":1},{"version":"7f375e5ef1deb2c2357cba319b51a8872063d093cab750675ac2eb1cef77bee9","impliedFormat":1},{"version":"b7f06aec971823244f909996a30ef2bbeae69a31c40b0b208d0dfd86a8c16d4f","impliedFormat":1},{"version":"0421510c9570dfae34b3911e1691f606811818df00354df7abd028cee454979f","impliedFormat":1},{"version":"1517236728263863a79500653cc15ceb286f048907b3dba3141a482ca6946bd7","impliedFormat":1},{"version":"7c7b418e467a88a714b4c6dac321923b933f82875f063f48abf952021a2c2df1","impliedFormat":1},{"version":"33120063a7e106818ce109be9238569edca74d4e8530f853bd30d298d1375fd8","impliedFormat":1},{"version":"8d27e5f73b75340198b2df36f39326f693743e64006bd7b88a925a5f285df628","impliedFormat":1},{"version":"2c8e55457aaf4902941dfdba4061935922e8ee6e120539c9801cd7b400fae050","impliedFormat":1},{"version":"1c2cd862994b1fbed3cde0d1e8de47835ff112d197a3debfddf7b2ee3b2c52bc","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"9e0cf651e8e2c5b9bebbabdff2f7c6f8cedd91b1d9afcc0a854cdff053a88f1b","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"f9e22729fa06ed20f8b1fe60670b7c74933fdfd44d869ddfb1919c15a5cf12fb","impliedFormat":1},{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"936eb43a381712a8ec1249f2afc819f6fc7ca68f10dfec71762b428dfdc53bf1","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"689be50b735f145624c6f391042155ae2ff6b90a93bac11ca5712bc866f6010c","impliedFormat":1},{"version":"0504070e7eaba788f5d0d5926782ed177f1db01cee28363c488fae94950c0bbc","impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"0e13570a7e86c6d83dd92e81758a930f63747483e2cd34ef36fcdb47d1f9726a","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"6847334317c1bc1e6fc4b679b0095bbd2b6ee3b85fe3f26fc26bac462f68ef5e","impliedFormat":1},{"version":"2224f3072e3cc07906eeed5c71746779511fba2dd224addc5489bcdb489bdee5","impliedFormat":1},{"version":"fb893a0dfc3c9fb0f9ca93d0648694dd95f33cbad2c0f2c629f842981dfd4e2e","impliedFormat":1},{"version":"3eb11dbf3489064a47a2e1cf9d261b1f100ef0b3b50ffca6c44dd99d6dd81ac1","impliedFormat":1},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2b48abff5a8adc6bb1cd13a702b9ef05e6045a98e7cfa95a8779b53b6d0e69d","impliedFormat":1},{"version":"dd0c1b380ba3437adedef134b2e48869449b1db0b07b2a229069309ce7b9dd39","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"a45c25e77c911c1f2a04cade78f6f42b4d7d896a3882d4e226efd3a3fcd5f2c4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5c45abf1e13e4463eacfd5dedda06855da8748a6a6cb3334f582b52e219acc04","impliedFormat":1},{"version":"211440ce81e87b3491cdf07155881344b0a61566df6e749acff0be7e8b9d1a07","impliedFormat":1},{"version":"5d9a0b6e6be8dbb259f64037bce02f34692e8c1519f5cd5d467d7fa4490dced4","impliedFormat":1},{"version":"880da0e0f3ebca42f9bd1bc2d3e5e7df33f2619d85f18ee0ed4bd16d1800bc32","impliedFormat":1},{"version":"963d59066dd6742da1918a6213a209bcc205b8ee53b1876ee2b4e6d80f97c85e","impliedFormat":1},{"version":"9c5c92b7fb8c38ff1b46df69701f2d1ea8e2d6468e3cd8f73d8af5e6f7864576","impliedFormat":1},{"version":"afe73051ff6a03a9565cbd8ebb0e956ee3df5e913ad5c1ded64218aabfa3dcb5","impliedFormat":1},{"version":"6d09838b65c3c780513878793fc394ae29b8595d9e4729246d14ce69abc71140","impliedFormat":1},{"version":"fefa1d4c62ddb09c78d9f46e498a186e72b5e7aeb37093aa6b2c321b9d6ecd14","impliedFormat":1},{"version":"271cde49dfd9b398ccc91bb3aaa43854cf76f4d14e10fed91cbac649aa6cbc63","affectsGlobalScope":true,"impliedFormat":1},{"version":"2bcecd31f1b4281710c666843fc55133a0ee25b143e59f35f49c62e168123f4b","impliedFormat":1},{"version":"a6273756fa05f794b64fe1aff45f4371d444f51ed0257f9364a8b25f3501915d","impliedFormat":1},{"version":"9c4e644fe9bf08d93c93bd892705842189fe345163f8896849d5964d21b56b78","impliedFormat":1},{"version":"25d91fb9ed77a828cc6c7a863236fb712dafcd52f816eec481bd0c1f589f4404","impliedFormat":1},{"version":"4cd14cea22eed1bfb0dc76183e56989f897ac5b14c0e2a819e5162eafdcfe243","impliedFormat":1},{"version":"8d32432f68ca4ce93ad717823976f2db2add94c70c19602bf87ee67fe51df48b","impliedFormat":1},{"version":"ee65fe452abe1309389c5f50710f24114e08a302d40708101c4aa950a2a7d044","impliedFormat":1},{"version":"fbf802b3a028f5eb22ad406ee5fc7c368f0acfd3a2a6d0f805120766f5717ec8","impliedFormat":1},{"version":"63786b6f821dee19eb898afb385bd58f1846e6cba593a35edcf9631ace09ba25","impliedFormat":1},{"version":"ff954afaefd9bd5fad03678cae63fd23e0aaaf4d311b27bfb35e1d6d83833997","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"cdcc132f207d097d7d3aa75615ab9a2e71d6a478162dde8b67f88ea19f3e54de","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"c085e9aa62d1ae1375794c1fb927a445fa105fed891a7e24edbb1c3300f7384a","impliedFormat":1},{"version":"f315e1e65a1f80992f0509e84e4ae2df15ecd9ef73df975f7c98813b71e4c8da","impliedFormat":1},{"version":"5b9586e9b0b6322e5bfbd2c29bd3b8e21ab9d871f82346cb71020e3d84bae73e","impliedFormat":1},{"version":"3e70a7e67c2cb16f8cd49097360c0309fe9d1e3210ff9222e9dac1f8df9d4fb6","impliedFormat":1},{"version":"ab68d2a3e3e8767c3fba8f80de099a1cfc18c0de79e42cb02ae66e22dfe14a66","impliedFormat":1},{"version":"d96cc6598148bf1a98fb2e8dcf01c63a4b3558bdaec6ef35e087fd0562eb40ec","impliedFormat":1},{"version":"f8db4fea512ab759b2223b90ecbbe7dae919c02f8ce95ec03f7fb1cf757cfbeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"818e7c86776c67f49dbd781d445e13297b59aa7262e54b065b1332d7dcc6f59a","impliedFormat":1},{"version":"fec943fdb3275eb6e006b35e04a8e2e99e9adf3f4b969ddf15315ac7575a93e4","impliedFormat":1},{"version":"7e8d3f08435ad2cefe67f58182618bfc9a0a29db08cf2544b94cbcae754a9bd9","impliedFormat":1},{"version":"8cf9b9045a614f883b623c2f1a631ec6a93321747e933330b2eec0ee47164a34","impliedFormat":1},{"version":"cee62e64fc4bdfb3798ab8e21486fadd2027ce4128349989acc63905366f91c5","impliedFormat":1},{"version":"dee5d387e2e6f3015cbf91fc0c13ed6f016f9c5c1f2ad9c62602f4fd398fa83a","impliedFormat":1},{"version":"c68eb17ea7b2ff7f8bcfe1a9e82b8210c3112820d9e74b56b0fbecaab5ce8866","impliedFormat":1},{"version":"2d225e7bda2871c066a7079c88174340950fb604f624f2586d3ea27bb9e5f4ff","impliedFormat":1},{"version":"6a785f84e63234035e511817dd48ada756d984dd8f9344e56eb8b2bdcd8fd001","impliedFormat":1},{"version":"c1422d016f7df2ccd3594c06f2923199acd09898f2c42f50ea8159f1f856f618","impliedFormat":1},{"version":"2973b1b7857ca144251375b97f98474e9847a890331e27132d5a8b3aea9350a8","impliedFormat":1},{"version":"0eb6152d37c84d6119295493dfcc20c331c6fda1304a513d159cdaa599dcb78b","impliedFormat":1},{"version":"237df26f8c326ca00cd9d2deb40214a079749062156386b6d75bdcecc6988a6b","impliedFormat":1},{"version":"cd44995ee13d5d23df17a10213fed7b483fabfd5ea08f267ab52c07ce0b6b4da","impliedFormat":1},{"version":"58ce1486f851942bd2d3056b399079bc9cb978ec933fe9833ea417e33eab676e","impliedFormat":1},{"version":"7557d4d7f19f94341f4413575a3453ba7f6039c9591015bcf4282a8e75414043","impliedFormat":1},{"version":"a3b2cc16f3ce2d882eca44e1066f57a24751545f2a5e4a153d4de31b4cac9bb5","impliedFormat":1},{"version":"ac2b3b377d3068bfb6e1cb8889c99098f2c875955e2325315991882a74d92cc8","impliedFormat":1},{"version":"8deb39d89095469957f73bd194d11f01d9894b8c1f1e27fbf3f6e8122576b336","impliedFormat":1},{"version":"a38a9c41f433b608a0d37e645a31eecf7233ef3d3fffeb626988d3219f80e32f","impliedFormat":1},{"version":"8e1428dcba6a984489863935049893631170a37f9584c0479f06e1a5b1f04332","impliedFormat":1},{"version":"1fce9ecb87a2d3898941c60df617e52e50fb0c03c9b7b2ba8381972448327285","impliedFormat":1},{"version":"5ef0597b8238443908b2c4bf69149ed3894ac0ddd0515ac583d38c7595b151f1","impliedFormat":1},{"version":"ac52b775a80badff5f4ac329c5725a26bd5aaadd57afa7ad9e98b4844767312a","impliedFormat":1},{"version":"6ae5b4a63010c82bf2522b4ecfc29ffe6a8b0c5eea6b2b35120077e9ac54d7a1","impliedFormat":1},{"version":"dd7109c49f416f218915921d44f0f28975df78e04e437c62e1e1eb3be5e18a35","impliedFormat":1},{"version":"eee181112e420b345fc78422a6cc32385ede3d27e2eaf8b8c4ad8b2c29e3e52e","impliedFormat":1},{"version":"25fbe57c8ee3079e2201fe580578fab4f3a78881c98865b7c96233af00bf9624","impliedFormat":1},{"version":"62cc8477858487b4c4de7d7ae5e745a8ce0015c1592f398b63ee05d6e64ca295","impliedFormat":1},{"version":"cc2a9ec3cb10e4c0b8738b02c31798fad312d21ef20b6a2f5be1d077e9f5409d","impliedFormat":1},{"version":"4b4fadcda7d34034737598c07e2dca5d7e1e633cb3ba8dd4d2e6a7782b30b296","impliedFormat":1},{"version":"360fdc8829a51c5428636f1f83e7db36fef6c5a15ed4411b582d00a1c2bd6e97","impliedFormat":1},{"version":"1cf0d15e6ab1ecabbf329b906ae8543e6b8955133b7f6655f04d433e3a0597ab","impliedFormat":1},{"version":"7c9f98fe812643141502b30fb2b5ec56d16aaf94f98580276ae37b7924dd44a4","impliedFormat":1},{"version":"b3547893f24f59d0a644c52f55901b15a3fa1a115bc5ea9a582911469b9348b7","impliedFormat":1},{"version":"596e5b88b6ca8399076afcc22af6e6e0c4700c7cd1f420a78d637c3fb44a885e","impliedFormat":1},{"version":"adddf736e08132c7059ee572b128fdacb1c2650ace80d0f582e93d097ed4fbaf","impliedFormat":1},{"version":"d4cad9dc13e9c5348637170ddd5d95f7ed5fdfc856ddca40234fa55518bc99a6","impliedFormat":1},{"version":"d70675ba7ba7d02e52b7070a369957a70827e4b2bca2c1680c38a832e87b61fd","impliedFormat":1},{"version":"3be71f4ce8988a01e2f5368bdd58e1d60236baf511e4510ee9291c7b3729a27e","impliedFormat":1},{"version":"423d2ccc38e369a7527988d682fafc40267bcd6688a7473e59c5eea20a29b64f","impliedFormat":1},{"version":"2f9fde0868ed030277c678b435f63fcf03d27c04301299580a4017963cc04ce6","impliedFormat":1},{"version":"feeb73d48cc41c6dd23d17473521b0af877751504c30c18dc84267c8eeea429a","impliedFormat":1},{"version":"25f1159094dc0bf3a71313a74e0885426af21c5d6564a254004f2cadf9c5b052","impliedFormat":1},{"version":"cde493e09daad4bb29922fe633f760be9f0e8e2f39cdca999cce3b8690b5e13a","impliedFormat":1},{"version":"3d7f9eb12aface876f7b535cc89dcd416daf77f0b3573333f16ec0a70bcf902a","impliedFormat":1},{"version":"b83139ae818dd20f365118f9999335ca4cd84ae518348619adc5728e7e0372d5","impliedFormat":1},{"version":"e0205f04611bea8b5b82168065b8ef1476a8e96236201494eb8c785331c43118","impliedFormat":1},{"version":"62d26d8ba4fa15ab425c1b57a050ed76c5b0ecbffaa53f182110aa3a02405a07","impliedFormat":1},{"version":"9941cbf7ca695e95d588f5f1692ab040b078d44a95d231fa9a8f828186b7b77d","impliedFormat":1},{"version":"41b8775befd7ded7245a627e9f4de6110236688ce4c124d2d40c37bc1a3bfe05","impliedFormat":1},{"version":"ee736931bcb117efdd2118795ccfa4b2d0beb8fec426f91ae448e51b03510707","impliedFormat":1},{"version":"75f191b59fe7ce72d1d7d11d0f329a193843f54af93182fc5a65c37d0a82c85a","impliedFormat":1},{"version":"cd74c8275483d3fe0d07a9b4bba28845a8a611f0aa399e961dbd40e5d46dd9ad","impliedFormat":1},{"version":"9068fb04d9df0cb5de85ced5c4d70a935096c4cb289ab76b038e0a2496c92503","impliedFormat":1},{"version":"1f2bcc8836f72a2ff7a6804dc5379e9b73bf94a51d8e60c43cf5b874b5f4f6ff","impliedFormat":1},{"version":"7220461ab7f6d600b313ce621346c315c3a0ebc65b5c6f268488c5c55b68d319","impliedFormat":1},{"version":"f90d4c1ae3af9afb35920b984ba3e41bdd43f0dc7bae890b89fbd52b978f0cac","impliedFormat":1},{"version":"fcf79300e5257a23ed3bacaa6861d7c645139c6f7ece134d15e6669447e5e6db","impliedFormat":1},{"version":"187119ff4f9553676a884e296089e131e8cc01691c546273b1d0089c3533ce42","impliedFormat":1},{"version":"aa2c18a1b5a086bbcaae10a4efba409cc95ba7287d8cf8f2591b53704fea3dea","impliedFormat":1},{"version":"b88749bdb18fc1398370e33aa72bc4f88274118f4960e61ce26605f9b33c5ba2","impliedFormat":1},{"version":"0aaef8cded245bf5036a7a40b65622dd6c4da71f7a35343112edbe112b348a1e","impliedFormat":1},{"version":"00baffbe8a2f2e4875367479489b5d43b5fc1429ecb4a4cc98cfc3009095f52a","impliedFormat":1},{"version":"a873c50d3e47c21aa09fbe1e2023d9a44efb07cc0cb8c72f418bf301b0771fd3","impliedFormat":1},{"version":"7c14ccd2eaa82619fffc1bfa877eb68a012e9fb723d07ee98db451fadb618906","impliedFormat":1},{"version":"49c36529ee09ea9ce19525af5bb84985ea8e782cb7ee8c493d9e36d027a3d019","impliedFormat":1},{"version":"df996e25faa505f85aeb294d15ebe61b399cf1d1e49959cdfaf2cc0815c203f9","impliedFormat":1},{"version":"4f6a12044ee6f458db11964153830abbc499e73d065c51c329ec97407f4b13dd","impliedFormat":1},{"version":"202f8582ee3cd89e06c4a17d8aabb925ff8550370559c771d1cc3ec3934071c2","impliedFormat":1},{"version":"fbca5ffaebf282ec3cdac47b0d1d4a138a8b0bb32105251a38acb235087d3318","impliedFormat":1},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1},{"version":"b95f2a78de34a873c6dd76dc538b7a5fec77da6a0e0e7efc7aa58f58ddfce270","impliedFormat":1},{"version":"1231f32d791b0fcc13e0c836543b34e83dea6e0b494ee35194a66a50dd25427e","impliedFormat":1},{"version":"66880e558be5ee57d23c12ffd0a90bf07840e088f8fa9b608fadeaf45af78969","impliedFormat":1},{"version":"058186f212307a621cd51160e2124c26208649600b4f0a27835f1d1caae81e65","impliedFormat":1},{"version":"c2bfeeadb18ba18386d7549a69c2049e57f31758b71343543a5c27919197b0fa","impliedFormat":1},{"version":"63b0be497f88d815c410b76985b798132d6c470199f2f31e1390a48480619758","impliedFormat":1},{"version":"8b5402ae709d042c3530ed3506c135a967159f42aed3221267e70c5b7240b577","impliedFormat":1},{"version":"95a31f8eea43d175dfeda85accc45bddce5678acae4e22e2f683b48e0e0188de","impliedFormat":1},{"version":"916be7d770b0ae0406be9486ac12eb9825f21514961dd050594c4b250617d5a8","impliedFormat":1},{"version":"c555dd691dd05955e99cd93dd99c685a65e5287813ccb5e6bfde951183248e26","impliedFormat":1},{"version":"a589f9f052276a3fc00b75e62f73b93ea568fce3e935b86ed7052945f99d9dc2","impliedFormat":1},{"version":"17230b34bb564a3a2e36f9d3985372ccab4ad1722df2c43f7c5c2b553f68e5db","impliedFormat":1},{"version":"6e5c9272f6b3783be7bdddaf207cccdb8e033be3d14c5beacc03ae9d27d50929","impliedFormat":1},{"version":"9b4f7ff9681448c72abe38ea8eefd7ffe0c3aefe495137f02012a08801373f71","impliedFormat":1},{"version":"0dfe35191a04e8f9dc7caeb9f52f2ee07402736563d12cbccd15fb5f31ac877f","impliedFormat":1},{"version":"c21e3729094ed9ecdcb97724ce5b20625bb9ac3b9146d681cafa97d667c12bb5","impliedFormat":1},{"version":"5adf3c3c7204b3614dbc585681a33ef598c68df387298859f9a2521cfb449437","impliedFormat":1},{"version":"f63cb353cd53da6be4a34f6fdece6316dac14fd62cccf9a4d2ce6bab2c37bc8c","impliedFormat":1},{"version":"54751c34f1e8c3bedd7a4501762c8a9567160ac76bd6bc35b73429d3e2cf2ec7","impliedFormat":1},{"version":"e85d04f57b46201ddc8ba238a84322432a4803a5d65e0bbd8b3b4f05345edd51","impliedFormat":1},{"version":"bbf7c864f1ffbacf54b524d028b6a77da9f0be0b8fff5c088e3185ee50496762","impliedFormat":1},{"version":"9df147746b0cbd11d022b564e6fdd43ac79b643dc579d2123317ee01cc4f0d70","impliedFormat":1},{"version":"fa244c20411dd53d853ce4b85e7146860be364946da477dad721e66301097460","impliedFormat":1},{"version":"fab2754e047c7818a8eb650cc2194aef4388193acdc4606eb601cb60923f7798","impliedFormat":1},{"version":"36a2e4c9a67439aca5f91bb304611d5ae6e20d420503e96c230cf8fcdc948d94","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1d4bc73751d6ec6285331d1ca378904f55d9e5e8aeaa69bc45b675c3df83e778","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"1cfafc077fd4b420e5e1c5f3e0e6b086f6ea424bf96a6c7af0d6d2ef2b008a81","impliedFormat":1},{"version":"9d37372c385ea35087857d10afe0ae636503035feee2f742c4031c3658b17d80","impliedFormat":1},{"version":"8017277c3843df85296d8730f9edf097d68d7d5f9bc9d8124fcacf17ecfd487e","impliedFormat":1},{"version":"8718fa41d7cf4aa91de4e8f164c90f88e0bf343aa92a1b9b725a9c675c64e16b","impliedFormat":1},{"version":"199f9ead0daf25ae4c5632e3d1f42570af59685294a38123eef457407e13f365","impliedFormat":1},{"version":"041597c12abeaa2ef07766775955fc87cfc65c43e0fe86c836071bea787e967c","impliedFormat":1},{"version":"0838507efff4f479c6f603ec812810ddfe14ab32abf8f4a8def140be970fe439","impliedFormat":1},{"version":"f67c92f5cb2bf5a9929ee73216f08749db4f22b04a18e5205ed6e75ca48e9feb","impliedFormat":1},{"version":"7212c2d58855b8df35275180e97903a4b6093d4fbaefea863d8d028da63938c6","impliedFormat":1},{"version":"de0199a112f75809a7f80ec071495159dcf3e434bc021347e0175627398264c3","impliedFormat":1},{"version":"1a2bed55cfa62b4649485df27c0e560b04d4da4911e3a9f0475468721495563f","impliedFormat":1},{"version":"854045924626ba585f454b53531c42aed4365f02301aa8eca596423f4675b71f","impliedFormat":1},{"version":"dd9faff42b456b5f03b85d8fbd64838eb92f6f7b03b36322cbc59c005b7033d3","impliedFormat":1},{"version":"6ff702721d87c0ba8e7f8950e7b0a3b009dfd912fab3997e0b63fab8d83919c3","impliedFormat":1},{"version":"9dce9fc12e9a79d1135699d525aa6b44b71a45e32e3fa0cf331060b980b16317","impliedFormat":1},{"version":"586b2fd8a7d582329658aaceec22f8a5399e05013deb49bcfde28f95f093c8ee","impliedFormat":1},{"version":"dedc0ab5f7babe4aef870618cd2d4bc43dc67d1584ee43b68fc6e05554ef8f34","impliedFormat":1},{"version":"ef1f3eadd7bed282de45bafd7c2c00105cf1db93e22f6cd763bec8a9c2cf6df1","impliedFormat":1},{"version":"3d8885d13f76ff35b7860039e83c936ff37553849707c2fd1d580d193a52be5b","impliedFormat":1},{"version":"b75188f1d06bba9e266aad819df75b51ed1fcc19ac0750dc6a55a8eb1b7c2134","impliedFormat":1},{"version":"d8272401aa994ed8a60f71067acbcc9a73d847be6badf1b9397a8ce965af6318","impliedFormat":1},{"version":"c73834a2aee5e08dea83bd8d347f131bc52f9ec5b06959165c55ef7a544cae82","impliedFormat":1},{"version":"cf3d384d082b933d987c4e2fe7bfb8710adfd9dc8155190056ed6695a25a559e","impliedFormat":1},{"version":"9871b7ee672bc16c78833bdab3052615834b08375cb144e4d2cba74473f4a589","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"86c73f2ee1752bac8eeeece234fd05dfcf0637a4fbd8032e4f5f43102faa8eec","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"f4e9bf9103191ef3b3612d3ec0044ca4044ca5be27711fe648ada06fad4bcc85","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"7d8ddf0f021c53099e34ee831a06c394d50371816caa98684812f089b4c6b3d4","impliedFormat":1},{"version":"d26a79f97f25eb1c5fc36a8552e4decc7ad11104a016d31b1307c3afaf48feb1","impliedFormat":1},{"version":"ddef25f825320de051dcb0e62ffce621b41c67712b5b4105740c32fd83f4c449","impliedFormat":1},{"version":"1b3dffaa4ca8e38ac434856843505af767a614d187fb3a5ef4fcebb023c355aa","impliedFormat":1},{"version":"1087c6c9066684d3e72a8fcc5445f34e85572792bc16f5aab01208bcbbbe64be","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"eb27bc1c8d46234252298d3d7252c8459667daa0953b974f9d2c581c46703b2a","impliedFormat":1},{"version":"1b096ca6b209d1fed9ce68edd110ff6de8bec4fab2689d2adc481ffc1b1dc20b","impliedFormat":1},{"version":"9c02f12da30d30dd5f5ccaeedfb9b925ed4e5114059e9be6ed2ecf87a492fd16","impliedFormat":1},{"version":"8c8f8e816a38f1a0cc2dd3813d3bede2d773df36e72f4cb55d9daabd22016925","impliedFormat":1},{"version":"2887592574fcdfd087647c539dcb0fbe5af2521270dad4a37f9d17c16190d579","impliedFormat":1},{"version":"f86d0150d5abc55bf5bb479beacc34a7e9d4ab4e3014315fb74626baf1558857","impliedFormat":1},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"b90c59ac4682368a01c83881b814738eb151de8a58f52eb7edadea2bcffb11b9","impliedFormat":1},{"version":"d77523951427fca92c7fdcaafb776bfb5d76cb0dfd8a7b18f38710332386ad6d","impliedFormat":1},{"version":"d9dcda644a9ecb57df163cbeaaca093c696335a53f47b5dbbf7cf0671b76e2eb","impliedFormat":1},{"version":"2d4d871246a21c785aec2a5b745ad79cdc877de3866f586887c8c74ddec97b8d","impliedFormat":1},{"version":"0cfa403fc15d0fda3214c3d8b75a42abcfa60c07e739de908e57d1f76220b7f9","impliedFormat":1},{"version":"d99cef4ae065cde21bd536998282a9882d8fb36a902725f03d71c3a9e3a24aa4","impliedFormat":1},{"version":"f3d4606a83fbdeedeeecd982ac35945bc02d50499cc65c72d71a143afa7e7334","impliedFormat":1},{"version":"bc919e8ad895c43568f8125523ab0f91810d5208afcc5bff2ba4713dffda0d97","impliedFormat":1},{"version":"6771b9c4bb2253e2a51c5ef7155419558289b885857e275ff61f90a979049cc3","impliedFormat":1},{"version":"6a1fb700b666a19112cddb4ab24e671c83ce40f6bfe64d1e7cb59c88263d0ec2","impliedFormat":1},{"version":"cc060af11b9bc0ed723d1200951bdc3255ff189475183a1f9ed06fd9c57206a6","impliedFormat":1},{"version":"a0aa9907949f7688394904c4d16b93c8d3154a9eda70ab096e0cfb37ef48e9b1","impliedFormat":1},{"version":"816dd83b87f2f1986f4c9072d38262ae96ee6589fab8a9ebc3b8d8f30263b8d3","impliedFormat":1},{"version":"5512a0ca56d3a21dd2843b62c939ff885d8853e55524bada67d1e393649e4bd6","impliedFormat":1},{"version":"3cd6ea92f13a0bf3c120ac271bc0ba57bf4cc3078e010150887c657f78b41959","impliedFormat":1},{"version":"4266ccd2cf1d6a281efd9c7ddf9efd7daecf76575364148bd233e18919cac3ed","impliedFormat":1},{"version":"d9a256f69f3956993e65efd88336644be8f8dd36d149e859c14704ef6c6c0eec","impliedFormat":1},{"version":"d18f13c33148de7f0b1241734cb10dfe4c1e9505acad51ee48c3f4c1bd09e0dd","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1},{"version":"f0cb4b3ab88193e3e51e9e2622e4c375955003f1f81239d72c5b7a95415dad3e","impliedFormat":1}],"root":[87,440,443,444,[524,528],[754,760]],"options":{"allowJs":false,"composite":true,"declaration":true,"declarationDir":"./dist","declarationMap":true,"esModuleInterop":true,"experimentalDecorators":true,"importHelpers":true,"jsx":4,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":true,"noUncheckedIndexedAccess":false,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./dist","rootDir":"./src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictNullChecks":true,"stripInternal":true,"target":8,"useDefineForClassFields":false,"useUnknownInCatchVariables":false},"referencedMap":[[1179,1],[767,1],[521,2],[455,1],[454,1],[501,1],[509,1],[493,3],[497,4],[510,5],[511,6],[495,7],[494,8],[498,9],[512,10],[506,1],[513,10],[507,11],[492,12],[523,13],[504,14],[508,15],[529,16],[514,17],[468,18],[515,19],[503,9],[516,9],[496,20],[457,21],[499,22],[500,15],[480,15],[481,23],[482,24],[456,25],[483,26],[459,27],[458,28],[477,29],[484,18],[485,15],[486,5],[461,30],[462,5],[463,31],[464,5],[465,31],[466,32],[487,33],[467,34],[491,35],[469,36],[470,32],[471,37],[472,21],[460,38],[488,39],[473,40],[505,41],[474,34],[489,33],[490,5],[475,5],[476,5],[478,42],[479,36],[517,9],[518,1],[519,43],[445,1],[502,44],[522,1],[754,45],[443,45],[757,46],[444,45],[755,45],[756,47],[87,48],[526,49],[524,50],[527,51],[528,52],[525,45],[760,53],[440,54],[758,55],[759,56],[568,1],[924,57],[922,1],[441,58],[442,59],[209,60],[210,61],[381,62],[376,63],[378,64],[380,65],[383,66],[208,67],[374,68],[384,69],[375,70],[377,71],[382,72],[207,73],[379,74],[385,75],[386,76],[388,77],[389,78],[390,76],[391,78],[392,77],[393,77],[394,76],[395,76],[396,79],[397,76],[398,58],[387,80],[399,81],[400,82],[401,83],[402,84],[410,85],[437,86],[403,79],[406,87],[404,88],[405,83],[407,1],[433,85],[434,78],[436,89],[435,90],[412,85],[411,85],[419,91],[426,90],[432,92],[427,85],[428,85],[429,85],[431,93],[409,1],[408,85],[195,94],[196,94],[194,95],[197,1],[198,96],[199,96],[200,96],[205,97],[201,1],[204,98],[203,99],[202,98],[336,100],[337,96],[338,101],[267,102],[335,103],[333,96],[334,104],[315,105],[332,106],[289,96],[312,1],[309,96],[282,96],[281,96],[302,96],[310,107],[296,96],[283,108],[277,109],[287,108],[286,108],[271,96],[272,96],[273,96],[280,96],[305,96],[285,108],[295,96],[284,96],[270,96],[301,110],[314,111],[268,96],[307,1],[308,96],[269,108],[299,1],[288,108],[292,1],[303,1],[278,112],[279,108],[275,109],[291,109],[297,96],[290,113],[313,96],[294,108],[293,96],[298,109],[274,96],[300,96],[276,114],[306,1],[304,108],[311,1],[316,115],[320,116],[321,117],[322,117],[323,117],[324,117],[331,118],[325,117],[326,117],[327,115],[319,117],[318,119],[328,117],[329,117],[330,117],[317,96],[241,96],[263,96],[231,96],[233,96],[250,120],[230,96],[217,1],[255,96],[264,120],[248,96],[232,120],[226,121],[218,1],[219,1],[239,120],[238,120],[220,96],[221,96],[222,96],[229,96],[259,96],[237,120],[247,96],[234,96],[216,96],[254,96],[266,122],[214,123],[261,1],[262,96],[215,124],[252,1],[240,120],[244,1],[257,1],[227,125],[228,120],[224,121],[243,121],[249,96],[242,120],[235,126],[213,96],[246,120],[245,96],[256,96],[251,121],[223,96],[253,96],[225,127],[260,1],[258,120],[236,126],[265,1],[530,1],[564,128],[563,128],[562,1],[566,129],[567,129],[565,1],[533,1],[531,130],[534,131],[532,131],[535,1],[574,1],[575,1],[579,1],[576,1],[586,130],[585,1],[587,1],[588,132],[580,133],[584,134],[581,135],[577,1],[582,136],[583,137],[578,1],[550,130],[546,130],[549,130],[548,130],[547,130],[543,130],[542,130],[545,130],[544,130],[537,130],[538,138],[536,1],[541,139],[539,130],[592,140],[571,141],[573,141],[572,141],[569,142],[570,141],[590,1],[589,1],[591,1],[551,143],[552,1],[555,1],[558,1],[553,1],[560,1],[561,144],[557,1],[554,1],[556,1],[559,1],[540,1],[976,1],[979,145],[420,146],[413,85],[418,147],[415,146],[425,148],[416,146],[424,149],[422,150],[417,146],[414,85],[423,151],[430,152],[421,1],[978,1],[861,153],[834,1],[862,1],[863,1],[864,1],[921,154],[865,155],[910,156],[867,157],[866,158],[868,155],[869,155],[871,159],[870,155],[872,160],[873,160],[874,155],[876,161],[877,155],[878,161],[879,155],[881,155],[882,155],[883,155],[884,162],[880,155],[885,1],[886,163],[887,163],[888,163],[889,163],[890,163],[899,164],[891,163],[892,163],[893,163],[894,163],[896,163],[895,163],[897,163],[898,163],[900,155],[901,155],[875,155],[902,161],[904,165],[903,155],[905,155],[906,155],[907,166],[909,155],[908,155],[911,155],[913,155],[914,167],[912,155],[915,155],[916,155],[917,155],[918,155],[919,155],[920,155],[927,168],[923,57],[925,169],[926,57],[929,170],[930,171],[931,1],[206,1],[937,172],[928,153],[938,1],[943,173],[941,174],[598,1],[600,175],[601,175],[602,1],[603,1],[605,176],[606,1],[607,1],[608,175],[609,1],[610,1],[611,177],[612,1],[613,1],[614,178],[615,1],[616,179],[617,1],[618,1],[619,1],[620,1],[623,1],[622,180],[599,1],[624,181],[625,1],[621,1],[626,1],[627,175],[628,182],[629,183],[945,184],[951,185],[950,186],[949,187],[946,1],[948,188],[947,1],[936,189],[953,190],[952,189],[956,191],[604,1],[958,192],[959,193],[961,194],[963,195],[964,195],[965,195],[962,1],[968,196],[966,197],[967,197],[969,1],[970,1],[939,1],[971,198],[972,199],[973,1],[974,200],[975,201],[984,202],[358,1],[954,203],[955,1],[985,204],[942,1],[986,205],[989,206],[987,206],[988,207],[1040,208],[1042,209],[1043,210],[1041,211],[1044,212],[1045,213],[1046,214],[1047,215],[1048,216],[1049,217],[1050,218],[1051,219],[1052,220],[1053,221],[1054,194],[932,1],[957,1],[1055,1],[1056,1],[1062,222],[1059,223],[1058,224],[1061,225],[1057,1],[1060,223],[944,1],[1063,199],[807,226],[808,226],[809,227],[766,228],[810,229],[811,230],[812,231],[761,1],[764,232],[762,1],[763,1],[813,233],[814,234],[815,235],[816,236],[817,237],[818,238],[819,238],[821,239],[820,240],[822,241],[823,242],[824,243],[806,244],[765,1],[825,245],[826,246],[827,247],[860,248],[828,249],[829,250],[830,251],[784,252],[794,253],[783,252],[804,254],[775,255],[774,256],[803,199],[797,257],[802,258],[777,259],[791,260],[776,261],[800,262],[772,263],[771,199],[801,264],[773,265],[778,266],[779,1],[782,266],[769,1],[805,267],[795,268],[786,269],[787,270],[789,271],[785,272],[788,273],[798,199],[780,274],[781,275],[790,276],[770,277],[793,268],[792,266],[796,1],[799,278],[831,279],[832,280],[833,281],[835,282],[836,283],[837,284],[838,285],[839,285],[840,286],[841,1],[842,287],[844,288],[843,289],[845,290],[846,291],[847,292],[848,293],[849,294],[850,295],[851,296],[852,297],[853,298],[854,299],[855,300],[856,301],[857,302],[858,303],[859,304],[1064,199],[1065,1],[1066,1],[1072,305],[1067,1],[1073,1],[1076,1],[84,1],[1077,1],[934,1],[1080,306],[1079,307],[935,1],[753,85],[1085,308],[1084,309],[1087,308],[1086,310],[1083,311],[1081,1],[1082,312],[82,1],[85,313],[86,85],[1088,314],[1089,1],[1106,315],[1131,316],[1132,317],[1107,318],[1110,318],[1129,316],[1130,316],[1120,316],[1119,319],[1117,316],[1112,316],[1125,316],[1123,316],[1127,316],[1111,316],[1124,316],[1128,316],[1113,316],[1114,316],[1126,316],[1108,316],[1115,316],[1116,316],[1118,316],[1122,316],[1133,320],[1121,316],[1109,316],[1146,321],[1145,1],[1140,320],[1142,322],[1141,320],[1134,320],[1135,320],[1137,320],[1139,320],[1143,322],[1144,322],[1136,322],[1138,322],[933,323],[1148,324],[1147,174],[940,325],[1149,153],[1150,1],[1151,1],[1152,1],[1155,326],[1154,327],[1153,328],[595,329],[594,1],[1157,330],[960,1],[1173,331],[1171,332],[1170,333],[1161,334],[1162,335],[1169,336],[1163,335],[1164,334],[1165,334],[1166,334],[1167,337],[1160,338],[1168,333],[1159,1],[1172,339],[1174,340],[1175,1],[1176,341],[1177,1],[1178,342],[1035,343],[992,1],[994,344],[993,345],[998,346],[1033,347],[1030,348],[1032,349],[995,348],[996,350],[1000,350],[999,351],[997,352],[1031,353],[1029,348],[1034,354],[1027,1],[1028,1],[1001,355],[1006,348],[1008,348],[1003,348],[1004,355],[1010,348],[1011,356],[1002,348],[1007,348],[1009,348],[1005,348],[1025,357],[1024,348],[1026,358],[1020,348],[1022,348],[1021,348],[1017,348],[1023,359],[1018,348],[1019,360],[1012,348],[1013,348],[1014,348],[1015,348],[1016,348],[991,1],[1158,1],[768,1],[977,1],[372,361],[373,362],[83,1],[744,363],[740,1],[741,1],[739,1],[742,1],[743,1],[745,1],[737,1],[738,364],[746,365],[596,366],[453,1],[983,367],[1101,368],[1102,369],[1100,370],[1103,371],[1097,372],[1098,373],[1099,374],[1093,372],[1094,372],[1096,375],[1095,372],[1092,376],[438,377],[439,378],[343,379],[344,1],[341,380],[339,381],[345,382],[340,383],[342,384],[212,1],[371,385],[355,386],[356,386],[366,387],[367,388],[369,389],[368,390],[370,391],[351,392],[347,393],[352,386],[353,394],[350,395],[349,393],[348,393],[346,396],[354,397],[359,96],[357,96],[361,398],[364,399],[360,400],[365,401],[362,398],[363,96],[191,402],[190,96],[193,403],[192,402],[98,404],[166,405],[165,406],[164,407],[103,408],[119,409],[117,410],[118,411],[104,412],[189,413],[89,1],[93,1],[91,414],[92,1],[96,415],[99,1],[116,416],[94,1],[111,417],[97,418],[112,419],[115,420],[113,420],[110,421],[90,1],[95,1],[114,422],[120,423],[108,1],[102,424],[100,425],[109,426],[106,427],[105,427],[101,428],[107,429],[185,430],[179,431],[172,432],[171,433],[180,434],[181,420],[173,435],[186,436],[167,437],[168,438],[169,439],[188,440],[170,433],[174,436],[175,441],[182,442],[183,418],[184,441],[187,420],[176,439],[121,443],[177,444],[178,445],[163,446],[161,447],[162,447],[125,447],[126,447],[127,447],[128,447],[129,447],[130,447],[131,447],[132,447],[133,447],[153,447],[134,447],[135,447],[136,447],[137,447],[138,447],[139,447],[160,447],[140,447],[141,447],[142,447],[143,447],[158,447],[144,447],[159,447],[145,447],[156,447],[157,447],[146,447],[147,447],[148,447],[154,447],[155,447],[149,447],[150,447],[151,447],[152,447],[124,448],[123,449],[122,450],[88,1],[520,1],[981,451],[982,452],[1091,1],[597,453],[672,454],[671,455],[670,456],[673,1],[749,457],[748,1],[752,458],[750,459],[593,460],[751,461],[674,462],[747,463],[736,464],[676,465],[677,465],[678,465],[679,465],[680,465],[733,465],[681,465],[682,465],[683,465],[684,465],[685,465],[686,465],[687,465],[688,465],[732,465],[689,465],[690,465],[691,465],[692,465],[693,465],[694,465],[695,465],[696,465],[697,465],[698,465],[699,465],[700,465],[735,465],[701,465],[702,465],[703,465],[704,465],[705,465],[706,465],[707,465],[708,465],[709,465],[710,465],[711,465],[712,465],[734,465],[713,465],[714,465],[715,465],[716,465],[717,465],[718,465],[719,465],[720,465],[721,465],[722,465],[723,465],[724,465],[725,465],[726,465],[727,465],[728,465],[729,465],[730,465],[731,465],[675,466],[668,467],[669,468],[1090,469],[1071,470],[1068,199],[1070,471],[1069,1],[1074,1],[1075,472],[980,473],[1105,474],[1104,475],[1037,476],[1036,477],[990,478],[1156,1],[1038,1],[1078,307],[81,479],[80,1],[660,480],[646,481],[657,482],[630,1],[648,483],[647,1],[649,484],[655,485],[654,1],[631,1],[652,1],[653,1],[639,486],[634,1],[633,487],[632,1],[641,1],[658,488],[637,486],[640,1],[645,1],[638,486],[635,487],[636,1],[642,487],[643,487],[656,1],[651,1],[659,1],[650,1],[661,1],[644,1],[662,489],[663,489],[667,490],[664,491],[665,492],[666,491],[78,1],[79,1],[13,1],[15,1],[14,1],[2,1],[16,1],[17,1],[18,1],[19,1],[20,1],[21,1],[22,1],[23,1],[3,1],[24,1],[25,1],[4,1],[26,1],[30,1],[27,1],[28,1],[29,1],[31,1],[32,1],[33,1],[5,1],[34,1],[35,1],[36,1],[37,1],[6,1],[41,1],[38,1],[39,1],[40,1],[42,1],[7,1],[43,1],[48,1],[49,1],[44,1],[45,1],[46,1],[47,1],[8,1],[53,1],[50,1],[51,1],[52,1],[54,1],[9,1],[55,1],[56,1],[57,1],[59,1],[58,1],[60,1],[61,1],[10,1],[62,1],[63,1],[64,1],[11,1],[65,1],[66,1],[67,1],[68,1],[69,1],[1,1],[70,1],[71,1],[12,1],[75,1],[73,1],[77,1],[72,1],[76,1],[74,1],[211,1],[1039,493],[448,494],[449,495],[452,496],[447,1],[450,494],[451,494],[446,1]],"latestChangedDtsFile":"./dist/index.d.ts","version":"5.8.3"} \ No newline at end of file diff --git a/grafast/ruru/bundle/ruru.min.js b/grafast/ruru/bundle/ruru.min.js new file mode 100644 index 0000000000..2623e60dfd --- /dev/null +++ b/grafast/ruru/bundle/ruru.min.js @@ -0,0 +1,2 @@ +/*! For license information please see ruru.min.js.LICENSE.txt */ +var RuruBundle;(()=>{var e,t,n={48:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(5198),o=n(8255),i=n(2114);function a(e){return{Field(t){const n=e.getType(),a=t.selectionSet;if(n)if((0,i.zf)((0,i.MR)(n))){if(a){const i=t.name.value,s=(0,r.N)(n);e.reportError(new o.eO(`Field "${i}" must not have a selection since type "${s}" has no subfields.`,a))}}else if(!a){const i=t.name.value,a=(0,r.N)(n);e.reportError(new o.eO(`Field "${i}" of type "${a}" must have a selection of subfields. Did you mean "${i} { ... }"?`,t))}}}}},62:e=>{"use strict";e.exports=function(e,t){return t||(t={}),e?(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),t.hash&&(e+=t.hash),/["'() \t\n]|(%20)/.test(e)||t.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e):e}},79:e=>{"use strict";e.exports="data:font/woff2;base64,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"},99:(e,t,n)=>{"use strict";n.d(t,{R:()=>a});var r=n(8255),o=n(2455),i=n(5261);function a(e){return{OperationDefinition(t){if("subscription"===t.operation){const n=e.getSchema(),a=n.getSubscriptionType();if(a){const s=t.name?t.name.value:null,l=Object.create(null),c=e.getDocument(),u=Object.create(null);for(const e of c.definitions)e.kind===o.b.FRAGMENT_DEFINITION&&(u[e.name.value]=e);const{fields:d}=(0,i._)(n,u,l,a,t.selectionSet);if(d.size>1){const t=[...d.values()].slice(1).flat();e.reportError(new r.eO(null!=s?`Subscription "${s}" must select only one top level field.`:"Anonymous Subscription must select only one top level field.",t))}for(const t of d.values())t[0].name.value.startsWith("__")&&e.reportError(new r.eO(null!=s?`Subscription "${s}" must not select an introspection top level field.`:"Anonymous Subscription must not select an introspection top level field.",t))}}}}}},190:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},i=Object.assign||function(e){for(var t=1;t0?""+a+s:a;var c=r.type.toString(),d={kind:"VariableDefinition",variable:{kind:"Variable",name:{kind:"Name",value:t}},type:(0,l.parseType)(c),directives:[]},f=void 0,p={};if(null!=n){var h=(0,l.visit)(n,{Variable:function(t){var n,r=t.name.value,o=(n=r,(e.props.definition.variableDefinitions||[]).find((function(e){return e.variable.name.value===n})));if(p[r]=p[r]+1||1,o)return o.defaultValue}}),m="NonNullType"===d.type.kind?i({},d,{type:d.type.type}):d;f=i({},m,{defaultValue:h})}else f=d;var g=Object.entries(p).filter((function(e){var t=o(e,2);return t[0],t[1]<2})).map((function(e){var t=o(e,2),n=t[0];return t[1],n}));if(f){var v=e.props.setArgValue(f,!1);if(v){var y=v.definitions.find((function(t){return!!(t.operation&&t.name&&t.name.value&&e.props.definition.name&&e.props.definition.name.value)&&t.name.value===e.props.definition.name.value})),b=[].concat(u(y.variableDefinitions||[]),[f]).filter((function(e){return-1===g.indexOf(e.variable.name.value)})),A=i({},y,{variableDefinitions:b}),w=v.definitions.map((function(e){return y===e?A:e})),x=i({},v,{definitions:w});e.props.onCommit(x)}}}()},style:a.styles.actionButtonStyle},s.createElement("span",{style:{color:a.colors.variable}},"$")):null;return s.createElement("div",{style:{cursor:"pointer",minHeight:"16px",WebkitUserSelect:"none",userSelect:"none"},"data-arg-name":r.name,"data-arg-type":c.name,className:"graphiql-explorer-"+r.name},s.createElement("span",{style:{cursor:"pointer"},onClick:function(t){var r=!n;r?e.props.addArg(!0):e.props.removeArg(!0),e.setState({displayArgActions:r})}},(0,l.isInputObjectType)(c)?s.createElement("span",null,n?this.props.styleConfig.arrowOpen:this.props.styleConfig.arrowClosed):s.createElement(A,{checked:!!n,styleConfig:this.props.styleConfig}),s.createElement("span",{style:{color:a.colors.attribute},title:r.description,onMouseEnter:function(){null!=n&&e.setState({displayArgActions:!0})},onMouseLeave:function(){return e.setState({displayArgActions:!1})}},r.name,x(r)?"*":"",": ",h," ")," "),d||s.createElement("span",null)," ")}}]),t}(s.PureComponent),I=function(e){function t(){var e,n,r;d(this,t);for(var o=arguments.length,i=Array(o),a=0;a0&&e.setState({displayFieldActions:!0})},onMouseLeave:function(){return e.setState({displayFieldActions:!1})}},(0,l.isObjectType)(f)?s.createElement("span",null,d?this.props.styleConfig.arrowOpen:this.props.styleConfig.arrowClosed):null,(0,l.isObjectType)(f)?null:s.createElement(A,{checked:!!d,styleConfig:this.props.styleConfig}),s.createElement("span",{style:{color:c.colors.property},className:"graphiql-explorer-field-view"},r.name),this.state.displayFieldActions?s.createElement("button",{type:"submit",className:"toolbar-button",title:"Extract selections into a new reusable fragment",onClick:function(t){t.preventDefault(),t.stopPropagation();var n=f.name+"Fragment",r=(m||[]).filter((function(e){return e.name.value.startsWith(n)})).length;r>0&&(n=""+n+r);var o=d&&d.selectionSet?d.selectionSet.selections:[],a=[{kind:"FragmentSpread",name:{kind:"Name",value:n},directives:[]}],s={kind:"FragmentDefinition",name:{kind:"Name",value:n},typeCondition:{kind:"NamedType",name:{kind:"Name",value:f.name}},directives:[],selectionSet:{kind:"SelectionSet",selections:o}},l=e._modifyChildSelections(a,!1);if(l){var c=i({},l,{definitions:[].concat(u(l.definitions),[s])});e.props.onCommit(c)}else console.warn("Unable to complete extractFragment operation")},style:i({},c.styles.actionButtonStyle)},s.createElement("span",null,"…")):null),d&&p.length?s.createElement("div",{style:{marginLeft:16},className:"graphiql-explorer-graphql-arguments"},p.map((function(t){return s.createElement(N,{key:t.name,parentField:r,arg:t,selection:d,modifyArguments:e._setArguments,getDefaultScalarArgValue:e.props.getDefaultScalarArgValue,makeDefaultArg:e.props.makeDefaultArg,onRunOperation:e.props.onRunOperation,styleConfig:e.props.styleConfig,onCommit:e.props.onCommit,definition:e.props.definition})}))):null);if(d&&((0,l.isObjectType)(f)||(0,l.isInterfaceType)(f)||(0,l.isUnionType)(f))){var v=(0,l.isUnionType)(f)?{}:f.getFields(),y=d&&d.selectionSet?d.selectionSet.selections:[];return s.createElement("div",{className:"graphiql-explorer-"+r.name},g,s.createElement("div",{style:{marginLeft:16}},m?m.map((function(t){var n=o.getType(t.typeCondition.name.value),r=t.name.value;return n?s.createElement(L,{key:r,fragment:t,selections:y,modifySelections:e._modifyChildSelections,schema:o,styleConfig:e.props.styleConfig,onCommit:e.props.onCommit}):null})):null,Object.keys(v).sort().map((function(n){return s.createElement(t,{key:n,field:v[n],selections:y,modifySelections:e._modifyChildSelections,schema:o,getDefaultFieldNames:a,getDefaultScalarArgValue:e.props.getDefaultScalarArgValue,makeDefaultArg:e.props.makeDefaultArg,onRunOperation:e.props.onRunOperation,styleConfig:e.props.styleConfig,onCommit:e.props.onCommit,definition:e.props.definition,availableFragments:e.props.availableFragments})})),(0,l.isInterfaceType)(f)||(0,l.isUnionType)(f)?o.getPossibleTypes(f).map((function(t){return s.createElement(I,{key:t.name,implementingType:t,selections:y,modifySelections:e._modifyChildSelections,schema:o,getDefaultFieldNames:a,getDefaultScalarArgValue:e.props.getDefaultScalarArgValue,makeDefaultArg:e.props.makeDefaultArg,onRunOperation:e.props.onRunOperation,styleConfig:e.props.styleConfig,onCommit:e.props.onCommit,definition:e.props.definition})})):null))}return g}}]),t}(s.PureComponent),P={kind:"Document",definitions:[{kind:"OperationDefinition",operation:"query",variableDefinitions:[],name:{kind:"Name",value:"MyQuery"},directives:[],selectionSet:{kind:"SelectionSet",selections:[]}}]},j=null;var V={buttonStyle:{fontSize:"1.2em",padding:"0px",backgroundColor:"white",border:"none",margin:"5px 0px",height:"40px",width:"100%",display:"block",maxWidth:"none"},actionButtonStyle:{padding:"0px",backgroundColor:"white",border:"none",margin:"0px",maxWidth:"none",height:"15px",width:"15px",display:"inline-block",fontSize:"smaller"},explorerActionsStyle:{margin:"4px -8px -8px",paddingLeft:"8px",bottom:"0px",width:"100%",textAlign:"center",background:"none",borderTop:"none",borderBottom:"none"}},q=function(e){function t(){var e,n,r;d(this,t);for(var o=arguments.length,a=Array(o),s=0;s{"use strict";var r=n(1761),o={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,i,a,s,l,c,u=!1;t||(t={}),n=t.debug||!1;try{if(a=r(),s=document.createRange(),l=document.getSelection(),(c=document.createElement("span")).textContent=e,c.ariaHidden="true",c.style.all="unset",c.style.position="fixed",c.style.top=0,c.style.clip="rect(0, 0, 0, 0)",c.style.whiteSpace="pre",c.style.webkitUserSelect="text",c.style.MozUserSelect="text",c.style.msUserSelect="text",c.style.userSelect="text",c.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var i=o[t.format]||o.default;window.clipboardData.setData(i,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(c),s.selectNodeContents(c),l.addRange(s),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");u=!0}catch(r){n&&console.error("unable to copy using execCommand: ",r),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(r){n&&console.error("unable to copy using clipboardData: ",r),n&&console.error("falling back to prompt"),i=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(i,e)}}finally{l&&("function"==typeof l.removeRange?l.removeRange(s):l.removeAllRanges()),c&&document.body.removeChild(c),a()}return u}},354:(e,t,n)=>{"use strict";n.d(t,{u:()=>o});var r=n(8255);function o(e){const t=e.getSchema(),n=Object.create(null),o=t?{query:t.getQueryType(),mutation:t.getMutationType(),subscription:t.getSubscriptionType()}:{};return{SchemaDefinition:i,SchemaExtension:i};function i(t){var i;const a=null!==(i=t.operationTypes)&&void 0!==i?i:[];for(const t of a){const i=t.operation,a=n[i];o[i]?e.reportError(new r.eO(`Type for ${i} already defined in the schema. It cannot be redefined.`,t)):a?e.reportError(new r.eO(`There can be only one ${i} type in schema.`,[a,t])):n[i]=t}return!1}}},377:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var r=n(6758),o=n.n(r),i=n(935),a=n.n(i)()(o());a.push([e.id,'.mermaid {\n background-color: white;\n}\n.explainExpandedContainer {\n position: absolute;\n top: 1rem;\n left: 1rem;\n bottom: 1rem;\n right: 1rem;\n border-radius: 1rem;\n background-color: white;\n border: 1px solid black;\n box-shadow: rgba(0, 0, 0, 0.8) 3px 3px 15px;\n overflow: hidden;\n padding: 1rem;\n z-index: 1000;\n font-family: "Roboto", sans-serif;\n}\n.explainExpandedTitle {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 2rem;\n text-align: center;\n font-size: 1.5rem;\n}\n.explainExpandedCloseContainer {\n position: absolute;\n top: 0;\n right: 0;\n}\n.explainExpandedCloseButton {\n font-size: 2rem;\n padding: 0;\n margin: 0;\n background: transparent;\n border: none;\n outline: none;\n width: 2rem;\n height: 2rem;\n}\n.explainExpandedMain {\n overflow: auto;\n position: absolute;\n top: 2rem;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n.errorPopup {\n position: absolute;\n top: 10px;\n right: 10px;\n background-color: #ff9999;\n color: black;\n border: 1px solid black;\n border-radius: 7;\n width: 20rem;\n max-width: 90vw;\n}\n.errorPopupClose {\n float: right;\n background: transparent;\n border: none;\n margin-left: 10px;\n margin-bottom: 10px;\n}\n.errorPopupError {\n padding: 10px;\n}\n\n.explain-plan,\n.explain-sql {\n font-size: 0.75rem;\n white-space: pre-wrap;\n}\n',""]);const s=a},424:(e,t,n)=>{"use strict";n.d(t,{UY:()=>d,XO:()=>u,YR:()=>l,oP:()=>c,sP:()=>s});var r=n(5198),o=n(3217),i=n(9762),a=n(2455);const s=Object.freeze({});function l(e,t,n=i.aD){const l=new Map;for(const e of Object.values(a.b))l.set(e,u(t,e));let c,d,f,p,h=Array.isArray(e),m=[e],g=-1,v=[];const y=[],b=[];let A=e;do{g++;const e=g===m.length,a=e&&0!==v.length;if(e){if(f=0===b.length?void 0:y[y.length-1],d=p,p=b.pop(),a)if(h){d=d.slice();let e=0;for(const[t,n]of v){const r=t-e;null===n?(d.splice(r,1),e++):d[r]=n}}else{d=Object.defineProperties({},Object.getOwnPropertyDescriptors(d));for(const[e,t]of v)d[e]=t}g=c.index,m=c.keys,v=c.edits,h=c.inArray,c=c.prev}else{if(f=p?h?g:m[g]:void 0,d=p?p[f]:A,null==d)continue;p&&y.push(f)}let u;if(!Array.isArray(d)){var w,x;(0,i.Ll)(d)||(0,o.U)(!1,`Invalid AST Node: ${(0,r.N)(d)}.`);const n=e?null===(w=l.get(d.kind))||void 0===w?void 0:w.leave:null===(x=l.get(d.kind))||void 0===x?void 0:x.enter;if(u=null==n?void 0:n.call(t,d,f,p,y,b),u===s)break;if(!1===u){if(!e){y.pop();continue}}else if(void 0!==u&&(v.push([f,u]),!e)){if(!(0,i.Ll)(u)){y.pop();continue}d=u}}var E;void 0===u&&a&&v.push([f,d]),e?y.pop():(c={inArray:h,index:g,keys:m,edits:v,prev:c},h=Array.isArray(d),m=h?d:null!==(E=n[d.kind])&&void 0!==E?E:[],g=-1,v=[],p&&b.push(p),p=d)}while(void 0!==c);return 0!==v.length&&(A=v[v.length-1][1]),A}function c(e){const t=new Array(e.length).fill(null),n=Object.create(null);for(const r of Object.values(a.b)){let o=!1;const i=new Array(e.length).fill(void 0),a=new Array(e.length).fill(void 0);for(let t=0;t{"use strict";n.d(t,{A:()=>s,I:()=>a});var r=n(3217),o=n(8255),i=n(5881);function a(e){if(null!=e||(0,r.U)(!1,"Must provide name."),"string"==typeof e||(0,r.U)(!1,"Expected name to be a string."),0===e.length)throw new o.eO("Expected name to be a non-empty string.");for(let t=1;t{!function(e){"use strict";function t(t){return function(n,r){var o=r.line,i=n.getLine(o);function a(t){for(var a,s=r.ch,l=0;;){var c=s<=0?-1:i.lastIndexOf(t[0],s-1);if(-1!=c){if(1==l&&ct.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));if(/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"keyword"!=r.type||"import"!=r.string)return null;for(var o=n,i=Math.min(t.lastLine(),n+10);o<=i;++o){var a=t.getLine(o).indexOf(";");if(-1!=a)return{startCh:r.end,end:e.Pos(o,a)}}}var o,i=n.line,a=r(i);if(!a||r(i-1)||(o=r(i-2))&&o.end.line==i-1)return null;for(var s=a.end;;){var l=r(s.line+1);if(null==l)break;s=l.end}return{from:t.clipPos(e.Pos(i,a.startCh+1)),to:s}})),e.registerHelper("fold","include",(function(t,n){function r(n){if(nt.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));return/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"meta"==r.type&&"#include"==r.string.slice(0,8)?r.start+8:void 0}var o=n.line,i=r(o);if(null==i||null!=r(o-1))return null;for(var a=o;null!=r(a+1);)++a;return{from:e.Pos(o,i+1),to:t.clipPos(e.Pos(a))}}))}(n(1448))},656:(e,t,n)=>{"use strict";n.d(t,{C:()=>i});var r=n(1306),o=n(8255);function i(e){const t=[];let n=Object.create(null);return{ObjectValue:{enter(){t.push(n),n=Object.create(null)},leave(){const e=t.pop();e||(0,r.V)(!1),n=e}},ObjectField(t){const r=t.name.value;n[r]?e.reportError(new o.eO(`There can be only one input field named "${r}".`,[n[r],t.name])):n[r]=t.name}}}},698:(e,t,n)=>{"use strict";function r(e){if(null==e)return Object.create(null);if(null===Object.getPrototypeOf(e))return e;const t=Object.create(null);for(const[n,r]of Object.entries(e))t[n]=r;return t}n.d(t,{z:()=>r})},792:(e,t,n)=>{"use strict";n.d(t,{h:()=>r});const r=function(e,t){return e instanceof t}},825:(e,t,n)=>{"use strict";n.d(t,{P:()=>l,W:()=>c});var r=n(4833),o=n(6382),i=n(8255),a=n(2455),s=n(7274);function l(e){return{...c(e),Argument(t){const n=e.getArgument(),a=e.getFieldDef(),s=e.getParentType();if(!n&&a&&s){const n=t.name.value,l=a.args.map((e=>e.name)),c=(0,o.x)(n,l);e.reportError(new i.eO(`Unknown argument "${n}" on field "${s.name}.${a.name}".`+(0,r.a)(c),t))}}}}function c(e){const t=Object.create(null),n=e.getSchema(),l=n?n.getDirectives():s.rc;for(const e of l)t[e.name]=e.args.map((e=>e.name));const c=e.getDocument().definitions;for(const e of c)if(e.kind===a.b.DIRECTIVE_DEFINITION){var u;const n=null!==(u=e.arguments)&&void 0!==u?u:[];t[e.name.value]=n.map((e=>e.name.value))}return{Directive(n){const a=n.name.value,s=t[a];if(n.arguments&&s)for(const t of n.arguments){const n=t.name.value;if(!s.includes(n)){const l=(0,o.x)(n,s);e.reportError(new i.eO(`Unknown argument "${n}" on directive "@${a}".`+(0,r.a)(l),t))}}return!1}}}},855:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},935:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var s=0;s0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=i),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),o&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=o):u[4]="".concat(o)),t.push(u))}},t}},1051:e=>{"use strict";e.exports="data:font/woff2;base64,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"},1070:(e,t,n)=>{"use strict";function r(e){return"object"==typeof e&&null!==e}n.d(t,{Z:()=>r})},1085:(e,t,n)=>{"use strict";e.exports=n(3335)},1098:(e,t,n)=>{"use strict";const{deleteProperty:r}=Reflect,o=n(5858),i=n(2685),a=e=>"object"==typeof e&&null!==e||"function"==typeof e,s=e=>{if(!o(e))throw new TypeError("Object keys must be strings or symbols");if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)},l=(e,t)=>t&&"function"==typeof t.split?t.split(e):"symbol"==typeof e?[e]:Array.isArray(e)?e:((e,t,n)=>{const r=(e=>Array.isArray(e)?e.flat().map(String).join(","):e)(t?((e,t)=>{if("string"!=typeof e||!t)return e;let n=e+";";return void 0!==t.arrays&&(n+=`arrays=${t.arrays};`),void 0!==t.separator&&(n+=`separator=${t.separator};`),void 0!==t.split&&(n+=`split=${t.split};`),void 0!==t.merge&&(n+=`merge=${t.merge};`),void 0!==t.preservePaths&&(n+=`preservePaths=${t.preservePaths};`),n})(e,t):e);s(r);const o=u.cache.get(r)||n();return u.cache.set(r,o),o})(e,t,(()=>((e,t={})=>{const n=t.separator||".",r="/"!==n&&t.preservePaths;if("string"==typeof e&&!1!==r&&/\//.test(e))return[e];const o=[];let i="";const a=e=>{let t;""!==e.trim()&&Number.isInteger(t=Number(e))?o.push(t):o.push(e)};for(let t=0;t{if(s(t),void 0===n)r(e,t);else if(o&&o.merge){const r="function"===o.merge?o.merge:Object.assign;r&&i(e[t])&&i(n)?e[t]=r(e[t],n):e[t]=n}else e[t]=n;return e},u=(e,t,n,r)=>{if(!t||!a(e))return e;const o=l(t,r);let i=e;for(let e=0;e{u.cache=new Map},e.exports=u},1262:(e,t,n)=>{"use strict";function r(e){const t={descriptions:!0,specifiedByUrl:!1,directiveIsRepeatable:!1,schemaDescription:!1,inputValueDeprecation:!1,...e},n=t.descriptions?"description":"",r=t.specifiedByUrl?"specifiedByURL":"",o=t.directiveIsRepeatable?"isRepeatable":"";function i(e){return t.inputValueDeprecation?e:""}return`\n query IntrospectionQuery {\n __schema {\n ${t.schemaDescription?n:""}\n queryType { name }\n mutationType { name }\n subscriptionType { name }\n types {\n ...FullType\n }\n directives {\n name\n ${n}\n ${o}\n locations\n args${i("(includeDeprecated: true)")} {\n ...InputValue\n }\n }\n }\n }\n\n fragment FullType on __Type {\n kind\n name\n ${n}\n ${r}\n fields(includeDeprecated: true) {\n name\n ${n}\n args${i("(includeDeprecated: true)")} {\n ...InputValue\n }\n type {\n ...TypeRef\n }\n isDeprecated\n deprecationReason\n }\n inputFields${i("(includeDeprecated: true)")} {\n ...InputValue\n }\n interfaces {\n ...TypeRef\n }\n enumValues(includeDeprecated: true) {\n name\n ${n}\n isDeprecated\n deprecationReason\n }\n possibleTypes {\n ...TypeRef\n }\n }\n\n fragment InputValue on __InputValue {\n name\n ${n}\n type { ...TypeRef }\n defaultValue\n ${i("isDeprecated")}\n ${i("deprecationReason")}\n }\n\n fragment TypeRef on __Type {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n ofType {\n kind\n name\n }\n }\n }\n }\n }\n }\n }\n }\n `}n.d(t,{I:()=>r})},1298:(e,t,n)=>{!function(e){"use strict";var t={},n=/[^\s\u00a0]/,r=e.Pos,o=e.cmpPos;function i(e){var t=e.search(n);return-1==t?0:t}function a(e,t){var n=e.getMode();return!1!==n.useInnerComments&&n.innerMode?e.getModeAt(t):n}e.commands.toggleComment=function(e){e.toggleComment()},e.defineExtension("toggleComment",(function(e){e||(e=t);for(var n=this,o=1/0,i=this.listSelections(),a=null,s=i.length-1;s>=0;s--){var l=i[s].from(),c=i[s].to();l.line>=o||(c.line>=o&&(c=r(o,0)),o=l.line,null==a?n.uncomment(l,c,e)?a="un":(n.lineComment(l,c,e),a="line"):"un"==a?n.uncomment(l,c,e):n.lineComment(l,c,e))}})),e.defineExtension("lineComment",(function(e,o,s){s||(s=t);var l,c,u=this,d=a(u,e),f=u.getLine(e.line);if(null!=f&&(l=e,c=f,!/\bstring\b/.test(u.getTokenTypeAt(r(l.line,0)))||/^[\'\"\`]/.test(c))){var p=s.lineComment||d.lineComment;if(p){var h=Math.min(0!=o.ch||o.line==e.line?o.line+1:o.line,u.lastLine()+1),m=null==s.padding?" ":s.padding,g=s.commentBlankLines||e.line==o.line;u.operation((function(){if(s.indent){for(var t=null,o=e.line;oa.length)&&(t=a)}for(o=e.line;of||l.operation((function(){if(0!=s.fullLines){var t=n.test(l.getLine(f));l.replaceRange(p+d,r(f)),l.replaceRange(u+p,r(e.line,0));var a=s.blockCommentLead||c.blockCommentLead;if(null!=a)for(var h=e.line+1;h<=f;++h)(h!=f||t)&&l.replaceRange(a+p,r(h,0))}else{var m=0==o(l.getCursor("to"),i),g=!l.somethingSelected();l.replaceRange(d,i),m&&l.setSelection(g?i:l.getCursor("from"),i),l.replaceRange(u,e)}}))}}else(s.lineComment||c.lineComment)&&0!=s.fullLines&&l.lineComment(e,i,s)})),e.defineExtension("uncomment",(function(e,o,i){i||(i=t);var s,l=this,c=a(l,e),u=Math.min(0!=o.ch||o.line==e.line?o.line:o.line-1,l.lastLine()),d=Math.min(e.line,u),f=i.lineComment||c.lineComment,p=[],h=null==i.padding?" ":i.padding;e:if(f){for(var m=d;m<=u;++m){var g=l.getLine(m),v=g.indexOf(f);if(v>-1&&!/comment/.test(l.getTokenTypeAt(r(m,v+1)))&&(v=-1),-1==v&&n.test(g))break e;if(v>-1&&n.test(g.slice(0,v)))break e;p.push(g)}if(l.operation((function(){for(var e=d;e<=u;++e){var t=p[e-d],n=t.indexOf(f),o=n+f.length;n<0||(t.slice(o,o+h.length)==h&&(o+=h.length),s=!0,l.replaceRange("",r(e,n),r(e,o)))}})),s)return!0}var y=i.blockCommentStart||c.blockCommentStart,b=i.blockCommentEnd||c.blockCommentEnd;if(!y||!b)return!1;var A=i.blockCommentLead||c.blockCommentLead,w=l.getLine(d),x=w.indexOf(y);if(-1==x)return!1;var E=u==d?w:l.getLine(u),C=E.indexOf(b,u==d?x+y.length:0),k=r(d,x+1),T=r(u,C+1);if(-1==C||!/comment/.test(l.getTokenTypeAt(k))||!/comment/.test(l.getTokenTypeAt(T))||l.getRange(k,T,"\n").indexOf(b)>-1)return!1;var S=w.lastIndexOf(y,e.ch),N=-1==S?-1:w.slice(0,e.ch).indexOf(b,S+y.length);if(-1!=S&&-1!=N&&N+b.length!=e.ch)return!1;N=E.indexOf(b,o.ch);var D=E.slice(o.ch).lastIndexOf(y,N-o.ch);return S=-1==N||-1==D?-1:o.ch+D,(-1==N||-1==S||S==o.ch)&&(l.operation((function(){l.replaceRange("",r(u,C-(h&&E.slice(C-h.length,C)==h?h.length:0)),r(u,C+b.length));var e=x+y.length;if(h&&w.slice(e,e+h.length)==h&&(e+=h.length),l.replaceRange("",r(d,x),r(d,e)),A)for(var t=d+1;t<=u;++t){var o=l.getLine(t),i=o.indexOf(A);if(-1!=i&&!n.test(o.slice(0,i))){var a=i+A.length;h&&o.slice(a,a+h.length)==h&&(a+=h.length),l.replaceRange("",r(t,i),r(t,a))}}})),!0)}))}(n(1448))},1306:(e,t,n)=>{"use strict";function r(e,t){if(!Boolean(e))throw new Error(null!=t?t:"Unexpected invariant triggered.")}n.d(t,{V:()=>r})},1427:e=>{"use strict";e.exports="data:font/woff2;base64,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"},1435:e=>{"use strict";e.exports="data:font/woff;base64,d09GRgABAAAAACNoAA8AAAAAMZAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAADMAAABAAiECUEdQT1MAAAGMAAAAIAAAACBEdkx1R1NVQgAAAawAAACuAAABIPeB00hPUy8yAAACXAAAAFYAAABgcXSo31NUQVQAAAK0AAAAKgAAAC55kWzdY21hcAAAAuAAAADFAAABEjB9MLtnYXNwAAADqAAAAAgAAAAIAAAAEGdseWYAAAOwAAAb2AAAJs7kVKgLaGVhZAAAH4gAAAA2AAAANhL1JvtoaGVhAAAfwAAAAB8AAAAkAzn+KGhtdHgAAB/gAAABBwAAAnLQ1V1sbG9jYQAAIOgAAAE+AAABPvRh6ottYXhwAAAiKAAAABwAAAAgAQwCg25hbWUAACJEAAABCwAAAkgzWFNlcG9zdAAAI1AAAAAWAAAAIP+fADN42h3DMQqAMBQFsLwPbuLuLO5eUMSxY2/cUkJEOQCPsjld4vaKb4pfE32KKOxrGIPTBHIAAAEAAAAKABwAHgABREZMVAAIAAQAAAAA//8AAAAAAAB42k3Ng25FURRF0XFRNyiC2rYZ1ogb1rb5+lH9xddTNytzB3tBhELTVuXOzq+uad3P3F1oPb47PNd6sftwpfX19Ook3Ewmo1UK2awI0f7uxYN8xARyFNvw5C0oF7FCvRKR0kAtIoGg1KAho8ZEQY2/nup/nuTbEwX1BATyhc7AhEmRWKOe36VqCSLLgeYAyW/vOCKkYpFKk/xrLJenUq16jdr1GBBcBo3zDtcUF4EAAHjaY2Bh2ck4gYGVgYHlC8skBgaGSRCaaTWDEVMFkObm4GQFUgwsQLkGBiTgHOLixHCAuYD5P/uevzUMDBwlzC8SGBjm378ONEuWNRGoRIGBFQARghFeAAB42mNgBEIOIGZgEAGTMgxM5ekZJSAmAxMDM4hkZGKcAKT2MDAAADlQA1MAAHjaLcm1QRgAEAXQRy7WxW2BtPHg7jYH7u7uDhVuFVQwBmzBBvS4nXzFMwQ+Cgn37LlrfPVWeB0dMRDTMRuLsRsHcRQncRY3NzdEY3TH6F0zH0uxH4dxHKdxft/A5SGXU5eTXG6CBF999xMpPGGeZqTeYZoWy1akazWtTbsOC75Zs+G3eX/89U+iJFWSpWjQqEmFWpVq1KlWL1e/AXnyFRg0pE+GTpm6ZOmWrUeOXsNGjBpTaNySIhOKlZg0pVSZ8luXDDdmAAAAAAEAAf//AA942p1aB1hTSde+M/cmsVAMEIIgIlKisoASIBZ6syFBUCAoVbGBFAUpyiqgIB2RZsUOqCC6frq7+u1i77p9V7dYtuj23iQZ/zOTLPL15/mfNZs7586cOXPOe8qcwAlc5LM2IVl0meM5CTeO8+S4aHupvZPUXoosxA5jnb28vL29PJ0dxoolbOjp7a30sLSUWYglvCd9lLFpkcKI/h/4A9rrqHOMmbldxiz32Xbu1qbDLa19YxQxKQpNWsG40aPH0Y/o8p9vLRMlPt2HBUtra8tOcah6mnr4cLGNuY3DiMDlPstzTclvdKqdiwuHufEcJ1SIUkC6YRwXaM87ICVyQPY8v0h3P/MI6vsE9Z3S7UZXHqEksleU8rQdfY8fwGnOwToVrBvOWVAegZ7Ozg4OUqWHH+Y99U/e5hYm2AFO6zEawynEktGY3zC3PPLrT5UrFqhUW4pvfVJU9p2m+XQSqUPRC7qr583MC5qzJRGVLct5gUgsPJPwlbxFJGglEWW3xStEKfbq8jTN2lmmRqHVHIe4fpDAhknABUrtZfb6jwR1IUIwXqV9wJtYCG+TifVEXi1KqYMVHbBiqH5FClgAhJTaw4dfqPujuxsP6ca1utWiFN2rOOxpO93hNsfxjww76Pl7wf+9+EfkNvLQfoM8yG1RSnX/36qrhdnVMH/Lsy/5hzDfnEoEhwfDKVSWlqAKL7rsoWv6qc1pF6LmxDf5Nuwgy0Qp2mUxR6rnBfiunqx4eS/P1YE93gIZm4EHzw0FKUFEczAIWGR9d/cwPPqq7gsc8AHI+CIu1VXqLKmUvrACxOZgEGjuwLthTy/egR+NAUEO5kpzc8EposOFF+MnPX8ijHjeaX/ET/ffpabEd2a2VGWM1nrxN2xz6poDdO4g0lz+GDdIV2YgBRrNy6i2kBv2ovqyJDZIMlS892v0LTIatlc4I0/feiBSFyFK6Q+w3fHRWnyc6g9zCc++FKJF+ZwpZwOyWWCKZOzlaUZxbSYZAfrB0hFmSg8zITrnUWfHpzk5n3Z0Pso51drT07qzq6cVH3uDvP6348jv3TdR0OkTpO89ZI4cyT3yLfz3ENnTPR6DnPEg5zDOchAKvb1VgDh4dAD4CfyeeY2JV/pSmmJerfxhZ28PSv4N2fIvpxerdCe9yvL3no8jSJRyB7i9D9xigZsxJ6c2V3oIsr/4IMaXOisqu/wnklV8u+PSUVTx4UdJW6JeEqV8+fb9PVcTyDNRCqnT7fLeXLC3BrQYCfySmHdxgcAD8CPBR7pJlGBqJtzs9xRuNjfDLD+YtUqPs2glYvam/xZdQW7I/SwpRKeukC5y8AzqBct/j6W6ct1InKlrxJ9QS7nD6hJYPUS/B6IccG8vce9DK1HOSWyu+xZLeTAPPgGz62G2PcwGdKXZS+y9EMgkQxH4TZl2E/5Al83PammpFQKaKBZfJ3F8kXgYaGMkQ7RYkCj8MMUyMgQmGrD4ot3knXdH7fyhgsxC5yaHhEz2DgoSbLU1vd82OJZaL/tbLX66CX0bMkkZGqqcFAJ8twIubAWlARf6cEeZsfAnHyuWWYDPUE3j+OZracuuNTVdX7rsRtPm6srNmys3C8qK3zr2/lG7+feD+/+orrz2zhvXr7/11jXge43ECbaie5yUs6PyslBq4K2QSqQIgqzU0sDaGeVM3RFf0zFLc7Kye3knOha7yWV88eyyjZ4rRPd052ZFAPv2P+uKyDCZZKXu8fIA3W++06++XXV6AegcjQAtBoIWRbCPhEYSIdBMV9ctSmnrh6A42H9g5mrwGRr/kBImepqpUMdRsclQ9Mv9o+bDiQmYdEbRyeY5wlVwyFd2oyGJ/cGD1ksMsQo+LE7xqcL1fm/qvXSX06DJoaDJ0UyPcokzyyQQqNgxVfLnasUdi0+ER4aVzS46JkMPia3RSyURZaERM8/Nb7+fl/uJoJzsk+E+oaNj05kuV/cMP7+KXw/u7m/41z2YPp8HNhXAR7+pAvZ4Yd/by7I+2JPaNzMqsGpOeacRMUE/mO4umV0XGDnjvKAs//ngwf6aAN+siRO7zmw6st/VI3OaL/fs2V+RUyzmxBwds6zExoiNWbZhY0zHBv3TsQXHDcpiPF0fiOyRHNnjK6ivfx/qSyfHMMtcopTW/kuUG8scbDXPuDOfYOMRbMx0z8YCcOcH4hjPmTNkwZlF/yWa8Y5kCdqO3AfHtNMtPT0tO7p6WnBBg+Y/RrXvyAM0lkrAMg+TQMQkYlmBjSUctckkGBfDedlpWbCA0546RWpJVTd6mR5W6OsPgAmwluUHtnbIP51uKDvdNhjLme4kNAKlQZZD9APBQZBrS3mxLpEXj9Qe279/P162dy+OaW8HLgadAJdh/8TVko1ZXGbj4UziRhiPhl2MmH0of+QFX4gfR7zwOW0u0hGer9H5ols4n1hvacR2eFRTI3GgvFgUZbyMGW8W8djYlJ1ABuMdwFsKccqexm1LM9kILJE5eDlz1OG8zE0wxBS5udSbuT7u1v707PvD35JnP+pwen1YW+ehzrbpdaKU3Ubk9z+fceTXIfv2DUHDEfcbMjLaDakm/GjT7TNDeTvtw6F/v9ncPYtKwaI2k8KEndDGkLmtqMfqMyXsKVXCpuwZS6SY6/hgSW9lT8/h6t5vfkcbjEtubcBiIjT1jOAjtCdHHG1CWt3Tc0QnIy8CxwSOY7hzgDONFUNYNJOD4pTPUScDpkogeZuxY8WtaJxZvo4kfr++vPiz7Ts+La4q/pEkr9s4q1H4IvuXq9+Rn3xLaoKQ6ccP0ZT9+8mVhx+Tn0NqSvyQ8XdXf8l+7nelYmfqd4CHHaSNavzZBeoxjM7r6bqfGT2LWp3RBQN9D6O3UPwyushAv8LoxyhqGH2YgX6f0Yczi1K6qYHuw+g9HGeYP8lA/4Qb8A/xewb+Yq4NDeCCUU311CHULp/B3JuGHGwo+vibuktQ8U0zFHxn4FQzYO0KNms4rKYxl8JTimC6E3wwT0KFsSRM17YN/7BNuNYGgZ6fg3pIFEa9JPIfPUCmjxok8x+iBnBB/yVqYOEIOvBvyyCSiRqBV+D/KIYQ10zmCXPgDGNhN4Ue6go32MwPKyHVMwRZWspZNY7vTI/Ndi9IbzwbH7ZNewopRpFv2m8vCtlZmts6q4nMy3VOjHjB19fFZ//Xh4qfnEpvKr6/te6VYk9XTbY6YxtEXB2c1o3VEaawG6QA0JcHuBjLhvyaseoAcgClz4x3q6SJEUcZmTZaWOIaQ37kuVpY7/Q86qQgOUIKe7mTAinRDvRbE/Ehagfgo9U1owuXcXeQrhmnt7bGBOIkWKM0xD8BYpoRXc0rWdBXITnP3yCrijqwef8p9F0F8XsFjX3xqTAZjYeY+K5t/wyBnzZO+yWsvEY0lAeTwJizhcinlDnYD1Tc/PPi3UsJGuP3fvSR7l2owtGPt4kJtro7KSLLMdAxyMMnsLt9y5bnNTnRuNusllnPnLNpbVsLWGU2yNoBOJAxPdFUifRlmjnYBVQmbDCyNR831ZY86CUxfWjGu4rwBP+x3lbCI17k4afbZijfwtETTapi+HDwClvKkXlFCPOKXbo5zCvYTgz/IXr8S/5D9pL/t1rcVNvFx4b8P5MXSMFqaOYHRiwurof9s2B/28E1CkBxUIniSCVxxDcrTkWlBG5R5/TlZb2Wl9usive/vrWD/Lh7LzIW5YcE5ajc039/+9YfmWGuq3w1B5Dv4yfIZ9+/5DjYMxD2nDSwJ42TwvOahTmGoWRBf/SS6t3kp86t1/3jVS2r817LWnRyXcS+6Kj486L8feTik8fkwgGN7yrXsMw/br39e7q7KicwFHY0nAp0PRN2NOWauQJdWeAdeMP2Zm9m6988K6JvwGfynj0WAqCSsubGM7nAXZS8uSXTiUJhwmwwqAL2wyo3jIhmo0am2r7Uc+h4xbTZycZmNvNfjH/pRlxPQ0ZeZrpTxOyQkTbqpYLSt6EYeerukO8nuJrWGS2MyZlbGY2M0Ij92vqKu7ffvGCvObRpX28I1c4pEiuEie5yHs8rOslonn79o5IcHFR/PYFIUgkVDk9feTozqjJqemPBzBev5yb0zrJRNS5Sl6lfObbSYnnoquDqZbkFnSkvie7Oa89aXhthJHlB05yzsW/p9LBc/ymBpYn7DpWo8hLX5tRseTpZLnpY9upikCgGJIoXvGg1FyhHYjHViLfKGWMqjpmZnD92hKhdjOwqxliZ2donrV7reyS0LHuc4OWsNV90o8IyoP1geA1yRibvTvGNJFpy6u+0KqwAS3jBfcCJ8xiMvYEoCBo3VMcq/Zc5w6XhgoDXrdgROj8kPzR2qfuy2M0n4/wLj2U1v50ds0WTEbPosLKucNvmytapm0X3/KYs9nSaGeTu4+kwufpaW9rphqiqJ9VFZzeNnVw4V7M2UHci8I2Wo5dfO5XfvJTq/xDIFQI4mABSMXn+qVg3SKMcLLFSyZucLM9v2bj61MwF4T9tK7ldULk+M2t1X+7ij+bOD9mnLqxYt+I19ChKE5ceoMyeOi+8cUVBkVReFJOwzt9jyvIJjpHzZsTQ3T8mwRB5L3HOVNdiblBSkAxOGmacirZvVIKx1fvko6aAqqxljRE79oTGrnJJnVf1amIDcvnSOmPNOPKOTHRp1SvkQX9p6ppw5zEBCeqco9MLXkgNd3Ybb+u+sqO8GkmQ3dFhRkIVrQNJHP9E8DLc/Bio9AFBQi9HYO7RWA4o69te1ymPiJq2MmZU51jzXcMsRuCQPkF5oLE/WyaMz9jk6x05QYfwxRXHAyzNAkKtYzQcr79Xgr1NoQazN3j+oEiH7EdjimdEd7N3w/9wu0QHdR+I/As08Wv8yC8LCv0FPIH3yxfdO0l6vnlMDr32Kor95gmKfkV749IfeXl/8Ctzfjh37occOFEx7Goh2HJSGltV9tLB1vRCD8lOC/RHaviEBS6uDvUz6o7w9XXax3OCLKRrzR3a6wGl3bA+RfCEaGnJ0I9oQHDDCsSDa+qVwm+pI37IOTDZd+rUePU4kus71rzTxkrwTCVLyfVgP9OqoeODJqAe9CT5XrwuH3ctPakByVIg3iSI7jO+SjcMuuXl1JskzhjYK9DnIaMiyzNH5XblR42amrF+bvfM4hWupHefYJu4YY603Gx6fm/RN6SW/BoVsBBCydJPteGONNoeBxs+E2wh2jawaOsP0TdMUNLqPOW5z9KMftc+fsUa/8MRpenjUWQXSalFSmT7yWQ/DfmI7DrL73bu/xnWXwJEqsFuU5jNBmNeAg//AFA/rAco7+XJwiO72l7LvBQdFbpnzoaakqyfLH7QlE5Xd5bnN4bs2hUWED9xzNzZ2X31av9Fma6+WaGFV0X3pvikubosXZy2om1W0cz0wvAJzmHJ4RS0doERkxxecJI7RmbsytFsmO8+RB68fE56K6vvDF0LOLUZq++MYbwQ7M4b+iNgKpHUgonvJXWSQb3F5FWi2i78pqu376oEFKlt9pzmZu9sMy0xkj+uVfPHkS5FHWRcZftiIT6ZUSMMHV5ibCqhsesMiRNGsh4Jy2FmUkN0lkogTdMM8byTgdM+vxN/ujq21rvz7q267AnrZ5dWqlYJSvKIPG162ubrQ4bL+EvghKab7t8iv/uHvnOl+uUFoPcbZL5gB3s4Ddb7v48HTM8vZ++bP98/L27+Fo2ycsPihvDW9llxOYr0peuPxJTcF5Qevtku4zQ9JYvyo92dZi5WZ24PLXCImT3eY6Kje/6JisPfFgNamB4ThfHsVuMhyGVOCmcTPBB2FfJ/bAfhilWITyUPIxN2rPKrLt+0OS5407w1y682bLmxfM19YbxEqLXA2DbmwMY3r9946/AlDzz+1qHDf1ZU/n5w308VVJMR0Fv4E+w0jLOGHQ12gegq/0dPlfK/6gomhasn24S1xn+VTB3WzbF+en2XYFsjMh1RbmWWoYse8Fu8nfaH4SQ2wNkK+NJQY2CkZIwpUrGCf2w1qvpuwZ43OzNTvJfHeslHCbYbybPtZ77OOtqNP9R5Zmc6L9xTkIWGtVJZg8HqK8EiozjFgNUlYHKqCzOVUoyZcQxFAmCA2Yd3OrIr962G9ofvTB/XOVnlnrd88sas0KnGh0uCAQQ/kZ9e+abQiJRYomZz8uBlZJNx6BmXXXg0zRgbV11ctjFxxwJiZnHn6vt9VIIMskCYLkziTFjUgGAsB+CAvymc2ANSIan/ypW+i9G6g+RiWuCSBQtVvLSTHEojZw+ijUuESf4777Uv0Ukc8M78hsvVmZOn2ehSN+iW2+Cfs6j1o+GEOaCz0dRj9DpSMt2xcz6/NuOuwrUu1jZHrGySru3ZveP8gs78bdBUTDFJ7czPRCMay4huZ9ODchNSJEM7jHJ6FuMdutziTVKe9cW8wDJrYRc3g2VYK56aBzM9UrwZqhwvldTwyJAuWDoFbG9bWmwqX5e6bauPotnBcfjIYB+fAKu9IwN8fIKsTZydBNvF5MHZJ+SXvNysIsT/eBbZL1r1Wm/yigMLU3fHay3Jt2k74xYeWJF0/PUciBssP4jVUA/GsKp8+1juL6ro8QC15eEAVeIwQN3JqAxnjEOqnkPgAJVyMFBbuAEq5WCg7uQGYhfjYDaIA9MSoy4ZRGVVKqNG6KlmlMpqFkaN0lNTKJVlc0adp6f6Uwx9CPnAUvBikZHdN9BAJhMsdVl4iy7BekKnnQy924hue5/o1C3AFwvaaWfYCdCRzWIqvVUCIEQ0gtrLRIB23N1J/O3GTg714vO1Zc5KD/7S006ZaGV4hZGRqAbzQ2nHmlZ8zNetDH1X2naVIJGzM0sY1Njy1zuGDUPnLlcTX5ydlyAeZiKpdpkk2BKLtL/P5GOvao/IxzSXupZu2xt+VfuLOliu74Hy/cwvudDBJbLhGjHQaMbGy/aFzwnMik6uV29viC/0j4rbu6ztg9VFn8inTMlwVkQfr3n3qkKR7uuxuf/I4Z82UB0a+qugw42Gm4RG+2HwLnjDdmVv8gw3iUb6hlY6JI510A13ulDQlPl/66N3H479N510RDJlqEPw/Pf9dMRVk3n850Ipu63IqYea4H+XHHhWQfvx/LSuxPYlS+pn+2+rSG6Mbm2fkbTcb3VUVEteSHJ3blxeyGih1Dh7Q7BcPi1rSWpuhItdUFpUeltY7vjYEKXK2Wpk0JKdq9YeWmZt6eASTHHUT2LglLaGyoi1MAy3EDTQcMAz0TtyMnPB3M5waBTYRwSRUHRjZpyLYFsdubB/s5VQkt0QpjMxMt0sAyY81wPaxqKHrMtjA5oDfKnM5bwJRhDhRApzGMpNsATvahpiN23ik/W3PH3tyGR33t5DN2b1OW8fOwl7IR8V+mJ1LDqiIktXNKzEI2s+rzqsRqUr6ld6jworrqLVqD+Jh50+hicJQyOSIyV8kMDpw7oCunYjMKfwx24riOXXaM4S8oREIiuUfVruJNtp49BCLj4V8oq1Q3g+XbdM9HEVaSW25LUVj+5EyoqQWw+yQUdQRB04G7eOaARPVi3IOEdOCdoa1L2Qg7WQQoXkEnPmBrzeDRDFiwkvkbAKUxqx0inEwX/itLCje4jRlQp0/HJ5V16CxMhoKCp/YZK2LG+hZDg8V7h4EM3EUekWI8OifhR/3LIdtU3bymdMbdLuHlO60bF4a80KsybdmMhQOX/brmmTw7qm2uXmW/ED6keY2wXaNxPdA82rBt09De5jgg2VOgMvg9rg27pEpWID3AU/3CVti/OyS9o6b0r2wfT952PjW1+NjWpLVa3WzM/zc0xN8FkRslhYcvnVANG9iDW+C9oybIzmnd0Z11mh7kKB968j9+tppTXk7lcfP8uAnwYXtUaPsfdocok+Ue7vB7jfRm/wIOU45u0DGZ12WQdKU2gODvxcT7vN2CJue1JXQpSmyN9/fdLCrKZV6AtiffduSseKQ28v/kKu3p6N8smuVTkVyF175rfCXE1WctWFrcm7E46RK7dJOomn6NSAX8eK3gU72nEuLP9SBRlcTaGQs+pMLtHXYwh8QQ4flVQhxXVNN5evvlUuaqiurVkt1G2urEWN15evvomkgrBPEAQ5X/bF9kNfrkUlkqtnTt7EGzcI18+cgm+h9PGOg0B/jViFaM+HkRkydCuM9wtB74G9pKCJdhZPoTaPHojFTv8rpw62ncJ99NhZ+an8TG2gfyC/dXJ4y9aUdabytQsb62dMzrSzGzrST6Xysdpn5eM9xc/a2H4Mv7HYaLioBA9Zmkp+OvyVIc8KP3Uho9Rlxw/F6/PsO/Jv9Gl2QceJZVR3a0FW6gMizoLWlqH/A/GoHUB+4nLFYQA5AzaAvDQvYcgwo6EYQG5qQHXNmKbnqFYHW/LX/xXVZ8hcVquPoB3oQDdM62UVDZTwDzEvHNRDGWE2CO08MhmfmLCqbVana1FObYmlrkfkXDlvY9WGdVtzOu/e2XIh1XP5jiXJO8ncUWPkpmbh9bmiqDgXc4sIPzy7LX7xe6ePnX1wh1iL8FA0FBmvu9+y5PU2zbzBv9pBxkobKHL/ta1giQ+qK6dGhZ5P2PVxbt7Hu9OOz4oKrgjb3Du3tshzXOa0EP3vgL6+2e7uN9+sOR5NM5bhd2G4CUm5QRkMxnI2NvwOC2Nzdj8cB+NEQJEFYMhcaQ7/HHjQEu/AU3Dz49Y/uHjvs/kHJwgiAX1x4D0sFs0icaJL2qe8uP9TPNwrvXSe9kd+aHBR7jRtssFLNHA2AThCrzsWfNEB/dcrkgbXEMt9ePYX9KIUVwMXpZu12eM3zCqDi1JZucjnv1+V4EyoilTw4569JIi5bfRMqANyswTNpHVKGlPq8+yLOtzUHspIN7dIpYfabfsktbu7etKkue7uczmMWkkb/pMnnDG7jXjAIvZ3GtQy5oN+VPfGMWEJUvm+tuSghJCwhISwkIQJs9DspECnWRNJDap1iw1OxC8lBgelpAS5zXChEnagp7yEjxdLuGqOw2ZAOQyUYXw8yFyL6YxO0gZjAuMaMBzS3+MNtbjh5qrQq9CSdWaUhtJYJeWvOFq0j7ARue9UR2qcJcM7Oy3D1UmVroKtzmPpEV+59XLnOQtdVV6aMeQ2tIN0J5a3zU3x5/8JHVZ0jA7yGn4469U26cfkN344RwRTrknoFWL7qHYNczgeJIMeKTp4+OznvAYP0f1BV9wXjuO3Re1wjlbcDDq1EUn5raLHkNPlMJ/pT8l0aT/oGVVO9POb6Orvj7Lc/Pzc3P39RVIfN3dfX3c3n7++YeePRbb4TfEw9jc/g+yBY1QhISrv4GDxsIE/ZABJrMUc3yh+T5BwLXDS72G9ASecCZOE/XRguGTitKW5LfMdJ9kE2yWSipyFSQvnmY2Is3Kj5/1Q6MTvi9XsvHJegZ1OlBWK1WNIoYy+vcPfxQ9FpQNvR16tLxOV2pMCeMuj0cLnfIPEgdXMNvoZkkGS2w8+RfTJgjU1oANX94AAdGGivz9ViMTBkfRaCP5urgEBrm7+f33T8xl2Blvt4Lj/A+xlbMkAAQAAAAUAg3o9v/hfDzz1AAMH0AAAAADbCS13AAAAAN1Vrr7yK/wYCVAJYAAAAAYAAgAAAAAAAHjaY2BkYGDf87eGgYEz4ZP2tw2cAUARVDAbAJNYBl8AeNpNzwFHQ1EYBuBdBiQKQSkgCkwSoJIgIiMiDAEQgUAlQJTMdlWGAO0mWgsahknCxMZgmAliP2JSD+64eLyO8533c9LVVJZF3hkS0aJAh1UicgzokmWNDHkahDTT1WBCRrFarDDaEd8vMiSf6G7RYSmxs0SOiAFFsmSYYo0Zcuj8++CIW14YoxJ3Z/hhK7Hzhl+uWabJtjezaUmOLuesssF5nMe8sccFZfoUCTnjmQNeWeeTkHHqfBGyQ4tNDtllhbOEVkLICseUKdJjnga1hJArhlRY55R7SuwzyQl1aomOJguYCS6JuCPiicf4b2aDh5FUKviWM/SZdr6UvaAdzAXtf9Y0xqwAAAAAUABsAK0AxgDeAPYBGAExAVwBfgGwAdcB/wISAjECSAJeAooCtgLrAvwDHAMvA2EDkwObA6MDqwOzA8oD0gPaA+IEGwQjBCsEQQRJBFEEbAR0BHwEhASiBKoEsgTtBPUFHgVXBWMFbwV7BYcFkwWfBasFtgXBBdQF9QX9BjYGbAaMBqsGzQcBByoHNgdBB3kHgQezB7sH7Af5CAYISgiTCL4JCglJCYgJtgnxChEKPgpqCnIKkgrlCu0LHAtOC4kLwQvuDBcMWAyIDLsNAQ0MDRcNIg0tDTgNQw1ODVkNZA1vDXoNlw23DeMOEQ4eDisOXg6eDsgO/Q8zD4cP2hAXEF8QtRDyETwRahFyEXoRghGqEeQR7BIIEjUSPhJGEk4SgRKJEpESmxKqErIS2BLvEvgTExMiEzETXxNnAAB42mNgZGBgmMfExpDAUMHABeYhADMDCwAlBwGSeNqUkMVZhDEQQB/uXHHIDXd354Lrdd3ldxwKoJatgQKogG6QfIPrRl8yPkAl1xRRUFwB5EC4gFZywoXUcidcxAL3wsX0FdQLl9BYsCZcSleBX7iWkYIbNBdAdcGtsPbJMgYmZ9gkiBHHRTHEAIOM0MsT6a04IE4ExRoJbAIobRnWfzvYGCSfOKTtF/FwiWNg46Do0H5dTBym6KefGAmt4RGkjxAGGfpxMcjikOKMfiTSa5zOb2NvvOa9R+SJPNIEsBmljwGd/TTLHLDC0hN99vlm3fvJ/vdY6pP2ERFsHBK6AvUWPY+I0iPpkEMImwQmLg592neaPgxsYvSzzRobPC6cIRVmHgCRt1ftAHjaY2BmAIP/cxiMgBQjAxoAACqUAdIAAA=="},1448:function(e){e.exports=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),o=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),i=/Edge\/(\d+)/.exec(e),a=r||o||i,s=a&&(r?document.documentMode||6:+(i||o)[1]),l=!i&&/WebKit\//.test(e),c=l&&/Qt\/\d+\.\d+/.test(e),u=!i&&/Chrome\/(\d+)/.exec(e),d=u&&+u[1],f=/Opera\//.test(e),p=/Apple Computer/.test(navigator.vendor),h=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),m=/PhantomJS/.test(e),g=p&&(/Mobile\/\w+/.test(e)||navigator.maxTouchPoints>2),v=/Android/.test(e),y=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),b=g||/Mac/.test(t),A=/\bCrOS\b/.test(e),w=/win/i.test(t),x=f&&e.match(/Version\/(\d*\.\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(f=!1,l=!0);var E=b&&(c||f&&(null==x||x<12.11)),C=n||a&&s>=9;function k(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var T,S=function(e,t){var n=e.className,r=k(t).exec(n);if(r){var o=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(o?r[1]+o:"")}};function N(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function D(e,t){return N(e).appendChild(t)}function O(e,t,n,r){var o=document.createElement(e);if(n&&(o.className=n),r&&(o.style.cssText=r),"string"==typeof t)o.appendChild(document.createTextNode(t));else if(t)for(var i=0;i=t)return a+(t-i);a+=s-i,a+=n-a%n,i=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(P=function(e){try{e.select()}catch(e){}});var Y=function(){this.id=null,this.f=null,this.time=0,this.handler=U(this.onTimeout,this)};function W(e,t){for(var n=0;n=t)return r+Math.min(a,t-o);if(o+=i-r,r=i+1,(o+=n-o%n)>=t)return r}}var J=[""];function _(e){for(;J.length<=e;)J.push($(J)+" ");return J[e]}function $(e){return e[e.length-1]}function ee(e,t){for(var n=[],r=0;r"€"&&(e.toUpperCase()!=e.toLowerCase()||re.test(e))}function ie(e,t){return t?!!(t.source.indexOf("\\w")>-1&&oe(e))||t.test(e):oe(e)}function ae(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var se=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function le(e){return e.charCodeAt(0)>=768&&se.test(e)}function ce(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var o=(t+n)/2,i=r<0?Math.ceil(o):Math.floor(o);if(i==t)return e(i)?t:n;e(i)?n=i:t=i+r}}var de=null;function fe(e,t,n){var r;de=null;for(var o=0;ot)return o;i.to==t&&(i.from!=i.to&&"before"==n?r=o:de=o),i.from==t&&(i.from!=i.to&&"before"!=n?r=o:de=o)}return null!=r?r:de}var pe=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,n=/[LRr]/,r=/[Lb1n]/,o=/[1n]/;function i(e,t,n){this.level=e,this.from=t,this.to=n}return function(a,s){var l,c="ltr"==s?"L":"R";if(0==a.length||"ltr"==s&&!e.test(a))return!1;for(var u=a.length,d=[],f=0;f-1&&(r[t]=o.slice(0,i).concat(o.slice(i+1)))}}}function be(e,t){var n=ve(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),o=0;o0}function Ee(e){e.prototype.on=function(e,t){ge(this,e,t)},e.prototype.off=function(e,t){ye(this,e,t)}}function Ce(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function ke(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Te(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){Ce(e),ke(e)}function Ne(e){return e.target||e.srcElement}function De(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),b&&e.ctrlKey&&1==t&&(t=3),t}var Oe,Ie,Le=function(){if(a&&s<9)return!1;var e=O("div");return"draggable"in e||"dragDrop"in e}();function Me(e){if(null==Oe){var t=O("span","​");D(e,O("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Oe=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&s<8))}var n=Oe?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Fe(e){if(null!=Ie)return Ie;var t=D(e,document.createTextNode("AخA")),n=T(t,0,1).getBoundingClientRect(),r=T(t,1,2).getBoundingClientRect();return N(e),!(!n||n.left==n.right)&&(Ie=r.right-n.right<3)}var Re,Pe=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var o=e.indexOf("\n",t);-1==o&&(o=e.length);var i=e.slice(t,"\r"==e.charAt(o-1)?o-1:o),a=i.indexOf("\r");-1!=a?(n.push(i.slice(0,a)),t+=a+1):(n.push(i),t=o+1)}return n}:function(e){return e.split(/\r\n?|\n/)},je=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Ve="oncopy"in(Re=O("div"))||(Re.setAttribute("oncopy","return;"),"function"==typeof Re.oncopy),qe=null;var Be={},Ue={};function ze(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Be[e]=t}function He(e){if("string"==typeof e&&Ue.hasOwnProperty(e))e=Ue[e];else if(e&&"string"==typeof e.name&&Ue.hasOwnProperty(e.name)){var t=Ue[e.name];"string"==typeof t&&(t={name:t}),(e=ne(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return He("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return He("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function Ye(e,t){t=He(t);var n=Be[t.name];if(!n)return Ye(e,"text/plain");var r=n(e,t);if(We.hasOwnProperty(t.name)){var o=We[t.name];for(var i in o)o.hasOwnProperty(i)&&(r.hasOwnProperty(i)&&(r["_"+i]=r[i]),r[i]=o[i])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)r[a]=t.modeProps[a];return r}var We={};function Ge(e,t){z(t,We.hasOwnProperty(e)?We[e]:We[e]={})}function Qe(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var o=t[r];o instanceof Array&&(o=o.concat([])),n[r]=o}return n}function Ze(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Xe(e,t,n){return!e.startState||e.startState(t,n)}var Ke=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function Je(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var o=n.children[r],i=o.chunkSize();if(t=e.first&&tn?it(n,Je(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?it(e.line,t):n<0?it(e.line,0):e}(t,Je(e,t.line).text.length)}function pt(e,t){for(var n=[],r=0;r=this.string.length},Ke.prototype.sol=function(){return this.pos==this.lineStart},Ke.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ke.prototype.next=function(){if(this.post},Ke.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ke.prototype.skipToEnd=function(){this.pos=this.string.length},Ke.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ke.prototype.backUp=function(e){this.pos-=e},Ke.prototype.column=function(){return this.lastColumnPos0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var o=function(e){return n?e.toLowerCase():e};if(o(this.string.substr(this.pos,e.length))==o(e))return!1!==t&&(this.pos+=e.length),!0},Ke.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ke.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ke.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ke.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ht=function(e,t){this.state=e,this.lookAhead=t},mt=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function gt(e,t,n,r){var o=[e.state.modeGen],i={};kt(e,t.text,e.doc.mode,n,(function(e,t){return o.push(e,t)}),i,r);for(var a=n.state,s=function(r){n.baseTokens=o;var s=e.state.overlays[r],l=1,c=0;n.state=!0,kt(e,t.text,s.mode,n,(function(e,t){for(var n=l;ce&&o.splice(l,1,e,o[l+1],r),l+=2,c=Math.min(e,r)}if(t)if(s.opaque)o.splice(n,l-n,e,"overlay "+t),l=n+2;else for(;ne.options.maxHighlightLength&&Qe(e.doc.mode,r.state),i=gt(e,t,r);o&&(r.state=o),t.stateAfter=r.save(!o),t.styles=i.styles,i.classes?t.styleClasses=i.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function yt(e,t,n){var r=e.doc,o=e.display;if(!r.mode.startState)return new mt(r,!0,t);var i=function(e,t,n){for(var r,o,i=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>a;--s){if(s<=i.first)return i.first;var l=Je(i,s-1),c=l.stateAfter;if(c&&(!n||s+(c instanceof ht?c.lookAhead:0)<=i.modeFrontier))return s;var u=H(l.text,null,e.options.tabSize);(null==o||r>u)&&(o=s-1,r=u)}return o}(e,t,n),a=i>r.first&&Je(r,i-1).stateAfter,s=a?mt.fromSaved(r,a,i):new mt(r,Xe(r.mode),i);return r.iter(i,t,(function(n){bt(e,n.text,s);var r=s.line;n.stateAfter=r==t-1||r%5==0||r>=o.viewFrom&&rt.start)return i}throw new Error("Mode "+e.name+" failed to advance stream.")}mt.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},mt.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},mt.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},mt.fromSaved=function(e,t,n){return t instanceof ht?new mt(e,Qe(e.mode,t.state),n,t.lookAhead):new mt(e,Qe(e.mode,t),n)},mt.prototype.save=function(e){var t=!1!==e?Qe(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ht(t,this.maxLookAhead):t};var xt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function Et(e,t,n,r){var o,i,a=e.doc,s=a.mode,l=Je(a,(t=ft(a,t)).line),c=yt(e,t.line,n),u=new Ke(l.text,e.options.tabSize,c);for(r&&(i=[]);(r||u.pose.options.maxHighlightLength?(s=!1,a&&bt(e,t,r,d.pos),d.pos=t.length,l=null):l=Ct(wt(n,d,r.state,f),i),f){var p=f[0].name;p&&(l="m-"+(l?p+" "+l:p))}if(!s||u!=l){for(;c=t:i.to>t);(r||(r=[])).push(new Nt(a,i.from,s?null:i.to))}}return r}(n,o,a),l=function(e,t,n){var r;if(e)for(var o=0;o=t:i.to>t)||i.from==t&&"bookmark"==a.type&&(!n||i.marker.insertLeft)){var s=null==i.from||(a.inclusiveLeft?i.from<=t:i.from0&&s)for(var b=0;bt)&&(!n||jt(n,i.marker)<0)&&(n=i.marker)}return n}function zt(e,t,n,r,o){var i=Je(e,t),a=St&&i.markedSpans;if(a)for(var s=0;s=0&&d<=0||u<=0&&d>=0)&&(u<=0&&(l.marker.inclusiveRight&&o.inclusiveLeft?at(c.to,n)>=0:at(c.to,n)>0)||u>=0&&(l.marker.inclusiveRight&&o.inclusiveLeft?at(c.from,r)<=0:at(c.from,r)<0)))return!0}}}function Ht(e){for(var t;t=qt(e);)e=t.find(-1,!0).line;return e}function Yt(e,t){var n=Je(e,t),r=Ht(n);return n==r?t:tt(r)}function Wt(e,t){if(t>e.lastLine())return t;var n,r=Je(e,t);if(!Gt(e,r))return t;for(;n=Bt(r);)r=n.find(1,!0).line;return tt(r)+1}function Gt(e,t){var n=St&&t.markedSpans;if(n)for(var r=void 0,o=0;ot.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var Jt=function(e,t,n){this.text=e,Ft(this,t),this.height=n?n(this):1};function _t(e){e.parent=null,Mt(e)}Jt.prototype.lineNo=function(){return tt(this)},Ee(Jt);var $t={},en={};function tn(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?en:$t;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function nn(e,t){var n=I("span",null,null,l?"padding-right: .1px":null),r={pre:I("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var o=0;o<=(t.rest?t.rest.length:0);o++){var i=o?t.rest[o-1]:t.line,a=void 0;r.pos=0,r.addToken=on,Fe(e.display.measure)&&(a=he(i,e.doc.direction))&&(r.addToken=an(r.addToken,a)),r.map=[],ln(i,r,vt(e,i,t!=e.display.externalMeasured&&tt(i))),i.styleClasses&&(i.styleClasses.bgClass&&(r.bgClass=R(i.styleClasses.bgClass,r.bgClass||"")),i.styleClasses.textClass&&(r.textClass=R(i.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Me(e.display.measure))),0==o?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(l){var s=r.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return be(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=R(r.pre.className,r.textClass||"")),r}function rn(e){var t=O("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function on(e,t,n,r,o,i,l){if(t){var c,u=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,r="",o=0;oc&&d.from<=c);f++);if(d.to>=u)return e(n,r,o,i,a,s,l);e(n,r.slice(0,d.to-c),o,i,null,s,l),i=null,r=r.slice(d.to-c),c=d.to}}}function sn(e,t,n,r){var o=!r&&n.widgetNode;o&&e.map.push(e.pos,e.pos+t,o),!r&&e.cm.display.input.needsContentAttribute&&(o||(o=e.content.appendChild(document.createElement("span"))),o.setAttribute("cm-marker",n.id)),o&&(e.cm.display.input.setUneditable(o),e.content.appendChild(o)),e.pos+=t,e.trailingSpace=!1}function ln(e,t,n){var r=e.markedSpans,o=e.text,i=0;if(r)for(var a,s,l,c,u,d,f,p=o.length,h=0,m=1,g="",v=0;;){if(v==h){l=c=u=s="",f=null,d=null,v=1/0;for(var y=[],b=void 0,A=0;Ah||x.collapsed&&w.to==h&&w.from==h)){if(null!=w.to&&w.to!=h&&v>w.to&&(v=w.to,c=""),x.className&&(l+=" "+x.className),x.css&&(s=(s?s+";":"")+x.css),x.startStyle&&w.from==h&&(u+=" "+x.startStyle),x.endStyle&&w.to==v&&(b||(b=[])).push(x.endStyle,w.to),x.title&&((f||(f={})).title=x.title),x.attributes)for(var E in x.attributes)(f||(f={}))[E]=x.attributes[E];x.collapsed&&(!d||jt(d.marker,x)<0)&&(d=w)}else w.from>h&&v>w.from&&(v=w.from)}if(b)for(var C=0;C=p)break;for(var T=Math.min(p,v);;){if(g){var S=h+g.length;if(!d){var N=S>T?g.slice(0,T-h):g;t.addToken(t,N,a?a+l:l,u,h+N.length==v?c:"",s,f)}if(S>=T){g=g.slice(T-h),h=T;break}h=S,u=""}g=o.slice(i,i=n[m++]),a=tn(n[m++],t.cm.options)}}else for(var D=1;Dn)return{map:e.measure.maps[o],cache:e.measure.caches[o],before:!0}}}function Rn(e,t,n,r){return Vn(e,jn(e,t),n,r)}function Pn(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&i.push((l.bottom+c.top)/2-n.top)}}i.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(i=function(e,t,n,r){var o,i=Un(t.map,n,r),l=i.node,c=i.start,u=i.end,d=i.collapse;if(3==l.nodeType){for(var f=0;f<4;f++){for(;c&&le(t.line.text.charAt(i.coverStart+c));)--c;for(;i.coverStart+u1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}(e.display.measure,o))}else{var p;c>0&&(d=r="right"),o=e.options.lineWrapping&&(p=l.getClientRects()).length>1?p["right"==r?p.length-1:0]:l.getBoundingClientRect()}if(a&&s<9&&!c&&(!o||!o.left&&!o.right)){var h=l.parentNode.getClientRects()[0];o=h?{left:h.left,right:h.left+cr(e.display),top:h.top,bottom:h.bottom}:Bn}for(var m=o.top-t.rect.top,g=o.bottom-t.rect.top,v=(m+g)/2,y=t.view.measure.heights,b=0;bt)&&(o=(i=l-s)-1,t>=l&&(a="right")),null!=o){if(r=e[c+2],s==l&&n==(r.insertLeft?"left":"right")&&(a=n),"left"==n&&0==o)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)r=e[2+(c-=3)],a="left";if("right"==n&&o==l-s)for(;c=0&&(n=e[o]).left==n.right;o--);return n}function Hn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=r.text.length?(l=r.text.length,c="before"):l<=0&&(l=0,c="after"),!s)return a("before"==c?l-1:l,"before"==c);function u(e,t,n){return a(n?e-1:e,1==s[t].level!=n)}var d=fe(s,l,c),f=de,p=u(l,d,"before"==c);return null!=f&&(p.other=u(l,f,"before"!=c)),p}function $n(e,t){var n=0;t=ft(e.doc,t),e.options.lineWrapping||(n=cr(e.display)*t.ch);var r=Je(e.doc,t.line),o=Zt(r)+Nn(e.display);return{left:n,right:n,top:o,bottom:o+r.height}}function er(e,t,n,r,o){var i=it(e,t,n);return i.xRel=o,r&&(i.outside=r),i}function tr(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return er(r.first,0,null,-1,-1);var o=nt(r,n),i=r.first+r.size-1;if(o>i)return er(r.first+r.size-1,Je(r,i).text.length,null,1,1);t<0&&(t=0);for(var a=Je(r,o);;){var s=ir(e,a,o,t,n),l=Ut(a,s.ch+(s.xRel>0||s.outside>0?1:0));if(!l)return s;var c=l.find(1);if(c.line==o)return c;a=Je(r,o=c.line)}}function nr(e,t,n,r){r-=Zn(t);var o=t.text.length,i=ue((function(t){return Vn(e,n,t-1).bottom<=r}),o,0);return{begin:i,end:o=ue((function(t){return Vn(e,n,t).top>r}),i,o)}}function rr(e,t,n,r){return n||(n=jn(e,t)),nr(e,t,n,Xn(e,t,Vn(e,n,r),"line").top)}function or(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function ir(e,t,n,r,o){o-=Zt(t);var i=jn(e,t),a=Zn(t),s=0,l=t.text.length,c=!0,u=he(t,e.doc.direction);if(u){var d=(e.options.lineWrapping?sr:ar)(e,t,n,i,u,r,o);s=(c=1!=d.level)?d.from:d.to-1,l=c?d.to:d.from-1}var f,p,h=null,m=null,g=ue((function(t){var n=Vn(e,i,t);return n.top+=a,n.bottom+=a,!!or(n,r,o,!1)&&(n.top<=o&&n.left<=r&&(h=t,m=n),!0)}),s,l),v=!1;if(m){var y=r-m.left=A.bottom?1:0}return er(n,g=ce(t.text,g,1),p,v,r-f)}function ar(e,t,n,r,o,i,a){var s=ue((function(s){var l=o[s],c=1!=l.level;return or(_n(e,it(n,c?l.to:l.from,c?"before":"after"),"line",t,r),i,a,!0)}),0,o.length-1),l=o[s];if(s>0){var c=1!=l.level,u=_n(e,it(n,c?l.from:l.to,c?"after":"before"),"line",t,r);or(u,i,a,!0)&&u.top>a&&(l=o[s-1])}return l}function sr(e,t,n,r,o,i,a){var s=nr(e,t,r,a),l=s.begin,c=s.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,d=null,f=0;f=c||p.to<=l)){var h=Vn(e,r,1!=p.level?Math.min(c,p.to)-1:Math.max(l,p.from)).right,m=hm)&&(u=p,d=m)}}return u||(u=o[o.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function lr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==qn){qn=O("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)qn.appendChild(document.createTextNode("x")),qn.appendChild(O("br"));qn.appendChild(document.createTextNode("x"))}D(e.measure,qn);var n=qn.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),N(e.measure),n||1}function cr(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O("span","xxxxxxxxxx"),n=O("pre",[t],"CodeMirror-line-like");D(e.measure,n);var r=t.getBoundingClientRect(),o=(r.right-r.left)/10;return o>2&&(e.cachedCharWidth=o),o||10}function ur(e){for(var t=e.display,n={},r={},o=t.gutters.clientLeft,i=t.gutters.firstChild,a=0;i;i=i.nextSibling,++a){var s=e.display.gutterSpecs[a].className;n[s]=i.offsetLeft+i.clientLeft+o,r[s]=i.clientWidth}return{fixedPos:dr(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function dr(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function fr(e){var t=lr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/cr(e.display)-3);return function(o){if(Gt(e.doc,o))return 0;var i=0;if(o.widgets)for(var a=0;a0&&(l=Je(e.doc,c.line).text).length==c.ch){var u=H(l,l.length,e.options.tabSize)-l.length;c=it(c.line,Math.max(0,Math.round((i-On(e.display).left)/cr(e.display))-u))}return c}function mr(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;rt)&&(o.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=o.viewTo)St&&Yt(e.doc,t)o.viewFrom?yr(e):(o.viewFrom+=r,o.viewTo+=r);else if(t<=o.viewFrom&&n>=o.viewTo)yr(e);else if(t<=o.viewFrom){var i=br(e,n,n+r,1);i?(o.view=o.view.slice(i.index),o.viewFrom=i.lineN,o.viewTo+=r):yr(e)}else if(n>=o.viewTo){var a=br(e,t,t,-1);a?(o.view=o.view.slice(0,a.index),o.viewTo=a.lineN):yr(e)}else{var s=br(e,t,t,-1),l=br(e,n,n+r,1);s&&l?(o.view=o.view.slice(0,s.index).concat(un(e,s.lineN,l.lineN)).concat(o.view.slice(l.index)),o.viewTo+=r):yr(e)}var c=o.externalMeasured;c&&(n=o.lineN&&t=r.viewTo)){var i=r.view[mr(e,t)];if(null!=i.node){var a=i.changes||(i.changes=[]);-1==W(a,n)&&a.push(n)}}}function yr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function br(e,t,n,r){var o,i=mr(e,t),a=e.display.view;if(!St||n==e.doc.first+e.doc.size)return{index:i,lineN:n};for(var s=e.display.viewFrom,l=0;l0){if(i==a.length-1)return null;o=s+a[i].size-t,i++}else o=s-t;t+=o,n+=o}for(;Yt(e.doc,n)!=n;){if(i==(r<0?0:a.length-1))return null;n+=r*a[i-(r<0?1:0)].size,i+=r}return{index:i,lineN:n}}function Ar(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo||l.to().line0?a:e.defaultCharWidth())+"px"}if(r.other){var s=n.appendChild(O("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=r.other.left+"px",s.style.top=r.other.top+"px",s.style.height=.85*(r.other.bottom-r.other.top)+"px"}}function Cr(e,t){return e.top-t.top||e.left-t.left}function kr(e,t,n){var r=e.display,o=e.doc,i=document.createDocumentFragment(),a=On(e.display),s=a.left,l=Math.max(r.sizerWidth,Ln(e)-r.sizer.offsetLeft)-a.right,c="ltr"==o.direction;function u(e,t,n,r){t<0&&(t=0),t=Math.round(t),r=Math.round(r),i.appendChild(O("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==n?l-e:n)+"px;\n height: "+(r-t)+"px"))}function d(t,n,r){var i,a,d=Je(o,t),f=d.text.length;function p(n,r){return Jn(e,it(t,n),"div",d,r)}function h(t,n,r){var o=rr(e,d,null,t),i="ltr"==n==("after"==r)?"left":"right";return p("after"==r?o.begin:o.end-(/\s/.test(d.text.charAt(o.end-1))?2:1),i)[i]}var m=he(d,o.direction);return function(e,t,n,r){if(!e)return r(t,n,"ltr",0);for(var o=!1,i=0;it||t==n&&a.to==t)&&(r(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",i),o=!0)}o||r(t,n,"ltr")}(m,n||0,null==r?f:r,(function(e,t,o,d){var g="ltr"==o,v=p(e,g?"left":"right"),y=p(t-1,g?"right":"left"),b=null==n&&0==e,A=null==r&&t==f,w=0==d,x=!m||d==m.length-1;if(y.top-v.top<=3){var E=(c?A:b)&&x,C=(c?b:A)&&w?s:(g?v:y).left,k=E?l:(g?y:v).right;u(C,v.top,k-C,v.bottom)}else{var T,S,N,D;g?(T=c&&b&&w?s:v.left,S=c?l:h(e,o,"before"),N=c?s:h(t,o,"after"),D=c&&A&&x?l:y.right):(T=c?h(e,o,"before"):s,S=!c&&b&&w?l:v.right,N=!c&&A&&x?s:y.left,D=c?h(t,o,"after"):l),u(T,v.top,S-T,v.bottom),v.bottom0?t.blinker=setInterval((function(){e.hasFocus()||Or(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Sr(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Dr(e))}function Nr(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Or(e))}),100)}function Dr(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(be(e,"focus",e,t),e.state.focused=!0,F(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),l&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),Tr(e))}function Or(e,t){e.state.delayingBlurEvent||(e.state.focused&&(be(e,"blur",e,t),e.state.focused=!1,S(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Ir(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=Math.max(0,t.scroller.getBoundingClientRect().top),o=t.lineDiv.getBoundingClientRect().top,i=0,l=0;l.005||m<-.005)&&(oe.display.sizerWidth){var v=Math.ceil(f/cr(e.display));v>e.display.maxLineLength&&(e.display.maxLineLength=v,e.display.maxLine=c.line,e.display.maxLineChanged=!0)}}}Math.abs(i)>2&&(t.scroller.scrollTop+=i)}function Lr(e){if(e.widgets)for(var t=0;t=a&&(i=nt(t,Zt(Je(t,l))-e.wrapper.clientHeight),a=l)}return{from:i,to:Math.max(a,i+1)}}function Fr(e,t){var n=e.display,r=lr(e.display);t.top<0&&(t.top=0);var o=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,i=Mn(e),a={};t.bottom-t.top>i&&(t.bottom=t.top+i);var s=e.doc.height+Dn(n),l=t.tops-r;if(t.topo+i){var u=Math.min(t.top,(c?s:t.bottom)-i);u!=o&&(a.scrollTop=u)}var d=e.options.fixedGutter?0:n.gutters.offsetWidth,f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-d,p=Ln(e)-n.gutters.offsetWidth,h=t.right-t.left>p;return h&&(t.right=t.left+p),t.left<10?a.scrollLeft=0:t.leftp+f-3&&(a.scrollLeft=t.right+(h?0:10)-p),a}function Rr(e,t){null!=t&&(Vr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Pr(e){Vr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function jr(e,t,n){null==t&&null==n||Vr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Vr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,qr(e,$n(e,t.from),$n(e,t.to),t.margin))}function qr(e,t,n,r){var o=Fr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});jr(e,o.scrollLeft,o.scrollTop)}function Br(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||ho(e,{top:t}),Ur(e,t,!0),n&&ho(e),lo(e,100))}function Ur(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function zr(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,vo(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Hr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Dn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+In(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var Yr=function(e,t,n){this.cm=n;var r=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),o=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=o.tabIndex=-1,e(r),e(o),ge(r,"scroll",(function(){r.clientHeight&&t(r.scrollTop,"vertical")})),ge(o,"scroll",(function(){o.clientWidth&&t(o.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,a&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Yr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var o=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+o)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var i=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+i)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},Yr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Yr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Yr.prototype.zeroWidthHack=function(){var e=b&&!h?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new Y,this.disableVert=new Y},Yr.prototype.enableZeroWidthBar=function(e,t,n){e.style.visibility="",t.set(1e3,(function r(){var o=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(o.right-1,(o.top+o.bottom)/2):document.elementFromPoint((o.right+o.left)/2,o.bottom-1))!=e?e.style.visibility="hidden":t.set(1e3,r)}))},Yr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Wr=function(){};function Gr(e,t){t||(t=Hr(e));var n=e.display.barWidth,r=e.display.barHeight;Qr(e,t);for(var o=0;o<4&&n!=e.display.barWidth||r!=e.display.barHeight;o++)n!=e.display.barWidth&&e.options.lineWrapping&&Ir(e),Qr(e,Hr(e)),n=e.display.barWidth,r=e.display.barHeight}function Qr(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Wr.prototype.update=function(){return{bottom:0,right:0}},Wr.prototype.setScrollLeft=function(){},Wr.prototype.setScrollTop=function(){},Wr.prototype.clear=function(){};var Zr={native:Yr,null:Wr};function Xr(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&S(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Zr[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),ge(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?zr(e,t):Br(e,t)}),e),e.display.scrollbars.addClass&&F(e.display.wrapper,e.display.scrollbars.addClass)}var Kr=0;function Jr(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Kr,markArrays:null},t=e.curOp,dn?dn.ops.push(t):t.ownsGroup=dn={ops:[t],delayedCallbacks:[]}}function _r(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new uo(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function eo(e){e.updatedDisplay=e.mustUpdate&&fo(e.cm,e.update)}function to(e){var t=e.cm,n=t.display;e.updatedDisplay&&Ir(t),e.barMeasure=Hr(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Rn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+In(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Ln(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function no(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(i.defaultView.innerHeight||i.documentElement.clientHeight)&&(o=!1),null!=o&&!m){var a=O("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Nn(e.display))+"px;\n height: "+(t.bottom-t.top+In(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(o),e.display.lineSpace.removeChild(a)}}}(t,function(e,t,n,r){var o;null==r&&(r=0),e.options.lineWrapping||t!=n||(n="before"==t.sticky?it(t.line,t.ch+1,"before"):t,t=t.ch?it(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t);for(var i=0;i<5;i++){var a=!1,s=_n(e,t),l=n&&n!=t?_n(e,n):s,c=Fr(e,o={left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-r,right:Math.max(s.left,l.left),bottom:Math.max(s.bottom,l.bottom)+r}),u=e.doc.scrollTop,d=e.doc.scrollLeft;if(null!=c.scrollTop&&(Br(e,c.scrollTop),Math.abs(e.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(zr(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return o}(t,ft(r,e.scrollToPos.from),ft(r,e.scrollToPos.to),e.scrollToPos.margin));var o=e.maybeHiddenMarkers,i=e.maybeUnhiddenMarkers;if(o)for(var a=0;a=e.display.viewTo)){var n=+new Date+e.options.workTime,r=yt(e,t.highlightFrontier),o=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(i){if(r.line>=e.display.viewFrom){var a=i.styles,s=i.text.length>e.options.maxHighlightLength?Qe(t.mode,r.state):null,l=gt(e,i,r,!0);s&&(r.state=s),i.styles=l.styles;var c=i.styleClasses,u=l.classes;u?i.styleClasses=u:c&&(i.styleClasses=null);for(var d=!a||a.length!=i.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),f=0;!d&&fn)return lo(e,e.options.workDelay),!0})),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),o.length&&oo(e,(function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==Ar(e))return!1;yo(e)&&(yr(e),t.dims=ur(e));var o=r.first+r.size,i=Math.max(t.visible.from-e.options.viewportMargin,r.first),a=Math.min(o,t.visible.to+e.options.viewportMargin);n.viewFroma&&n.viewTo-a<20&&(a=Math.min(o,n.viewTo)),St&&(i=Yt(e.doc,i),a=Wt(e.doc,a));var s=i!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;(function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=un(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=un(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,mr(e,n)))),r.viewTo=n})(e,i,a),n.viewOffset=Zt(Je(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var c=Ar(e);if(!s&&0==c&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var u=function(e){if(e.hasFocus())return null;var t=M(V(e));if(!t||!L(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=B(e).getSelection();r.anchorNode&&r.extend&&L(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return c>4&&(n.lineDiv.style.display="none"),function(e,t,n){var r=e.display,o=e.options.lineNumbers,i=r.lineDiv,a=i.firstChild;function s(t){var n=t.nextSibling;return l&&b&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var c=r.view,u=r.viewFrom,d=0;d-1&&(p=!1),mn(e,f,u,n)),p&&(N(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(ot(e.options,u)))),a=f.node.nextSibling}else{var h=xn(e,f,u,n);i.insertBefore(h,a)}u+=f.size}for(;a;)a=s(a)}(e,n.updateLineNumbers,t.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=M(q(e.activeElt))&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&L(document.body,e.anchorNode)&&L(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,n=t.defaultView.getSelection(),r=t.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),n.removeAllRanges(),n.addRange(r),n.extend(e.focusNode,e.focusOffset)}}(u),N(n.cursorDiv),N(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,s&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,lo(e,400)),n.updateLineNumbers=null,!0}function po(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Ln(e))r&&(t.visible=Mr(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Dn(e.display)-Mn(e),n.top)}),t.visible=Mr(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!fo(e,t))break;Ir(e);var o=Hr(e);wr(e),Gr(e,o),go(e,o),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ho(e,t){var n=new uo(e,t);if(fo(e,n)){Ir(e),po(e,n);var r=Hr(e);wr(e),Gr(e,r),go(e,r),n.finish()}}function mo(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",pn(e,"gutterChanged",e)}function go(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+In(e)+"px"}function vo(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=dr(t)-t.scroller.scrollLeft+e.doc.scrollLeft,o=t.gutters.offsetWidth,i=r+"px",a=0;a=105&&(i.wrapper.style.clipPath="inset(0px)"),i.wrapper.setAttribute("translate","no"),a&&s<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),l||n&&y||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,i.gutterSpecs=bo(o.gutters,o.lineNumbers),Ao(i),r.init(i)}uo.prototype.signal=function(e,t){xe(e,t)&&this.events.push(arguments)},uo.prototype.finish=function(){for(var e=0;ec.clientWidth,h=c.scrollHeight>c.clientHeight;if(o&&p||i&&h){if(i&&b&&l)e:for(var m=t.target,g=s.view;m!=c;m=m.parentNode)for(var v=0;v=0&&at(e,r.to())<=0)return n}return-1};var Do=function(e,t){this.anchor=e,this.head=t};function Oo(e,t,n){var r=e&&e.options.selectionsMayTouch,o=t[n];t.sort((function(e,t){return at(e.from(),t.from())})),n=W(t,o);for(var i=1;i0:l>=0){var c=ut(s.from(),a.from()),u=ct(s.to(),a.to()),d=s.empty()?a.from()==a.head:s.from()==s.head;i<=n&&--n,t.splice(--i,2,new Do(d?u:c,d?c:u))}}return new No(t,n)}function Io(e,t){return new No([new Do(e,t||e)],0)}function Lo(e){return e.text?it(e.from.line+e.text.length-1,$(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Mo(e,t){if(at(e,t.from)<0)return e;if(at(e,t.to)<=0)return Lo(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Lo(t).ch-t.to.ch),it(n,r)}function Fo(e,t){for(var n=[],r=0;r1&&e.remove(s.line+1,h-1),e.insert(s.line+1,v)}pn(e,"change",e,t)}function Bo(e,t,n){!function e(r,o,i){if(r.linked)for(var a=0;as-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(i=function(e,t){return t?(Wo(e.done),$(e.done)):e.done.length&&!$(e.done).ranges?$(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),$(e.done)):void 0}(o,o.lastOp==r)))a=$(i.changes),0==at(t.from,t.to)&&0==at(t.from,a.to)?a.to=Lo(t):i.changes.push(Yo(e,t));else{var l=$(o.done);for(l&&l.ranges||Zo(e.sel,o.done),i={changes:[Yo(e,t)],generation:o.generation},o.done.push(i);o.done.length>o.undoDepth;)o.done.shift(),o.done[0].ranges||o.done.shift()}o.done.push(n),o.generation=++o.maxGeneration,o.lastModTime=o.lastSelTime=s,o.lastOp=o.lastSelOp=r,o.lastOrigin=o.lastSelOrigin=t.origin,a||be(e,"historyAdded")}function Qo(e,t,n,r){var o=e.history,i=r&&r.origin;n==o.lastSelOp||i&&o.lastSelOrigin==i&&(o.lastModTime==o.lastSelTime&&o.lastOrigin==i||function(e,t,n,r){var o=t.charAt(0);return"*"==o||"+"==o&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,i,$(o.done),t))?o.done[o.done.length-1]=t:Zo(t,o.done),o.lastSelTime=+new Date,o.lastSelOrigin=i,o.lastSelOp=n,r&&!1!==r.clearRedo&&Wo(o.undone)}function Zo(e,t){var n=$(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Xo(e,t,n,r){var o=t["spans_"+e.id],i=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),(function(n){n.markedSpans&&((o||(o=t["spans_"+e.id]={}))[i]=n.markedSpans),++i}))}function Ko(e){if(!e)return null;for(var t,n=0;n-1&&($(s)[d]=c[d],delete c[d])}}}return r}function $o(e,t,n,r){if(r){var o=e.anchor;if(n){var i=at(t,o)<0;i!=at(n,o)<0?(o=t,t=n):i!=at(t,n)<0&&(t=n)}return new Do(o,t)}return new Do(n||t,t)}function ei(e,t,n,r,o){null==o&&(o=e.cm&&(e.cm.display.shift||e.extend)),ii(e,new No([$o(e.sel.primary(),t,n,o)],0),r)}function ti(e,t,n){for(var r=[],o=e.cm&&(e.cm.display.shift||e.extend),i=0;i=t.ch:s.to>t.ch))){if(o&&(be(l,"beforeCursorEnter"),l.explicitlyCleared)){if(i.markedSpans){--a;continue}break}if(!l.atomic)continue;if(n){var d=l.find(r<0?1:-1),f=void 0;if((r<0?u:c)&&(d=fi(e,d,-r,d&&d.line==t.line?i:null)),d&&d.line==t.line&&(f=at(d,n))&&(r<0?f<0:f>0))return ui(e,d,t,r,o)}var p=l.find(r<0?-1:1);return(r<0?c:u)&&(p=fi(e,p,r,p.line==t.line?i:null)),p?ui(e,p,t,r,o):null}}return t}function di(e,t,n,r,o){var i=r||1;return ui(e,t,n,i,o)||!o&&ui(e,t,n,i,!0)||ui(e,t,n,-i,o)||!o&&ui(e,t,n,-i,!0)||(e.cantEdit=!0,it(e.first,0))}function fi(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?ft(e,it(t.line-1)):null:n>0&&t.ch==(r||Je(e,t.line)).text.length?t.line0)){var u=[l,1],d=at(c.from,s.from),f=at(c.to,s.to);(d<0||!a.inclusiveLeft&&!d)&&u.push({from:c.from,to:s.from}),(f>0||!a.inclusiveRight&&!f)&&u.push({from:s.to,to:c.to}),o.splice.apply(o,u),l+=u.length-3}}return o}(e,t.from,t.to);if(r)for(var o=r.length-1;o>=0;--o)gi(e,{from:r[o].from,to:r[o].to,text:o?[""]:t.text,origin:t.origin});else gi(e,t)}}function gi(e,t){if(1!=t.text.length||""!=t.text[0]||0!=at(t.from,t.to)){var n=Fo(e,t);Go(e,t,n,e.cm?e.cm.curOp.id:NaN),bi(e,t,n,It(e,t));var r=[];Bo(e,(function(e,n){n||-1!=W(r,e.history)||(Ei(e.history,t),r.push(e.history)),bi(e,t,null,It(e,t))}))}}function vi(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(var o,i=e.history,a=e.sel,s="undo"==t?i.done:i.undone,l="undo"==t?i.undone:i.done,c=0;c=0;--p){var h=f(p);if(h)return h.v}}}}function yi(e,t){if(0!=t&&(e.first+=t,e.sel=new No(ee(e.sel.ranges,(function(e){return new Do(it(e.anchor.line+t,e.anchor.ch),it(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){gr(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.linei&&(t={from:t.from,to:it(i,Je(e,i).text.length),text:[t.text[0]],origin:t.origin}),t.removed=_e(e,t.from,t.to),n||(n=Fo(e,t)),e.cm?function(e,t,n){var r=e.doc,o=e.display,i=t.from,a=t.to,s=!1,l=i.line;e.options.lineWrapping||(l=tt(Ht(Je(r,i.line))),r.iter(l,a.line+1,(function(e){if(e==o.maxLine)return s=!0,!0}))),r.sel.contains(t.from,t.to)>-1&&we(e),qo(r,t,n,fr(e)),e.options.lineWrapping||(r.iter(l,i.line+t.text.length,(function(e){var t=Xt(e);t>o.maxLineLength&&(o.maxLine=e,o.maxLineLength=t,o.maxLineChanged=!0,s=!1)})),s&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var o=Je(e,r).stateAfter;if(o&&(!(o instanceof ht)||r+o.lookAhead1||!(this.children[0]instanceof ki))){var s=[];this.collapse(s),this.children=[new ki(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var a=o.lines.length%25+25,s=a;s10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r0||0==a&&!1!==i.clearWhenEmpty)return i;if(i.replacedWith&&(i.collapsed=!0,i.widgetNode=I("span",[i.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||i.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(i.widgetNode.insertLeft=!0)),i.collapsed){if(zt(e,t.line,t,n,i)||t.line!=n.line&&zt(e,n.line,t,n,i))throw new Error("Inserting collapsed marker partially overlapping an existing one");St=!0}i.addToHistory&&Go(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var s,l=t.line,c=e.cm;if(e.iter(l,n.line+1,(function(r){c&&i.collapsed&&!c.options.lineWrapping&&Ht(r)==c.display.maxLine&&(s=!0),i.collapsed&&l!=t.line&&et(r,0),function(e,t,n){var r=n&&window.WeakSet&&(n.markedSpans||(n.markedSpans=new WeakSet));r&&e.markedSpans&&r.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],r&&r.add(e.markedSpans)),t.marker.attachLine(e)}(r,new Nt(i,l==t.line?t.ch:null,l==n.line?n.ch:null),e.cm&&e.cm.curOp),++l})),i.collapsed&&e.iter(t.line,n.line+1,(function(t){Gt(e,t)&&et(t,0)})),i.clearOnEnter&&ge(i,"beforeCursorEnter",(function(){return i.clear()})),i.readOnly&&(Tt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),i.collapsed&&(i.id=++Di,i.atomic=!0),c){if(s&&(c.curOp.updateMaxLine=!0),i.collapsed)gr(c,t.line,n.line+1);else if(i.className||i.startStyle||i.endStyle||i.css||i.attributes||i.title)for(var u=t.line;u<=n.line;u++)vr(c,u,"text");i.atomic&&li(c.doc),pn(c,"markerAdded",c,i)}return i}Oi.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Jr(e),xe(this,"clear")){var n=this.find();n&&pn(this,"clear",n.from,n.to)}for(var r=null,o=null,i=0;ie.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&gr(e,r,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&li(e.doc)),e&&pn(e,"markerCleared",e,this,r,o),t&&_r(e),this.parent&&this.parent.clear()}},Oi.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var o=0;o=0;l--)mi(this,r[l]);s?oi(this,s):this.cm&&Pr(this.cm)})),undo:so((function(){vi(this,"undo")})),redo:so((function(){vi(this,"redo")})),undoSelection:so((function(){vi(this,"undo",!0)})),redoSelection:so((function(){vi(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(o.marker.parent||o.marker)}return t},findMarks:function(e,t,n){e=ft(this,e),t=ft(this,t);var r=[],o=e.line;return this.iter(e.line,t.line+1,(function(i){var a=i.markedSpans;if(a)for(var s=0;s=l.to||null==l.from&&o!=e.line||null!=l.from&&o==t.line&&l.from>=t.ch||n&&!n(l.marker)||r.push(l.marker.parent||l.marker)}++o})),r},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=i,++n})),ft(this,it(n,t))},indexFromPos:function(e){var t=(e=ft(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var d=e.dataTransfer.getData("Text");if(d){var f;if(t.state.draggingText&&!t.state.draggingText.copy&&(f=t.listSelections()),ai(t.doc,Io(n,n)),f)for(var p=0;p=0;t--)Ai(e.doc,"",r[t].from,r[t].to,"+delete");Pr(e)}))}function ra(e,t,n){var r=ce(e.text,t+n,n);return r<0||r>e.text.length?null:r}function oa(e,t,n){var r=ra(e,t.ch,n);return null==r?null:new it(t.line,r,n<0?"after":"before")}function ia(e,t,n,r,o){if(e){"rtl"==t.doc.direction&&(o=-o);var i=he(n,t.doc.direction);if(i){var a,s=o<0?$(i):i[0],l=o<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var c=jn(t,n);a=o<0?n.text.length-1:0;var u=Vn(t,c,a).top;a=ue((function(e){return Vn(t,c,e).top==u}),o<0==(1==s.level)?s.from:s.to-1,a),"before"==l&&(a=ra(n,a,1))}else a=o<0?s.to:s.from;return new it(r,a,l)}}return new it(r,o<0?n.text.length:0,o<0?"before":"after")}Zi.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Zi.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Zi.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Zi.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Zi.default=b?Zi.macDefault:Zi.pcDefault;var aa={selectAll:pi,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),Q)},killLine:function(e){return na(e,(function(t){if(t.empty()){var n=Je(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)o=new it(o.line,o.ch+1),e.replaceRange(i.charAt(o.ch-1)+i.charAt(o.ch-2),it(o.line,o.ch-2),o,"+transpose");else if(o.line>e.doc.first){var a=Je(e.doc,o.line-1).text;a&&(o=new it(o.line,1),e.replaceRange(i.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),it(o.line-1,a.length-1),o,"+transpose"))}n.push(new Do(o,o))}e.setSelections(n)}))},newlineAndIndent:function(e){return oo(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r-1&&(at((o=c.ranges[o]).from(),t)<0||t.xRel>0)&&(at(o.to(),t)>0||t.xRel<0)?function(e,t,n,r){var o=e.display,i=!1,c=io(e,(function(t){l&&(o.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Nr(e)),ye(o.wrapper.ownerDocument,"mouseup",c),ye(o.wrapper.ownerDocument,"mousemove",u),ye(o.scroller,"dragstart",d),ye(o.scroller,"drop",c),i||(Ce(t),r.addNew||ei(e.doc,n,null,null,r.extend),l&&!p||a&&9==s?setTimeout((function(){o.wrapper.ownerDocument.body.focus({preventScroll:!0}),o.input.focus()}),20):o.input.focus())})),u=function(e){i=i||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return i=!0};l&&(o.scroller.draggable=!0),e.state.draggingText=c,c.copy=!r.moveOnDrag,ge(o.wrapper.ownerDocument,"mouseup",c),ge(o.wrapper.ownerDocument,"mousemove",u),ge(o.scroller,"dragstart",d),ge(o.scroller,"drop",c),e.state.delayingBlurEvent=!0,setTimeout((function(){return o.input.focus()}),20),o.scroller.dragDrop&&o.scroller.dragDrop()}(e,r,t,i):function(e,t,n,r){a&&Nr(e);var o=e.display,i=e.doc;Ce(t);var s,l,c=i.sel,u=c.ranges;if(r.addNew&&!r.extend?(l=i.sel.contains(n),s=l>-1?u[l]:new Do(n,n)):(s=i.sel.primary(),l=i.sel.primIndex),"rectangle"==r.unit)r.addNew||(s=new Do(n,n)),n=hr(e,t,!0,!0),l=-1;else{var d=xa(e,n,r.unit);s=r.extend?$o(s,d.anchor,d.head,r.extend):d}r.addNew?-1==l?(l=u.length,ii(i,Oo(e,u.concat([s]),l),{scroll:!1,origin:"*mouse"})):u.length>1&&u[l].empty()&&"char"==r.unit&&!r.extend?(ii(i,Oo(e,u.slice(0,l).concat(u.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),c=i.sel):ni(i,l,s,Z):(l=0,ii(i,new No([s],0),Z),c=i.sel);var f=n;function p(t){if(0!=at(f,t))if(f=t,"rectangle"==r.unit){for(var o=[],a=e.options.tabSize,u=H(Je(i,n.line).text,n.ch,a),d=H(Je(i,t.line).text,t.ch,a),p=Math.min(u,d),h=Math.max(u,d),m=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));m<=g;m++){var v=Je(i,m).text,y=K(v,p,a);p==h?o.push(new Do(it(m,y),it(m,y))):v.length>y&&o.push(new Do(it(m,y),it(m,K(v,h,a))))}o.length||o.push(new Do(n,n)),ii(i,Oo(e,c.ranges.slice(0,l).concat(o),l),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,A=s,w=xa(e,t,r.unit),x=A.anchor;at(w.anchor,x)>0?(b=w.head,x=ut(A.from(),w.anchor)):(b=w.anchor,x=ct(A.to(),w.head));var E=c.ranges.slice(0);E[l]=function(e,t){var n=t.anchor,r=t.head,o=Je(e.doc,n.line);if(0==at(n,r)&&n.sticky==r.sticky)return t;var i=he(o);if(!i)return t;var a=fe(i,n.ch,n.sticky),s=i[a];if(s.from!=n.ch&&s.to!=n.ch)return t;var l,c=a+(s.from==n.ch==(1!=s.level)?0:1);if(0==c||c==i.length)return t;if(r.line!=n.line)l=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var u=fe(i,r.ch,r.sticky),d=u-a||(r.ch-n.ch)*(1==s.level?-1:1);l=u==c-1||u==c?d<0:d>0}var f=i[c+(l?-1:0)],p=l==(1==f.level),h=p?f.from:f.to,m=p?"after":"before";return n.ch==h&&n.sticky==m?t:new Do(new it(n.line,h,m),r)}(e,new Do(ft(i,x),b)),ii(i,Oo(e,E,l),Z)}}var h=o.wrapper.getBoundingClientRect(),m=0;function g(t){var n=++m,a=hr(e,t,!0,"rectangle"==r.unit);if(a)if(0!=at(a,f)){e.curOp.focus=M(V(e)),p(a);var s=Mr(o,i);(a.line>=s.to||a.lineh.bottom?20:0;l&&setTimeout(io(e,(function(){m==n&&(o.scroller.scrollTop+=l,g(t))})),50)}}function v(t){e.state.selectingText=!1,m=1/0,t&&(Ce(t),o.input.focus()),ye(o.wrapper.ownerDocument,"mousemove",y),ye(o.wrapper.ownerDocument,"mouseup",b),i.history.lastSelOrigin=null}var y=io(e,(function(e){0!==e.buttons&&De(e)?g(e):v(e)})),b=io(e,v);e.state.selectingText=b,ge(o.wrapper.ownerDocument,"mousemove",y),ge(o.wrapper.ownerDocument,"mouseup",b)}(e,r,t,i)}(t,r,i,e):Ne(e)==n.scroller&&Ce(e):2==o?(r&&ei(t.doc,r),setTimeout((function(){return n.input.focus()}),20)):3==o&&(C?t.display.input.onContextMenu(e):Nr(t)))}}function xa(e,t,n){if("char"==n)return new Do(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Do(it(t.line,0),ft(e.doc,it(t.line+1,0)));var r=n(e,t);return new Do(r.from,r.to)}function Ea(e,t,n,r){var o,i;if(t.touches)o=t.touches[0].clientX,i=t.touches[0].clientY;else try{o=t.clientX,i=t.clientY}catch(e){return!1}if(o>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&Ce(t);var a=e.display,s=a.lineDiv.getBoundingClientRect();if(i>s.bottom||!xe(e,n))return Te(t);i-=s.top-a.viewOffset;for(var l=0;l=o)return be(e,n,e,nt(e.doc,i),e.display.gutterSpecs[l].className,t),Te(t)}}function Ca(e,t){return Ea(e,t,"gutterClick",!0)}function ka(e,t){Sn(e.display,t)||function(e,t){return!!xe(e,"gutterContextMenu")&&Ea(e,t,"gutterContextMenu",!1)}(e,t)||Ae(e,t,"contextmenu")||C||e.display.input.onContextMenu(t)}function Ta(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Wn(e)}Aa.prototype.compare=function(e,t,n){return this.time+400>e&&0==at(t,this.pos)&&n==this.button};var Sa={toString:function(){return"CodeMirror.Init"}},Na={},Da={};function Oa(e,t,n){if(!t!=!(n&&n!=Sa)){var r=e.display.dragFunctions,o=t?ge:ye;o(e.display.scroller,"dragstart",r.start),o(e.display.scroller,"dragenter",r.enter),o(e.display.scroller,"dragover",r.over),o(e.display.scroller,"dragleave",r.leave),o(e.display.scroller,"drop",r.drop)}}function Ia(e){e.options.lineWrapping?(F(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(S(e.display.wrapper,"CodeMirror-wrap"),Kt(e)),pr(e),gr(e),Wn(e),setTimeout((function(){return Gr(e)}),100)}function La(e,t){var n=this;if(!(this instanceof La))return new La(e,t);this.options=t=t?z(t):{},z(Na,t,!1);var r=t.value;"string"==typeof r?r=new Pi(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var o=new La.inputStyles[t.inputStyle](this),i=this.display=new xo(e,r,o,t);for(var c in i.wrapper.CodeMirror=this,Ta(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Xr(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new Y,keySeq:null,specialChars:null},t.autofocus&&!y&&i.input.focus(),a&&s<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),function(e){var t=e.display;ge(t.scroller,"mousedown",io(e,wa)),ge(t.scroller,"dblclick",a&&s<11?io(e,(function(t){if(!Ae(e,t)){var n=hr(e,t);if(n&&!Ca(e,t)&&!Sn(e.display,t)){Ce(t);var r=e.findWordAt(n);ei(e.doc,r.anchor,r.head)}}})):function(t){return Ae(e,t)||Ce(t)}),ge(t.scroller,"contextmenu",(function(t){return ka(e,t)})),ge(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||ka(e,n)}));var n,r={end:0};function o(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),(r=t.activeTouch).end=+new Date)}function i(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function l(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}ge(t.scroller,"touchstart",(function(o){if(!Ae(e,o)&&!i(o)&&!Ca(e,o)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-r.end<=300?r:null},1==o.touches.length&&(t.activeTouch.left=o.touches[0].pageX,t.activeTouch.top=o.touches[0].pageY)}})),ge(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),ge(t.scroller,"touchend",(function(n){var r=t.activeTouch;if(r&&!Sn(t,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var i,a=e.coordsChar(t.activeTouch,"page");i=!r.prev||l(r,r.prev)?new Do(a,a):!r.prev.prev||l(r,r.prev.prev)?e.findWordAt(a):new Do(it(a.line,0),ft(e.doc,it(a.line+1,0))),e.setSelection(i.anchor,i.head),e.focus(),Ce(n)}o()})),ge(t.scroller,"touchcancel",o),ge(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Br(e,t.scroller.scrollTop),zr(e,t.scroller.scrollLeft,!0),be(e,"scroll",e))})),ge(t.scroller,"mousewheel",(function(t){return So(e,t)})),ge(t.scroller,"DOMMouseScroll",(function(t){return So(e,t)})),ge(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){Ae(e,t)||Se(t)},over:function(t){Ae(e,t)||(function(e,t){var n=hr(e,t);if(n){var r=document.createDocumentFragment();Er(e,n,r),e.display.dragCursor||(e.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),D(e.display.dragCursor,r)}}(e,t),Se(t))},start:function(t){return function(e,t){if(a&&(!e.state.draggingText||+new Date-ji<100))Se(t);else if(!Ae(e,t)&&!Sn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!p)){var n=O("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",f&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),f&&n.parentNode.removeChild(n)}}(e,t)},drop:io(e,Vi),leave:function(t){Ae(e,t)||qi(e)}};var c=t.input.getField();ge(c,"keyup",(function(t){return ga.call(e,t)})),ge(c,"keydown",io(e,ma)),ge(c,"keypress",io(e,va)),ge(c,"focus",(function(t){return Dr(e,t)})),ge(c,"blur",(function(t){return Or(e,t)}))}(this),zi(),Jr(this),this.curOp.forceUpdate=!0,Uo(this,r),t.autofocus&&!y||this.hasFocus()?setTimeout((function(){n.hasFocus()&&!n.state.focused&&Dr(n)}),20):Or(this),Da)Da.hasOwnProperty(c)&&Da[c](this,t[c],Sa);yo(this),t.finishInit&&t.finishInit(this);for(var u=0;u150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>i.first?H(Je(i,t-1).text,null,a):0:"add"==n?c=l+e.options.indentUnit:"subtract"==n?c=l-e.options.indentUnit:"number"==typeof n&&(c=l+n),c=Math.max(0,c);var d="",f=0;if(e.options.indentWithTabs)for(var p=Math.floor(c/a);p;--p)f+=a,d+="\t";if(fa,l=Pe(t),c=null;if(s&&r.ranges.length>1)if(Ra&&Ra.text.join("\n")==t){if(r.ranges.length%Ra.text.length==0){c=[];for(var u=0;u=0;f--){var p=r.ranges[f],h=p.from(),m=p.to();p.empty()&&(n&&n>0?h=it(h.line,h.ch-n):e.state.overwrite&&!s?m=it(m.line,Math.min(Je(i,m.line).text.length,m.ch+$(l).length)):s&&Ra&&Ra.lineWise&&Ra.text.join("\n")==l.join("\n")&&(h=m=it(h.line,0)));var g={from:h,to:m,text:c?c[f%c.length]:l,origin:o||(s?"paste":e.state.cutIncoming>a?"cut":"+input")};mi(e.doc,g),pn(e,"inputRead",e,g)}t&&!s&&qa(e,t),Pr(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Va(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||oo(t,(function(){return ja(t,n,0,null,"paste")})),!0}function qa(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var o=n.ranges[r];if(!(o.head.ch>100||r&&n.ranges[r-1].head.line==o.head.line)){var i=e.getModeAt(o.head),a=!1;if(i.electricChars){for(var s=0;s-1){a=Fa(e,o.head.line,"smart");break}}else i.electricInput&&i.electricInput.test(Je(e.doc,o.head.line).text.slice(0,o.head.ch))&&(a=Fa(e,o.head.line,"smart"));a&&pn(e,"electricInput",e,o.head.line)}}}function Ba(e){for(var t=[],n=[],r=0;r0?0:-1));if(isNaN(u))a=null;else{var d=n>0?u>=55296&&u<56320:u>=56320&&u<57343;a=new it(t.line,Math.max(0,Math.min(s.text.length,t.ch+n*(d?2:1))),-n)}}else a=o?function(e,t,n,r){var o=he(t,e.doc.direction);if(!o)return oa(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var i=fe(o,n.ch,n.sticky),a=o[i];if("ltr"==e.doc.direction&&a.level%2==0&&(r>0?a.to>n.ch:a.from=a.from&&f>=u.begin)){var p=d?"before":"after";return new it(n.line,f,p)}}var h=function(e,t,r){for(var i=function(e,t){return t?new it(n.line,l(e,1),"before"):new it(n.line,e,"after")};e>=0&&e0==(1!=a.level),c=s?r.begin:l(r.end,-1);if(a.from<=c&&c0?u.end:l(u.begin,-1);return null==g||r>0&&g==t.text.length||!(m=h(r>0?0:o.length-1,r,c(g)))?null:m}(e.cm,s,t,n):oa(s,t,n);if(null==a){if(i||((c=t.line+l)=e.first+e.size||(t=new it(c,t.ch,t.sticky),!(s=Je(e,c)))))return!1;t=ia(o,e.cm,s,t.line,l)}else t=a;return!0}if("char"==r||"codepoint"==r)c();else if("column"==r)c(!0);else if("word"==r||"group"==r)for(var u=null,d="group"==r,f=e.cm&&e.cm.getHelper(t,"wordChars"),p=!0;!(n<0)||c(!p);p=!1){var h=s.text.charAt(t.ch)||"\n",m=ie(h,f)?"w":d&&"\n"==h?"n":!d||/\s/.test(h)?null:"p";if(!d||p||m||(m="s"),u&&u!=m){n<0&&(n=1,c(),t.sticky="after");break}if(m&&(u=m),n>0&&!c(!p))break}var g=di(e,t,i,a,!0);return st(i,g)&&(g.hitSide=!0),g}function Ya(e,t,n,r){var o,i,a=e.doc,s=t.left;if("page"==r){var l=Math.min(e.display.wrapper.clientHeight,B(e).innerHeight||a(e).documentElement.clientHeight),c=Math.max(l-.5*lr(e.display),3);o=(n>0?t.bottom:t.top)+n*c}else"line"==r&&(o=n>0?t.bottom+3:t.top-3);for(;(i=tr(e,s,o)).outside;){if(n<0?o<=0:o>=a.height){i.hitSide=!0;break}o+=5*n}return i}var Wa=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new Y,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Ga(e,t){var n=Pn(e,t.line);if(!n||n.hidden)return null;var r=Je(e.doc,t.line),o=Fn(n,r,t.line),i=he(r,e.doc.direction),a="left";i&&(a=fe(i,t.ch)%2?"right":"left");var s=Un(o.map,t.ch,a);return s.offset="right"==s.collapse?s.end:s.start,s}function Qa(e,t){return t&&(e.bad=!0),e}function Za(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return Qa(e.clipPos(it(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var o=0;o=t.display.viewTo||i.line=t.display.viewFrom&&Ga(t,o)||{node:l[0].measure.map[2],offset:0},u=i.liner.firstLine()&&(a=it(a.line-1,Je(r.doc,a.line-1).length)),s.ch==Je(r.doc,s.line).text.length&&s.lineo.viewTo-1)return!1;a.line==o.viewFrom||0==(e=mr(r,a.line))?(t=tt(o.view[0].line),n=o.view[0].node):(t=tt(o.view[e].line),n=o.view[e-1].node.nextSibling);var l,c,u=mr(r,s.line);if(u==o.view.length-1?(l=o.viewTo-1,c=o.lineDiv.lastChild):(l=tt(o.view[u+1].line)-1,c=o.view[u+1].node.previousSibling),!n)return!1;for(var d=r.doc.splitLines(function(e,t,n,r,o){var i="",a=!1,s=e.doc.lineSeparator(),l=!1;function c(){a&&(i+=s,l&&(i+=s),a=l=!1)}function u(e){e&&(c(),i+=e)}function d(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void u(n);var i,f=t.getAttribute("cm-marker");if(f){var p=e.findMarks(it(r,0),it(o+1,0),(g=+f,function(e){return e.id==g}));return void(p.length&&(i=p[0].find(0))&&u(_e(e.doc,i.from,i.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var h=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;h&&c();for(var m=0;m1&&f.length>1;)if($(d)==$(f))d.pop(),f.pop(),l--;else{if(d[0]!=f[0])break;d.shift(),f.shift(),t++}for(var p=0,h=0,m=d[0],g=f[0],v=Math.min(m.length,g.length);pa.ch&&y.charCodeAt(y.length-h-1)==b.charCodeAt(b.length-h-1);)p--,h++;d[d.length-1]=y.slice(0,y.length-h).replace(/^\u200b+/,""),d[0]=d[0].slice(p).replace(/\u200b+$/,"");var w=it(t,p),x=it(l,f.length?$(f).length-h:0);return d.length>1||d[0]||at(w,x)?(Ai(r.doc,d,w,x,"+input"),!0):void 0},Wa.prototype.ensurePolled=function(){this.forceCompositionEnd()},Wa.prototype.reset=function(){this.forceCompositionEnd()},Wa.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Wa.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Wa.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||oo(this.cm,(function(){return gr(e.cm)}))},Wa.prototype.setUneditable=function(e){e.contentEditable="false"},Wa.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||io(this.cm,ja)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Wa.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Wa.prototype.onContextMenu=function(){},Wa.prototype.resetPosition=function(){},Wa.prototype.needsContentAttribute=!0;var Ka=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new Y,this.hasSelection=!1,this.composing=null,this.resetting=!1};Ka.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var o=this.textarea;function i(e){if(!Ae(r,e)){if(r.somethingSelected())Pa({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var t=Ba(r);Pa({lineWise:!0,text:t.text}),"cut"==e.type?r.setSelections(t.ranges,null,Q):(n.prevInput="",o.value=t.text.join("\n"),P(o))}"cut"==e.type&&(r.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(o.style.width="0px"),ge(o,"input",(function(){a&&s>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),ge(o,"paste",(function(e){Ae(r,e)||Va(e,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())})),ge(o,"cut",i),ge(o,"copy",i),ge(e.scroller,"paste",(function(t){if(!Sn(e,t)&&!Ae(r,t)){if(!o.dispatchEvent)return r.state.pasteIncoming=+new Date,void n.focus();var i=new Event("paste");i.clipboardData=t.clipboardData,o.dispatchEvent(i)}})),ge(e.lineSpace,"selectstart",(function(t){Sn(e,t)||Ce(t)})),ge(o,"compositionstart",(function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}})),ge(o,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},Ka.prototype.createField=function(e){this.wrapper=za(),this.textarea=this.wrapper.firstChild;var t=this.cm.options;Ua(this.textarea,t.spellcheck,t.autocorrect,t.autocapitalize)},Ka.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},Ka.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=xr(e);if(e.options.moveInputWithCursor){var o=_n(e,n.sel.primary().head,"div"),i=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,o.top+a.top-i.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,o.left+a.left-i.left))}return r},Ka.prototype.showSelection=function(e){var t=this.cm.display;D(t.cursorDiv,e.cursors),D(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Ka.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&P(this.textarea),a&&s>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",a&&s>=9&&(this.hasSelection=null));this.resetting=!1}},Ka.prototype.getField=function(){return this.textarea},Ka.prototype.supportsTouch=function(){return!1},Ka.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!y||M(q(this.textarea))!=this.textarea))try{this.textarea.focus()}catch(e){}},Ka.prototype.blur=function(){this.textarea.blur()},Ka.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Ka.prototype.receivedFocus=function(){this.slowPoll()},Ka.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},Ka.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}))},Ka.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||je(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var o=n.value;if(o==r&&!t.somethingSelected())return!1;if(a&&s>=9&&this.hasSelection===o||b&&/[\uf700-\uf7ff]/.test(o))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var i=o.charCodeAt(0);if(8203!=i||r||(r="​"),8666==i)return this.reset(),this.cm.execCommand("undo")}for(var l=0,c=Math.min(r.length,o.length);l1e3||o.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=o,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},Ka.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Ka.prototype.onKeyPress=function(){a&&s>=9&&(this.hasSelection=null),this.fastPoll()},Ka.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,o=t.textarea;t.contextMenuPending&&t.contextMenuPending();var i=hr(n,e),c=r.scroller.scrollTop;if(i&&!f){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(i)&&io(n,ii)(n.doc,Io(i),Q);var u,d=o.style.cssText,p=t.wrapper.style.cssText,h=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",o.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-h.top-5)+"px; left: "+(e.clientX-h.left-5)+"px;\n z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",l&&(u=o.ownerDocument.defaultView.scrollY),r.input.focus(),l&&o.ownerDocument.defaultView.scrollTo(null,u),r.input.reset(),n.somethingSelected()||(o.value=t.prevInput=" "),t.contextMenuPending=v,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll),a&&s>=9&&g(),C){Se(e);var m=function(){ye(window,"mouseup",m),setTimeout(v,20)};ge(window,"mouseup",m)}else setTimeout(v,50)}function g(){if(null!=o.selectionStart){var e=n.somethingSelected(),i="​"+(e?o.value:"");o.value="⇚",o.value=i,t.prevInput=e?"":"​",o.selectionStart=1,o.selectionEnd=i.length,r.selForContextMenu=n.doc.sel}}function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrapper.style.cssText=p,o.style.cssText=d,a&&s<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=c),null!=o.selectionStart)){(!a||a&&s<9)&&g();var e=0,i=function(){r.selForContextMenu==n.doc.sel&&0==o.selectionStart&&o.selectionEnd>0&&"​"==t.prevInput?io(n,pi)(n):e++<10?r.detectingSelectAll=setTimeout(i,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(i,200)}}},Ka.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},Ka.prototype.setUneditable=function(){},Ka.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,r,o,i){e.defaults[n]=r,o&&(t[n]=i?function(e,t,n){n!=Sa&&o(e,t,n)}:o)}e.defineOption=n,e.Init=Sa,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,Po(e)}),!0),n("indentUnit",2,Po,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){jo(e),Wn(e),gr(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter((function(e){for(var o=0;;){var i=e.text.indexOf(t,o);if(-1==i)break;o=i+t.length,n.push(it(r,i))}r++}));for(var o=n.length-1;o>=0;o--)Ai(e.doc,t,n[o],it(n[o].line,n[o].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=Sa&&e.refresh()})),n("specialCharPlaceholder",rn,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",y?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!w),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){Ta(e),wo(e)}),!0),n("keyMap","default",(function(e,t,n){var r=ta(t),o=n!=Sa&&ta(n);o&&o.detach&&o.detach(e,r),r.attach&&r.attach(e,o||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,Ia,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=bo(t,e.options.lineNumbers),wo(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?dr(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return Gr(e)}),!0),n("scrollbarStyle","native",(function(e){Xr(e),Gr(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=bo(e.options.gutters,t),wo(e)}),!0),n("firstLineNumber",1,wo,!0),n("lineNumberFormatter",(function(e){return e}),wo,!0),n("showCursorWhenSelecting",!1,wr,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Or(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,Oa),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,wr,!0),n("singleCursorHeightPerLine",!0,wr,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,jo,!0),n("addModeClass",!1,jo,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,jo,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}(La),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){B(this).focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,o=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&io(this,t[e])(this,n,o),be(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](ta(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Fa(this,o.head.line,e,!0),n=o.head.line,r==this.doc.sel.primIndex&&Pr(this));else{var i=o.from(),a=o.to(),s=Math.max(n,i.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var l=s;l0&&ni(this.doc,r,new Do(i,c[r].to()),Q)}}})),getTokenAt:function(e,t){return Et(this,e,t)},getLineTokens:function(e,t){return Et(this,it(e),t,!0)},getTokenTypeAt:function(e){e=ft(this.doc,e);var t,n=vt(this,Je(this.doc,e.line)),r=0,o=(n.length-1)/2,i=e.ch;if(0==i)t=n[2];else for(;;){var a=r+o>>1;if((a?n[2*a-1]:0)>=i)o=a;else{if(!(n[2*a+1]i&&(e=i,o=!0),r=Je(this.doc,e)}else r=e;return Xn(this,r,{top:0,left:0},t||"page",n||o).top+(o?this.doc.height-Zt(r):0)},defaultTextHeight:function(){return lr(this.display)},defaultCharWidth:function(){return cr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,o){var i,a,s,l=this.display,c=(e=_n(this,ft(this.doc,e))).bottom,u=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),l.sizer.appendChild(t),"over"==r)c=e.top;else if("above"==r||"near"==r){var d=Math.max(l.wrapper.clientHeight,this.doc.height),f=Math.max(l.sizer.clientWidth,l.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(c=e.bottom),u+t.offsetWidth>f&&(u=f-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==o?(u=l.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==o?u=0:"middle"==o&&(u=(l.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(i=this,a={left:u,top:c,right:u+t.offsetWidth,bottom:c+t.offsetHeight},null!=(s=Fr(i,a)).scrollTop&&Br(i,s.scrollTop),null!=s.scrollLeft&&zr(i,s.scrollLeft))},triggerOnKeyDown:ao(ma),triggerOnKeyPress:ao(va),triggerOnKeyUp:ga,triggerOnMouseDown:ao(wa),execCommand:function(e){if(aa.hasOwnProperty(e))return aa[e].call(null,this)},triggerElectric:ao((function(e){qa(this,e)})),findPosH:function(e,t,n,r){var o=1;t<0&&(o=-1,t=-t);for(var i=ft(this.doc,e),a=0;a0&&a(t.charAt(n-1));)--n;for(;r.5||this.options.lineWrapping)&&pr(this),be(this,"refresh",this)})),swapDoc:ao((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Uo(this,e),Wn(this),this.display.input.reset(),jr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,pn(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},Ee(e),e.registerHelper=function(t,r,o){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=o},e.registerGlobalHelper=function(t,r,o,i){e.registerHelper(t,r,i),n[t]._global.push({pred:o,val:i})}}(La);var Ja="iter insert remove copy getEditor constructor".split(" ");for(var _a in Pi.prototype)Pi.prototype.hasOwnProperty(_a)&&W(Ja,_a)<0&&(La.prototype[_a]=function(e){return function(){return e.apply(this.doc,arguments)}}(Pi.prototype[_a]));return Ee(Pi),La.inputStyles={textarea:Ka,contenteditable:Wa},La.defineMode=function(e){La.defaults.mode||"null"==e||(La.defaults.mode=e),ze.apply(this,arguments)},La.defineMIME=function(e,t){Ue[e]=t},La.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),La.defineMIME("text/plain","null"),La.defineExtension=function(e,t){La.prototype[e]=t},La.defineDocExtension=function(e,t){Pi.prototype[e]=t},La.fromTextArea=function(e,t){if((t=t?z(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=M(q(e));t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function r(){e.value=s.getValue()}var o;if(e.form&&(ge(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var i=e.form;o=i.submit;try{var a=i.submit=function(){r(),i.submit=o,i.submit(),i.submit=a}}catch(e){}}t.finishInit=function(n){n.save=r,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,r(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(ye(e.form,"submit",r),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=o))}},e.style.display="none";var s=La((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return s},function(e){e.off=ye,e.on=ge,e.wheelEventPixels=To,e.Doc=Pi,e.splitLines=Pe,e.countColumn=H,e.findColumn=K,e.isWordChar=oe,e.Pass=G,e.signal=be,e.Line=Jt,e.changeEnd=Lo,e.scrollbarModel=Zr,e.Pos=it,e.cmpPos=at,e.modes=Be,e.mimeModes=Ue,e.resolveMode=He,e.getMode=Ye,e.modeExtensions=We,e.extendMode=Ge,e.copyState=Qe,e.startState=Xe,e.innerMode=Ze,e.commands=aa,e.keyMap=Zi,e.keyName=ea,e.isModifierKey=_i,e.lookupKey=Ji,e.normalizeKeyMap=Ki,e.StringStream=Ke,e.SharedTextMarker=Li,e.TextMarker=Oi,e.LineWidget=Si,e.e_preventDefault=Ce,e.e_stopPropagation=ke,e.e_stop=Se,e.addClass=F,e.contains=L,e.rmClass=S,e.keyNames=Yi}(La),La.version="5.65.19",La}()},1505:(e,t,n)=>{"use strict";n.d(t,{kr:()=>rt,Rq:()=>Ye,vM:()=>We,yX:()=>Ot,CE:()=>At,VS:()=>cn,JR:()=>Nt,Jb:()=>_t,pi:()=>He,p_:()=>Be,r5:()=>Ze,m7:()=>qe,p:()=>ze,t:()=>Ue});var r,o,i,a,s,l,c,u,d,f,p,h,m,g,v,y,b,A,w,x,E,C,k,T,S,N,D,O,I,L,M,F,R,P,j,V,q,B,U,z,H,Y,W,G,Q,Z,X,K,J,_,$,ee,te,ne,re,oe,ie,ae,se,le,ce,ue,de,fe,pe,he,me,ge,ve,ye,be,Ae,we,xe,Ee,Ce,ke,Te,Se,Ne,De=n(424),Oe=n(8195),Ie=n(2455),Le=n(2114),Me=n(8957),Fe=n(4143),Re=n(4917),Pe=n(2868);!function(e){e.is=function(e){return"string"==typeof e}}(r||(r={})),function(e){e.is=function(e){return"string"==typeof e}}(o||(o={})),function(e){e.MIN_VALUE=-2147483648,e.MAX_VALUE=2147483647,e.is=function(t){return"number"==typeof t&&e.MIN_VALUE<=t&&t<=e.MAX_VALUE}}(i||(i={})),function(e){e.MIN_VALUE=0,e.MAX_VALUE=2147483647,e.is=function(t){return"number"==typeof t&&e.MIN_VALUE<=t&&t<=e.MAX_VALUE}}(a||(a={})),function(e){e.create=function(e,t){return e===Number.MAX_VALUE&&(e=a.MAX_VALUE),t===Number.MAX_VALUE&&(t=a.MAX_VALUE),{line:e,character:t}},e.is=function(e){let t=e;return Ne.objectLiteral(t)&&Ne.uinteger(t.line)&&Ne.uinteger(t.character)}}(s||(s={})),function(e){e.create=function(e,t,n,r){if(Ne.uinteger(e)&&Ne.uinteger(t)&&Ne.uinteger(n)&&Ne.uinteger(r))return{start:s.create(e,t),end:s.create(n,r)};if(s.is(e)&&s.is(t))return{start:e,end:t};throw new Error(`Range#create called with invalid arguments[${e}, ${t}, ${n}, ${r}]`)},e.is=function(e){let t=e;return Ne.objectLiteral(t)&&s.is(t.start)&&s.is(t.end)}}(l||(l={})),function(e){e.create=function(e,t){return{uri:e,range:t}},e.is=function(e){let t=e;return Ne.objectLiteral(t)&&l.is(t.range)&&(Ne.string(t.uri)||Ne.undefined(t.uri))}}(c||(c={})),function(e){e.create=function(e,t,n,r){return{targetUri:e,targetRange:t,targetSelectionRange:n,originSelectionRange:r}},e.is=function(e){let t=e;return Ne.objectLiteral(t)&&l.is(t.targetRange)&&Ne.string(t.targetUri)&&l.is(t.targetSelectionRange)&&(l.is(t.originSelectionRange)||Ne.undefined(t.originSelectionRange))}}(u||(u={})),function(e){e.create=function(e,t,n,r){return{red:e,green:t,blue:n,alpha:r}},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&Ne.numberRange(t.red,0,1)&&Ne.numberRange(t.green,0,1)&&Ne.numberRange(t.blue,0,1)&&Ne.numberRange(t.alpha,0,1)}}(d||(d={})),function(e){e.create=function(e,t){return{range:e,color:t}},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&l.is(t.range)&&d.is(t.color)}}(f||(f={})),function(e){e.create=function(e,t,n){return{label:e,textEdit:t,additionalTextEdits:n}},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&Ne.string(t.label)&&(Ne.undefined(t.textEdit)||x.is(t))&&(Ne.undefined(t.additionalTextEdits)||Ne.typedArray(t.additionalTextEdits,x.is))}}(p||(p={})),function(e){e.Comment="comment",e.Imports="imports",e.Region="region"}(h||(h={})),function(e){e.create=function(e,t,n,r,o,i){const a={startLine:e,endLine:t};return Ne.defined(n)&&(a.startCharacter=n),Ne.defined(r)&&(a.endCharacter=r),Ne.defined(o)&&(a.kind=o),Ne.defined(i)&&(a.collapsedText=i),a},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&Ne.uinteger(t.startLine)&&Ne.uinteger(t.startLine)&&(Ne.undefined(t.startCharacter)||Ne.uinteger(t.startCharacter))&&(Ne.undefined(t.endCharacter)||Ne.uinteger(t.endCharacter))&&(Ne.undefined(t.kind)||Ne.string(t.kind))}}(m||(m={})),function(e){e.create=function(e,t){return{location:e,message:t}},e.is=function(e){let t=e;return Ne.defined(t)&&c.is(t.location)&&Ne.string(t.message)}}(g||(g={})),function(e){e.Error=1,e.Warning=2,e.Information=3,e.Hint=4}(v||(v={})),function(e){e.Unnecessary=1,e.Deprecated=2}(y||(y={})),function(e){e.is=function(e){const t=e;return Ne.objectLiteral(t)&&Ne.string(t.href)}}(b||(b={})),function(e){e.create=function(e,t,n,r,o,i){let a={range:e,message:t};return Ne.defined(n)&&(a.severity=n),Ne.defined(r)&&(a.code=r),Ne.defined(o)&&(a.source=o),Ne.defined(i)&&(a.relatedInformation=i),a},e.is=function(e){var t;let n=e;return Ne.defined(n)&&l.is(n.range)&&Ne.string(n.message)&&(Ne.number(n.severity)||Ne.undefined(n.severity))&&(Ne.integer(n.code)||Ne.string(n.code)||Ne.undefined(n.code))&&(Ne.undefined(n.codeDescription)||Ne.string(null===(t=n.codeDescription)||void 0===t?void 0:t.href))&&(Ne.string(n.source)||Ne.undefined(n.source))&&(Ne.undefined(n.relatedInformation)||Ne.typedArray(n.relatedInformation,g.is))}}(A||(A={})),function(e){e.create=function(e,t,...n){let r={title:e,command:t};return Ne.defined(n)&&n.length>0&&(r.arguments=n),r},e.is=function(e){let t=e;return Ne.defined(t)&&Ne.string(t.title)&&Ne.string(t.command)}}(w||(w={})),function(e){e.replace=function(e,t){return{range:e,newText:t}},e.insert=function(e,t){return{range:{start:e,end:e},newText:t}},e.del=function(e){return{range:e,newText:""}},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&Ne.string(t.newText)&&l.is(t.range)}}(x||(x={})),function(e){e.create=function(e,t,n){const r={label:e};return void 0!==t&&(r.needsConfirmation=t),void 0!==n&&(r.description=n),r},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&Ne.string(t.label)&&(Ne.boolean(t.needsConfirmation)||void 0===t.needsConfirmation)&&(Ne.string(t.description)||void 0===t.description)}}(E||(E={})),function(e){e.is=function(e){const t=e;return Ne.string(t)}}(C||(C={})),function(e){e.replace=function(e,t,n){return{range:e,newText:t,annotationId:n}},e.insert=function(e,t,n){return{range:{start:e,end:e},newText:t,annotationId:n}},e.del=function(e,t){return{range:e,newText:"",annotationId:t}},e.is=function(e){const t=e;return x.is(t)&&(E.is(t.annotationId)||C.is(t.annotationId))}}(k||(k={})),function(e){e.create=function(e,t){return{textDocument:e,edits:t}},e.is=function(e){let t=e;return Ne.defined(t)&&M.is(t.textDocument)&&Array.isArray(t.edits)}}(T||(T={})),function(e){e.create=function(e,t,n){let r={kind:"create",uri:e};return void 0===t||void 0===t.overwrite&&void 0===t.ignoreIfExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},e.is=function(e){let t=e;return t&&"create"===t.kind&&Ne.string(t.uri)&&(void 0===t.options||(void 0===t.options.overwrite||Ne.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||Ne.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||C.is(t.annotationId))}}(S||(S={})),function(e){e.create=function(e,t,n,r){let o={kind:"rename",oldUri:e,newUri:t};return void 0===n||void 0===n.overwrite&&void 0===n.ignoreIfExists||(o.options=n),void 0!==r&&(o.annotationId=r),o},e.is=function(e){let t=e;return t&&"rename"===t.kind&&Ne.string(t.oldUri)&&Ne.string(t.newUri)&&(void 0===t.options||(void 0===t.options.overwrite||Ne.boolean(t.options.overwrite))&&(void 0===t.options.ignoreIfExists||Ne.boolean(t.options.ignoreIfExists)))&&(void 0===t.annotationId||C.is(t.annotationId))}}(N||(N={})),function(e){e.create=function(e,t,n){let r={kind:"delete",uri:e};return void 0===t||void 0===t.recursive&&void 0===t.ignoreIfNotExists||(r.options=t),void 0!==n&&(r.annotationId=n),r},e.is=function(e){let t=e;return t&&"delete"===t.kind&&Ne.string(t.uri)&&(void 0===t.options||(void 0===t.options.recursive||Ne.boolean(t.options.recursive))&&(void 0===t.options.ignoreIfNotExists||Ne.boolean(t.options.ignoreIfNotExists)))&&(void 0===t.annotationId||C.is(t.annotationId))}}(D||(D={})),function(e){e.is=function(e){let t=e;return t&&(void 0!==t.changes||void 0!==t.documentChanges)&&(void 0===t.documentChanges||t.documentChanges.every((e=>Ne.string(e.kind)?S.is(e)||N.is(e)||D.is(e):T.is(e))))}}(O||(O={})),function(e){e.create=function(e){return{uri:e}},e.is=function(e){let t=e;return Ne.defined(t)&&Ne.string(t.uri)}}(I||(I={})),function(e){e.create=function(e,t){return{uri:e,version:t}},e.is=function(e){let t=e;return Ne.defined(t)&&Ne.string(t.uri)&&Ne.integer(t.version)}}(L||(L={})),function(e){e.create=function(e,t){return{uri:e,version:t}},e.is=function(e){let t=e;return Ne.defined(t)&&Ne.string(t.uri)&&(null===t.version||Ne.integer(t.version))}}(M||(M={})),function(e){e.create=function(e,t,n,r){return{uri:e,languageId:t,version:n,text:r}},e.is=function(e){let t=e;return Ne.defined(t)&&Ne.string(t.uri)&&Ne.string(t.languageId)&&Ne.integer(t.version)&&Ne.string(t.text)}}(F||(F={})),function(e){e.PlainText="plaintext",e.Markdown="markdown",e.is=function(t){const n=t;return n===e.PlainText||n===e.Markdown}}(R||(R={})),function(e){e.is=function(e){const t=e;return Ne.objectLiteral(e)&&R.is(t.kind)&&Ne.string(t.value)}}(P||(P={})),function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25}(j||(j={})),function(e){e.PlainText=1,e.Snippet=2}(V||(V={})),function(e){e.Deprecated=1}(q||(q={})),function(e){e.create=function(e,t,n){return{newText:e,insert:t,replace:n}},e.is=function(e){const t=e;return t&&Ne.string(t.newText)&&l.is(t.insert)&&l.is(t.replace)}}(B||(B={})),function(e){e.asIs=1,e.adjustIndentation=2}(U||(U={})),function(e){e.is=function(e){const t=e;return t&&(Ne.string(t.detail)||void 0===t.detail)&&(Ne.string(t.description)||void 0===t.description)}}(z||(z={})),function(e){e.create=function(e){return{label:e}}}(H||(H={})),function(e){e.create=function(e,t){return{items:e||[],isIncomplete:!!t}}}(Y||(Y={})),function(e){e.fromPlainText=function(e){return e.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")},e.is=function(e){const t=e;return Ne.string(t)||Ne.objectLiteral(t)&&Ne.string(t.language)&&Ne.string(t.value)}}(W||(W={})),function(e){e.is=function(e){let t=e;return!!t&&Ne.objectLiteral(t)&&(P.is(t.contents)||W.is(t.contents)||Ne.typedArray(t.contents,W.is))&&(void 0===e.range||l.is(e.range))}}(G||(G={})),function(e){e.create=function(e,t){return t?{label:e,documentation:t}:{label:e}}}(Q||(Q={})),function(e){e.create=function(e,t,...n){let r={label:e};return Ne.defined(t)&&(r.documentation=t),Ne.defined(n)?r.parameters=n:r.parameters=[],r}}(Z||(Z={})),function(e){e.Text=1,e.Read=2,e.Write=3}(X||(X={})),function(e){e.create=function(e,t){let n={range:e};return Ne.number(t)&&(n.kind=t),n}}(K||(K={})),function(e){e.File=1,e.Module=2,e.Namespace=3,e.Package=4,e.Class=5,e.Method=6,e.Property=7,e.Field=8,e.Constructor=9,e.Enum=10,e.Interface=11,e.Function=12,e.Variable=13,e.Constant=14,e.String=15,e.Number=16,e.Boolean=17,e.Array=18,e.Object=19,e.Key=20,e.Null=21,e.EnumMember=22,e.Struct=23,e.Event=24,e.Operator=25,e.TypeParameter=26}(J||(J={})),function(e){e.Deprecated=1}(_||(_={})),function(e){e.create=function(e,t,n,r,o){let i={name:e,kind:t,location:{uri:r,range:n}};return o&&(i.containerName=o),i}}($||($={})),function(e){e.create=function(e,t,n,r){return void 0!==r?{name:e,kind:t,location:{uri:n,range:r}}:{name:e,kind:t,location:{uri:n}}}}(ee||(ee={})),function(e){e.create=function(e,t,n,r,o,i){let a={name:e,detail:t,kind:n,range:r,selectionRange:o};return void 0!==i&&(a.children=i),a},e.is=function(e){let t=e;return t&&Ne.string(t.name)&&Ne.number(t.kind)&&l.is(t.range)&&l.is(t.selectionRange)&&(void 0===t.detail||Ne.string(t.detail))&&(void 0===t.deprecated||Ne.boolean(t.deprecated))&&(void 0===t.children||Array.isArray(t.children))&&(void 0===t.tags||Array.isArray(t.tags))}}(te||(te={})),function(e){e.Empty="",e.QuickFix="quickfix",e.Refactor="refactor",e.RefactorExtract="refactor.extract",e.RefactorInline="refactor.inline",e.RefactorRewrite="refactor.rewrite",e.Source="source",e.SourceOrganizeImports="source.organizeImports",e.SourceFixAll="source.fixAll"}(ne||(ne={})),function(e){e.Invoked=1,e.Automatic=2}(re||(re={})),function(e){e.create=function(e,t,n){let r={diagnostics:e};return null!=t&&(r.only=t),null!=n&&(r.triggerKind=n),r},e.is=function(e){let t=e;return Ne.defined(t)&&Ne.typedArray(t.diagnostics,A.is)&&(void 0===t.only||Ne.typedArray(t.only,Ne.string))&&(void 0===t.triggerKind||t.triggerKind===re.Invoked||t.triggerKind===re.Automatic)}}(oe||(oe={})),function(e){e.create=function(e,t,n){let r={title:e},o=!0;return"string"==typeof t?(o=!1,r.kind=t):w.is(t)?r.command=t:r.edit=t,o&&void 0!==n&&(r.kind=n),r},e.is=function(e){let t=e;return t&&Ne.string(t.title)&&(void 0===t.diagnostics||Ne.typedArray(t.diagnostics,A.is))&&(void 0===t.kind||Ne.string(t.kind))&&(void 0!==t.edit||void 0!==t.command)&&(void 0===t.command||w.is(t.command))&&(void 0===t.isPreferred||Ne.boolean(t.isPreferred))&&(void 0===t.edit||O.is(t.edit))}}(ie||(ie={})),function(e){e.create=function(e,t){let n={range:e};return Ne.defined(t)&&(n.data=t),n},e.is=function(e){let t=e;return Ne.defined(t)&&l.is(t.range)&&(Ne.undefined(t.command)||w.is(t.command))}}(ae||(ae={})),function(e){e.create=function(e,t){return{tabSize:e,insertSpaces:t}},e.is=function(e){let t=e;return Ne.defined(t)&&Ne.uinteger(t.tabSize)&&Ne.boolean(t.insertSpaces)}}(se||(se={})),function(e){e.create=function(e,t,n){return{range:e,target:t,data:n}},e.is=function(e){let t=e;return Ne.defined(t)&&l.is(t.range)&&(Ne.undefined(t.target)||Ne.string(t.target))}}(le||(le={})),function(e){e.create=function(e,t){return{range:e,parent:t}},e.is=function(t){let n=t;return Ne.objectLiteral(n)&&l.is(n.range)&&(void 0===n.parent||e.is(n.parent))}}(ce||(ce={})),function(e){e.namespace="namespace",e.type="type",e.class="class",e.enum="enum",e.interface="interface",e.struct="struct",e.typeParameter="typeParameter",e.parameter="parameter",e.variable="variable",e.property="property",e.enumMember="enumMember",e.event="event",e.function="function",e.method="method",e.macro="macro",e.keyword="keyword",e.modifier="modifier",e.comment="comment",e.string="string",e.number="number",e.regexp="regexp",e.operator="operator",e.decorator="decorator"}(ue||(ue={})),function(e){e.declaration="declaration",e.definition="definition",e.readonly="readonly",e.static="static",e.deprecated="deprecated",e.abstract="abstract",e.async="async",e.modification="modification",e.documentation="documentation",e.defaultLibrary="defaultLibrary"}(de||(de={})),function(e){e.is=function(e){const t=e;return Ne.objectLiteral(t)&&(void 0===t.resultId||"string"==typeof t.resultId)&&Array.isArray(t.data)&&(0===t.data.length||"number"==typeof t.data[0])}}(fe||(fe={})),function(e){e.create=function(e,t){return{range:e,text:t}},e.is=function(e){const t=e;return null!=t&&l.is(t.range)&&Ne.string(t.text)}}(pe||(pe={})),function(e){e.create=function(e,t,n){return{range:e,variableName:t,caseSensitiveLookup:n}},e.is=function(e){const t=e;return null!=t&&l.is(t.range)&&Ne.boolean(t.caseSensitiveLookup)&&(Ne.string(t.variableName)||void 0===t.variableName)}}(he||(he={})),function(e){e.create=function(e,t){return{range:e,expression:t}},e.is=function(e){const t=e;return null!=t&&l.is(t.range)&&(Ne.string(t.expression)||void 0===t.expression)}}(me||(me={})),function(e){e.create=function(e,t){return{frameId:e,stoppedLocation:t}},e.is=function(e){const t=e;return Ne.defined(t)&&l.is(e.stoppedLocation)}}(ge||(ge={})),function(e){e.Type=1,e.Parameter=2,e.is=function(e){return 1===e||2===e}}(ve||(ve={})),function(e){e.create=function(e){return{value:e}},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&(void 0===t.tooltip||Ne.string(t.tooltip)||P.is(t.tooltip))&&(void 0===t.location||c.is(t.location))&&(void 0===t.command||w.is(t.command))}}(ye||(ye={})),function(e){e.create=function(e,t,n){const r={position:e,label:t};return void 0!==n&&(r.kind=n),r},e.is=function(e){const t=e;return Ne.objectLiteral(t)&&s.is(t.position)&&(Ne.string(t.label)||Ne.typedArray(t.label,ye.is))&&(void 0===t.kind||ve.is(t.kind))&&void 0===t.textEdits||Ne.typedArray(t.textEdits,x.is)&&(void 0===t.tooltip||Ne.string(t.tooltip)||P.is(t.tooltip))&&(void 0===t.paddingLeft||Ne.boolean(t.paddingLeft))&&(void 0===t.paddingRight||Ne.boolean(t.paddingRight))}}(be||(be={})),function(e){e.createSnippet=function(e){return{kind:"snippet",value:e}}}(Ae||(Ae={})),function(e){e.create=function(e,t,n,r){return{insertText:e,filterText:t,range:n,command:r}}}(we||(we={})),function(e){e.create=function(e){return{items:e}}}(xe||(xe={})),function(e){e.Invoked=0,e.Automatic=1}(Ee||(Ee={})),function(e){e.create=function(e,t){return{range:e,text:t}}}(Ce||(Ce={})),function(e){e.create=function(e,t){return{triggerKind:e,selectedCompletionInfo:t}}}(ke||(ke={})),function(e){e.is=function(e){const t=e;return Ne.objectLiteral(t)&&o.is(t.uri)&&Ne.string(t.name)}}(Te||(Te={})),function(e){function t(e,n){if(e.length<=1)return e;const r=e.length/2|0,o=e.slice(0,r),i=e.slice(r);t(o,n),t(i,n);let a=0,s=0,l=0;for(;a{let n=e.range.start.line-t.range.start.line;return 0===n?e.range.start.character-t.range.start.character:n})),i=r.length;for(let t=o.length-1;t>=0;t--){let n=o[t],a=e.offsetAt(n.range.start),s=e.offsetAt(n.range.end);if(!(s<=i))throw new Error("Overlapping edit");r=r.substring(0,a)+n.newText+r.substring(s,r.length),i=a}return r}}(Se||(Se={}));class je{constructor(e,t,n,r){this._uri=e,this._languageId=t,this._version=n,this._content=r,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let t=this.offsetAt(e.start),n=this.offsetAt(e.end);return this._content.substring(t,n)}return this._content}update(e,t){this._content=e.text,this._version=t,this._lineOffsets=void 0}getLineOffsets(){if(void 0===this._lineOffsets){let e=[],t=this._content,n=!0;for(let r=0;r0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets}positionAt(e){e=Math.max(Math.min(e,this._content.length),0);let t=this.getLineOffsets(),n=0,r=t.length;if(0===r)return s.create(0,e);for(;ne?r=o:n=o+1}let o=n-1;return s.create(o,e-t[o])}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let n=t[e.line],r=e.line+1this._start,this.getCurrentPosition=()=>this._pos,this.eol=()=>this._sourceText.length===this._pos,this.sol=()=>0===this._pos,this.peek=()=>this._sourceText.charAt(this._pos)||null,this.next=()=>{const e=this._sourceText.charAt(this._pos);return this._pos++,e},this.eat=e=>{if(this._testNextCharacter(e))return this._start=this._pos,this._pos++,this._sourceText.charAt(this._pos-1)},this.eatWhile=e=>{let t=this._testNextCharacter(e),n=!1;for(t&&(n=t,this._start=this._pos);t;)this._pos++,t=this._testNextCharacter(e),n=!0;return n},this.eatSpace=()=>this.eatWhile(/[\s\u00a0]/),this.skipToEnd=()=>{this._pos=this._sourceText.length},this.skipTo=e=>{this._pos=e},this.match=(e,t=!0,n=!1)=>{let r=null,o=null;return"string"==typeof e?(o=new RegExp(e,n?"i":"g").test(this._sourceText.slice(this._pos,this._pos+e.length)),r=e):e instanceof RegExp&&(o=this._sourceText.slice(this._pos).match(e),r=null==o?void 0:o[0]),!(null==o||!("string"==typeof e||o instanceof Array&&this._sourceText.startsWith(o[0],this._pos)))&&(t&&(this._start=this._pos,r&&r.length&&(this._pos+=r.length)),o)},this.backUp=e=>{this._pos-=e},this.column=()=>this._pos,this.indentation=()=>{const e=this._sourceText.match(/\s*/);let t=0;if(e&&0!==e.length){const n=e[0];let r=0;for(;n.length>r;)9===n.charCodeAt(r)?t+=2:t++,r++}return t},this.current=()=>this._sourceText.slice(this._start,this._pos),this._sourceText=e}_testNextCharacter(e){const t=this._sourceText.charAt(this._pos);let n=!1;return n="string"==typeof e?t===e:e instanceof RegExp?e.test(t):e(t),n}}function qe(e){return{ofRule:e}}function Be(e,t){return{ofRule:e,isList:!0,separator:t}}function Ue(e,t){return{style:t,match:t=>t.kind===e}}function ze(e,t){return{style:t||"punctuation",match:t=>"Punctuation"===t.kind&&t.value===e}}const He=e=>" "===e||"\t"===e||","===e||"\n"===e||"\r"===e||"\ufeff"===e||" "===e,Ye={Name:/^[_A-Za-z][_0-9A-Za-z]*/,Punctuation:/^(?:!|\$|\(|\)|\.\.\.|:|=|&|@|\[|]|\{|\||\})/,Number:/^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/,String:/^(?:"""(?:\\"""|[^"]|"[^"]|""[^"])*(?:""")?|"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?)/,Comment:/^#.*/},We={Document:[Be("Definition")],Definition(e){switch(e.value){case"{":return"ShortQuery";case"query":return"Query";case"mutation":return"Mutation";case"subscription":return"Subscription";case"fragment":return Ie.b.FRAGMENT_DEFINITION;case"schema":return"SchemaDef";case"scalar":return"ScalarDef";case"type":return"ObjectTypeDef";case"interface":return"InterfaceDef";case"union":return"UnionDef";case"enum":return"EnumDef";case"input":return"InputDef";case"extend":return"ExtendDef";case"directive":return"DirectiveDef"}},ShortQuery:["SelectionSet"],Query:[Ge("query"),qe(Qe("def")),qe("VariableDefinitions"),Be("Directive"),"SelectionSet"],Mutation:[Ge("mutation"),qe(Qe("def")),qe("VariableDefinitions"),Be("Directive"),"SelectionSet"],Subscription:[Ge("subscription"),qe(Qe("def")),qe("VariableDefinitions"),Be("Directive"),"SelectionSet"],VariableDefinitions:[ze("("),Be("VariableDefinition"),ze(")")],VariableDefinition:["Variable",ze(":"),"Type",qe("DefaultValue")],Variable:[ze("$","variable"),Qe("variable")],DefaultValue:[ze("="),"Value"],SelectionSet:[ze("{"),Be("Selection"),ze("}")],Selection:(e,t)=>"..."===e.value?t.match(/[\s\u00a0,]*(on\b|@|{)/,!1)?"InlineFragment":"FragmentSpread":t.match(/[\s\u00a0,]*:/,!1)?"AliasedField":"Field",AliasedField:[Qe("property"),ze(":"),Qe("qualifier"),qe("Arguments"),Be("Directive"),qe("SelectionSet")],Field:[Qe("property"),qe("Arguments"),Be("Directive"),qe("SelectionSet")],Arguments:[ze("("),Be("Argument"),ze(")")],Argument:[Qe("attribute"),ze(":"),"Value"],FragmentSpread:[ze("..."),Qe("def"),Be("Directive")],InlineFragment:[ze("..."),qe("TypeCondition"),Be("Directive"),"SelectionSet"],FragmentDefinition:[Ge("fragment"),qe(function(e,t){const n=e.match;return e.match=e=>{let r=!1;return n&&(r=n(e)),r&&t.every((t=>t.match&&!t.match(e)))},e}(Qe("def"),[Ge("on")])),"TypeCondition",Be("Directive"),"SelectionSet"],TypeCondition:[Ge("on"),"NamedType"],Value(e){switch(e.kind){case"Number":return"NumberValue";case"String":return"StringValue";case"Punctuation":switch(e.value){case"[":return"ListValue";case"{":return"ObjectValue";case"$":return"Variable";case"&":return"NamedType"}return null;case"Name":switch(e.value){case"true":case"false":return"BooleanValue"}return"null"===e.value?"NullValue":"EnumValue"}},NumberValue:[Ue("Number","number")],StringValue:[{style:"string",match:e=>"String"===e.kind,update(e,t){t.value.startsWith('"""')&&(e.inBlockstring=!t.value.slice(3).endsWith('"""'))}}],BooleanValue:[Ue("Name","builtin")],NullValue:[Ue("Name","keyword")],EnumValue:[Qe("string-2")],ListValue:[ze("["),Be("Value"),ze("]")],ObjectValue:[ze("{"),Be("ObjectField"),ze("}")],ObjectField:[Qe("attribute"),ze(":"),"Value"],Type:e=>"["===e.value?"ListType":"NonNullType",ListType:[ze("["),"Type",ze("]"),qe(ze("!"))],NonNullType:["NamedType",qe(ze("!"))],NamedType:[{style:"atom",match:e=>"Name"===e.kind,update(e,t){var n;(null===(n=e.prevState)||void 0===n?void 0:n.prevState)&&(e.name=t.value,e.prevState.prevState.type=t.value)}}],Directive:[ze("@","meta"),Qe("meta"),qe("Arguments")],DirectiveDef:[Ge("directive"),ze("@","meta"),Qe("meta"),qe("ArgumentsDef"),Ge("on"),Be("DirectiveLocation",ze("|"))],InterfaceDef:[Ge("interface"),Qe("atom"),qe("Implements"),Be("Directive"),ze("{"),Be("FieldDef"),ze("}")],Implements:[Ge("implements"),Be("NamedType",ze("&"))],DirectiveLocation:[Qe("string-2")],SchemaDef:[Ge("schema"),Be("Directive"),ze("{"),Be("OperationTypeDef"),ze("}")],OperationTypeDef:[Qe("keyword"),ze(":"),Qe("atom")],ScalarDef:[Ge("scalar"),Qe("atom"),Be("Directive")],ObjectTypeDef:[Ge("type"),Qe("atom"),qe("Implements"),Be("Directive"),ze("{"),Be("FieldDef"),ze("}")],FieldDef:[Qe("property"),qe("ArgumentsDef"),ze(":"),"Type",Be("Directive")],ArgumentsDef:[ze("("),Be("InputValueDef"),ze(")")],InputValueDef:[Qe("attribute"),ze(":"),"Type",qe("DefaultValue"),Be("Directive")],UnionDef:[Ge("union"),Qe("atom"),Be("Directive"),ze("="),Be("UnionMember",ze("|"))],UnionMember:["NamedType"],EnumDef:[Ge("enum"),Qe("atom"),Be("Directive"),ze("{"),Be("EnumValueDef"),ze("}")],EnumValueDef:[Qe("string-2"),Be("Directive")],InputDef:[Ge("input"),Qe("atom"),Be("Directive"),ze("{"),Be("InputValueDef"),ze("}")],ExtendDef:[Ge("extend"),"ExtensionDefinition"],ExtensionDefinition(e){switch(e.value){case"schema":return Ie.b.SCHEMA_EXTENSION;case"scalar":return Ie.b.SCALAR_TYPE_EXTENSION;case"type":return Ie.b.OBJECT_TYPE_EXTENSION;case"interface":return Ie.b.INTERFACE_TYPE_EXTENSION;case"union":return Ie.b.UNION_TYPE_EXTENSION;case"enum":return Ie.b.ENUM_TYPE_EXTENSION;case"input":return Ie.b.INPUT_OBJECT_TYPE_EXTENSION}},[Ie.b.SCHEMA_EXTENSION]:["SchemaDef"],[Ie.b.SCALAR_TYPE_EXTENSION]:["ScalarDef"],[Ie.b.OBJECT_TYPE_EXTENSION]:["ObjectTypeDef"],[Ie.b.INTERFACE_TYPE_EXTENSION]:["InterfaceDef"],[Ie.b.UNION_TYPE_EXTENSION]:["UnionDef"],[Ie.b.ENUM_TYPE_EXTENSION]:["EnumDef"],[Ie.b.INPUT_OBJECT_TYPE_EXTENSION]:["InputDef"]};function Ge(e){return{style:"keyword",match:t=>"Name"===t.kind&&t.value===e}}function Qe(e){return{style:e,match:e=>"Name"===e.kind,update(e,t){e.name=t.value}}}function Ze(e={eatWhitespace:e=>e.eatWhile(He),lexRules:Ye,parseRules:We,editorConfig:{}}){return{startState(){const t={level:0,step:0,name:null,kind:null,type:null,rule:null,needsSeparator:!1,prevState:null};return Je(e.parseRules,t,Ie.b.DOCUMENT),t},token:(t,n)=>function(e,t,n){var r;if(t.inBlockstring)return e.match(/.*"""/)?(t.inBlockstring=!1,"string"):(e.skipToEnd(),"string");const{lexRules:o,parseRules:i,eatWhitespace:a,editorConfig:s}=n;if(t.rule&&0===t.rule.length?_e(t):t.needsAdvance&&(t.needsAdvance=!1,$e(t,!0)),e.sol()){const n=(null==s?void 0:s.tabSize)||2;t.indentLevel=Math.floor(e.indentation()/n)}if(a(e))return"ws";const l=function(e,t){const n=Object.keys(e);for(let r=0;r0&&e.at(-1){let t=rt.UNKNOWN;if(e)try{(0,De.YR)((0,Oe.qg)(e),{enter(e){if("Document"!==e.kind)return!!ot.includes(e.kind)&&(t=rt.TYPE_SYSTEM,De.sP);t=rt.EXECUTABLE}})}catch(e){return t}return t};function at(e,t,n){return n===Me.S0.name&&e.getQueryType()===t?Me.S0:n===Me.Xe.name&&e.getQueryType()===t?Me.Xe:n===Me.of.name&&(0,Le.ML)(t)?Me.of:"getFields"in t?t.getFields()[n]:null}function st(e,t){const n=[];let r=e;for(;null==r?void 0:r.kind;)n.push(r),r=r.prevState;for(let e=n.length-1;e>=0;e--)t(n[e])}const lt=Object.assign(Object.assign({},Ie.b),{ALIASED_FIELD:"AliasedField",ARGUMENTS:"Arguments",SHORT_QUERY:"ShortQuery",QUERY:"Query",MUTATION:"Mutation",SUBSCRIPTION:"Subscription",TYPE_CONDITION:"TypeCondition",INVALID:"Invalid",COMMENT:"Comment",SCHEMA_DEF:"SchemaDef",SCALAR_DEF:"ScalarDef",OBJECT_TYPE_DEF:"ObjectTypeDef",OBJECT_VALUE:"ObjectValue",LIST_VALUE:"ListValue",INTERFACE_DEF:"InterfaceDef",UNION_DEF:"UnionDef",ENUM_DEF:"EnumDef",ENUM_VALUE:"EnumValue",FIELD_DEF:"FieldDef",INPUT_DEF:"InputDef",INPUT_VALUE_DEF:"InputValueDef",ARGUMENTS_DEF:"ArgumentsDef",EXTEND_DEF:"ExtendDef",EXTENSION_DEFINITION:"ExtensionDefinition",DIRECTIVE_DEF:"DirectiveDef",IMPLEMENTS:"Implements",VARIABLE_DEFINITIONS:"VariableDefinitions",TYPE:"Type",VARIABLE:"Variable"});var ct;function ut(e){const t=Object.keys(e),n=t.length,r=new Array(n);for(let o=0;o!e.isDeprecated));return ft(ft(e.map((e=>({proximity:ht(pt(e.label),t),entry:e}))),(e=>e.proximity<=2)),(e=>!e.entry.isDeprecated)).sort(((e,t)=>(e.entry.isDeprecated?1:0)-(t.entry.isDeprecated?1:0)||e.proximity-t.proximity||e.entry.label.length-t.entry.label.length)).map((e=>e.entry))}(t,pt(e.string))}function ft(e,t){const n=e.filter(t);return 0===n.length?e:n}function pt(e){return e.toLowerCase().replaceAll(/\W/g,"")}function ht(e,t){let n=function(e,t){let n,r;const o=[],i=e.length,a=t.length;for(n=0;n<=i;n++)o[n]=[n];for(r=1;r<=a;r++)o[0][r]=r;for(n=1;n<=i;n++)for(r=1;r<=a;r++){const i=e[n-1]===t[r-1]?0:1;o[n][r]=Math.min(o[n-1][r]+1,o[n][r-1]+1,o[n-1][r-1]+i),n>1&&r>1&&e[n-1]===t[r-2]&&e[n-2]===t[r-1]&&(o[n][r]=Math.min(o[n][r],o[n-2][r-2]+i))}return o[i][a]}(t,e);return e.length>t.length&&(n-=e.length-t.length-1,n+=0===e.indexOf(t)?0:.5),n}!function(e){e.Text=1,e.Method=2,e.Function=3,e.Constructor=4,e.Field=5,e.Variable=6,e.Class=7,e.Interface=8,e.Module=9,e.Property=10,e.Unit=11,e.Value=12,e.Enum=13,e.Keyword=14,e.Snippet=15,e.Color=16,e.File=17,e.Reference=18,e.Folder=19,e.EnumMember=20,e.Constant=21,e.Struct=22,e.Event=23,e.Operator=24,e.TypeParameter=25}(ct||(ct={}));const mt=(e,t,n)=>{if(!t)return null!=n?n:e;const r=(0,Le.MR)(t);return(0,Le.YQ)(r)||(0,Le.qK)(r)||(0,Le.Fs)(r)||(0,Le.Lc)(r)?e+" {\n $1\n}":null!=n?n:e},gt=(e,t,n)=>{if((0,Le.Fs)(t)){const n=(0,Le.MR)(t.ofType);return e+`[${mt("",n,"$1")}]`}return mt(e,t,n)},vt=e=>{const t=e.args.filter((e=>e.type.toString().endsWith("!")));if(t.length)return e.name+`(${t.map(((e,t)=>`${e.name}: $${t+1}`))}) ${mt("",e.type,"\n")}`},yt={command:"editor.action.triggerSuggest",title:"Suggestions"},bt=e=>{const t=[];if(e)try{(0,De.YR)((0,Oe.qg)(e),{FragmentDefinition(e){t.push(e)}})}catch(e){return[]}return t};function At(e,t,n,r,o,i){var a;const s=Object.assign(Object.assign({},i),{schema:e}),l=function(e,t,n,r,o){const i=r||function(e,t,n=0){let r=null,o=null,i=null;const a=nt(e,((e,a,s,l)=>{if(!(l!==t.line||e.getCurrentPosition()+n{var p;switch(t.kind){case lt.QUERY:case"ShortQuery":d=e.getQueryType();break;case lt.MUTATION:d=e.getMutationType();break;case lt.SUBSCRIPTION:d=e.getSubscriptionType();break;case lt.INLINE_FRAGMENT:case lt.FRAGMENT_DEFINITION:t.type&&(d=e.getType(t.type));break;case lt.FIELD:case lt.ALIASED_FIELD:d&&t.name?(a=u?at(e,u,t.name):null,d=a?a.type:null):a=null;break;case lt.SELECTION_SET:u=(0,Le.MR)(d);break;case lt.DIRECTIVE:o=t.name?e.getDirective(t.name):null;break;case lt.INTERFACE_DEF:t.name&&(l=null,f=new Le.VA({name:t.name,interfaces:[],fields:{}}));break;case lt.OBJECT_TYPE_DEF:t.name&&(f=null,l=new Le.bh({name:t.name,interfaces:[],fields:{}}));break;case lt.ARGUMENTS:if(t.prevState)switch(t.prevState.kind){case lt.FIELD:r=a&&a.args;break;case lt.DIRECTIVE:r=o&&o.args;break;case lt.ALIASED_FIELD:{const n=null===(p=t.prevState)||void 0===p?void 0:p.name;if(!n){r=null;break}const o=u?at(e,u,n):null;if(!o){r=null;break}r=o.args;break}default:r=null}else r=null;break;case lt.ARGUMENT:if(r)for(let e=0;ee.value===t.name)):null;break;case lt.LIST_VALUE:const m=(0,Le.yl)(s);s=m instanceof Le.KT?m.ofType:null;break;case lt.OBJECT_VALUE:const g=(0,Le.MR)(s);c=g instanceof Le.zP?g.getFields():null;break;case lt.OBJECT_FIELD:const v=t.name&&c?c[t.name]:null;s=null==v?void 0:v.type,a=v,d=a?a.type:null;break;case lt.NAMED_TYPE:t.name&&(d=e.getType(t.name))}})),{argDef:n,argDefs:r,directiveDef:o,enumValue:i,fieldDef:a,inputType:s,objectFieldDefs:c,parentType:u,type:d,interfaceDef:f,objectTypeDef:l}}(n,i.state);var l,c;return{token:i,state:a,typeInfo:s,mode:(null==o?void 0:o.mode)||(l=e,(null==(c=null==o?void 0:o.uri)?void 0:c.endsWith(".graphqls"))?rt.TYPE_SYSTEM:it(l))}}(t,n,e,r,i);if(!l)return[];const{state:c,typeInfo:u,mode:d,token:f}=l,{kind:p,step:h,prevState:m}=c;if(p===lt.DOCUMENT)return d===rt.TYPE_SYSTEM?function(e){return dt(e,[{label:"extend",kind:ct.Function},...wt])}(f):d===rt.EXECUTABLE?function(e){return dt(e,xt)}(f):function(e){return dt(e,[{label:"extend",kind:ct.Function},...xt,...wt])}(f);if(p===lt.EXTEND_DEF)return function(e){return dt(e,wt)}(f);if((null===(a=null==m?void 0:m.prevState)||void 0===a?void 0:a.kind)===lt.EXTENSION_DEFINITION&&c.name)return dt(f,[]);if((null==m?void 0:m.kind)===Ie.b.SCALAR_TYPE_EXTENSION)return dt(f,Object.values(e.getTypeMap()).filter(Le.lg).map((e=>({label:e.name,kind:ct.Function}))));if((null==m?void 0:m.kind)===Ie.b.OBJECT_TYPE_EXTENSION)return dt(f,Object.values(e.getTypeMap()).filter((e=>(0,Le.YQ)(e)&&!e.name.startsWith("__"))).map((e=>({label:e.name,kind:ct.Function}))));if((null==m?void 0:m.kind)===Ie.b.INTERFACE_TYPE_EXTENSION)return dt(f,Object.values(e.getTypeMap()).filter(Le.kD).map((e=>({label:e.name,kind:ct.Function}))));if((null==m?void 0:m.kind)===Ie.b.UNION_TYPE_EXTENSION)return dt(f,Object.values(e.getTypeMap()).filter(Le.CK).map((e=>({label:e.name,kind:ct.Function}))));if((null==m?void 0:m.kind)===Ie.b.ENUM_TYPE_EXTENSION)return dt(f,Object.values(e.getTypeMap()).filter((e=>(0,Le.oF)(e)&&!e.name.startsWith("__"))).map((e=>({label:e.name,kind:ct.Function}))));if((null==m?void 0:m.kind)===Ie.b.INPUT_OBJECT_TYPE_EXTENSION)return dt(f,Object.values(e.getTypeMap()).filter(Le.qK).map((e=>({label:e.name,kind:ct.Function}))));if(p===lt.IMPLEMENTS||p===lt.NAMED_TYPE&&(null==m?void 0:m.kind)===lt.IMPLEMENTS)return function(e,t,n,r,o){if(t.needsSeparator)return[];const i=ut(n.getTypeMap()).filter(Le.kD),a=i.map((({name:e})=>e)),s=new Set;nt(r,((e,t)=>{var r,i,l,c,u;if(t.name&&(t.kind!==lt.INTERFACE_DEF||a.includes(t.name)||s.add(t.name),t.kind===lt.NAMED_TYPE&&(null===(r=t.prevState)||void 0===r?void 0:r.kind)===lt.IMPLEMENTS))if(o.interfaceDef){if(null===(i=o.interfaceDef)||void 0===i?void 0:i.getInterfaces().find((({name:e})=>e===t.name)))return;const e=n.getType(t.name),r=null===(l=o.interfaceDef)||void 0===l?void 0:l.toConfig();o.interfaceDef=new Le.VA(Object.assign(Object.assign({},r),{interfaces:[...r.interfaces,e||new Le.VA({name:t.name,fields:{}})]}))}else if(o.objectTypeDef){if(null===(c=o.objectTypeDef)||void 0===c?void 0:c.getInterfaces().find((({name:e})=>e===t.name)))return;const e=n.getType(t.name),r=null===(u=o.objectTypeDef)||void 0===u?void 0:u.toConfig();o.objectTypeDef=new Le.bh(Object.assign(Object.assign({},r),{interfaces:[...r.interfaces,e||new Le.VA({name:t.name,fields:{}})]}))}}));const l=o.interfaceDef||o.objectTypeDef,c=((null==l?void 0:l.getInterfaces())||[]).map((({name:e})=>e));return dt(e,i.concat([...s].map((e=>({name:e})))).filter((({name:e})=>e!==(null==l?void 0:l.name)&&!c.includes(e))).map((e=>{const t={label:e.name,kind:ct.Interface,type:e};return(null==e?void 0:e.description)&&(t.documentation=e.description),t})))}(f,c,e,t,u);if(p===lt.SELECTION_SET||p===lt.FIELD||p===lt.ALIASED_FIELD)return function(e,t,n){var r;if(t.parentType){const{parentType:o}=t;let i=[];return"getFields"in o&&(i=ut(o.getFields())),(0,Le.ML)(o)&&i.push(Me.of),o===(null===(r=null==n?void 0:n.schema)||void 0===r?void 0:r.getQueryType())&&i.push(Me.S0,Me.Xe),dt(e,i.map(((t,r)=>{var o;const i={sortText:String(r)+t.name,label:t.name,detail:String(t.type),documentation:null!==(o=t.description)&&void 0!==o?o:void 0,deprecated:Boolean(t.deprecationReason),isDeprecated:Boolean(t.deprecationReason),deprecationReason:t.deprecationReason,kind:ct.Field,labelDetails:{detail:" "+t.type.toString()},type:t.type};return(null==n?void 0:n.fillLeafsOnComplete)&&(i.insertText=vt(t),i.insertText||(i.insertText=mt(t.name,t.type,t.name+(e.state.needsAdvance?"":"\n"))),i.insertText&&(i.insertTextFormat=V.Snippet,i.insertTextMode=U.adjustIndentation,i.command=yt)),i})))}return[]}(f,u,s);if(p===lt.ARGUMENTS||p===lt.ARGUMENT&&0===h){const{argDefs:e}=u;if(e)return dt(f,e.map((e=>{var t;return{label:e.name,insertText:gt(e.name+": ",e.type),insertTextMode:U.adjustIndentation,insertTextFormat:V.Snippet,command:yt,labelDetails:{detail:" "+String(e.type)},documentation:null!==(t=e.description)&&void 0!==t?t:void 0,kind:ct.Variable,type:e.type}})))}if((p===lt.OBJECT_VALUE||p===lt.OBJECT_FIELD&&0===h)&&u.objectFieldDefs){const e=ut(u.objectFieldDefs),t=p===lt.OBJECT_VALUE?ct.Value:ct.Field;return dt(f,e.map((e=>{var n;return{label:e.name,detail:String(e.type),documentation:null!==(n=null==e?void 0:e.description)&&void 0!==n?n:void 0,kind:t,type:e.type,insertText:gt(e.name+": ",e.type),insertTextMode:U.adjustIndentation,insertTextFormat:V.Snippet,command:yt}})))}if(p===lt.ENUM_VALUE||p===lt.LIST_VALUE&&1===h||p===lt.OBJECT_FIELD&&2===h||p===lt.ARGUMENT&&2===h)return function(e,t,n,r){const o=(0,Le.MR)(t.inputType),i=Ct(n,r,e).filter((e=>e.detail===(null==o?void 0:o.name)));return o instanceof Le.Zb?dt(e,o.getValues().map((e=>{var t;return{label:e.name,detail:String(o),documentation:null!==(t=e.description)&&void 0!==t?t:void 0,deprecated:Boolean(e.deprecationReason),isDeprecated:Boolean(e.deprecationReason),deprecationReason:e.deprecationReason,kind:ct.EnumMember,type:o}})).concat(i)):o===Fe.kk?dt(e,i.concat([{label:"true",detail:String(Fe.kk),documentation:"Not false.",kind:ct.Variable,type:Fe.kk},{label:"false",detail:String(Fe.kk),documentation:"Not true.",kind:ct.Variable,type:Fe.kk}])):i}(f,u,t,e);if(p===lt.VARIABLE&&1===h){const n=(0,Le.MR)(u.inputType);return dt(f,Ct(t,e,f).filter((e=>e.detail===(null==n?void 0:n.name))))}if(p===lt.TYPE_CONDITION&&1===h||p===lt.NAMED_TYPE&&null!=m&&m.kind===lt.TYPE_CONDITION)return function(e,t,n){let r;if(t.parentType)if((0,Le.Lc)(t.parentType)){const e=(0,Le.N_)(t.parentType),o=n.getPossibleTypes(e),i=Object.create(null);for(const e of o)for(const t of e.getInterfaces())i[t.name]=t;r=o.concat(ut(i))}else r=[t.parentType];else r=ut(n.getTypeMap()).filter((e=>(0,Le.ML)(e)&&!e.name.startsWith("__")));return dt(e,r.map((e=>{const t=(0,Le.MR)(e);return{label:String(e),documentation:(null==t?void 0:t.description)||"",kind:ct.Field}})))}(f,u,e);if(p===lt.FRAGMENT_SPREAD&&1===h)return function(e,t,n,r,o){if(!r)return[];const i=n.getTypeMap(),a=function(e){let t;return st(e,(e=>{switch(e.kind){case"Query":case"ShortQuery":case"Mutation":case"Subscription":case"FragmentDefinition":t=e}})),t}(e.state),s=function(e){const t=[];return nt(e,((e,n)=>{n.kind===lt.FRAGMENT_DEFINITION&&n.name&&n.type&&t.push({kind:lt.FRAGMENT_DEFINITION,name:{kind:Ie.b.NAME,value:n.name},selectionSet:{kind:lt.SELECTION_SET,selections:[]},typeCondition:{kind:lt.NAMED_TYPE,name:{kind:Ie.b.NAME,value:n.type}}})})),t}(r);o&&o.length>0&&s.push(...o);return dt(e,s.filter((e=>i[e.typeCondition.name.value]&&!(a&&a.kind===lt.FRAGMENT_DEFINITION&&a.name===e.name.value)&&(0,Le.ML)(t.parentType)&&(0,Le.ML)(i[e.typeCondition.name.value])&&(0,Re.uI)(n,t.parentType,i[e.typeCondition.name.value]))).map((e=>({label:e.name.value,detail:String(i[e.typeCondition.name.value]),documentation:`fragment ${e.name.value} on ${e.typeCondition.name.value}`,labelDetails:{detail:`fragment ${e.name.value} on ${e.typeCondition.name.value}`},kind:ct.Field,type:i[e.typeCondition.name.value]}))))}(f,u,e,t,Array.isArray(o)?o:bt(o));const g=kt(c);return g.kind===lt.FIELD_DEF?dt(f,Object.values(e.getTypeMap()).filter((e=>(0,Le.oH)(e)&&!e.name.startsWith("__"))).map((e=>({label:e.name,kind:ct.Function,insertText:(null==i?void 0:i.fillLeafsOnComplete)?e.name+"\n":e.name,insertTextMode:U.adjustIndentation})))):g.kind===lt.INPUT_VALUE_DEF&&2===h?dt(f,Object.values(e.getTypeMap()).filter((e=>(0,Le.dX)(e)&&!e.name.startsWith("__"))).map((e=>({label:e.name,kind:ct.Function,insertText:(null==i?void 0:i.fillLeafsOnComplete)?e.name+"\n$1":e.name,insertTextMode:U.adjustIndentation,insertTextFormat:V.Snippet})))):p===lt.VARIABLE_DEFINITION&&2===h||p===lt.LIST_TYPE&&1===h||p===lt.NAMED_TYPE&&m&&(m.kind===lt.VARIABLE_DEFINITION||m.kind===lt.LIST_TYPE||m.kind===lt.NON_NULL_TYPE)?function(e,t){return dt(e,ut(t.getTypeMap()).filter(Le.dX).map((e=>({label:e.name,documentation:(null==e?void 0:e.description)||"",kind:ct.Variable}))))}(f,e):p===lt.DIRECTIVE?function(e,t,n){var r;if(null===(r=t.prevState)||void 0===r?void 0:r.kind){const r=n.getDirectives().filter((e=>function(e,t){if(!(null==e?void 0:e.kind))return!1;const{kind:n,prevState:r}=e,{locations:o}=t;switch(n){case lt.QUERY:return o.includes(Pe.H.QUERY);case lt.MUTATION:return o.includes(Pe.H.MUTATION);case lt.SUBSCRIPTION:return o.includes(Pe.H.SUBSCRIPTION);case lt.FIELD:case lt.ALIASED_FIELD:return o.includes(Pe.H.FIELD);case lt.FRAGMENT_DEFINITION:return o.includes(Pe.H.FRAGMENT_DEFINITION);case lt.FRAGMENT_SPREAD:return o.includes(Pe.H.FRAGMENT_SPREAD);case lt.INLINE_FRAGMENT:return o.includes(Pe.H.INLINE_FRAGMENT);case lt.SCHEMA_DEF:return o.includes(Pe.H.SCHEMA);case lt.SCALAR_DEF:return o.includes(Pe.H.SCALAR);case lt.OBJECT_TYPE_DEF:return o.includes(Pe.H.OBJECT);case lt.FIELD_DEF:return o.includes(Pe.H.FIELD_DEFINITION);case lt.INTERFACE_DEF:return o.includes(Pe.H.INTERFACE);case lt.UNION_DEF:return o.includes(Pe.H.UNION);case lt.ENUM_DEF:return o.includes(Pe.H.ENUM);case lt.ENUM_VALUE:return o.includes(Pe.H.ENUM_VALUE);case lt.INPUT_DEF:return o.includes(Pe.H.INPUT_OBJECT);case lt.INPUT_VALUE_DEF:switch(null==r?void 0:r.kind){case lt.ARGUMENTS_DEF:return o.includes(Pe.H.ARGUMENT_DEFINITION);case lt.INPUT_DEF:return o.includes(Pe.H.INPUT_FIELD_DEFINITION)}}return!1}(t.prevState,e)));return dt(e,r.map((e=>({label:e.name,documentation:(null==e?void 0:e.description)||"",kind:ct.Function}))))}return[]}(f,c,e):p===lt.DIRECTIVE_DEF?function(e,t,n){const r=n.getDirectives().find((e=>e.name===t.name));return dt(e,(null==r?void 0:r.args.map((e=>({label:e.name,documentation:e.description||"",kind:ct.Field}))))||[])}(f,c,e):[]}const wt=[{label:"type",kind:ct.Function},{label:"interface",kind:ct.Function},{label:"union",kind:ct.Function},{label:"input",kind:ct.Function},{label:"scalar",kind:ct.Function},{label:"schema",kind:ct.Function}],xt=[{label:"query",kind:ct.Function},{label:"mutation",kind:ct.Function},{label:"subscription",kind:ct.Function},{label:"fragment",kind:ct.Function},{label:"{",kind:ct.Constructor}],Et=(e,t)=>{var n,r,o,i,a,s,l,c,u,d;return(null===(n=e.prevState)||void 0===n?void 0:n.kind)===t?e.prevState:(null===(o=null===(r=e.prevState)||void 0===r?void 0:r.prevState)||void 0===o?void 0:o.kind)===t?e.prevState.prevState:(null===(s=null===(a=null===(i=e.prevState)||void 0===i?void 0:i.prevState)||void 0===a?void 0:a.prevState)||void 0===s?void 0:s.kind)===t?e.prevState.prevState.prevState:(null===(d=null===(u=null===(c=null===(l=e.prevState)||void 0===l?void 0:l.prevState)||void 0===c?void 0:c.prevState)||void 0===u?void 0:u.prevState)||void 0===d?void 0:d.kind)===t?e.prevState.prevState.prevState.prevState:void 0};function Ct(e,t,n){let r,o=null;const i=Object.create({});return nt(e,((e,a)=>{var s;if((null==a?void 0:a.kind)===lt.VARIABLE&&a.name&&(o=a.name),(null==a?void 0:a.kind)===lt.NAMED_TYPE&&o){const e=Et(a,lt.TYPE);(null==e?void 0:e.type)&&(r=t.getType(null==e?void 0:e.type))}if(o&&r&&!i[o]){const e="$"===n.string||"Variable"===(null===(s=null==n?void 0:n.state)||void 0===s?void 0:s.kind)?o:"$"+o;i[o]={detail:r.toString(),insertText:e,label:"$"+o,rawInsert:e,type:r,kind:ct.Variable},o=null,r=null}})),ut(i)}function kt(e){return e.prevState&&e.kind&&[lt.NAMED_TYPE,lt.LIST_TYPE,lt.TYPE,lt.NON_NULL_TYPE].includes(e.kind)?kt(e.prevState):e}var Tt=n(2012),St=n.n(Tt);const Nt=(e,t)=>{if(!t)return[];const n=new Map,r=new Set;(0,De.YR)(e,{FragmentDefinition(e){n.set(e.name.value,!0)},FragmentSpread(e){r.has(e.name.value)||r.add(e.name.value)}});const o=new Set;for(const e of r)!n.has(e)&&t.has(e)&&o.add(St()(t.get(e)));const i=[];for(const e of o)(0,De.YR)(e,{FragmentSpread(e){!r.has(e.name.value)&&t.get(e.name.value)&&(o.add(St()(t.get(e.name.value))),r.add(e.name.value))}}),n.has(e.name.value)||i.push(e);return i};class Dt{constructor(e,t){this.containsPosition=e=>this.start.line===e.line?this.start.character<=e.character:this.end.line===e.line?this.end.character>=e.character:this.start.line<=e.line&&this.end.line>=e.line,this.start=e,this.end=t}setStart(e,t){this.start=new Ot(e,t)}setEnd(e,t){this.end=new Ot(e,t)}}class Ot{constructor(e,t){this.lessThanOrEqualTo=e=>this.line{if(!e)throw new Error(t)};function cn(e,t=null,n,r,o){var i,a;let s=null,l="";o&&(l="string"==typeof o?o:o.reduce(((e,t)=>e+(0,$t.y)(t)+"\n\n"),""));const c=l?`${e}\n\n${l}`:e;try{s=(0,Oe.qg)(c)}catch(e){if(e instanceof en.eO){const t=function(e,t){const n=Ze(),r=n.startState(),o=t.split("\n");ln(o.length>=e.line,"Query text must have more lines than where the error happened");let i=null;for(let t=0;te!==Qt.z&&e!==Zt.T&&(!r||e!==Xt.K)));return n&&Array.prototype.push.apply(o,n),(0,Kt.tf)(e,t,o).filter((e=>{if(e.message.includes("Unknown directive")&&e.nodes){const t=e.nodes[0];if(t&&t.kind===Ie.b.DIRECTIVE){const e=t.name.value;if("arguments"===e||"argumentDefinitions"===e)return!1}}return!0}))}(t,e,n,r).flatMap((e=>un(e,sn.Error,"Validation"))),i=(0,Kt.tf)(t,e,[tn.k]).flatMap((e=>un(e,sn.Warning,"Deprecation")));return o.concat(i)}(s,t,n,r)}function un(e,t,n){if(!e.nodes)return[];const r=[];for(const[o,i]of e.nodes.entries()){const a="Variable"!==i.kind&&"name"in i&&void 0!==i.name?i.name:"variable"in i&&void 0!==i.variable?i.variable:i;if(a){ln(e.locations,"GraphQL validation error requires locations.");const i=e.locations[o],s=dn(a),l=i.column+(s.end-s.start);r.push({source:`GraphQL: ${n}`,message:e.message,severity:t,range:new Dt(new Ot(i.line-1,i.column-1),new Ot(i.line-1,l))})}}return r}function dn(e){const t=e.loc;return ln(t,"Expected ASTNode to have a location."),t}const{INLINE_FRAGMENT:fn}=Ie.b},1653:e=>{"use strict";e.exports="data:font/woff2;base64,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"},1740:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},1761:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r{"use strict";e.exports="data:font/woff2;base64,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"},1838:(e,t,n)=>{"use strict";n.d(t,{U:()=>u});var r=n(5487),o=n(5198),i=n(4833),a=n(6382),s=n(8255),l=n(2704),c=n(2114);function u(e){return{ListValue(t){const n=(0,c.yl)(e.getParentInputType());if(!(0,c.Fs)(n))return d(e,t),!1},ObjectValue(t){const n=(0,c.MR)(e.getInputType());if(!(0,c.qK)(n))return d(e,t),!1;const i=(0,r.K)(t.fields,(e=>e.name.value));for(const r of Object.values(n.getFields()))if(!i[r.name]&&(0,c.YX)(r)){const i=(0,o.N)(r.type);e.reportError(new s.eO(`Field "${n.name}.${r.name}" of required type "${i}" was not provided.`,t))}},ObjectField(t){const n=(0,c.MR)(e.getParentInputType());if(!e.getInputType()&&(0,c.qK)(n)){const r=(0,a.x)(t.name.value,Object.keys(n.getFields()));e.reportError(new s.eO(`Field "${t.name.value}" is not defined by type "${n.name}".`+(0,i.a)(r),t))}},NullValue(t){const n=e.getInputType();(0,c.bd)(n)&&e.reportError(new s.eO(`Expected value of type "${(0,o.N)(n)}", found ${(0,l.y)(t)}.`,t))},EnumValue:t=>d(e,t),IntValue:t=>d(e,t),FloatValue:t=>d(e,t),StringValue:t=>d(e,t),BooleanValue:t=>d(e,t)}}function d(e,t){const n=e.getInputType();if(!n)return;const r=(0,c.MR)(n);if((0,c.zf)(r))try{if(void 0===r.parseLiteral(t,void 0)){const r=(0,o.N)(n);e.reportError(new s.eO(`Expected value of type "${r}", found ${(0,l.y)(t)}.`,t))}}catch(r){const i=(0,o.N)(n);r instanceof s.eO?e.reportError(r):e.reportError(new s.eO(`Expected value of type "${i}", found ${(0,l.y)(t)}; `+r.message,t,void 0,void 0,void 0,r))}else{const r=(0,o.N)(n);e.reportError(new s.eO(`Expected value of type "${r}", found ${(0,l.y)(t)}.`,t))}}},1875:(e,t,n)=>{"use strict";n.d(t,{dY:()=>l,ot:()=>s});var r=n(2455),o=n(424),i=n(7350);class a{constructor(e,t){this._ast=e,this._fragments=void 0,this._fragmentSpreads=new Map,this._recursivelyReferencedFragments=new Map,this._onError=t}get[Symbol.toStringTag](){return"ASTValidationContext"}reportError(e){this._onError(e)}getDocument(){return this._ast}getFragment(e){let t;if(this._fragments)t=this._fragments;else{t=Object.create(null);for(const e of this.getDocument().definitions)e.kind===r.b.FRAGMENT_DEFINITION&&(t[e.name.value]=e);this._fragments=t}return t[e]}getFragmentSpreads(e){let t=this._fragmentSpreads.get(e);if(!t){t=[];const n=[e];let o;for(;o=n.pop();)for(const e of o.selections)e.kind===r.b.FRAGMENT_SPREAD?t.push(e):e.selectionSet&&n.push(e.selectionSet);this._fragmentSpreads.set(e,t)}return t}getRecursivelyReferencedFragments(e){let t=this._recursivelyReferencedFragments.get(e);if(!t){t=[];const n=Object.create(null),r=[e.selectionSet];let o;for(;o=r.pop();)for(const e of this.getFragmentSpreads(o)){const o=e.name.value;if(!0!==n[o]){n[o]=!0;const e=this.getFragment(o);e&&(t.push(e),r.push(e.selectionSet))}}this._recursivelyReferencedFragments.set(e,t)}return t}}class s extends a{constructor(e,t,n){super(e,n),this._schema=t}get[Symbol.toStringTag](){return"SDLValidationContext"}getSchema(){return this._schema}}class l extends a{constructor(e,t,n,r){super(t,r),this._schema=e,this._typeInfo=n,this._variableUsages=new Map,this._recursiveVariableUsages=new Map}get[Symbol.toStringTag](){return"ValidationContext"}getSchema(){return this._schema}getVariableUsages(e){let t=this._variableUsages.get(e);if(!t){const n=[],r=new i.D(this._schema);(0,o.YR)(e,(0,i.S)(r,{VariableDefinition:()=>!1,Variable(e){n.push({node:e,type:r.getInputType(),defaultValue:r.getDefaultValue()})}})),t=n,this._variableUsages.set(e,t)}return t}getRecursiveVariableUsages(e){let t=this._recursiveVariableUsages.get(e);if(!t){t=this.getVariableUsages(e);for(const n of this.getRecursivelyReferencedFragments(e))t=t.concat(this.getVariableUsages(n));this._recursiveVariableUsages.set(e,t)}return t}getType(){return this._typeInfo.getType()}getParentType(){return this._typeInfo.getParentType()}getInputType(){return this._typeInfo.getInputType()}getParentInputType(){return this._typeInfo.getParentInputType()}getFieldDef(){return this._typeInfo.getFieldDef()}getDirective(){return this._typeInfo.getDirective()}getArgument(){return this._typeInfo.getArgument()}getEnumValue(){return this._typeInfo.getEnumValue()}}},1918:e=>{"use strict";e.exports=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)}},1945:e=>{"use strict";e.exports="data:font/woff2;base64,d09GMgABAAAAAALsAA4AAAAABWAAAAKbAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoIYgXsLEAABNgIkAxwEIAWCdAcgG0AEAB6HcYyyEjO2Dy0eKLv4XvfsrGs+wIhEBOHOERRRTI2158fc/aln0WYmSJq8uTRSIgUyIVMqpfa/7uYHCqzWDuHREj0f5UuuL+ZAokTaYgiIs5sF5aUutjO7QhBlgMaYvCAIIqqoCggoq0+HjRlX70MGclDLyR3Z8fb0q/ectzCv30obmLesvO5hBhRhcp7kToaLpaRXpL0htKmb5C3rIgzUIwA1fnqrhHSbqXhA3v+sK1wRtcWuhdyg9E5tGXERkaAhroCGeNqCnJxAm6m1Sb58SICvFhXFWnVAAWQoYRjYADJUQQqIYm0uSZKkfpYv1sv21dm9b7kWbV6i3BQ2Z/sOf/hl+ezXH88LRz75pnLuq4/MO/Zx+eyHc3x9VDn3yfx9n1ILyusq3ps75y90fVZ657PJ2iXgF+odHbvzv7Lrm+uTsPR0WJqYcelN7180rHDDnbeWbrx0QHht49uXjCzffOsd5RsvGvHe4yF5o+Ej97/ZMP62+Z+3Wz/08CtZ/FezhpdvG/nb6PMhC9vNvHFx3Du9X47etewROuONg4L0v2eI+L9X7dt0evq+gNihfvWttiuWK4f8VmxWBM/+WK8b8F6Y9evfLf57r9SjuA2URBAobPm/Smni3y3+n1TqgQEACsl5awAI/5AetjNp65A+/38vDAUXaayPL4CMKHYkEFC0DlfIlbAMegyqlmGU2eSTO58TTHX2xLyWvlczc/wY7eDo5WxlYenKyMvNg9Go5MAatqis2Jty2oytLaPupFxOlsgFObsjM05dBxMHVwcMbeFma4xFh8jZxUr2e62Th09I7Bd96I2RI3gzYzqKcsHjqZzGjsamlojTwdmCy9bKFNm7IBcudRU5BU09BQ5eTm5coMaMAw=="},1954:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="},1981:(e,t,n)=>{"use strict";n.d(t,{z:()=>o});var r=n(8255);function o(e){const t=[],n=[];return{OperationDefinition:e=>(t.push(e),!1),FragmentDefinition:e=>(n.push(e),!1),Document:{leave(){const o=Object.create(null);for(const n of t)for(const t of e.getRecursivelyReferencedFragments(n))o[t.name.value]=!0;for(const t of n){const n=t.name.value;!0!==o[n]&&e.reportError(new r.eO(`Fragment "${n}" is never used.`,t))}}}}}},2012:e=>{"use strict";function t(e,t){if(null!=e)return e;var n=new Error(void 0!==t?t:"Got unexpected "+e);throw n.framesToPop=1,n}e.exports=t,e.exports.default=t,Object.defineProperty(e.exports,"__esModule",{value:!0})},2027:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(8255);function o(e){let t=Object.create(null);return{OperationDefinition:{enter(){t=Object.create(null)},leave(n){const o=e.getRecursiveVariableUsages(n);for(const{node:i}of o){const o=i.name.value;!0!==t[o]&&e.reportError(new r.eO(n.name?`Variable "$${o}" is not defined by operation "${n.name.value}".`:`Variable "$${o}" is not defined.`,[i,n]))}}},VariableDefinition(e){t[e.variable.name.value]=!0}}}},2039:(e,t,n)=>{"use strict";let r;n.d(t,{Y:()=>r}),function(e){e.SOF="",e.EOF="",e.BANG="!",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"}(r||(r={}))},2112:()=>{},2114:(e,t,n)=>{"use strict";n.d(t,{Zb:()=>ve,zP:()=>be,VA:()=>he,KT:()=>Q,Gc:()=>Z,bh:()=>ae,Ag:()=>ie,hI:()=>me,g0:()=>fe,N_:()=>G,Ye:()=>Y,el:()=>O,Yq:()=>L,L9:()=>V,qL:()=>T,D0:()=>z,dL:()=>F,sF:()=>te,ZX:()=>P,wG:()=>_,qC:()=>C,yh:()=>B,Zx:()=>x,j:()=>A,EG:()=>N,B3:()=>K,Kx:()=>ce,MR:()=>ne,yl:()=>$,Lc:()=>W,ML:()=>H,oF:()=>D,qK:()=>I,dX:()=>j,kD:()=>k,zf:()=>U,Fs:()=>M,sy:()=>ee,bd:()=>R,wj:()=>J,YQ:()=>E,oH:()=>q,xP:()=>pe,YX:()=>we,lg:()=>w,Xj:()=>b,CK:()=>S,lS:()=>X});var r=n(5198),o=n(5487),i=n(3871),a=n(698),s=n(3217),l=n(6394),c=n(792),u=n(4833),d=n(1070);function f(e){return e}var p=n(6382),h=n(8255),m=n(2455),g=n(2704),v=n(8542),y=n(567);function b(e){return w(e)||E(e)||k(e)||S(e)||D(e)||I(e)||M(e)||R(e)}function A(e){if(!b(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL type.`);return e}function w(e){return(0,c.h)(e,ie)}function x(e){if(!w(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL Scalar type.`);return e}function E(e){return(0,c.h)(e,ae)}function C(e){if(!E(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL Object type.`);return e}function k(e){return(0,c.h)(e,he)}function T(e){if(!k(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL Interface type.`);return e}function S(e){return(0,c.h)(e,me)}function N(e){if(!S(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL Union type.`);return e}function D(e){return(0,c.h)(e,ve)}function O(e){if(!D(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL Enum type.`);return e}function I(e){return(0,c.h)(e,be)}function L(e){if(!I(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL Input Object type.`);return e}function M(e){return(0,c.h)(e,Q)}function F(e){if(!M(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL List type.`);return e}function R(e){return(0,c.h)(e,Z)}function P(e){if(!R(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL Non-Null type.`);return e}function j(e){return w(e)||D(e)||I(e)||X(e)&&j(e.ofType)}function V(e){if(!j(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL input type.`);return e}function q(e){return w(e)||E(e)||k(e)||S(e)||D(e)||X(e)&&q(e.ofType)}function B(e){if(!q(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL output type.`);return e}function U(e){return w(e)||D(e)}function z(e){if(!U(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL leaf type.`);return e}function H(e){return E(e)||k(e)||S(e)}function Y(e){if(!H(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL composite type.`);return e}function W(e){return k(e)||S(e)}function G(e){if(!W(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL abstract type.`);return e}class Q{constructor(e){b(e)||(0,s.U)(!1,`Expected ${(0,r.N)(e)} to be a GraphQL type.`),this.ofType=e}get[Symbol.toStringTag](){return"GraphQLList"}toString(){return"["+String(this.ofType)+"]"}toJSON(){return this.toString()}}class Z{constructor(e){J(e)||(0,s.U)(!1,`Expected ${(0,r.N)(e)} to be a GraphQL nullable type.`),this.ofType=e}get[Symbol.toStringTag](){return"GraphQLNonNull"}toString(){return String(this.ofType)+"!"}toJSON(){return this.toString()}}function X(e){return M(e)||R(e)}function K(e){if(!X(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL wrapping type.`);return e}function J(e){return b(e)&&!R(e)}function _(e){if(!J(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL nullable type.`);return e}function $(e){if(e)return R(e)?e.ofType:e}function ee(e){return w(e)||E(e)||k(e)||S(e)||D(e)||I(e)}function te(e){if(!ee(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL named type.`);return e}function ne(e){if(e){let t=e;for(;X(t);)t=t.ofType;return t}}function re(e){return"function"==typeof e?e():e}function oe(e){return"function"==typeof e?e():e}class ie{constructor(e){var t,n,o,i;const l=null!==(t=e.parseValue)&&void 0!==t?t:f;this.name=(0,y.I)(e.name),this.description=e.description,this.specifiedByURL=e.specifiedByURL,this.serialize=null!==(n=e.serialize)&&void 0!==n?n:f,this.parseValue=l,this.parseLiteral=null!==(o=e.parseLiteral)&&void 0!==o?o:(e,t)=>l((0,v.F)(e,t)),this.extensions=(0,a.z)(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(i=e.extensionASTNodes)&&void 0!==i?i:[],null==e.specifiedByURL||"string"==typeof e.specifiedByURL||(0,s.U)(!1,`${this.name} must provide "specifiedByURL" as a string, but got: ${(0,r.N)(e.specifiedByURL)}.`),null==e.serialize||"function"==typeof e.serialize||(0,s.U)(!1,`${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`),e.parseLiteral&&("function"==typeof e.parseValue&&"function"==typeof e.parseLiteral||(0,s.U)(!1,`${this.name} must provide both "parseValue" and "parseLiteral" functions.`))}get[Symbol.toStringTag](){return"GraphQLScalarType"}toConfig(){return{name:this.name,description:this.description,specifiedByURL:this.specifiedByURL,serialize:this.serialize,parseValue:this.parseValue,parseLiteral:this.parseLiteral,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}class ae{constructor(e){var t;this.name=(0,y.I)(e.name),this.description=e.description,this.isTypeOf=e.isTypeOf,this.extensions=(0,a.z)(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=()=>le(e),this._interfaces=()=>se(e),null==e.isTypeOf||"function"==typeof e.isTypeOf||(0,s.U)(!1,`${this.name} must provide "isTypeOf" as a function, but got: ${(0,r.N)(e.isTypeOf)}.`)}get[Symbol.toStringTag](){return"GraphQLObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}getInterfaces(){return"function"==typeof this._interfaces&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:de(this.getFields()),isTypeOf:this.isTypeOf,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function se(e){var t;const n=re(null!==(t=e.interfaces)&&void 0!==t?t:[]);return Array.isArray(n)||(0,s.U)(!1,`${e.name} interfaces must be an Array or a function which returns an Array.`),n}function le(e){const t=oe(e.fields);return ue(t)||(0,s.U)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,i.I)(t,((t,n)=>{var o;ue(t)||(0,s.U)(!1,`${e.name}.${n} field config must be an object.`),null==t.resolve||"function"==typeof t.resolve||(0,s.U)(!1,`${e.name}.${n} field resolver must be a function if provided, but got: ${(0,r.N)(t.resolve)}.`);const i=null!==(o=t.args)&&void 0!==o?o:{};return ue(i)||(0,s.U)(!1,`${e.name}.${n} args must be an object with argument names as keys.`),{name:(0,y.I)(n),description:t.description,type:t.type,args:ce(i),resolve:t.resolve,subscribe:t.subscribe,deprecationReason:t.deprecationReason,extensions:(0,a.z)(t.extensions),astNode:t.astNode}}))}function ce(e){return Object.entries(e).map((([e,t])=>({name:(0,y.I)(e),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:(0,a.z)(t.extensions),astNode:t.astNode})))}function ue(e){return(0,d.Z)(e)&&!Array.isArray(e)}function de(e){return(0,i.I)(e,(e=>({description:e.description,type:e.type,args:fe(e.args),resolve:e.resolve,subscribe:e.subscribe,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function fe(e){return(0,l.L)(e,(e=>e.name),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})))}function pe(e){return R(e.type)&&void 0===e.defaultValue}class he{constructor(e){var t;this.name=(0,y.I)(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=(0,a.z)(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=le.bind(void 0,e),this._interfaces=se.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||(0,s.U)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,r.N)(e.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLInterfaceType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}getInterfaces(){return"function"==typeof this._interfaces&&(this._interfaces=this._interfaces()),this._interfaces}toConfig(){return{name:this.name,description:this.description,interfaces:this.getInterfaces(),fields:de(this.getFields()),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}class me{constructor(e){var t;this.name=(0,y.I)(e.name),this.description=e.description,this.resolveType=e.resolveType,this.extensions=(0,a.z)(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._types=ge.bind(void 0,e),null==e.resolveType||"function"==typeof e.resolveType||(0,s.U)(!1,`${this.name} must provide "resolveType" as a function, but got: ${(0,r.N)(e.resolveType)}.`)}get[Symbol.toStringTag](){return"GraphQLUnionType"}getTypes(){return"function"==typeof this._types&&(this._types=this._types()),this._types}toConfig(){return{name:this.name,description:this.description,types:this.getTypes(),resolveType:this.resolveType,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function ge(e){const t=re(e.types);return Array.isArray(t)||(0,s.U)(!1,`Must provide Array of types or a function which returns such an array for Union ${e.name}.`),t}class ve{constructor(e){var t,n,i;this.name=(0,y.I)(e.name),this.description=e.description,this.extensions=(0,a.z)(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._values=(n=this.name,ue(i=e.values)||(0,s.U)(!1,`${n} values must be an object with value names as keys.`),Object.entries(i).map((([e,t])=>(ue(t)||(0,s.U)(!1,`${n}.${e} must refer to an object with a "value" key representing an internal value but got: ${(0,r.N)(t)}.`),{name:(0,y.A)(e),description:t.description,value:void 0!==t.value?t.value:e,deprecationReason:t.deprecationReason,extensions:(0,a.z)(t.extensions),astNode:t.astNode})))),this._valueLookup=new Map(this._values.map((e=>[e.value,e]))),this._nameLookup=(0,o.K)(this._values,(e=>e.name))}get[Symbol.toStringTag](){return"GraphQLEnumType"}getValues(){return this._values}getValue(e){return this._nameLookup[e]}serialize(e){const t=this._valueLookup.get(e);if(void 0===t)throw new h.eO(`Enum "${this.name}" cannot represent value: ${(0,r.N)(e)}`);return t.name}parseValue(e){if("string"!=typeof e){const t=(0,r.N)(e);throw new h.eO(`Enum "${this.name}" cannot represent non-string value: ${t}.`+ye(this,t))}const t=this.getValue(e);if(null==t)throw new h.eO(`Value "${e}" does not exist in "${this.name}" enum.`+ye(this,e));return t.value}parseLiteral(e,t){if(e.kind!==m.b.ENUM){const t=(0,g.y)(e);throw new h.eO(`Enum "${this.name}" cannot represent non-enum value: ${t}.`+ye(this,t),e)}const n=this.getValue(e.value);if(null==n){const t=(0,g.y)(e);throw new h.eO(`Value "${t}" does not exist in "${this.name}" enum.`+ye(this,t),e)}return n.value}toConfig(){const e=(0,l.L)(this.getValues(),(e=>e.name),(e=>({description:e.description,value:e.value,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})));return{name:this.name,description:this.description,values:e,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function ye(e,t){const n=e.getValues().map((e=>e.name)),r=(0,p.x)(t,n);return(0,u.a)("the enum value",r)}class be{constructor(e){var t;this.name=(0,y.I)(e.name),this.description=e.description,this.extensions=(0,a.z)(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._fields=Ae.bind(void 0,e)}get[Symbol.toStringTag](){return"GraphQLInputObjectType"}getFields(){return"function"==typeof this._fields&&(this._fields=this._fields()),this._fields}toConfig(){const e=(0,i.I)(this.getFields(),(e=>({description:e.description,type:e.type,defaultValue:e.defaultValue,deprecationReason:e.deprecationReason,extensions:e.extensions,astNode:e.astNode})));return{name:this.name,description:this.description,fields:e,extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes}}toString(){return this.name}toJSON(){return this.toString()}}function Ae(e){const t=oe(e.fields);return ue(t)||(0,s.U)(!1,`${e.name} fields must be an object with field names as keys or a function which returns such an object.`),(0,i.I)(t,((t,n)=>(!("resolve"in t)||(0,s.U)(!1,`${e.name}.${n} field has a resolve property, but Input Types cannot define resolvers.`),{name:(0,y.I)(n),description:t.description,type:t.type,defaultValue:t.defaultValue,deprecationReason:t.deprecationReason,extensions:(0,a.z)(t.extensions),astNode:t.astNode})))}function we(e){return R(e.type)&&void 0===e.defaultValue}},2168:(e,t,n)=>{"use strict";n.d(t,{k:()=>a});var r=n(1306),o=n(8255),i=n(2114);function a(e){return{Field(t){const n=e.getFieldDef(),i=null==n?void 0:n.deprecationReason;if(n&&null!=i){const a=e.getParentType();null!=a||(0,r.V)(!1),e.reportError(new o.eO(`The field ${a.name}.${n.name} is deprecated. ${i}`,t))}},Argument(t){const n=e.getArgument(),i=null==n?void 0:n.deprecationReason;if(n&&null!=i){const a=e.getDirective();if(null!=a)e.reportError(new o.eO(`Directive "@${a.name}" argument "${n.name}" is deprecated. ${i}`,t));else{const a=e.getParentType(),s=e.getFieldDef();null!=a&&null!=s||(0,r.V)(!1),e.reportError(new o.eO(`Field "${a.name}.${s.name}" argument "${n.name}" is deprecated. ${i}`,t))}}},ObjectField(t){const n=(0,i.MR)(e.getParentInputType());if((0,i.qK)(n)){const r=n.getFields()[t.name.value],i=null==r?void 0:r.deprecationReason;null!=i&&e.reportError(new o.eO(`The input field ${n.name}.${r.name} is deprecated. ${i}`,t))}},EnumValue(t){const n=e.getEnumValue(),a=null==n?void 0:n.deprecationReason;if(n&&null!=a){const s=(0,i.MR)(e.getInputType());null!=s||(0,r.V)(!1),e.reportError(new o.eO(`The enum value "${s.name}.${n.name}" is deprecated. ${a}`,t))}}}}},2278:(e,t,n)=>{!function(e){var t=/MSIE \d/.test(navigator.userAgent)&&(null==document.documentMode||document.documentMode<8),n=e.Pos,r={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function o(e){return e&&e.bracketRegex||/[(){}[\]]/}function i(e,t,i){var s=e.getLineHandle(t.line),l=t.ch-1,c=i&&i.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(e.getWrapperElement().className));var u=o(i),d=!c&&l>=0&&u.test(s.text.charAt(l))&&r[s.text.charAt(l)]||u.test(s.text.charAt(l+1))&&r[s.text.charAt(++l)];if(!d)return null;var f=">"==d.charAt(1)?1:-1;if(i&&i.strict&&f>0!=(l==t.ch))return null;var p=e.getTokenTypeAt(n(t.line,l+1)),h=a(e,n(t.line,l+(f>0?1:0)),f,p,i);return null==h?null:{from:n(t.line,l),to:h&&h.pos,match:h&&h.ch==d.charAt(0),forward:f>0}}function a(e,t,i,a,s){for(var l=s&&s.maxScanLineLength||1e4,c=s&&s.maxScanLines||1e3,u=[],d=o(s),f=i>0?Math.min(t.line+c,e.lastLine()+1):Math.max(e.firstLine()-1,t.line-c),p=t.line;p!=f;p+=i){var h=e.getLine(p);if(h){var m=i>0?0:h.length-1,g=i>0?h.length:-1;if(!(h.length>l))for(p==t.line&&(m=t.ch-(i<0?1:0));m!=g;m+=i){var v=h.charAt(m);if(d.test(v)&&(void 0===a||(e.getTokenTypeAt(n(p,m+1))||"")==(a||""))){var y=r[v];if(y&&">"==y.charAt(1)==i>0)u.push(v);else{if(!u.length)return{pos:n(p,m),ch:v};u.pop()}}}}}return p-i!=(i>0?e.lastLine():e.firstLine())&&null}function s(e,r,o){for(var a=e.state.matchBrackets.maxHighlightLineLength||1e3,s=o&&o.highlightNonMatching,l=[],c=e.listSelections(),u=0;u{"use strict";let r;n.d(t,{b:()=>r}),function(e){e.NAME="Name",e.DOCUMENT="Document",e.OPERATION_DEFINITION="OperationDefinition",e.VARIABLE_DEFINITION="VariableDefinition",e.SELECTION_SET="SelectionSet",e.FIELD="Field",e.ARGUMENT="Argument",e.FRAGMENT_SPREAD="FragmentSpread",e.INLINE_FRAGMENT="InlineFragment",e.FRAGMENT_DEFINITION="FragmentDefinition",e.VARIABLE="Variable",e.INT="IntValue",e.FLOAT="FloatValue",e.STRING="StringValue",e.BOOLEAN="BooleanValue",e.NULL="NullValue",e.ENUM="EnumValue",e.LIST="ListValue",e.OBJECT="ObjectValue",e.OBJECT_FIELD="ObjectField",e.DIRECTIVE="Directive",e.NAMED_TYPE="NamedType",e.LIST_TYPE="ListType",e.NON_NULL_TYPE="NonNullType",e.SCHEMA_DEFINITION="SchemaDefinition",e.OPERATION_TYPE_DEFINITION="OperationTypeDefinition",e.SCALAR_TYPE_DEFINITION="ScalarTypeDefinition",e.OBJECT_TYPE_DEFINITION="ObjectTypeDefinition",e.FIELD_DEFINITION="FieldDefinition",e.INPUT_VALUE_DEFINITION="InputValueDefinition",e.INTERFACE_TYPE_DEFINITION="InterfaceTypeDefinition",e.UNION_TYPE_DEFINITION="UnionTypeDefinition",e.ENUM_TYPE_DEFINITION="EnumTypeDefinition",e.ENUM_VALUE_DEFINITION="EnumValueDefinition",e.INPUT_OBJECT_TYPE_DEFINITION="InputObjectTypeDefinition",e.DIRECTIVE_DEFINITION="DirectiveDefinition",e.SCHEMA_EXTENSION="SchemaExtension",e.SCALAR_TYPE_EXTENSION="ScalarTypeExtension",e.OBJECT_TYPE_EXTENSION="ObjectTypeExtension",e.INTERFACE_TYPE_EXTENSION="InterfaceTypeExtension",e.UNION_TYPE_EXTENSION="UnionTypeExtension",e.ENUM_TYPE_EXTENSION="EnumTypeExtension",e.INPUT_OBJECT_TYPE_EXTENSION="InputObjectTypeExtension"}(r||(r={}))},2475:(e,t,n)=>{"use strict";n.d(t,{J:()=>i});var r=n(6712),o=n(8255);function i(e){return{Field:t,Directive:t};function t(t){var n;const i=null!==(n=t.arguments)&&void 0!==n?n:[],a=(0,r.$)(i,(e=>e.name.value));for(const[t,n]of a)n.length>1&&e.reportError(new o.eO(`There can be only one argument named "${t}".`,n.map((e=>e.name))))}}},2568:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0>>1,o=e[r];if(!(0>>1;ri(l,n))ci(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(ci(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,f=null,p=3,h=!1,m=!1,g=!1,v="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,b="undefined"!=typeof setImmediate?setImmediate:null;function A(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function w(e){if(g=!1,A(e),!m)if(null!==r(c))m=!0,M(x);else{var t=r(u);null!==t&&F(w,t.startTime-e)}}function x(e,n){m=!1,g&&(g=!1,y(T),T=-1),h=!0;var i=p;try{for(A(n),f=r(c);null!==f&&(!(f.expirationTime>n)||e&&!D());){var a=f.callback;if("function"==typeof a){f.callback=null,p=f.priorityLevel;var s=a(f.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?f.callback=s:f===r(c)&&o(c),A(n)}else o(c);f=r(c)}if(null!==f)var l=!0;else{var d=r(u);null!==d&&F(w,d.startTime-n),l=!1}return l}finally{f=null,p=i,h=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var E,C=!1,k=null,T=-1,S=5,N=-1;function D(){return!(t.unstable_now()-Ne||125a?(e.sortIndex=i,n(u,e),null===r(c)&&e===r(u)&&(g?(y(T),T=-1):g=!0,F(w,i-a))):(e.sortIndex=s,n(c,e),m||h||(m=!0,M(x))),e},t.unstable_shouldYield=D,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},2584:(e,t,n)=>{"use strict";n.d(t,{_:()=>i});var r=n(6712),o=n(8255);function i(e){return{OperationDefinition(t){var n;const i=null!==(n=t.variableDefinitions)&&void 0!==n?n:[],a=(0,r.$)(i,(e=>e.variable.name.value));for(const[t,n]of a)n.length>1&&e.reportError(new o.eO(`There can be only one variable named "$${t}".`,n.map((e=>e.variable.name))))}}}},2591:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var r=n(1918);function o(e){return!0===r(e)&&"[object Object]"===Object.prototype.toString.call(e)}e.exports=function(e){var t,n;return!1!==o(e)&&"function"==typeof(t=e.constructor)&&!1!==o(n=t.prototype)&&!1!==n.hasOwnProperty("isPrototypeOf")}},2704:(e,t,n)=>{"use strict";n.d(t,{y:()=>l});var r=n(424),o=n(7714);const i=/[\x00-\x1f\x22\x5c\x7f-\x9f]/g;function a(e){return s[e.charCodeAt(0)]}const s=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000B","\\f","\\r","\\u000E","\\u000F","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001A","\\u001B","\\u001C","\\u001D","\\u001E","\\u001F","","",'\\"',"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\\\","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\u007F","\\u0080","\\u0081","\\u0082","\\u0083","\\u0084","\\u0085","\\u0086","\\u0087","\\u0088","\\u0089","\\u008A","\\u008B","\\u008C","\\u008D","\\u008E","\\u008F","\\u0090","\\u0091","\\u0092","\\u0093","\\u0094","\\u0095","\\u0096","\\u0097","\\u0098","\\u0099","\\u009A","\\u009B","\\u009C","\\u009D","\\u009E","\\u009F"];function l(e){return(0,r.YR)(e,c)}const c={Name:{leave:e=>e.value},Variable:{leave:e=>"$"+e.name},Document:{leave:e=>u(e.definitions,"\n\n")},OperationDefinition:{leave(e){const t=f("(",u(e.variableDefinitions,", "),")"),n=u([e.operation,u([e.name,t]),u(e.directives," ")]," ");return("query"===n?"":n+" ")+e.selectionSet}},VariableDefinition:{leave:({variable:e,type:t,defaultValue:n,directives:r})=>e+": "+t+f(" = ",n)+f(" ",u(r," "))},SelectionSet:{leave:({selections:e})=>d(e)},Field:{leave({alias:e,name:t,arguments:n,directives:r,selectionSet:o}){const i=f("",e,": ")+t;let a=i+f("(",u(n,", "),")");return a.length>80&&(a=i+f("(\n",p(u(n,"\n")),"\n)")),u([a,u(r," "),o]," ")}},Argument:{leave:({name:e,value:t})=>e+": "+t},FragmentSpread:{leave:({name:e,directives:t})=>"..."+e+f(" ",u(t," "))},InlineFragment:{leave:({typeCondition:e,directives:t,selectionSet:n})=>u(["...",f("on ",e),u(t," "),n]," ")},FragmentDefinition:{leave:({name:e,typeCondition:t,variableDefinitions:n,directives:r,selectionSet:o})=>`fragment ${e}${f("(",u(n,", "),")")} on ${t} ${f("",u(r," ")," ")}`+o},IntValue:{leave:({value:e})=>e},FloatValue:{leave:({value:e})=>e},StringValue:{leave:({value:e,block:t})=>t?(0,o.yo)(e):`"${e.replace(i,a)}"`},BooleanValue:{leave:({value:e})=>e?"true":"false"},NullValue:{leave:()=>"null"},EnumValue:{leave:({value:e})=>e},ListValue:{leave:({values:e})=>"["+u(e,", ")+"]"},ObjectValue:{leave:({fields:e})=>"{"+u(e,", ")+"}"},ObjectField:{leave:({name:e,value:t})=>e+": "+t},Directive:{leave:({name:e,arguments:t})=>"@"+e+f("(",u(t,", "),")")},NamedType:{leave:({name:e})=>e},ListType:{leave:({type:e})=>"["+e+"]"},NonNullType:{leave:({type:e})=>e+"!"},SchemaDefinition:{leave:({description:e,directives:t,operationTypes:n})=>f("",e,"\n")+u(["schema",u(t," "),d(n)]," ")},OperationTypeDefinition:{leave:({operation:e,type:t})=>e+": "+t},ScalarTypeDefinition:{leave:({description:e,name:t,directives:n})=>f("",e,"\n")+u(["scalar",t,u(n," ")]," ")},ObjectTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:o})=>f("",e,"\n")+u(["type",t,f("implements ",u(n," & ")),u(r," "),d(o)]," ")},FieldDefinition:{leave:({description:e,name:t,arguments:n,type:r,directives:o})=>f("",e,"\n")+t+(h(n)?f("(\n",p(u(n,"\n")),"\n)"):f("(",u(n,", "),")"))+": "+r+f(" ",u(o," "))},InputValueDefinition:{leave:({description:e,name:t,type:n,defaultValue:r,directives:o})=>f("",e,"\n")+u([t+": "+n,f("= ",r),u(o," ")]," ")},InterfaceTypeDefinition:{leave:({description:e,name:t,interfaces:n,directives:r,fields:o})=>f("",e,"\n")+u(["interface",t,f("implements ",u(n," & ")),u(r," "),d(o)]," ")},UnionTypeDefinition:{leave:({description:e,name:t,directives:n,types:r})=>f("",e,"\n")+u(["union",t,u(n," "),f("= ",u(r," | "))]," ")},EnumTypeDefinition:{leave:({description:e,name:t,directives:n,values:r})=>f("",e,"\n")+u(["enum",t,u(n," "),d(r)]," ")},EnumValueDefinition:{leave:({description:e,name:t,directives:n})=>f("",e,"\n")+u([t,u(n," ")]," ")},InputObjectTypeDefinition:{leave:({description:e,name:t,directives:n,fields:r})=>f("",e,"\n")+u(["input",t,u(n," "),d(r)]," ")},DirectiveDefinition:{leave:({description:e,name:t,arguments:n,repeatable:r,locations:o})=>f("",e,"\n")+"directive @"+t+(h(n)?f("(\n",p(u(n,"\n")),"\n)"):f("(",u(n,", "),")"))+(r?" repeatable":"")+" on "+u(o," | ")},SchemaExtension:{leave:({directives:e,operationTypes:t})=>u(["extend schema",u(e," "),d(t)]," ")},ScalarTypeExtension:{leave:({name:e,directives:t})=>u(["extend scalar",e,u(t," ")]," ")},ObjectTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>u(["extend type",e,f("implements ",u(t," & ")),u(n," "),d(r)]," ")},InterfaceTypeExtension:{leave:({name:e,interfaces:t,directives:n,fields:r})=>u(["extend interface",e,f("implements ",u(t," & ")),u(n," "),d(r)]," ")},UnionTypeExtension:{leave:({name:e,directives:t,types:n})=>u(["extend union",e,u(t," "),f("= ",u(n," | "))]," ")},EnumTypeExtension:{leave:({name:e,directives:t,values:n})=>u(["extend enum",e,u(t," "),d(n)]," ")},InputObjectTypeExtension:{leave:({name:e,directives:t,fields:n})=>u(["extend input",e,u(t," "),d(n)]," ")}};function u(e,t=""){var n;return null!==(n=null==e?void 0:e.filter((e=>e)).join(t))&&void 0!==n?n:""}function d(e){return f("{\n",p(u(e,"\n")),"\n}")}function f(e,t,n=""){return null!=t&&""!==t?e+t+n:""}function p(e){return f(" ",e.replace(/\n/g,"\n "))}function h(e){var t;return null!==(t=null==e?void 0:e.some((e=>e.includes("\n"))))&&void 0!==t&&t}},2804:(e,t,n)=>{!function(e){function t(t,n,r){var o,i=t.getWrapperElement();return(o=i.appendChild(document.createElement("div"))).className=r?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top","string"==typeof n?o.innerHTML=n:o.appendChild(n),e.addClass(i,"dialog-opened"),o}function n(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}e.defineExtension("openDialog",(function(r,o,i){i||(i={}),n(this,null);var a=t(this,r,i.bottom),s=!1,l=this;function c(t){if("string"==typeof t)d.value=t;else{if(s)return;s=!0,e.rmClass(a.parentNode,"dialog-opened"),a.parentNode.removeChild(a),l.focus(),i.onClose&&i.onClose(a)}}var u,d=a.getElementsByTagName("input")[0];return d?(d.focus(),i.value&&(d.value=i.value,!1!==i.selectValueOnOpen&&d.select()),i.onInput&&e.on(d,"input",(function(e){i.onInput(e,d.value,c)})),i.onKeyUp&&e.on(d,"keyup",(function(e){i.onKeyUp(e,d.value,c)})),e.on(d,"keydown",(function(t){i&&i.onKeyDown&&i.onKeyDown(t,d.value,c)||((27==t.keyCode||!1!==i.closeOnEnter&&13==t.keyCode)&&(d.blur(),e.e_stop(t),c()),13==t.keyCode&&o(d.value,t))})),!1!==i.closeOnBlur&&e.on(a,"focusout",(function(e){null!==e.relatedTarget&&c()}))):(u=a.getElementsByTagName("button")[0])&&(e.on(u,"click",(function(){c(),l.focus()})),!1!==i.closeOnBlur&&e.on(u,"blur",c),u.focus()),c})),e.defineExtension("openConfirm",(function(r,o,i){n(this,null);var a=t(this,r,i&&i.bottom),s=a.getElementsByTagName("button"),l=!1,c=this,u=1;function d(){l||(l=!0,e.rmClass(a.parentNode,"dialog-opened"),a.parentNode.removeChild(a),c.focus())}s[0].focus();for(var f=0;f{"use strict";n.d(t,{n:()=>o});var r=n(8255);function o(e){const t=Object.create(null),n=[],o=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition:e=>(i(e),!1)};function i(a){if(t[a.name.value])return;const s=a.name.value;t[s]=!0;const l=e.getFragmentSpreads(a.selectionSet);if(0!==l.length){o[s]=n.length;for(const t of l){const a=t.name.value,s=o[a];if(n.push(t),void 0===s){const t=e.getFragment(a);t&&i(t)}else{const t=n.slice(s),o=t.slice(0,-1).map((e=>'"'+e.name.value+'"')).join(", ");e.reportError(new r.eO(`Cannot spread fragment "${a}" within itself`+(""!==o?` via ${o}.`:"."),t))}n.pop()}o[s]=void 0}}}},2868:(e,t,n)=>{"use strict";let r;n.d(t,{H:()=>r}),function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"}(r||(r={}))},2878:e=>{"use strict";e.exports="data:font/woff2;base64,d09GMgABAAAAAB38AA4AAAAAQFAAAB2lAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGkAbjgwcgTAGYACDFBEMCtpgyyoLg3oAATYCJAOHcAQgBYMAByAbrzVFB2LYOABo7N+XKCoG0eD/OoEbQ/R9SCk6Co0tw5CRuS8arZIo5VZbrrY7musceT/cbsXfaJajqVAAOHS7rE8Nn8E0r4xcj9HQSGLyENo9/J/JJtkHuhJYwShF1IA6foB35wd+br2/gj4YtEodZQCDdvSQBQNGiaBUW0hECBYl9qgQBtJtn2AVZZEzThmyRLewajg+hAIAdLoB5bmyit47tW/GLfGMZG+h//8rgFZ49FiVpWy2tGZniPyORbvwKuEd0KOOc6348XObtI1W8dDIX5AUyVXE7t+boXK2LbWT3F8dhkf+XpfZ6vt/TbSGQreO4Vg3o8h3IegPpt+bpGiAi2r11tJK+v4m2tzISLthXVAO6JBCXDGsfcBcB6Ho0lRpytRpey7aMh2wOd/POiNw2t4rRgif8IlggjHafX/fcy1BZNpqHogH+uw11Nr+nq4NgppcfiAEFEEA1oaCpc8AgsgMgoQC4acE4ootCAQKmAeYBwIEMBdFB2C233H3/SkfGXvGSZSPDTv6RMoneZ91CmXIiUefcQohCEGiAAEUoMBTBXeihZZ/wgB96MMypQZqmKdZPXzQjEIQPkzdzMx5F7pHSX7VYxqc2zyfPbE+8nv+gzX0A9fMMYTOgwm9iCQbTxy5blecK0pwLZNcmpRFOid1I3yi2E2ImXRhM5dfHFde8kMgF+c243zuLR90nqpa9gtDHPabzAjD54QfJ2UuaDdD1rhQmwT3snJ0sSlgAULZ5lgR50/VSVufLiyNLqnKlQiMN+nZzUzOr4S+lsfmY/BYlEMQN4k8Raaf1L6M0QqQD7GuOOe7yOjzgTUNOBRBQpxwyiqsZ8n2pUYbiI1+/LN4xKFcDcKdGVmhjHU+xJRLbX3Mte3Hed3P+6WmpeefO3+xoKjkyrUbt8oqqqprauvqGxpvNzWzWu60d44MRpPZYrXZESMIozg5HG+P1+f7L0krVq1Zt2ET23c/IMx0QABYXLHzFjiO/g/hy4oADVd3mIlKhDkJcxnfQkynKhgIdDpYoFt458GozIkWFufGnS5IQAdbGJpbGyqCgjN1gTv5mDaoWdzhu3k7LhkdBRkVGBHq1uEcWVDeAAUNBXML3Pl8+JHOC85+Ttg8oamjf3QAxleWquPcAxwu/ZnIa2F1rIW1ovSgTjr1yFZISQZQCB7iSZe0x167r8Bsz20OXIHBvow9LG2SImEhOoUyVXyCMs9RhhAc2yYKBUUcxv9++2MLAqVPPwTmvrFuKVKh6+3xHRa0O5s2iOXphOFzAQVAjXH3s2XmaMEB2mmvvXZiFiC/MA7+gmPGqwXkIPcB6qaNRY4c9L9CQ+si0BAtYuKyT8aOzGDhYv5YMJRCJQihH/SwD88IjKRIjgtREGXBivXYQZVFv7guFzJbyWQCW+a3nJxcJdVTA7VQD/WzyM4OAVkg8KEcqqEVBmEdTuEVQXEiM5r9f4rkqclsKZMCmzLf/RVU3aeb+qLyhEAGiTNA/0B66bGt3g39bbnmK7/i2wowzb/9x4/VjjVdfS+/PnDea8P3z53pp7pT+ansZG0hwPaMsC3xUTywhz/VvTf0Pob8v0433HQLU5lyFSoZMrprr4sxE0OGjRk3YVKAwOfEN/+d9z74aMCgEaN+cYJA4YbKHfMD/B8Q/wbuB3MuAua9EYzPg3o7uHto12931YRQbR6l6zDc/ToounKPdAly+el2BMWezuzCY3QXQmvw5u7CKFAJAd9lCe183x74zk/iw4zvRrHiVoHTX8veWNrQa2KAVmorCRbigTVraLwTs8ZeOyYCsO6d6S04BBPEVCIAbVRU6hTb3GSSF9vaEylmcQmAUpbUVgG83+2vA1QZU37EUbZZShnT3x5eciZ3dfr+SzVh13mjxaSs5ehkeLpWnuBpIcVICTfqQW9Id6fp9TeLbfw/h0dFPdtNZMCbcko4Fh0uv0JL8A9Nhr/iY8skRVTCgiyCDlolCZXi7hxY8Nnr2lxb0W+pZy506FhhKZTKRHFSpqxltXDmjRFGtlmDjyYSinWH+q5Ru27iszSiG4o3a5qsP4a05nC1pslZwtKDz/p8+bUybYQCGuoUVGKUOcinJnMM6kEHlFsluef/bG+3Nw5mBtQmrJL5b9fyV3pIayJqSLnCZcn8naZPHHA2j3p2ByIMato33Ag/nuo6oXSidxdhCaXAZWgWcFHoQC9+ozpv6rCY8X751GLOwVSRl3AR8BaGYF1m2+gK1dfE2L4Eb9aI8s02Ti0y5Yb05kduAiWFi3Fu4xDeWsIIitnf1VVHE3udxp5vIo6HmS6y7np8qMshc/+5klDq5+JFRsKacj5oEQx4OjbkCkcVJfz2rCwf/04Pm4WyyN6xqmdrNfeDjFHT2kZmnVLtd5JL5awo3/S+9lG94VOvxcqbKoFn5nerXGKx0fz0bbT6lnFwveYIMZ6tXcRAid9yyEJHT25KyLEIDsaUE79YPeAhySbXtLFGE15XWg43df1LjLHvBDg30ZiLxccCF0Hihevc3W96kQJL0Xu0+7r7HAuoWCcLYzVS8C9cKT9ePtEb0IxRhlzvPoQq4TCzSu2l9BitPW9VXZG6Zqo6lBwDzkIx62UIoa7WhzcxAe8jdRmgUmPUlmBuw3T+UnPcUvPy9Cd41LTq6MfiFNMQOjRGxEsjISMD1ygoYNgFYlp54ZwclTHXJRZgqDikSBiRXAd9dKzEgUlKWEgNupR/ZHRLG6QgV2IjQZkg4mYCYQQUcZ5qvvkOndY/f3rGuNjfOD6w7835+RGNGtNGq0i6mDJDBZ+bYA3iCGuZjgAegPI5gezJzKSxGuYDrWS5PwvlAPaGixmYGG9CeHV2JxlZQKmmTudk2EXZkkt4gP4r2WmEWHawYbfzm5Aslc46A1lDeMjiGPboAFk8PTFyIB7puqAMoTuzhfHgZZAsDYA6PxQr0BRq+W/5rP8uk4160NsehfdozCOq/qCgr9z5JnNto6WN3ZjYObD1nIht4AzhW6cyGijUMUda1EsvSrOE/D3wTUK2H+0WzwSsqjQokISBICOiA2XF9QmByLevVc3cumBct9zNeISa8ToylJDoYCqbGfESgtsqEl7lEQOZ2r9GG9leVIx5Zaf5iB2do2lm5lEvSJYM0iVQ3DKpjPIm5UST2qrYcJrQwLe4ZbhUDPTyBQOtrMbhqwLKC90rta9AhzrNkmleWBKVJ5bRZzh/RU+5RYGOzgB1E+thYgYHZs2SORBl9lgBwp5tQmlHoEX//nLIoljzgqYL6CRno0Af9HI+Zew8DDpeBjBZQ7PW2tD+lm2PpqKyc40MFOKeB7IhU1luS/sSTRupOrGF0Eqt3mxNV2xSFBJQVe5MKOJgjQ0iQlm5omKFy6AMuVFzb9a4cI3vTBpCozXeQhh1nITLWecm76kuvtAmwtV4brGVGJ/4x531T7vu2Ml9uWS+Mx6f0j0lbz6Rxyds0I3Sv2i4VccA+/wY2t8NsKNwmmXUGl/0fBkacc9B3NFgpOmoE+nApeDPmleIZHH7ylT/dwxsW16KfdqP+f0sd+UFDdRUzoNLB4Xq7mwoYSVWOcLXC86er2KtI59Sv9X+qiguzhS5BkWAfb5peF9DheE92sPKg4S6cV6/Bemqydn/kU/2K/d/j4FJ2Fnnod6ZLsA+33KvrcAZjFuDrYK3Afv8jXvMFitgQL9tgERwa6dUVakO6n6YlWHYLvaetd0f/t+L46pnfUd9C/02gWkZsT+y58CQKtinACc7L9vMvtv2yPPgwC0OYJ/ngHomi7P9GPPjm4Vfi/c5EWERJwNisqJBN6KyaUJqLRryGuu2tXZn/Du6/wBcnC6eKfizJ9gzzpI+5Cat40bR1/N7yVTpBZ926VlvyZT3FsYG+1DYVi3i4TF1VFXbBAS22H9sfVpIwjfeaRFtLDGFRw5zJZb4Rj98fbEZzHIwm68itZVdgPzWab0HW13btvOzniCtef+/bsAR/vC0IH8sUYfsIfCP8RYm5UJKaGRGcjrCBwaPo72yAj2DA80mEqZZMvOLpSunsx8kccLOp2Qm5AR72hWGOPrdT/GsDu0Qf7p2kzui4H7udkJF9pWMjBCgYxYmFrYWRu6lA32Odf+TquCv/yrxrtzjPCgovHJRUWcC7MqCBDHULTEsa1PYSUW4TYUthmVtCSqShf3Is3Bq27ZFUia9VPKvpExhqRSkTvPOGFVqiJp9uyfLhIMpg8WDxSBX9HhGQF0M0NPcluExtRX3u3NvQ9daMcXJ3c/LMdjBjO0aeXXmSOLAhwFU46cCVWdhVBM1yfLPvfTsbHdnspsDGNw+Fh2MtllE+0U2TftHzvMooaV+cakuDG++x3Ysot2iot2ikuvhtgorqRFsFf8sq482BkfvYwPOa77TJ9I7Br5obm5UJXVFFh/KeEBKLY5K7gEXkWUZhU2Z8oS/H87lvVmXQvmM8mZevxZdE5SVlmDm9TyE1+KWX1yeUMJDPFfsmQSwV+R8OzDWHZzCe+KV1Bz3jx+jP/oQGWGXTmdUxualJdOCIpoH1tU2flRk9EQVkhNfH4orjMnoB/HRsajcjqOYs6PsnlAvN48CSiqWDYcNyWwiG5E0INMyKDQDfQo1g0wFiUri1erKplsWj4ZcCLGo9ArRf7a+enj8lPdj71F0j312ipdG+qKkIPmP3/5AXJSICz2TMfGCURVZ9fRO0zgyNMkeCnT1DHIMchGlwCJ7CjMwUGAUJcQmgtgCEZcQfXHUAZt2l90f6OLjX0jJQLE3BVvlW4l/53OKXglJ8X7iZsZtLeSWLOIJfze5a3L7fuYMdlfmD8ZG5/XBfm23X9o1B5MX2MRP2Jgj+dd19sBLJfMQi1/aDirtR2ryv/Z2jKwOXmGTA92c7fxoJgbuxntMyp1tY48UbLSNZT70DK/x/oY5HO3m6+VLBek5c67BtkE3E5zpvro+B3EbSV3/1rZWLiAMhYQkjrPa7o/2s3seNLQYJ/GwN10EC01Gw5cVfARxanlpfmkKn0Fcafr45mMn/Dz26g1aeuGtj9CK7kbff25uJGlbBTeJMV0cJA+bjZy6pfh01xjjKmC/dtYiWURZWPhZWESRLKYIP759QKeKv/lmM4jogZio+igYo6qKpQuCGyKv4XJIZPV9amQFBkb2LESGQpqg489ORwUdXdb78Syhy4rju0WmL9trBsZKZ4ODQvfvy7bKdKujxXUXV0ZGAi3mii1EmlrHz/s5n68p2Lw+BEaGQ/SH5GRZX6KzUzYb9DjAVb3/jEyhoo1ucB0nvLdtvUS385hm1nOOWazJ5us3Vxo+D1KOeQS4HAtzIW3gCzhd4+9OZaRlTSKzK6ivuZ3cZy/fyMoNOThMrbLUf2Sql9JFzCbOPB4LRKI9yOZutlqty75Juf8kjcmcORFb+/mFHJEnn7/k/3C01Kz9Te6ueygFg7gP7hdv6l439d7ntXjw2wTu6qKDbiouTO34nEGgK041T/Ub4+rCL2tzq37rPPt8sz7ah36x9gtNyeXJ/EP52hz+hPIEFKfk1btl4zCPvJ48SGMT2bDacLpxk7jJOsxoPnCTv+uALkiLBH4mF9IpeItnCrJTlQtPWbINUhWxhToFWZbZFzPVC7bhLRvsilmA/XVn/3gdmSUwEU+M79JU+S4mxvnBzveRqCiIjRH5i8Pqxlhtc/B4sa1nuNryosB4vGEC60WM2+ngS1YBcmwi5F3vGB5hmbqISnZd1aroKYVOEUWSJy33Eebd27V7NSXaWoRxwWbKS2JIBO34aJmRdFPtk5L+F8J9j2W7uwdA1SJr+i6rbbCSaic44GPBg49pmqlqq/LpGB5pMT4qKtnrangDGgOnwR4FknFYi2GDW3bKamz56WlpvZUxj+IVnKvRbznCPzu3l0Tdty6eWmgcFOWyBM58TtGH3CKSRnBYTdaR1gBFkwTkxh5m3NZSbvG8iBqyQd0+Nfl9wPdf3esTPO6pZe0LPXNj3Me4/0t3yChsPV9Zxqu5iA2m3/vzcgrOzBxDR+ggpUOMh5bO4RpyqODACWLC0AmQwzAWRPb/lL0a9+dFfibMrcJKTj1v9nlmtPNZZRsd2xuWxo9JPCJM5+hz+PB2qdOhsaCj85VvtPha0bVhAUGRC7BHKeDS1Ue84uIlohI8D0CjfSmp+ZpyufikDpIVNYNGJQH3oq66FuQkN1hXx8Iy6S1BLGCfe3JcfUK0l3dYfH1SnNBDDXMzdQ0zU4K6CckHfq5AvrM+zV3zEOXAU9Fz1P1unuEnj7Wzj4Nu5OdTSZe8VFKCDBuklanqRVynkoo9DzJddZRdNEA5c2c1Vxu/oPb5jVo3pK7QgnxsacFedKtgd5ptkKcfRX5bQf6eguJDeYUdOL4v4S5RMWa7/qWW4OLq6gNdjGxsKDyWML+uSyZnUMghFMsMsiWYz4fFhLHDwqfCo9hRMaAtP0vYk23q1AXTUjMOQftOHROvusREx1y/eBnDnPn9uWT5RdcPz6AgT5eA1CAs0/QiEROjC0fCx58zn1+GuKvbeiuOq5zVJ8wnl92B+srR+XLk65YkW6HoMru0ZNWj5EJeKl3D7en+fRbgq5016GYsYar8ecAezphdjeyeadTNXX8A+3z+LGdEojWSa3MctBJ2LPgOvxaxTDBS3PfEOJPDyMxh1sqVTTO/RFJ+u1MSPEVTFGWeOTpavXJmqm3mlknmC6PMDyOTYVJl1TZlJyGj7FsZ9ciKCOBkxkztenb3GAJhjNh7exCZobNJJ119gh2i2ESpIuJTtohdiIsXBDZ9r4Pe1dnXMLd7z7ZsF7OLyu8XHrXbkG2YssDsF0P6mB90E35n9IsOq5CoFqTldUviGcSAPfZdXzMejIt+v9SyEvSb0Wy/LFb5qmlK6LGcgCzHDkq3Q9PcxOjSWu3zhKvPBXTvNoElfmcFHxcb4etbj+eJuL9yniQul5vKYsh59t51ysq9HEEXbB3SsvW/DWilh7xTRZ1Eiwyyu2AsZfXM3hJ2ceje1M3JFnYPSgR9+u2+x2zQJiyTljnL9+/eP46/fkypbcj+eTQrvM5GGR0nmeuq5VxITAzNPxePMoKXoh++fVn0wnv1entKfEYNtMxdzWm4c0359lPnlgCb84GxJ55YWFs53w3Ya9os54xqgbHSZGtqGCrOb5oBbg7doPVf9o36G7Bronjp+3Bx6hvbk7621sf9bKyCfBj2Id4+VkoEJcV1JZVNRSUtwAfsT3MwOYHEQ+aTTFendmjN763vjduA92CStzhScXeWs06+fjUtTYugIjq5jN687My7o/WjF9gXlsGwEP8Qv4V/Uv9EdeRe+r0J1Ycr/PFVz+ufC6zxVvH/6v+rWuXPRrOdpRDJMunJ9nNF3mHUg0Ul7t9Lh4on4C+ulv/QjnEC+zTfSX4k1y5SO1BM4LRMY1aWx8ljxrMxZXZRg0O1hL/CAIb9A34MHvuUuGecmnh4swg8+wUflGbMJxpN2broa4W9xGHdQ6DI9/X+/XZCH8/wEJe8MN7vPIvd2ANYDR4Y7a1hoJgYI/mER+wmuxp9ymWPTDAQxM6OsDOmyFZ+hh5QTAEYK2nGUND53d69TKcaNjo8a4lMj5pwAthCeGRumufdibRtGE4yAsMY3QPJqyL1/5hLIkgPcyxjEzbHQLHSG8bpVmeR6XEqyGDaKngYSHMrkXYw4zkdHiCynq0l0MpGutWZZHpUhhOI2g57FK+Yn/Il31CRxHiPpB+HYXKmKBHumE+yzYNlwh+0lfwjCiG1ylwhpIzbslWGlDEg4uxvwOiizR9xOfJW2bfQezW63UFmSvxlW4DlIwqFb/WEvyiCMoPJEjVVfcsETizemN6wf0VUm6awYETT3n6mCFs6LnkUrzg5XY94EYIGpfDWpwyKc5Wj0GNmNivRw2/WzIQSS78eS5TrwwEQIL6eSomyEOZh2LRA9z+uo53An5lebGNhiWAuiFjFJuyDcQyxCoHYMNtslAs8gYzw9TO8w3i/ZpzBqumabsOo+FSOKgW8Ydo0uf01He2dwkSC8Xmyd64gklSqC8AA1M0UrbgBFK04lL9kr8idCsC0CVMO56apDk6k7ctERYyeism+AlNRuihakQcta3kNQLjSPP2Zcb8lYjHJ1p3QR/tbOtt9wqEtCDeS/Qm7ErEkC/x+Ow14FOsgR4hibYHO3Iwgip/hORO/LnAtOVAUvCQSSXKQGtc9ixe/hjtMckE03eTV7V1AFHqEhKlCDxQem+Zaf01HW69gbUmz9AaJ6Yp4BkJ0MuN9pPB6NiH/nipQunCL0hGie9I1Sw3Qy4N0jXgC8OpOI1Dap0TpczFZoqWpb8k/SeUiU4KH+Xwbhl3EQWej0W1cxwxxqBOEstHYyBnvUezrTBjJ9tUVDpKEzxK1kiXjCRS9Ou/ILKTSLOVKnnRS7r5O7wy74MECbSJNtNGui2wTZnjBnBpjd5YA/8/cSt+nrs6fFeW3b9RY8KBtO7Y4avefrZ6Q3BeSW1PKuLt8SYCO4utIx8CxPzrw1jxC9k6/vfUNWwTqF6NJ7R7rKAzevX/l2B++9mzK+C//S34X/x0xqe4hRG66PlpzmJzhB9FMab/k93LfCTN2chsr7E/E+toSS44Fw79Hj7wTKNeP2nmLQy5qa3k/s3/Nbum4VpPvpKPHf/Pulu/T3pGYXOpWY4Fp37rY5twA8dC4S0V+e8rtvokTfQw1yULDqJ/tBX28v7VoOrSSvlYNjF6H88VbbdRzFpQjxksQ0ZjVjjs8oZFLM1uLfPar+QHANn8HOE/q4qMeUJjtCI0lTOiSakteP4JklbbQa5JWpi+ow7g1Scq4m1/idekOHN+NehJAyQGMi77jGPWol6utT9RnYP5XkJV5tk+i57eZybaJPogwmQttTJgMhGpbPPuNxNmau1xbbcaB1Vi4/VUd1syZPB3qO23TVQJQibibVHq6RB1F/3hANFN/tZ8pfYE1+fjdbAmkKKV7JOhuAeptB9YG/RejPnnQPuoILlC/+VD4p93maQWKnQy+etTjUD+81gFENKW9Zfqy40j+BONBIwk1v72MjgjOslUYUzAyGuP293heb2KABBXctHGY3njlsNOiCzs8f3Wgn7BGXz9fWmg6uSTp6HRmtsq5pof7fY3FzV9SiXF8L8u0yYHrtJ8YUxOtkAqo64zBT4djsatUNLlh3ew4OcDHw48AZeWFbvw/jDbnN/oHt9QcAHjrz8LqAHwdDr//o7g9x+M2RzgwJxRAgPGkiR9gzhNdwl/zO4HYnej/Qz4/axATaPvBt4MCGlFRzao5/zVoYUJas6JCUlHPUGt8bc6pYEQ8ZhONrD5f/ds8y6q+8m25vsSRF6G+x1U/Zzdchy4306xOjlYCRs3gmtE51lwO9YzYwiexINmOml4yn/z+U0INF1vPY5RH1p9ByaOXOtz1DNFtk/ywiL92DkMm9+GVa+Wa0CLk5JiZP1uG4D6MWnMw6gpGY5Et0i7UUuerH4XCIN8KXaw5kgq/vJbDvjzKhT3Lpd7EaJUS66boopztGHEdlhQNLGFDgsjCJ7W0iik29g7PxQ2yaOWENDDbEmC2DMadWW3n2UPJ9y6lcxQq6qrke76E9oN81aFay8k3D4yWSHX4yDo2WA7dLpZWJQWrqLnkr3ohZ3lFrdTlp3WEr06OAlYGs711HExU1KRDK71HdI6AlcN6bhUhD6HVRZPyTkvnLaL7qBu94+4ORaLwAeeNfkdF5ZeYHZgr5AdWDRlSveysxof9ZfK5ZcgW5MCVwbowqzIH+XAVyCFkRqNuU4Ns3jN5dIbmPi1ucI8h05C/24WQf8gqXAOQV/1agNy6agBkFrIL1CN07RpZU1bLlmsPrhM9B7rHXV/9QYzqD+XXZRkQ4P8uEGcLa+4o84ECtTYcBJhDADSkzgkcAoqMkOYhowiK8aLbXgxkLGVZJg58o0OQkwkW/nMBxS4pWKAgEeRoIdCsJDkUp4MUT/AfmuYUX+qmeQOdyHPopuGm6a+b/YWJKtf1o87BaT4FRUTk2DRbg0U62RMdKNIJ3n3IWQoTLpieGgSpd2rTZzjWuPqhw6sBoyOEItKocHSzOm+hm+nrOrU/daeFCTRPiOnboKdGNsMRzxqNBUu2HBVVG6KWAG13fhkSPwA="},2911:e=>{"use strict";e.exports="data:font/woff2;base64,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"},2954:(e,t,n)=>{"use strict";n.d(t,{g:()=>i});var r=n(8255),o=n(2114);function i(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),i=Object.create(null);return{EnumTypeDefinition:a,EnumTypeExtension:a};function a(t){var a;const s=t.name.value;i[s]||(i[s]=Object.create(null));const l=null!==(a=t.values)&&void 0!==a?a:[],c=i[s];for(const t of l){const i=t.name.value,a=n[s];(0,o.oF)(a)&&a.getValue(i)?e.reportError(new r.eO(`Enum value "${s}.${i}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):c[i]?e.reportError(new r.eO(`Enum value "${s}.${i}" can only be defined once.`,[c[i],t.name])):c[i]=t.name}return!1}}},3002:(e,t,n)=>{"use strict";n.r(t);var r=n(1448),o=n.n(r),i=n(1505),a=n(6078);o().defineMode("graphql-results",(e=>{const t=(0,i.r5)({eatWhitespace:e=>e.eatSpace(),lexRules:s,parseRules:l,editorConfig:{tabSize:e.tabSize}});return{config:e,startState:t.startState,token:t.token,indent:a.A,electricInput:/^\s*[}\]]/,fold:"brace",closeBrackets:{pairs:'[]{}""',explode:"[]{}"}}}));const s={Punctuation:/^\[|]|\{|\}|:|,/,Number:/^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/,String:/^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/,Keyword:/^true|false|null/},l={Document:[(0,i.p)("{"),(0,i.p_)("Entry",(0,i.p)(",")),(0,i.p)("}")],Entry:[(0,i.t)("String","def"),(0,i.p)(":"),"Value"],Value(e){switch(e.kind){case"Number":return"NumberValue";case"String":return"StringValue";case"Punctuation":switch(e.value){case"[":return"ListValue";case"{":return"ObjectValue"}return null;case"Keyword":switch(e.value){case"true":case"false":return"BooleanValue";case"null":return"NullValue"}return null}},NumberValue:[(0,i.t)("Number","number")],StringValue:[(0,i.t)("String","string")],BooleanValue:[(0,i.t)("Keyword","builtin")],NullValue:[(0,i.t)("Keyword","keyword")],ListValue:[(0,i.p)("["),(0,i.p_)("Value",(0,i.p)(",")),(0,i.p)("]")],ObjectValue:[(0,i.p)("{"),(0,i.p_)("ObjectField",(0,i.p)(",")),(0,i.p)("}")],ObjectField:[(0,i.t)("String","property"),(0,i.p)(":"),"Value"]}},3016:(e,t,n)=>{"use strict";n.d(t,{A:()=>s});var r=n(6758),o=n.n(r),i=n(935),a=n.n(i)()(o());a.push([e.id,".docExplorerWrap{height:unset!important;min-width:unset!important;width:unset!important}.docExplorerWrap svg{display:unset}.doc-explorer-title{font-size:var(--font-size-h2);font-weight:var(--font-weight-medium)}.doc-explorer-rhs{display:none}.graphiql-explorer-root{font-family:var(--font-family-mono)!important;font-size:var(--font-size-body)!important;padding:0!important}.graphiql-explorer-root>div>div{border-color:hsla(var(--color-neutral),var(--alpha-background-heavy))!important;padding-top:var(--px-16)}.graphiql-explorer-root input{background:unset}.graphiql-explorer-root select{background:hsl(var(--color-base))!important;border:1px solid hsla(var(--color-neutral),var(--alpha-secondary));border-radius:var(--border-radius-4);color:hsl(var(--color-neutral))!important;margin:0 var(--px-8);padding:var(--px-4) var(--px-6)}.graphiql-operation-title-bar .toolbar-button{line-height:0;margin-left:var(--px-8);color:hsla(var(--color-neutral),var(--alpha-secondary, .6));font-size:var(--font-size-h3);vertical-align:middle}.graphiql-explorer-graphql-arguments input{line-height:0}.graphiql-explorer-actions{border-color:hsla(var(--color-neutral),var(--alpha-background-heavy))!important}\n",""]);const s=a},3051:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},3123:(e,t,n)=>{"use strict";n.r(t);var r=n(1448),o=n.n(r),i=n(1505),a=n(6078);o().defineMode("graphql-variables",(e=>{const t=(0,i.r5)({eatWhitespace:e=>e.eatSpace(),lexRules:s,parseRules:l,editorConfig:{tabSize:e.tabSize}});return{config:e,startState:t.startState,token:t.token,indent:a.A,electricInput:/^\s*[}\]]/,fold:"brace",closeBrackets:{pairs:'[]{}""',explode:"[]{}"}}}));const s={Punctuation:/^\[|]|\{|\}|:|,/,Number:/^-?(?:0|(?:[1-9][0-9]*))(?:\.[0-9]*)?(?:[eE][+-]?[0-9]+)?/,String:/^"(?:[^"\\]|\\(?:"|\/|\\|b|f|n|r|t|u[0-9a-fA-F]{4}))*"?/,Keyword:/^true|false|null/},l={Document:[(0,i.p)("{"),(0,i.p_)("Variable",(0,i.m7)((0,i.p)(","))),(0,i.p)("}")],Variable:[c("variable"),(0,i.p)(":"),"Value"],Value(e){switch(e.kind){case"Number":return"NumberValue";case"String":return"StringValue";case"Punctuation":switch(e.value){case"[":return"ListValue";case"{":return"ObjectValue"}return null;case"Keyword":switch(e.value){case"true":case"false":return"BooleanValue";case"null":return"NullValue"}return null}},NumberValue:[(0,i.t)("Number","number")],StringValue:[(0,i.t)("String","string")],BooleanValue:[(0,i.t)("Keyword","builtin")],NullValue:[(0,i.t)("Keyword","keyword")],ListValue:[(0,i.p)("["),(0,i.p_)("Value",(0,i.m7)((0,i.p)(","))),(0,i.p)("]")],ObjectValue:[(0,i.p)("{"),(0,i.p_)("ObjectField",(0,i.m7)((0,i.p)(","))),(0,i.p)("}")],ObjectField:[c("attribute"),(0,i.p)(":"),"Value"]};function c(e){return{style:e,match:e=>"String"===e.kind,update(e,t){e.name=t.value.slice(1,-1)}}}},3144:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(7400)},3153:(e,t,n)=>{"use strict";function r(e){return"object"==typeof e&&"function"==typeof(null==e?void 0:e[Symbol.iterator])}n.d(t,{A:()=>r})},3217:(e,t,n)=>{"use strict";function r(e,t){if(!Boolean(e))throw new Error(t)}n.d(t,{U:()=>r})},3335:(e,t,n)=>{"use strict";var r=n(4041),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),a=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,i={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)a.call(t,r)&&!l.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:i,_owner:s.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},3420:(e,t,n)=>{"use strict";n.d(t,{MD:()=>o,TZ:()=>l,VK:()=>a,_m:()=>i,a6:()=>d,aR:()=>s,dI:()=>c,fT:()=>f,i7:()=>p,xu:()=>u});var r=n(2455);function o(e){return i(e)||u(e)||f(e)}function i(e){return e.kind===r.b.OPERATION_DEFINITION||e.kind===r.b.FRAGMENT_DEFINITION}function a(e){return e.kind===r.b.FIELD||e.kind===r.b.FRAGMENT_SPREAD||e.kind===r.b.INLINE_FRAGMENT}function s(e){return e.kind===r.b.VARIABLE||e.kind===r.b.INT||e.kind===r.b.FLOAT||e.kind===r.b.STRING||e.kind===r.b.BOOLEAN||e.kind===r.b.NULL||e.kind===r.b.ENUM||e.kind===r.b.LIST||e.kind===r.b.OBJECT}function l(e){return s(e)&&(e.kind===r.b.LIST?e.values.some(l):e.kind===r.b.OBJECT?e.fields.some((e=>l(e.value))):e.kind!==r.b.VARIABLE)}function c(e){return e.kind===r.b.NAMED_TYPE||e.kind===r.b.LIST_TYPE||e.kind===r.b.NON_NULL_TYPE}function u(e){return e.kind===r.b.SCHEMA_DEFINITION||d(e)||e.kind===r.b.DIRECTIVE_DEFINITION}function d(e){return e.kind===r.b.SCALAR_TYPE_DEFINITION||e.kind===r.b.OBJECT_TYPE_DEFINITION||e.kind===r.b.INTERFACE_TYPE_DEFINITION||e.kind===r.b.UNION_TYPE_DEFINITION||e.kind===r.b.ENUM_TYPE_DEFINITION||e.kind===r.b.INPUT_OBJECT_TYPE_DEFINITION}function f(e){return e.kind===r.b.SCHEMA_EXTENSION||p(e)}function p(e){return e.kind===r.b.SCALAR_TYPE_EXTENSION||e.kind===r.b.OBJECT_TYPE_EXTENSION||e.kind===r.b.INTERFACE_TYPE_EXTENSION||e.kind===r.b.UNION_TYPE_EXTENSION||e.kind===r.b.ENUM_TYPE_EXTENSION||e.kind===r.b.INPUT_OBJECT_TYPE_EXTENSION}},3537:(e,t,n)=>{"use strict";n.d(t,{X:()=>i});var r=n(8255),o=n(2114);function i(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),o=Object.create(null);return{InputObjectTypeDefinition:i,InputObjectTypeExtension:i,InterfaceTypeDefinition:i,InterfaceTypeExtension:i,ObjectTypeDefinition:i,ObjectTypeExtension:i};function i(t){var i;const s=t.name.value;o[s]||(o[s]=Object.create(null));const l=null!==(i=t.fields)&&void 0!==i?i:[],c=o[s];for(const t of l){const o=t.name.value;a(n[s],o)?e.reportError(new r.eO(`Field "${s}.${o}" already exists in the schema. It cannot also be defined in this type extension.`,t.name)):c[o]?e.reportError(new r.eO(`Field "${s}.${o}" can only be defined once.`,[c[o],t.name])):c[o]=t.name}return!1}}function a(e,t){return!!((0,o.YQ)(e)||(0,o.kD)(e)||(0,o.qK)(e))&&null!=e.getFields()[t]}},3548:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},3604:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="},3656:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},3858:(e,t,n)=>{"use strict";function r(e,t){let n=0,r=0;for(;n0);let c=0;do{++r,c=10*c+s-o,s=t.charCodeAt(r)}while(a(s)&&c>0);if(lc)return 1}else{if(is)return 1;++n,++r}}return e.length-t.length}n.d(t,{p:()=>r});const o=48,i=57;function a(e){return!isNaN(e)&&o<=e&&e<=i}},3871:(e,t,n)=>{"use strict";function r(e,t){const n=Object.create(null);for(const r of Object.keys(e))n[r]=t(e[r],r);return n}n.d(t,{I:()=>r})},3906:e=>{"use strict";e.exports="data:font/woff2;base64,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"},3958:(e,t,n)=>{"use strict";n.d(t,{Hh:()=>a,IR:()=>s,Q0:()=>o,a2:()=>l,t8:()=>i});var r=n(2114);function o(e){return{kind:"Field",schema:e.schema,field:e.fieldDef,type:c(e.fieldDef)?null:e.parentType}}function i(e){return{kind:"Directive",schema:e.schema,directive:e.directiveDef}}function a(e){return e.directiveDef?{kind:"Argument",schema:e.schema,argument:e.argDef,directive:e.directiveDef}:{kind:"Argument",schema:e.schema,argument:e.argDef,field:e.fieldDef,type:c(e.fieldDef)?null:e.parentType}}function s(e){return{kind:"EnumValue",value:e.enumValue||void 0,type:e.inputType?(0,r.MR)(e.inputType):void 0}}function l(e,t){return{kind:"Type",schema:e.schema,type:t||e.type}}function c(e){return"__"===e.name.slice(0,2)}},3971:(e,t,n)=>{"use strict";n.d(t,{g:()=>i});var r=n(1306);const o=/\r\n|[\n\r]/g;function i(e,t){let n=0,i=1;for(const a of e.body.matchAll(o)){if("number"==typeof a.index||(0,r.V)(!1),a.index>=t)break;n=a.index+a[0].length,i+=1}return{line:i,column:t+1-n}}},4041:(e,t,n)=>{"use strict";e.exports=n(4304)},4086:e=>{"use strict";e.exports="data:font/woff2;base64,d09GMgABAAAAAAMAAA4AAAAABWwAAAKuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoIYgXkLEAABNgIkAxwEIAWDAAcgG0oEAB6D426JQgSiDJGrY+EepR5ejwf4/fWd+/C1EBKYZDS7sRFxHTf9uCJn/m9Of4qsOwRQBbqEex0QSbKziM9Pj42dA85/tYTLU84Cj+f+PIAlq3AtV5GCrQWUqr11TNFedSEUjKs7rSju46fX7RWCSHFAeYQcQRBEKIqiAgIKlGZBdO5a3w4akEBWj6orkgSzThrq5iF0WjfiKGe7e/0dAHkwOR8nW+GblHR72hyEGmzEl02NcDPu9oBKt35NVVBcoyEuIJNhau72SE3EHkhapkdqCiZGhBhliQWUJVETSCQCNfr8o/boWoBjI3miLHqQC4ojH22AaUBxFAUpIBJlJeIVGIvLFI6PlFi4hGYVs0brZ4ZZlT0rbz1SLT+50xlW3X269vh2x+CpO/n7bw02ebvIys0wMkpteMHUIq4PGfxCRBdKjxXGaDRIc42rK+a/qgeebsfBvjGMiQ14cnJjW8fSe6fHlr2NIrgbeH2jS+k9X+md9WJP/5IvZ8LRg1cQ3gz+dJMePnr2/6ZSiy3c9rHc87Zj4tqOx0WLe1U0VR2OOEt9kq4gV/r/NBEyVbPvpL70poCoTunu3LVVZ4nW3xWV8gAKP5VqBMD10Pruq+7/52x5c4B8EQjkzs5oyJ/1JzxT0mgEACA3XjUZACFDut7UuAEqPZepikCuTcprJBVAcSJREzIBeaYSC4kSGAs2BJU5IFLcQjt+sxNAqr55kwOx947iBrvVCRYwpBuDQusVLFWyFCmCVcEwCg8JVsPPK1GwEjxesNZJv6dyHtID6dYP8UnUCvPAemHBGiA+jD6CVgilD8+tWyfSPRiYXwVJDNNkydPUzvrRmeBZvFdArqSTDSCJ3ALcvDp0JBHWjTK8pb0Qvx7N35CkXo0yFRq1qZAgVaJkYiA7H3AA"},4143:(e,t,n)=>{"use strict";n.d(t,{BW:()=>c,FV:()=>p,Fh:()=>d,N1:()=>m,PZ:()=>v,YC:()=>g,kk:()=>h,nM:()=>u,qS:()=>f});var r=n(5198),o=n(1070),i=n(2455),a=n(2704),s=n(8255),l=n(2114);const c=2147483647,u=-2147483648,d=new l.Ag({name:"Int",description:"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.",serialize(e){const t=y(e);if("boolean"==typeof t)return t?1:0;let n=t;if("string"==typeof t&&""!==t&&(n=Number(t)),"number"!=typeof n||!Number.isInteger(n))throw new s.eO(`Int cannot represent non-integer value: ${(0,r.N)(t)}`);if(n>c||nc||ec||te.name===t))}function y(e){if((0,o.Z)(e)){if("function"==typeof e.valueOf){const t=e.valueOf();if(!(0,o.Z)(t))return t}if("function"==typeof e.toJSON)return e.toJSON()}return e}},4206:(e,t,n)=>{!function(e){"use strict";var t="CodeMirror-lint-markers";function n(e){e.parentNode&&e.parentNode.removeChild(e)}function r(t,r,o,i){var a=function(t,n,r){var o=document.createElement("div");function i(t){if(!o.parentNode)return e.off(document,"mousemove",i);var n=Math.max(0,t.clientY-o.offsetHeight-5),r=Math.max(0,Math.min(t.clientX+5,o.ownerDocument.defaultView.innerWidth-o.offsetWidth));o.style.top=n+"px",o.style.left=r+"px"}return o.className="CodeMirror-lint-tooltip cm-s-"+t.options.theme,o.appendChild(r.cloneNode(!0)),t.state.lint.options.selfContain?t.getWrapperElement().appendChild(o):document.body.appendChild(o),e.on(document,"mousemove",i),i(n),null!=o.style.opacity&&(o.style.opacity=1),o}(t,r,o);function s(){var t;e.off(i,"mouseout",s),a&&((t=a).parentNode&&(null==t.style.opacity&&n(t),t.style.opacity=0,setTimeout((function(){n(t)}),600)),a=null)}var l=setInterval((function(){if(a)for(var e=i;;e=e.parentNode){if(e&&11==e.nodeType&&(e=e.host),e==document.body)return;if(!e){s();break}}if(!a)return clearInterval(l)}),400);e.on(i,"mouseout",s)}function o(e,t,n){for(var o in this.marked=[],t instanceof Function&&(t={getAnnotations:t}),t&&!0!==t||(t={}),this.options={},this.linterOptions=t.options||{},i)this.options[o]=i[o];for(var o in t)i.hasOwnProperty(o)?null!=t[o]&&(this.options[o]=t[o]):t.options||(this.linterOptions[o]=t[o]);this.timeout=null,this.hasGutter=n,this.onMouseOver=function(t){!function(e,t){var n=t.target||t.srcElement;if(/\bCodeMirror-lint-mark-/.test(n.className)){for(var o=n.getBoundingClientRect(),i=(o.left+o.right)/2,a=(o.top+o.bottom)/2,s=e.findMarksAt(e.coordsChar({left:i,top:a},"client")),c=[],u=0;u1,c.tooltips)),c.highlightLines&&e.addLineClass(d,"wrap","CodeMirror-lint-line-"+p)}}c.onUpdateLinting&&c.onUpdateLinting(n,u,e)}}function d(e){var t=e.state.lint;t&&(clearTimeout(t.timeout),t.timeout=setTimeout((function(){c(e)}),t.options.delay))}e.defineOption("lint",!1,(function(n,r,i){if(i&&i!=e.Init&&(a(n),!1!==n.state.lint.options.lintOnChange&&n.off("change",d),e.off(n.getWrapperElement(),"mouseover",n.state.lint.onMouseOver),clearTimeout(n.state.lint.timeout),delete n.state.lint),r){for(var s=n.getOption("gutters"),l=!1,u=0;u{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.iterator,h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}function y(){}function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=v.prototype;var A=b.prototype=new y;A.constructor=b,m(A,v.prototype),A.isPureReactComponent=!0;var w=Array.isArray,x=Object.prototype.hasOwnProperty,E={current:null},C={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,r){var o,i={},a=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(a=""+t.key),t)x.call(t,o)&&!C.hasOwnProperty(o)&&(i[o]=t[o]);var l=arguments.length-2;if(1===l)i.children=r;else if(1{"use strict";n.d(t,{E:()=>i});var r=n(6712),o=n(8255);function i(e){return{DirectiveDefinition(e){var t;const r=null!==(t=e.arguments)&&void 0!==t?t:[];return n(`@${e.name.value}`,r)},InterfaceTypeDefinition:t,InterfaceTypeExtension:t,ObjectTypeDefinition:t,ObjectTypeExtension:t};function t(e){var t;const r=e.name.value,o=null!==(t=e.fields)&&void 0!==t?t:[];for(const e of o){var i;n(`${r}.${e.name.value}`,null!==(i=e.arguments)&&void 0!==i?i:[])}return!1}function n(t,n){const i=(0,r.$)(n,(e=>e.name.value));for(const[n,r]of i)r.length>1&&e.reportError(new o.eO(`Argument "${t}(${n}:)" can only be defined once.`,r.map((e=>e.name))));return!1}}},4466:(e,t,n)=>{"use strict";n.d(t,{y:()=>c});var r=n(4833),o=n(6382),i=n(8255),a=n(3420),s=n(4143),l=n(8957);function c(e){const t=e.getSchema(),n=t?t.getTypeMap():Object.create(null),s=Object.create(null);for(const t of e.getDocument().definitions)(0,a.a6)(t)&&(s[t.name.value]=!0);const l=[...Object.keys(n),...Object.keys(s)];return{NamedType(t,c,d,f,p){const h=t.name.value;if(!n[h]&&!s[h]){var m;const n=null!==(m=p[2])&&void 0!==m?m:d,s=null!=n&&"kind"in(g=n)&&((0,a.xu)(g)||(0,a.fT)(g));if(s&&u.includes(h))return;const c=(0,o.x)(h,s?u.concat(l):l);e.reportError(new i.eO(`Unknown type "${h}".`+(0,r.a)(c),t))}var g}}}const u=[...s.YC,...l.V4].map((e=>e.name))},4594:e=>{"use strict";e.exports="data:font/woff2;base64,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"},4671:(e,t,n)=>{"use strict";var r=n(1448),o=n.n(r),i=n(9786),a=n(3958);function s(e,t){const n=t.target||t.srcElement;if(!(n instanceof HTMLElement))return;if("SPAN"!==(null==n?void 0:n.nodeName))return;const r=n.getBoundingClientRect(),o={left:(r.left+r.right)/2,top:(r.top+r.bottom)/2};e.state.jump.cursor=o,e.state.jump.isHoldingModifier&&d(e)}function l(e){e.state.jump.isHoldingModifier||!e.state.jump.cursor?e.state.jump.isHoldingModifier&&e.state.jump.marker&&f(e):e.state.jump.cursor=null}function c(e,t){if(e.state.jump.isHoldingModifier||t.key!==(u?"Meta":"Control"))return;e.state.jump.isHoldingModifier=!0,e.state.jump.cursor&&d(e);const n=a=>{a.code===t.code&&(e.state.jump.isHoldingModifier=!1,e.state.jump.marker&&f(e),o().off(document,"keyup",n),o().off(document,"click",r),e.off("mousedown",i))},r=t=>{const{destination:n,options:r}=e.state.jump;n&&r.onClick(n,t)},i=(t,n)=>{e.state.jump.destination&&(n.codemirrorIgnore=!0)};o().on(document,"keyup",n),o().on(document,"click",r),e.on("mousedown",i)}o().defineOption("jump",!1,((e,t,n)=>{if(n&&n!==o().Init){const t=e.state.jump.onMouseOver;o().off(e.getWrapperElement(),"mouseover",t);const n=e.state.jump.onMouseOut;o().off(e.getWrapperElement(),"mouseout",n),o().off(document,"keydown",e.state.jump.onKeyDown),delete e.state.jump}if(t){const n=e.state.jump={options:t,onMouseOver:s.bind(null,e),onMouseOut:l.bind(null,e),onKeyDown:c.bind(null,e)};o().on(e.getWrapperElement(),"mouseover",n.onMouseOver),o().on(e.getWrapperElement(),"mouseout",n.onMouseOut),o().on(document,"keydown",n.onKeyDown)}}));const u="undefined"!=typeof navigator&&navigator.userAgent.includes("Mac");function d(e){if(e.state.jump.marker)return;const{cursor:t,options:n}=e.state.jump,r=e.coordsChar(t),o=e.getTokenAt(r,!0),i=n.getDestination||e.getHelper(r,"jump");if(i){const t=i(o,n,e);if(t){const n=e.markText({line:r.line,ch:o.start},{line:r.line,ch:o.end},{className:"CodeMirror-jump-token"});e.state.jump.marker=n,e.state.jump.destination=t}}}function f(e){const{marker:t}=e.state.jump;e.state.jump.marker=null,e.state.jump.destination=null,t.clear()}o().registerHelper("jump","graphql",((e,t)=>{if(!t.schema||!t.onClick||!e.state)return;const{state:n}=e,{kind:r,step:o}=n,s=(0,i.A)(t.schema,n);return"Field"===r&&0===o&&s.fieldDef||"AliasedField"===r&&2===o&&s.fieldDef?(0,a.Q0)(s):"Directive"===r&&1===o&&s.directiveDef?(0,a.t8)(s):"Argument"===r&&0===o&&s.argDef?(0,a.Hh)(s):"EnumValue"===r&&s.enumValue?(0,a.IR)(s):"NamedType"===r&&s.type?(0,a.a2)(s):void 0}))},4719:(e,t,n)=>{"use strict";n.d(t,{P:()=>i});var r=n(8255),o=n(2455);function i(e){let t=0;return{Document(e){t=e.definitions.filter((e=>e.kind===o.b.OPERATION_DEFINITION)).length},OperationDefinition(n){!n.name&&t>1&&e.reportError(new r.eO("This anonymous operation must be the only defined operation.",n))}}}},4728:(e,t,n)=>{!function(e){"use strict";function t(){this.posFrom=this.posTo=this.lastQuery=this.query=null,this.overlay=null}function n(e){return e.state.search||(e.state.search=new t)}function r(e){return"string"==typeof e&&e==e.toLowerCase()}function o(e,t,n){return e.getSearchCursor(t,n,{caseFold:r(t),multiline:!0})}function i(e,t,n,r,o){e.openDialog?e.openDialog(t,o,{value:r,selectValueOnOpen:!0,bottom:e.options.search.bottom}):o(prompt(n,r))}function a(e){return e.replace(/\\([nrt\\])/g,(function(e,t){return"n"==t?"\n":"r"==t?"\r":"t"==t?"\t":"\\"==t?"\\":e}))}function s(e){var t=e.match(/^\/(.*)\/([a-z]*)$/);if(t)try{e=new RegExp(t[1],-1==t[2].indexOf("i")?"":"i")}catch(e){}else e=a(e);return("string"==typeof e?""==e:e.test(""))&&(e=/x^/),e}function l(e,t,n){t.queryText=n,t.query=s(n),e.removeOverlay(t.overlay,r(t.query)),t.overlay=function(e,t){return"string"==typeof e?e=new RegExp(e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),t?"gi":"g"):e.global||(e=new RegExp(e.source,e.ignoreCase?"gi":"g")),{token:function(t){e.lastIndex=t.pos;var n=e.exec(t.string);if(n&&n.index==t.pos)return t.pos+=n[0].length||1,"searching";n?t.pos=n.index:t.skipToEnd()}}}(t.query,r(t.query)),e.addOverlay(t.overlay),e.showMatchesOnScrollbar&&(t.annotate&&(t.annotate.clear(),t.annotate=null),t.annotate=e.showMatchesOnScrollbar(t.query,r(t.query)))}function c(t,r,o,a){var s=n(t);if(s.query)return u(t,r);var c=t.getSelection()||s.lastQuery;if(c instanceof RegExp&&"x^"==c.source&&(c=null),o&&t.openDialog){var f=null,h=function(n,r){e.e_stop(r),n&&(n!=s.queryText&&(l(t,s,n),s.posFrom=s.posTo=t.getCursor()),f&&(f.style.opacity=1),u(t,r.shiftKey,(function(e,n){var r;n.line<3&&document.querySelector&&(r=t.display.wrapper.querySelector(".CodeMirror-dialog"))&&r.getBoundingClientRect().bottom-4>t.cursorCoords(n,"window").top&&((f=r).style.opacity=.4)})))};(function(e,t,n,r,o){e.openDialog(t,r,{value:n,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){d(e)},onKeyDown:o,bottom:e.options.search.bottom})})(t,p(t),c,h,(function(r,o){var i=e.keyName(r),a=t.getOption("extraKeys"),s=a&&a[i]||e.keyMap[t.getOption("keyMap")][i];"findNext"==s||"findPrev"==s||"findPersistentNext"==s||"findPersistentPrev"==s?(e.e_stop(r),l(t,n(t),o),t.execCommand(s)):"find"!=s&&"findPersistent"!=s||(e.e_stop(r),h(o,r))})),a&&c&&(l(t,s,c),u(t,r))}else i(t,p(t),"Search for:",c,(function(e){e&&!s.query&&t.operation((function(){l(t,s,e),s.posFrom=s.posTo=t.getCursor(),u(t,r)}))}))}function u(t,r,i){t.operation((function(){var a=n(t),s=o(t,a.query,r?a.posFrom:a.posTo);(s.find(r)||(s=o(t,a.query,r?e.Pos(t.lastLine()):e.Pos(t.firstLine(),0))).find(r))&&(t.setSelection(s.from(),s.to()),t.scrollIntoView({from:s.from(),to:s.to()},20),a.posFrom=s.from(),a.posTo=s.to(),i&&i(s.from(),s.to()))}))}function d(e){e.operation((function(){var t=n(e);t.lastQuery=t.query,t.query&&(t.query=t.queryText=null,e.removeOverlay(t.overlay),t.annotate&&(t.annotate.clear(),t.annotate=null))}))}function f(e,t){var n=e?document.createElement(e):document.createDocumentFragment();for(var r in t)n[r]=t[r];for(var o=2;o{"use strict";e.exports="data:font/woff2;base64,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"},4833:(e,t,n)=>{"use strict";n.d(t,{a:()=>o});const r=5;function o(e,t){const[n,o]=t?[e,t]:[void 0,e];let i=" Did you mean ";n&&(i+=n+" ");const a=o.map((e=>`"${e}"`));switch(a.length){case 0:return"";case 1:return i+a[0]+"?";case 2:return i+a[0]+" or "+a[1]+"?"}const s=a.slice(0,r),l=s.pop();return i+s.join(", ")+", or "+l+"?"}},4862:(e,t,n)=>{"use strict";n.r(t),n.d(t,{BREAK:()=>ae.sP,BreakingChangeType:()=>jt,DEFAULT_DEPRECATION_REASON:()=>x.Il,DangerousChangeType:()=>Vt,DirectiveLocation:()=>se.H,ExecutableDefinitionsRule:()=>he.T,FieldsOnCorrectTypeRule:()=>me.Z,FragmentsOnCompositeTypesRule:()=>ge.T,GRAPHQL_MAX_INT:()=>_.BW,GRAPHQL_MIN_INT:()=>_.nM,GraphQLBoolean:()=>_.kk,GraphQLDeferDirective:()=>x.BR,GraphQLDeprecatedDirective:()=>x.yK,GraphQLDirective:()=>x.RR,GraphQLEnumType:()=>E.Zb,GraphQLError:()=>g.eO,GraphQLFloat:()=>_.qS,GraphQLID:()=>_.N1,GraphQLIncludeDirective:()=>x.HQ,GraphQLInputObjectType:()=>E.zP,GraphQLInt:()=>_.Fh,GraphQLInterfaceType:()=>E.VA,GraphQLList:()=>E.KT,GraphQLNonNull:()=>E.Gc,GraphQLObjectType:()=>E.bh,GraphQLScalarType:()=>E.Ag,GraphQLSchema:()=>J.V4,GraphQLSkipDirective:()=>x.MQ,GraphQLSpecifiedByDirective:()=>x.gw,GraphQLStreamDirective:()=>x.nK,GraphQLString:()=>_.FV,GraphQLUnionType:()=>E.hI,Kind:()=>A.b,KnownArgumentNamesRule:()=>ve.P,KnownDirectivesRule:()=>ye.e,KnownFragmentNamesRule:()=>be.K,KnownTypeNamesRule:()=>Ae.y,Lexer:()=>re.J,Location:()=>b.aZ,LoneAnonymousOperationRule:()=>we.P,LoneSchemaDefinitionRule:()=>Be.l,NoDeprecatedCustomRule:()=>Ze.k,NoFragmentCyclesRule:()=>xe.n,NoSchemaIntrospectionCustomRule:()=>de,NoUndefinedVariablesRule:()=>Ee.Z,NoUnusedFragmentsRule:()=>Ce.z,NoUnusedVariablesRule:()=>ke.p,OperationTypeNode:()=>b.cE,OverlappingFieldsCanBeMergedRule:()=>Te.K,PossibleFragmentSpreadsRule:()=>Se.y,PossibleTypeExtensionsRule:()=>Qe.S,ProvidedRequiredArgumentsRule:()=>Ne.X,ScalarLeafsRule:()=>De.A,SchemaMetaFieldDef:()=>w.S0,SingleFieldSubscriptionsRule:()=>Oe.R,Source:()=>ee.k,Token:()=>b.ou,TokenKind:()=>oe.Y,TypeInfo:()=>an.D,TypeKind:()=>w.fY,TypeMetaFieldDef:()=>w.Xe,TypeNameMetaFieldDef:()=>w.of,UniqueArgumentDefinitionNamesRule:()=>We.E,UniqueArgumentNamesRule:()=>Ie.J,UniqueDirectiveNamesRule:()=>Ge.Z,UniqueDirectivesPerLocationRule:()=>Le.U,UniqueEnumValueNamesRule:()=>He.g,UniqueFieldDefinitionNamesRule:()=>Ye.X,UniqueFragmentNamesRule:()=>Me.K,UniqueInputFieldNamesRule:()=>Fe.C,UniqueOperationNamesRule:()=>Re.H,UniqueOperationTypesRule:()=>Ue.u,UniqueTypeNamesRule:()=>ze.i,UniqueVariableNamesRule:()=>Pe._,ValidationContext:()=>fe.dY,ValuesOfCorrectTypeRule:()=>je.U,VariablesAreInputTypesRule:()=>Ve.J,VariablesInAllowedPositionRule:()=>qe.E,__Directive:()=>w.sv,__DirectiveLocation:()=>w.$4,__EnumValue:()=>w.B1,__Field:()=>w.z9,__InputValue:()=>w.Ym,__Schema:()=>w.em,__Type:()=>w.P8,__TypeKind:()=>w.B0,assertAbstractType:()=>E.N_,assertCompositeType:()=>E.Ye,assertDirective:()=>x.yq,assertEnumType:()=>E.el,assertEnumValueName:()=>$.A,assertInputObjectType:()=>E.Yq,assertInputType:()=>E.L9,assertInterfaceType:()=>E.qL,assertLeafType:()=>E.D0,assertListType:()=>E.dL,assertName:()=>$.I,assertNamedType:()=>E.sF,assertNonNullType:()=>E.ZX,assertNullableType:()=>E.wG,assertObjectType:()=>E.qC,assertOutputType:()=>E.yh,assertScalarType:()=>E.Zx,assertSchema:()=>J.GU,assertType:()=>E.j,assertUnionType:()=>E.EG,assertValidName:()=>Rt,assertValidSchema:()=>u.Y,assertWrappingType:()=>E.B3,astFromValue:()=>gt.K,buildASTSchema:()=>st,buildClientSchema:()=>nn.D,buildSchema:()=>lt,coerceInputValue:()=>sn.v,concatAST:()=>Ot,createSourceEventStream:()=>ue,defaultFieldResolver:()=>H,defaultTypeResolver:()=>z,doTypesOverlap:()=>ln.uI,execute:()=>S,executeSync:()=>N,extendSchema:()=>nt,findBreakingChanges:()=>qt,findDangerousChanges:()=>Bt,formatError:()=>g.Wk,getDirectiveValues:()=>C.YY,getEnterLeaveForKind:()=>ae.XO,getIntrospectionQuery:()=>Je.I,getLocation:()=>te.g,getNamedType:()=>E.MR,getNullableType:()=>E.yl,getOperationAST:()=>tn.A,getOperationRootType:()=>Ke,getVisitFn:()=>ae.UY,graphql:()=>Z,graphqlSync:()=>X,introspectionFromSchema:()=>_e,introspectionTypes:()=>w.V4,isAbstractType:()=>E.Lc,isCompositeType:()=>E.ML,isConstValueNode:()=>le.TZ,isDefinitionNode:()=>le.MD,isDirective:()=>x.qT,isEnumType:()=>E.oF,isEqualType:()=>ln.n8,isExecutableDefinitionNode:()=>le._m,isInputObjectType:()=>E.qK,isInputType:()=>E.dX,isInterfaceType:()=>E.kD,isIntrospectionType:()=>w.Yh,isLeafType:()=>E.zf,isListType:()=>E.Fs,isNamedType:()=>E.sy,isNonNullType:()=>E.bd,isNullableType:()=>E.wj,isObjectType:()=>E.YQ,isOutputType:()=>E.oH,isRequiredArgument:()=>E.xP,isRequiredInputField:()=>E.YX,isScalarType:()=>E.lg,isSchema:()=>J.Wl,isSelectionNode:()=>le.VK,isSpecifiedDirective:()=>x.Qe,isSpecifiedScalarType:()=>_.PZ,isType:()=>E.Xj,isTypeDefinitionNode:()=>le.a6,isTypeExtensionNode:()=>le.i7,isTypeNode:()=>le.dI,isTypeSubTypeOf:()=>ln.sP,isTypeSystemDefinitionNode:()=>le.xu,isTypeSystemExtensionNode:()=>le.fT,isUnionType:()=>E.CK,isValidNameError:()=>Pt,isValueNode:()=>le.aR,isWrappingType:()=>E.lS,lexicographicSortSchema:()=>dt,locatedError:()=>y,parse:()=>l.qg,parseConstValue:()=>l.u8,parseType:()=>l.Mb,parseValue:()=>l.$x,print:()=>ie.y,printError:()=>g.yJ,printIntrospectionSchema:()=>yt,printLocation:()=>ne.V,printSchema:()=>vt,printSourceLocation:()=>ne.C,printType:()=>xt,responsePathAsArray:()=>h.A,separateOperations:()=>It,specifiedDirectives:()=>x.rc,specifiedRules:()=>pe.g,specifiedScalarTypes:()=>_.YC,stripIgnoredCharacters:()=>Ft,subscribe:()=>ce,syntaxError:()=>Xe.I,typeFromAST:()=>rn.v,validate:()=>c.tf,validateSchema:()=>u.i,valueFromAST:()=>tt.i,valueFromASTUntyped:()=>on.F,version:()=>r,versionInfo:()=>o,visit:()=>ae.YR,visitInParallel:()=>ae.oP,visitWithTypeInfo:()=>an.S});const r="16.1.0-experimental-stream-defer.6",o=Object.freeze({major:16,minor:1,patch:0,preReleaseTag:"experimental-stream-defer.6"});var i=n(3217);function a(e){return"function"==typeof(null==e?void 0:e.then)}function s(e){return"function"==typeof(null==e?void 0:e[Symbol.asyncIterator])}var l=n(8195),c=n(8553),u=n(7626),d=n(5198),f=n(1306),p=n(1070),h=n(7407),m=n(3153),g=n(8255);class v extends Error{constructor(e){super("Unexpected error value: "+(0,d.N)(e)),this.name="NonErrorThrown",this.thrownValue=e}}function y(e,t,n){var r;const o=(i=e)instanceof Error?i:new v(i);var i,a;return a=o,Array.isArray(a.path)?o:new g.eO(o.message,null!==(r=o.nodes)&&void 0!==r?r:t,o.source,o.positions,n,o)}var b=n(9762),A=n(2455),w=n(8957),x=n(7274),E=n(2114),C=n(9390),k=n(5261);const T=function(){let e;return function(t,n,r){void 0===e&&(e=new WeakMap);let o=e.get(t);void 0===o&&(o=new WeakMap,e.set(t,o));let i=o.get(n);void 0===i&&(i=new WeakMap,o.set(n,i));let a=i.get(r);return void 0===a&&(s=t,l=n,c=r,a=(0,k.S)(s.schema,s.fragments,s.variableValues,l,c),i.set(r,a)),a;var s,l,c}}();function S(e){arguments.length<2||(0,i.U)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");const{schema:t,document:n,variableValues:r,rootValue:o}=e;O(t,n,r);const s=I(e);if(!("schema"in s))return{errors:s};try{const{operation:e}=s,t=function(e,t,n){const r=e.schema.getRootType(t.operation);if(null==r)throw new g.eO(`Schema is not configured to execute ${t.operation} operation.`,t);const{fields:o,patches:i}=(0,k._)(e.schema,e.fragments,e.variableValues,r,t.selectionSet),s=void 0;let l;switch(t.operation){case b.cE.QUERY:l=L(e,r,n,s,o);break;case b.cE.MUTATION:l=function(e,t,n,r,o){return function(e,t){let n=Object.create(null);for(const r of e)n=a(n)?n.then((e=>t(e,r))):t(n,r);return n}(o.entries(),((o,[i,s])=>{const l=(0,h.f)(r,i,t.name),c=M(e,t,n,s,l);return void 0===c?o:a(c)?c.then((e=>(o[i]=e,o))):(o[i]=c,o)}))}(e,r,n,s,o);break;case b.cE.SUBSCRIPTION:l=L(e,r,n,s,o)}for(const t of i){const{label:o,fields:i}=t;e.dispatcher.addFields(e,r,n,i,o,s)}return l}(s,e,o);if(a(t))return t.then((e=>{const t=D(e,s.errors);return s.dispatcher.hasSubsequentPayloads()?s.dispatcher.get(t):t}),(e=>(s.errors.push(e),D(null,s.errors))));const n=D(t,s.errors);return s.dispatcher.hasSubsequentPayloads()?s.dispatcher.get(n):n}catch(e){return s.errors.push(e),D(null,s.errors)}}function N(e){const t=S(e);if(a(t)||s(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function D(e,t){return 0===t.length?{data:e}:{errors:t,data:e}}function O(e,t,n){t||(0,i.U)(!1,"Must provide document."),(0,u.Y)(e),null==n||(0,p.Z)(n)||(0,i.U)(!1,"Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.")}function I(e){var t,n;const{schema:r,document:o,rootValue:i,contextValue:a,variableValues:s,operationName:l,fieldResolver:c,typeResolver:u,subscribeFieldResolver:d}=e;let f;const p=Object.create(null);for(const e of o.definitions)switch(e.kind){case A.b.OPERATION_DEFINITION:if(null==l){if(void 0!==f)return[new g.eO("Must provide operation name if query contains multiple operations.")];f=e}else(null===(t=e.name)||void 0===t?void 0:t.value)===l&&(f=e);break;case A.b.FRAGMENT_DEFINITION:p[e.name.value]=e}if(!f)return null!=l?[new g.eO(`Unknown operation named "${l}".`)]:[new g.eO("Must provide an operation.")];const h=null!==(n=f.variableDefinitions)&&void 0!==n?n:[],m=(0,C.VE)(r,h,null!=s?s:{},{maxErrors:50});return m.errors?m.errors:{schema:r,fragments:p,rootValue:i,contextValue:a,operation:f,variableValues:m.coerced,fieldResolver:null!=c?c:H,typeResolver:null!=u?u:z,subscribeFieldResolver:null!=d?d:H,dispatcher:new W,errors:[]}}function L(e,t,n,r,o,i){const s=Object.create(null);let l=!1;for(const[c,u]of o.entries()){const o=M(e,t,n,u,(0,h.f)(r,c,t.name),i);void 0!==o&&(s[c]=o,a(o)&&(l=!0))}return l?(c=s,Promise.all(Object.values(c)).then((e=>{const t=Object.create(null);for(const[n,r]of Object.keys(c).entries())t[r]=e[n];return t}))):s;var c}function M(e,t,n,r,o,i){var s,l;const c=null!==(s=null==i?void 0:i.errors)&&void 0!==s?s:e.errors,u=Y(e.schema,t,r[0]);if(!u)return;const d=u.type,f=null!==(l=u.resolve)&&void 0!==l?l:e.fieldResolver,p=F(e,u,r,t,o);try{const t=f(n,(0,C.IA)(u,r[0],e.variableValues),e.contextValue,p);let s;return s=a(t)?t.then((t=>P(e,d,r,p,o,t,i))):P(e,d,r,p,o,t,i),a(s)?s.then(void 0,(e=>R(y(e,r,(0,h.A)(o)),d,c))):s}catch(e){return R(y(e,r,(0,h.A)(o)),d,c)}}function F(e,t,n,r,o){return{fieldName:t.name,fieldNodes:n,returnType:t.type,parentType:r,path:o,schema:e.schema,fragments:e.fragments,rootValue:e.rootValue,operation:e.operation,variableValues:e.variableValues}}function R(e,t,n){if((0,E.bd)(t))throw e;return n.push(e),null}function P(e,t,n,r,o,i,l){if(i instanceof Error)throw i;if((0,E.bd)(t)){const a=P(e,t.ofType,n,r,o,i,l);if(null===a)throw new Error(`Cannot return null for non-nullable field ${r.parentType.name}.${r.fieldName}.`);return a}return null==i?null:(0,E.Fs)(t)?function(e,t,n,r,o,i,l){var c;const u=t.ofType,d=null!==(c=null==l?void 0:l.errors)&&void 0!==c?c:e.errors;if(s(i)){const t=i[Symbol.asyncIterator]();return function(e,t,n,r,o,i,s){var l;let c=!1;const u=null!==(l=null==s?void 0:s.errors)&&void 0!==l?l:e.errors,d=j(e,n);return new Promise(((l,f)=>{!function p(m,g){if(d&&"number"==typeof d.initialCount&&m>=d.initialCount)return e.dispatcher.addAsyncIteratorValue(m,i,e,n,r,t,o,d.label,s),void l(g);const v=(0,h.f)(o,m,void 0);i.next().then((({value:o,done:i})=>{if(i)l(g);else{try{const i=P(e,t,n,r,v,o,s);a(i)&&(c=!0),g.push(i)}catch(e){g.push(null),R(y(e,n,(0,h.A)(v)),t,u),l(g)}p(m+1,g)}}),(e=>{g.push(null),R(y(e,n,(0,h.A)(v)),t,u),l(g)})).then(null,(e=>{f(e)}))}(0,[])})).then((e=>c?Promise.all(e):e))}(e,u,n,r,o,t,l)}if(!(0,m.A)(i))throw new g.eO(`Expected Iterable, but did not find one for field "${r.parentType.name}.${r.fieldName}".`);const f=j(e,n);let p=!1,v=l;const b=[];let A=0;for(const t of i){const i=(0,h.f)(o,A,void 0);try{let o;if(f&&"number"==typeof f.initialCount&&A>=f.initialCount){v=e.dispatcher.addValue(i,t,e,n,r,u,f.label,v),A++;continue}o=a(t)?t.then((t=>P(e,u,n,r,i,t,l))):P(e,u,n,r,i,t,l),a(o)?(p=!0,b.push(o.then(void 0,(e=>R(y(e,n,(0,h.A)(i)),u,d))))):b.push(o)}catch(e){const t=y(e,n,(0,h.A)(i));b.push(R(t,u,d))}A++}return p?Promise.all(b):b}(e,t,n,r,o,i,l):(0,E.zf)(t)?function(e,t){const n=e.serialize(t);if(null==n)throw new Error(`Expected \`${(0,d.N)(e)}.serialize(${(0,d.N)(t)})\` to return non-nullable value, returned: ${(0,d.N)(n)}`);return n}(t,i):(0,E.Lc)(t)?function(e,t,n,r,o,i,s){var l;const c=null!==(l=t.resolveType)&&void 0!==l?l:e.typeResolver,u=e.contextValue,d=c(i,u,r,t);return a(d)?d.then((a=>q(e,V(a,e,t,n,r,i),n,r,o,i,s))):q(e,V(d,e,t,n,r,i),n,r,o,i,s)}(e,t,n,r,o,i,l):(0,E.YQ)(t)?q(e,t,n,r,o,i,l):void(0,f.V)(!1,"Cannot complete value of unexpected output type: "+(0,d.N)(t))}function j(e,t){if(!0!==e.schema._enableDeferStream)return;const n=(0,C.YY)(x.nK,t[0],e.variableValues);return n&&!1!==n.if?("number"==typeof n.initialCount||(0,f.V)(!1,"initialCount must be a number"),n.initialCount>=0||(0,f.V)(!1,"initialCount must be a positive integer"),{initialCount:n.initialCount,label:"string"==typeof n.label?n.label:void 0}):void 0}function V(e,t,n,r,o,i){if(null==e)throw new g.eO(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${o.parentType.name}.${o.fieldName}". Either the "${n.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,r);if((0,E.YQ)(e))throw new g.eO("Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.");if("string"!=typeof e)throw new g.eO(`Abstract type "${n.name}" must resolve to an Object type at runtime for field "${o.parentType.name}.${o.fieldName}" with value ${(0,d.N)(i)}, received "${(0,d.N)(e)}".`);const a=t.schema.getType(e);if(null==a)throw new g.eO(`Abstract type "${n.name}" was resolved to a type "${e}" that does not exist inside the schema.`,r);if(!(0,E.YQ)(a))throw new g.eO(`Abstract type "${n.name}" was resolved to a non-object type "${e}".`,r);if(!t.schema.isSubType(n,a))throw new g.eO(`Runtime Object type "${a.name}" is not a possible type for "${n.name}".`,r);return a}function q(e,t,n,r,o,i,s){if(t.isTypeOf){const l=t.isTypeOf(i,e.contextValue,r);if(a(l))return l.then((r=>{if(!r)throw B(t,i,n);return U(e,t,n,o,i,s)}));if(!l)throw B(t,i,n)}return U(e,t,n,o,i,s)}function B(e,t,n){return new g.eO(`Expected value of type "${e.name}" but got: ${(0,d.N)(t)}.`,n)}function U(e,t,n,r,o,i){const{fields:a,patches:s}=T(e,t,n),l=L(e,t,o,r,a,i);for(const n of s){const{label:a,fields:s}=n;e.dispatcher.addFields(e,t,o,s,a,r,i)}return l}const z=function(e,t,n,r){if((0,p.Z)(e)&&"string"==typeof e.__typename)return e.__typename;const o=n.schema.getPossibleTypes(r),i=[];for(let r=0;r{for(let t=0;tnull!=a&&a.dataPromise?a.dataPromise.then((()=>e)):e)).then((e=>({value:Q(e,s),done:!1})),(e=>(s.errors.push(e),{value:Q(null,s),done:!1})));return s.addDataPromise(c),this._subsequentPayloads.push(c),s}addValue(e,t,n,r,o,i,a,s){const l=new G({label:a,path:e}),c=Promise.resolve(t).then((t=>P(n,i,r,o,e,t,l))).then(void 0,(t=>R(y(t,r,(0,h.A)(e)),i,l.errors))).then((e=>null!=s&&s.dataPromise?s.dataPromise.then((()=>e)):e)).then((e=>({value:Q(e,l),done:!1})),(e=>(l.errors.push(e),{value:Q(null,l),done:!1})));return l.addDataPromise(c),this._subsequentPayloads.push(c),l}addAsyncIteratorValue(e,t,n,r,o,i,s,l,c){const u=this._subsequentPayloads,d=this._iterators;d.push(t),function e(f){const p=(0,h.f)(s,f,void 0),m=new G({label:l,path:p}),g=t.next().then((({value:s,done:l})=>{if(l)return d.splice(d.indexOf(t),1),{value:void 0,done:!0};try{const t=P(n,i,r,o,p,s,m);return a(t)?t.then((t=>(e(f+1),{value:Q(t,m),done:!1}))):(e(f+1),{value:Q(t,m),done:!1})}catch(t){return R(y(t,r,(0,h.A)(p)),i,m.errors),e(f+1),{value:Q(null,m),done:!1}}}),(e=>(R(y(e,r,(0,h.A)(p)),i,m.errors),{value:Q(null,m),done:!1}))).then((e=>null!=c&&c.dataPromise?c.dataPromise.then((()=>e)):e)).then(null,(e=>(m.errors.push(e),{value:Q(null,m),done:!1})));m.addDataPromise(g),u.push(g)}(e)}_race(){return 0===this._subsequentPayloads.length||this._isDone?Promise.resolve({value:{hasNext:!1},done:!1}):new Promise((e=>{let t=!1;this._subsequentPayloads.forEach((n=>{n.then((r=>{if(t)return;if(t=!0,0===this._subsequentPayloads.length)return void e({value:void 0,done:!0});const o=this._subsequentPayloads.indexOf(n);if(-1===o)return void e(this._race());this._subsequentPayloads.splice(o,1);const{value:i,done:a}=r;if(a)return void e(this._race());const s={...i,hasNext:this._subsequentPayloads.length>0};e({value:s,done:!1})}))}))}))}_next(){return this._hasReturnedInitialResult?0===this._subsequentPayloads.length?Promise.resolve({value:void 0,done:!0}):this._race():(this._hasReturnedInitialResult=!0,Promise.resolve({value:{...this._initialResult,hasNext:!0},done:!1}))}async _return(){return await Promise.all(this._iterators.map((e=>{var t;return null===(t=e.return)||void 0===t?void 0:t.call(e)}))),this._isDone=!0,{value:void 0,done:!0}}async _throw(e){return await Promise.all(this._iterators.map((e=>{var t;return null===(t=e.return)||void 0===t?void 0:t.call(e)}))),this._isDone=!0,Promise.reject(e)}get(e){return this._initialResult=e,{[Symbol.asyncIterator](){return this},next:()=>this._next(),return:()=>this._return(),throw:e=>this._throw(e)}}}class G{constructor(e){this.label=e.label,this.path=e.path,this.errors=[]}addDataPromise(e){this.dataPromise=e}}function Q(e,t){const{path:n,label:r,errors:o}=t,i={data:e,path:n?(0,h.A)(n):[]};return null!=r&&(i.label=r),o&&o.length>0&&(i.errors=o),i}function Z(e){return new Promise((t=>t(K(e))))}function X(e){const t=K(e);if(a(t)||s(t))throw new Error("GraphQL execution failed to complete synchronously.");return t}function K(e){arguments.length<2||(0,i.U)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");const{schema:t,source:n,rootValue:r,contextValue:o,variableValues:a,operationName:s,fieldResolver:d,typeResolver:f}=e,p=(0,u.i)(t);if(p.length>0)return{errors:p};let h;try{h=(0,l.qg)(n)}catch(e){return{errors:[e]}}const m=(0,c.tf)(t,h);return m.length>0?{errors:m}:S({schema:t,document:h,rootValue:r,contextValue:o,variableValues:a,operationName:s,fieldResolver:d,typeResolver:f})}var J=n(5329),_=n(4143),$=n(567),ee=n(9537),te=n(3971),ne=n(8238),re=n(8472),oe=n(2039),ie=n(2704),ae=n(424),se=n(2868),le=n(3420);async function ce(e){arguments.length<2||(0,i.U)(!1,"graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.");const{schema:t,document:n,rootValue:r,contextValue:o,variableValues:a,operationName:l,fieldResolver:c,subscribeFieldResolver:u}=e,d=await ue(t,n,r,o,a,l,u);return s(d)?function(e){const t=e[Symbol.asyncIterator].call(e);let n=[t];return{next:async function e(){const t=n[0];if(!t)return{value:void 0,done:!0};const r=await t.next();if(r.done)return n.shift(),e();if(s(r.value)){const t=r.value[Symbol.asyncIterator]();return n.unshift(t),e()}return r},return:()=>(n=[],t.return()),throw:e=>(n=[],t.throw(e)),[Symbol.asyncIterator](){return this}}}(function(e){const r=e[Symbol.asyncIterator]();async function i(e){if(e.done)return e;try{return{value:await(i=e.value,S({schema:t,document:n,rootValue:i,contextValue:o,variableValues:a,operationName:l,fieldResolver:c})),done:!1}}catch(e){if("function"==typeof r.return)try{await r.return()}catch(e){}throw e}var i}return{next:async()=>i(await r.next()),return:async()=>"function"==typeof r.return?i(await r.return()):{value:void 0,done:!0},async throw(e){if("function"==typeof r.throw)return i(await r.throw(e));throw e},[Symbol.asyncIterator](){return this}}}(d)):d}async function ue(e,t,n,r,o,i,a){O(e,t,o);const l=I({schema:e,document:t,rootValue:n,contextValue:r,variableValues:o,operationName:i,subscribeFieldResolver:a});if(!("schema"in l))return{errors:l};try{const e=await async function(e){const{schema:t,fragments:n,operation:r,variableValues:o,rootValue:i}=e,a=t.getSubscriptionType();if(null==a)throw new g.eO("Schema is not configured to execute subscription operation.",r);const{fields:s}=(0,k._)(t,n,o,a,r.selectionSet),[l,c]=[...s.entries()][0],u=Y(t,a,c[0]);if(!u){const e=c[0].name.value;throw new g.eO(`The subscription field "${e}" is not defined.`,c)}const d=(0,h.f)(void 0,l,a.name),f=F(e,u,c,a,d);try{var p;const t=(0,C.IA)(u,c[0],o),n=e.contextValue,r=null!==(p=u.subscribe)&&void 0!==p?p:e.subscribeFieldResolver,a=await r(i,t,n,f);if(a instanceof Error)throw a;return a}catch(e){throw y(e,c,(0,h.A)(d))}}(l);if(!s(e))throw new Error(`Subscription field must return Async Iterable. Received: ${(0,d.N)(e)}.`);return e}catch(e){if(e instanceof g.eO)return{errors:[e]};throw e}}function de(e){return{Field(t){const n=(0,E.MR)(e.getType());n&&(0,w.Yh)(n)&&e.reportError(new g.eO(`GraphQL introspection has been disabled, but the requested query contained the field "${t.name.value}".`,t))}}}var fe=n(1875),pe=n(5272),he=n(8489),me=n(5449),ge=n(9911),ve=n(825),ye=n(6868),be=n(8898),Ae=n(4466),we=n(4719),xe=n(2833),Ee=n(2027),Ce=n(1981),ke=n(9201),Te=n(5106),Se=n(8644),Ne=n(7565),De=n(48),Oe=n(99),Ie=n(2475),Le=n(6886),Me=n(5536),Fe=n(656),Re=n(5157),Pe=n(2584),je=n(1838),Ve=n(9461),qe=n(8022),Be=n(5343),Ue=n(354),ze=n(7368),He=n(2954),Ye=n(3537),We=n(4410),Ge=n(7065),Qe=n(5966),Ze=n(2168),Xe=n(9841);function Ke(e,t){if("query"===t.operation){const n=e.getQueryType();if(!n)throw new g.eO("Schema does not define the required query root type.",t);return n}if("mutation"===t.operation){const n=e.getMutationType();if(!n)throw new g.eO("Schema is not configured for mutations.",t);return n}if("subscription"===t.operation){const n=e.getSubscriptionType();if(!n)throw new g.eO("Schema is not configured for subscriptions.",t);return n}throw new g.eO("Can only have query, mutation and subscription operations.",t)}var Je=n(1262);function _e(e,t){const n={specifiedByUrl:!0,directiveIsRepeatable:!0,schemaDescription:!0,inputValueDeprecation:!0,...t},r=N({schema:e,document:(0,l.qg)((0,Je.I)(n))});return!r.errors&&r.data||(0,f.V)(!1),r.data}var $e=n(5487),et=n(3871),tt=n(9327);function nt(e,t,n){(0,J.GU)(e),null!=t&&t.kind===A.b.DOCUMENT||(0,i.U)(!1,"Must provide valid Document AST."),!0!==(null==n?void 0:n.assumeValid)&&!0!==(null==n?void 0:n.assumeValidSDL)&&(0,c.$T)(t,e);const r=e.toConfig(),o=rt(r,t,n);return r===o?e:new J.V4(o)}function rt(e,t,n){var r,o,i,a,s;const l=[],c=Object.create(null),u=[];let p;const h=[];for(const e of t.definitions)if(e.kind===A.b.SCHEMA_DEFINITION)p=e;else if(e.kind===A.b.SCHEMA_EXTENSION)h.push(e);else if((0,le.a6)(e))l.push(e);else if((0,le.i7)(e)){const t=e.name.value,n=c[t];c[t]=n?n.concat([e]):[e]}else e.kind===A.b.DIRECTIVE_DEFINITION&&u.push(e);if(0===Object.keys(c).length&&0===l.length&&0===u.length&&0===h.length&&null==p)return e;const m=Object.create(null);for(const t of e.types)m[t.name]=(g=t,(0,w.Yh)(g)||(0,_.PZ)(g)?g:(0,E.lg)(g)?function(e){var t;const n=e.toConfig(),r=null!==(t=c[n.name])&&void 0!==t?t:[];let o=n.specifiedByURL;for(const e of r){var i;o=null!==(i=at(e))&&void 0!==i?i:o}return new E.Ag({...n,specifiedByURL:o,extensionASTNodes:n.extensionASTNodes.concat(r)})}(g):(0,E.YQ)(g)?function(e){var t;const n=e.toConfig(),r=null!==(t=c[n.name])&&void 0!==t?t:[];return new E.bh({...n,interfaces:()=>[...e.getInterfaces().map(C),...F(r)],fields:()=>({...(0,et.I)(n.fields,k),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(g):(0,E.kD)(g)?function(e){var t;const n=e.toConfig(),r=null!==(t=c[n.name])&&void 0!==t?t:[];return new E.VA({...n,interfaces:()=>[...e.getInterfaces().map(C),...F(r)],fields:()=>({...(0,et.I)(n.fields,k),...O(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(g):(0,E.CK)(g)?function(e){var t;const n=e.toConfig(),r=null!==(t=c[n.name])&&void 0!==t?t:[];return new E.hI({...n,types:()=>[...e.getTypes().map(C),...R(r)],extensionASTNodes:n.extensionASTNodes.concat(r)})}(g):(0,E.oF)(g)?function(e){var t;const n=e.toConfig(),r=null!==(t=c[e.name])&&void 0!==t?t:[];return new E.Zb({...n,values:{...n.values,...M(r)},extensionASTNodes:n.extensionASTNodes.concat(r)})}(g):(0,E.qK)(g)?function(e){var t;const n=e.toConfig(),r=null!==(t=c[n.name])&&void 0!==t?t:[];return new E.zP({...n,fields:()=>({...(0,et.I)(n.fields,(e=>({...e,type:b(e.type)}))),...L(r)}),extensionASTNodes:n.extensionASTNodes.concat(r)})}(g):void(0,f.V)(!1,"Unexpected type: "+(0,d.N)(g)));var g;for(const e of l){var v;const t=e.name.value;m[t]=null!==(v=ot[t])&&void 0!==v?v:P(e)}const y={query:e.query&&C(e.query),mutation:e.mutation&&C(e.mutation),subscription:e.subscription&&C(e.subscription),...p&&S([p]),...S(h)};return{description:null===(r=p)||void 0===r||null===(o=r.description)||void 0===o?void 0:o.value,...y,types:Object.values(m),directives:[...e.directives.map((function(e){const t=e.toConfig();return new x.RR({...t,args:(0,et.I)(t.args,T)})})),...u.map((function(e){var t;return new x.RR({name:e.name.value,description:null===(t=e.description)||void 0===t?void 0:t.value,locations:e.locations.map((({value:e})=>e)),isRepeatable:e.repeatable,args:I(e.arguments),astNode:e})}))],extensions:Object.create(null),astNode:null!==(i=p)&&void 0!==i?i:e.astNode,extensionASTNodes:e.extensionASTNodes.concat(h),assumeValid:null!==(a=null==n?void 0:n.assumeValid)&&void 0!==a&&a,enableDeferStream:null!==(s=null==n?void 0:n.enableDeferStream)&&void 0!==s&&s};function b(e){return(0,E.Fs)(e)?new E.KT(b(e.ofType)):(0,E.bd)(e)?new E.Gc(b(e.ofType)):C(e)}function C(e){return m[e.name]}function k(e){return{...e,type:b(e.type),args:e.args&&(0,et.I)(e.args,T)}}function T(e){return{...e,type:b(e.type)}}function S(e){const t={};for(const r of e){var n;const e=null!==(n=r.operationTypes)&&void 0!==n?n:[];for(const n of e)t[n.operation]=N(n.type)}return t}function N(e){var t;const n=e.name.value,r=null!==(t=ot[n])&&void 0!==t?t:m[n];if(void 0===r)throw new Error(`Unknown type: "${n}".`);return r}function D(e){return e.kind===A.b.LIST_TYPE?new E.KT(D(e.type)):e.kind===A.b.NON_NULL_TYPE?new E.Gc(D(e.type)):N(e)}function O(e){const t=Object.create(null);for(const o of e){var n;const e=null!==(n=o.fields)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={type:D(n.type),description:null===(r=n.description)||void 0===r?void 0:r.value,args:I(n.arguments),deprecationReason:it(n),astNode:n}}}return t}function I(e){const t=null!=e?e:[],n=Object.create(null);for(const e of t){var r;const t=D(e.type);n[e.name.value]={type:t,description:null===(r=e.description)||void 0===r?void 0:r.value,defaultValue:(0,tt.i)(e.defaultValue,t),deprecationReason:it(e),astNode:e}}return n}function L(e){const t=Object.create(null);for(const o of e){var n;const e=null!==(n=o.fields)&&void 0!==n?n:[];for(const n of e){var r;const e=D(n.type);t[n.name.value]={type:e,description:null===(r=n.description)||void 0===r?void 0:r.value,defaultValue:(0,tt.i)(n.defaultValue,e),deprecationReason:it(n),astNode:n}}}return t}function M(e){const t=Object.create(null);for(const o of e){var n;const e=null!==(n=o.values)&&void 0!==n?n:[];for(const n of e){var r;t[n.name.value]={description:null===(r=n.description)||void 0===r?void 0:r.value,deprecationReason:it(n),astNode:n}}}return t}function F(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.interfaces)||void 0===n?void 0:n.map(N))&&void 0!==t?t:[]}))}function R(e){return e.flatMap((e=>{var t,n;return null!==(t=null===(n=e.types)||void 0===n?void 0:n.map(N))&&void 0!==t?t:[]}))}function P(e){var t;const n=e.name.value,r=null!==(t=c[n])&&void 0!==t?t:[];switch(e.kind){case A.b.OBJECT_TYPE_DEFINITION:{var o;const t=[e,...r];return new E.bh({name:n,description:null===(o=e.description)||void 0===o?void 0:o.value,interfaces:()=>F(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case A.b.INTERFACE_TYPE_DEFINITION:{var i;const t=[e,...r];return new E.VA({name:n,description:null===(i=e.description)||void 0===i?void 0:i.value,interfaces:()=>F(t),fields:()=>O(t),astNode:e,extensionASTNodes:r})}case A.b.ENUM_TYPE_DEFINITION:{var a;const t=[e,...r];return new E.Zb({name:n,description:null===(a=e.description)||void 0===a?void 0:a.value,values:M(t),astNode:e,extensionASTNodes:r})}case A.b.UNION_TYPE_DEFINITION:{var s;const t=[e,...r];return new E.hI({name:n,description:null===(s=e.description)||void 0===s?void 0:s.value,types:()=>R(t),astNode:e,extensionASTNodes:r})}case A.b.SCALAR_TYPE_DEFINITION:var l;return new E.Ag({name:n,description:null===(l=e.description)||void 0===l?void 0:l.value,specifiedByURL:at(e),astNode:e,extensionASTNodes:r});case A.b.INPUT_OBJECT_TYPE_DEFINITION:{var u;const t=[e,...r];return new E.zP({name:n,description:null===(u=e.description)||void 0===u?void 0:u.value,fields:()=>L(t),astNode:e,extensionASTNodes:r})}}}}const ot=(0,$e.K)([..._.YC,...w.V4],(e=>e.name));function it(e){const t=(0,C.YY)(x.yK,e);return null==t?void 0:t.reason}function at(e){const t=(0,C.YY)(x.gw,e);return null==t?void 0:t.url}function st(e,t){null!=e&&e.kind===A.b.DOCUMENT||(0,i.U)(!1,"Must provide valid Document AST."),!0!==(null==t?void 0:t.assumeValid)&&!0!==(null==t?void 0:t.assumeValidSDL)&&(0,c.uq)(e);const n=rt({description:void 0,types:[],directives:[],extensions:Object.create(null),extensionASTNodes:[],assumeValid:!1},e,t);if(null==n.astNode)for(const e of n.types)switch(e.name){case"Query":n.query=e;break;case"Mutation":n.mutation=e;break;case"Subscription":n.subscription=e}const r=[...n.directives,...x.rc.filter((e=>n.directives.every((t=>t.name!==e.name))))];return new J.V4({...n,directives:r})}function lt(e,t){return st((0,l.qg)(e,{noLocation:null==t?void 0:t.noLocation,allowLegacyFragmentVariables:null==t?void 0:t.allowLegacyFragmentVariables}),{assumeValidSDL:null==t?void 0:t.assumeValidSDL,assumeValid:null==t?void 0:t.assumeValid,enableDeferStream:null==t?void 0:t.enableDeferStream})}var ct=n(6394),ut=n(3858);function dt(e){const t=e.toConfig(),n=(0,ct.L)(pt(t.types),(e=>e.name),(function(e){if((0,E.lg)(e)||(0,w.Yh)(e))return e;if((0,E.YQ)(e)){const t=e.toConfig();return new E.bh({...t,interfaces:()=>l(t.interfaces),fields:()=>s(t.fields)})}if((0,E.kD)(e)){const t=e.toConfig();return new E.VA({...t,interfaces:()=>l(t.interfaces),fields:()=>s(t.fields)})}if((0,E.CK)(e)){const t=e.toConfig();return new E.hI({...t,types:()=>l(t.types)})}if((0,E.oF)(e)){const t=e.toConfig();return new E.Zb({...t,values:ft(t.values,(e=>e))})}if((0,E.qK)(e)){const t=e.toConfig();return new E.zP({...t,fields:()=>ft(t.fields,(e=>({...e,type:r(e.type)})))})}(0,f.V)(!1,"Unexpected type: "+(0,d.N)(e))}));return new J.V4({...t,types:Object.values(n),directives:pt(t.directives).map((function(e){const t=e.toConfig();return new x.RR({...t,locations:ht(t.locations,(e=>e)),args:a(t.args)})})),query:i(t.query),mutation:i(t.mutation),subscription:i(t.subscription)});function r(e){return(0,E.Fs)(e)?new E.KT(r(e.ofType)):(0,E.bd)(e)?new E.Gc(r(e.ofType)):o(e)}function o(e){return n[e.name]}function i(e){return e&&o(e)}function a(e){return ft(e,(e=>({...e,type:r(e.type)})))}function s(e){return ft(e,(e=>({...e,type:r(e.type),args:e.args&&a(e.args)})))}function l(e){return pt(e).map(o)}}function ft(e,t){const n=Object.create(null);for(const r of Object.keys(e).sort(ut.p))n[r]=t(e[r]);return n}function pt(e){return ht(e,(e=>e.name))}function ht(e,t){return e.slice().sort(((e,n)=>{const r=t(e),o=t(n);return(0,ut.p)(r,o)}))}var mt=n(7714),gt=n(9709);function vt(e){return At(e,(e=>!(0,x.Qe)(e)),bt)}function yt(e){return At(e,x.Qe,w.Yh)}function bt(e){return!(0,_.PZ)(e)&&!(0,w.Yh)(e)}function At(e,t,n){const r=e.getDirectives().filter(t),o=Object.values(e.getTypeMap()).filter(n);return[wt(e),...r.map((e=>function(e){return Dt(e)+"directive @"+e.name+Tt(e.args)+(e.isRepeatable?" repeatable":"")+" on "+e.locations.join(" | ")}(e))),...o.map((e=>xt(e)))].filter(Boolean).join("\n\n")}function wt(e){if(null==e.description&&function(e){const t=e.getQueryType();if(t&&"Query"!==t.name)return!1;const n=e.getMutationType();if(n&&"Mutation"!==n.name)return!1;const r=e.getSubscriptionType();return!r||"Subscription"===r.name}(e))return;const t=[],n=e.getQueryType();n&&t.push(` query: ${n.name}`);const r=e.getMutationType();r&&t.push(` mutation: ${r.name}`);const o=e.getSubscriptionType();return o&&t.push(` subscription: ${o.name}`),Dt(e)+`schema {\n${t.join("\n")}\n}`}function xt(e){return(0,E.lg)(e)?function(e){return Dt(e)+`scalar ${e.name}`+(null==(t=e).specifiedByURL?"":` @specifiedBy(url: ${(0,ie.y)({kind:A.b.STRING,value:t.specifiedByURL})})`);var t}(e):(0,E.YQ)(e)?function(e){return Dt(e)+`type ${e.name}`+Et(e)+Ct(e)}(e):(0,E.kD)(e)?function(e){return Dt(e)+`interface ${e.name}`+Et(e)+Ct(e)}(e):(0,E.CK)(e)?function(e){const t=e.getTypes(),n=t.length?" = "+t.join(" | "):"";return Dt(e)+"union "+e.name+n}(e):(0,E.oF)(e)?function(e){const t=e.getValues().map(((e,t)=>Dt(e," ",!t)+" "+e.name+Nt(e.deprecationReason)));return Dt(e)+`enum ${e.name}`+kt(t)}(e):(0,E.qK)(e)?function(e){const t=Object.values(e.getFields()).map(((e,t)=>Dt(e," ",!t)+" "+St(e)));return Dt(e)+`input ${e.name}`+kt(t)}(e):void(0,f.V)(!1,"Unexpected type: "+(0,d.N)(e))}function Et(e){const t=e.getInterfaces();return t.length?" implements "+t.map((e=>e.name)).join(" & "):""}function Ct(e){return kt(Object.values(e.getFields()).map(((e,t)=>Dt(e," ",!t)+" "+e.name+Tt(e.args," ")+": "+String(e.type)+Nt(e.deprecationReason))))}function kt(e){return 0!==e.length?" {\n"+e.join("\n")+"\n}":""}function Tt(e,t=""){return 0===e.length?"":e.every((e=>!e.description))?"("+e.map(St).join(", ")+")":"(\n"+e.map(((e,n)=>Dt(e," "+t,!n)+" "+t+St(e))).join("\n")+"\n"+t+")"}function St(e){const t=(0,gt.K)(e.defaultValue,e.type);let n=e.name+": "+String(e.type);return t&&(n+=` = ${(0,ie.y)(t)}`),n+Nt(e.deprecationReason)}function Nt(e){return null==e?"":e!==x.Il?` @deprecated(reason: ${(0,ie.y)({kind:A.b.STRING,value:e})})`:" @deprecated"}function Dt(e,t="",n=!0){const{description:r}=e;return null==r?"":(t&&!n?"\n"+t:t)+(0,ie.y)({kind:A.b.STRING,value:r,block:(0,mt.CS)(r)}).replace(/\n/g,"\n"+t)+"\n"}function Ot(e){const t=[];for(const n of e)t.push(...n.definitions);return{kind:A.b.DOCUMENT,definitions:t}}function It(e){const t=[],n=Object.create(null);for(const r of e.definitions)switch(r.kind){case A.b.OPERATION_DEFINITION:t.push(r);break;case A.b.FRAGMENT_DEFINITION:n[r.name.value]=Mt(r.selectionSet)}const r=Object.create(null);for(const o of t){const t=new Set;for(const e of Mt(o.selectionSet))Lt(t,n,e);r[o.name?o.name.value:""]={kind:A.b.DOCUMENT,definitions:e.definitions.filter((e=>e===o||e.kind===A.b.FRAGMENT_DEFINITION&&t.has(e.name.value)))}}return r}function Lt(e,t,n){if(!e.has(n)){e.add(n);const r=t[n];if(void 0!==r)for(const n of r)Lt(e,t,n)}}function Mt(e){const t=[];return(0,ae.YR)(e,{FragmentSpread(e){t.push(e.name.value)}}),t}function Ft(e){const t=(0,ee._)(e)?e:new ee.k(e),n=t.body,r=new re.J(t);let o="",i=!1;for(;r.advance().kind!==oe.Y.EOF;){const e=r.token,t=e.kind,a=!(0,re.Z)(e.kind);i&&(a||e.kind===oe.Y.SPREAD)&&(o+=" ");const s=n.slice(e.start,e.end);t===oe.Y.BLOCK_STRING?o+=(0,mt.yo)(e.value,{minimize:!0}):o+=s,i=a}return o}function Rt(e){const t=Pt(e);if(t)throw t;return e}function Pt(e){if("string"==typeof e||(0,i.U)(!1,"Expected name to be a string."),e.startsWith("__"))return new g.eO(`Name "${e}" must not begin with "__", which is reserved by GraphQL introspection.`);try{(0,$.I)(e)}catch(e){return e}}let jt,Vt;function qt(e,t){return Ut(e,t).filter((e=>e.type in jt))}function Bt(e,t){return Ut(e,t).filter((e=>e.type in Vt))}function Ut(e,t){return[...Ht(e,t),...zt(e,t)]}function zt(e,t){const n=[],r=en(e.getDirectives(),t.getDirectives());for(const e of r.removed)n.push({type:jt.DIRECTIVE_REMOVED,description:`${e.name} was removed.`});for(const[e,t]of r.persisted){const r=en(e.args,t.args);for(const t of r.added)(0,E.xP)(t)&&n.push({type:jt.REQUIRED_DIRECTIVE_ARG_ADDED,description:`A required arg ${t.name} on directive ${e.name} was added.`});for(const t of r.removed)n.push({type:jt.DIRECTIVE_ARG_REMOVED,description:`${t.name} was removed from ${e.name}.`});e.isRepeatable&&!t.isRepeatable&&n.push({type:jt.DIRECTIVE_REPEATABLE_REMOVED,description:`Repeatable flag was removed from ${e.name}.`});for(const r of e.locations)t.locations.includes(r)||n.push({type:jt.DIRECTIVE_LOCATION_REMOVED,description:`${r} was removed from ${e.name}.`})}return n}function Ht(e,t){const n=[],r=en(Object.values(e.getTypeMap()),Object.values(t.getTypeMap()));for(const e of r.removed)n.push({type:jt.TYPE_REMOVED,description:(0,_.PZ)(e)?`Standard scalar ${e.name} was removed because it is not referenced anymore.`:`${e.name} was removed.`});for(const[e,t]of r.persisted)(0,E.oF)(e)&&(0,E.oF)(t)?n.push(...Gt(e,t)):(0,E.CK)(e)&&(0,E.CK)(t)?n.push(...Wt(e,t)):(0,E.qK)(e)&&(0,E.qK)(t)?n.push(...Yt(e,t)):(0,E.YQ)(e)&&(0,E.YQ)(t)||(0,E.kD)(e)&&(0,E.kD)(t)?n.push(...Zt(e,t),...Qt(e,t)):e.constructor!==t.constructor&&n.push({type:jt.TYPE_CHANGED_KIND,description:`${e.name} changed from ${_t(e)} to ${_t(t)}.`});return n}function Yt(e,t){const n=[],r=en(Object.values(e.getFields()),Object.values(t.getFields()));for(const t of r.added)(0,E.YX)(t)?n.push({type:jt.REQUIRED_INPUT_FIELD_ADDED,description:`A required field ${t.name} on input type ${e.name} was added.`}):n.push({type:Vt.OPTIONAL_INPUT_FIELD_ADDED,description:`An optional field ${t.name} on input type ${e.name} was added.`});for(const t of r.removed)n.push({type:jt.FIELD_REMOVED,description:`${e.name}.${t.name} was removed.`});for(const[t,o]of r.persisted)Jt(t.type,o.type)||n.push({type:jt.FIELD_CHANGED_KIND,description:`${e.name}.${t.name} changed type from ${String(t.type)} to ${String(o.type)}.`});return n}function Wt(e,t){const n=[],r=en(e.getTypes(),t.getTypes());for(const t of r.added)n.push({type:Vt.TYPE_ADDED_TO_UNION,description:`${t.name} was added to union type ${e.name}.`});for(const t of r.removed)n.push({type:jt.TYPE_REMOVED_FROM_UNION,description:`${t.name} was removed from union type ${e.name}.`});return n}function Gt(e,t){const n=[],r=en(e.getValues(),t.getValues());for(const t of r.added)n.push({type:Vt.VALUE_ADDED_TO_ENUM,description:`${t.name} was added to enum type ${e.name}.`});for(const t of r.removed)n.push({type:jt.VALUE_REMOVED_FROM_ENUM,description:`${t.name} was removed from enum type ${e.name}.`});return n}function Qt(e,t){const n=[],r=en(e.getInterfaces(),t.getInterfaces());for(const t of r.added)n.push({type:Vt.IMPLEMENTED_INTERFACE_ADDED,description:`${t.name} added to interfaces implemented by ${e.name}.`});for(const t of r.removed)n.push({type:jt.IMPLEMENTED_INTERFACE_REMOVED,description:`${e.name} no longer implements interface ${t.name}.`});return n}function Zt(e,t){const n=[],r=en(Object.values(e.getFields()),Object.values(t.getFields()));for(const t of r.removed)n.push({type:jt.FIELD_REMOVED,description:`${e.name}.${t.name} was removed.`});for(const[t,o]of r.persisted)n.push(...Xt(e,t,o)),Kt(t.type,o.type)||n.push({type:jt.FIELD_CHANGED_KIND,description:`${e.name}.${t.name} changed type from ${String(t.type)} to ${String(o.type)}.`});return n}function Xt(e,t,n){const r=[],o=en(t.args,n.args);for(const n of o.removed)r.push({type:jt.ARG_REMOVED,description:`${e.name}.${t.name} arg ${n.name} was removed.`});for(const[n,i]of o.persisted)if(Jt(n.type,i.type)){if(void 0!==n.defaultValue)if(void 0===i.defaultValue)r.push({type:Vt.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${n.name} defaultValue was removed.`});else{const o=$t(n.defaultValue,n.type),a=$t(i.defaultValue,i.type);o!==a&&r.push({type:Vt.ARG_DEFAULT_VALUE_CHANGE,description:`${e.name}.${t.name} arg ${n.name} has changed defaultValue from ${o} to ${a}.`})}}else r.push({type:jt.ARG_CHANGED_KIND,description:`${e.name}.${t.name} arg ${n.name} has changed type from ${String(n.type)} to ${String(i.type)}.`});for(const n of o.added)(0,E.xP)(n)?r.push({type:jt.REQUIRED_ARG_ADDED,description:`A required arg ${n.name} on ${e.name}.${t.name} was added.`}):r.push({type:Vt.OPTIONAL_ARG_ADDED,description:`An optional arg ${n.name} on ${e.name}.${t.name} was added.`});return r}function Kt(e,t){return(0,E.Fs)(e)?(0,E.Fs)(t)&&Kt(e.ofType,t.ofType)||(0,E.bd)(t)&&Kt(e,t.ofType):(0,E.bd)(e)?(0,E.bd)(t)&&Kt(e.ofType,t.ofType):(0,E.sy)(t)&&e.name===t.name||(0,E.bd)(t)&&Kt(e,t.ofType)}function Jt(e,t){return(0,E.Fs)(e)?(0,E.Fs)(t)&&Jt(e.ofType,t.ofType):(0,E.bd)(e)?(0,E.bd)(t)&&Jt(e.ofType,t.ofType)||!(0,E.bd)(t)&&Jt(e.ofType,t):(0,E.sy)(t)&&e.name===t.name}function _t(e){return(0,E.lg)(e)?"a Scalar type":(0,E.YQ)(e)?"an Object type":(0,E.kD)(e)?"an Interface type":(0,E.CK)(e)?"a Union type":(0,E.oF)(e)?"an Enum type":(0,E.qK)(e)?"an Input type":void(0,f.V)(!1,"Unexpected type: "+(0,d.N)(e))}function $t(e,t){const n=(0,gt.K)(e,t);null!=n||(0,f.V)(!1);const r=(0,ae.YR)(n,{ObjectValue(e){const t=[...e.fields];return t.sort(((e,t)=>(0,ut.p)(e.name.value,t.name.value))),{...e,fields:t}}});return(0,ie.y)(r)}function en(e,t){const n=[],r=[],o=[],i=(0,$e.K)(e,(({name:e})=>e)),a=(0,$e.K)(t,(({name:e})=>e));for(const t of e){const e=a[t.name];void 0===e?r.push(t):o.push([t,e])}for(const e of t)void 0===i[e.name]&&n.push(e);return{added:n,persisted:o,removed:r}}!function(e){e.TYPE_REMOVED="TYPE_REMOVED",e.TYPE_CHANGED_KIND="TYPE_CHANGED_KIND",e.TYPE_REMOVED_FROM_UNION="TYPE_REMOVED_FROM_UNION",e.VALUE_REMOVED_FROM_ENUM="VALUE_REMOVED_FROM_ENUM",e.REQUIRED_INPUT_FIELD_ADDED="REQUIRED_INPUT_FIELD_ADDED",e.IMPLEMENTED_INTERFACE_REMOVED="IMPLEMENTED_INTERFACE_REMOVED",e.FIELD_REMOVED="FIELD_REMOVED",e.FIELD_CHANGED_KIND="FIELD_CHANGED_KIND",e.REQUIRED_ARG_ADDED="REQUIRED_ARG_ADDED",e.ARG_REMOVED="ARG_REMOVED",e.ARG_CHANGED_KIND="ARG_CHANGED_KIND",e.DIRECTIVE_REMOVED="DIRECTIVE_REMOVED",e.DIRECTIVE_ARG_REMOVED="DIRECTIVE_ARG_REMOVED",e.REQUIRED_DIRECTIVE_ARG_ADDED="REQUIRED_DIRECTIVE_ARG_ADDED",e.DIRECTIVE_REPEATABLE_REMOVED="DIRECTIVE_REPEATABLE_REMOVED",e.DIRECTIVE_LOCATION_REMOVED="DIRECTIVE_LOCATION_REMOVED"}(jt||(jt={})),function(e){e.VALUE_ADDED_TO_ENUM="VALUE_ADDED_TO_ENUM",e.TYPE_ADDED_TO_UNION="TYPE_ADDED_TO_UNION",e.OPTIONAL_INPUT_FIELD_ADDED="OPTIONAL_INPUT_FIELD_ADDED",e.OPTIONAL_ARG_ADDED="OPTIONAL_ARG_ADDED",e.IMPLEMENTED_INTERFACE_ADDED="IMPLEMENTED_INTERFACE_ADDED",e.ARG_DEFAULT_VALUE_CHANGE="ARG_DEFAULT_VALUE_CHANGE"}(Vt||(Vt={}));var tn=n(5187),nn=n(5410),rn=n(9494),on=n(8542),an=n(7350),sn=n(9818),ln=n(4917)},4912:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg=="},4917:(e,t,n)=>{"use strict";n.d(t,{n8:()=>o,sP:()=>i,uI:()=>a});var r=n(2114);function o(e,t){return e===t||((0,r.bd)(e)&&(0,r.bd)(t)||!(!(0,r.Fs)(e)||!(0,r.Fs)(t)))&&o(e.ofType,t.ofType)}function i(e,t,n){return t===n||((0,r.bd)(n)?!!(0,r.bd)(t)&&i(e,t.ofType,n.ofType):(0,r.bd)(t)?i(e,t.ofType,n):(0,r.Fs)(n)?!!(0,r.Fs)(t)&&i(e,t.ofType,n.ofType):!(0,r.Fs)(t)&&(0,r.Lc)(n)&&((0,r.kD)(t)||(0,r.YQ)(t))&&e.isSubType(n,t))}function a(e,t,n){return t===n||((0,r.Lc)(t)?(0,r.Lc)(n)?e.getPossibleTypes(t).some((t=>e.isSubType(n,t))):e.isSubType(t,n):!!(0,r.Lc)(n)&&e.isSubType(n,t))}},4949:e=>{"use strict";e.exports="data:font/woff;base64,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"},4999:(e,t,n)=>{!function(e){var t={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},n=e.Pos;function r(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==typeof e&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,(function(t,n,a){a&&a!=e.Init&&(t.removeKeyMap(o),t.state.closeBrackets=null),n&&(i(r(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(o))}));var o={Backspace:function(t){var o=s(t);if(!o||t.getOption("disableInput"))return e.Pass;for(var i=r(o,"pairs"),a=t.listSelections(),l=0;l=0;l--){var d=a[l].head;t.replaceRange("",n(d.line,d.ch-1),n(d.line,d.ch+1),"+delete")}},Enter:function(t){var n=s(t),o=n&&r(n,"explode");if(!o||t.getOption("disableInput"))return e.Pass;for(var i=t.listSelections(),a=0;a1&&h.indexOf(o)>=0&&t.getRange(n(w.line,w.ch-2),w)==o+o){if(w.ch>2&&/\bstring/.test(t.getTokenTypeAt(n(w.line,w.ch-2))))return e.Pass;b="addFour"}else if(m){var E=0==w.ch?" ":t.getRange(n(w.line,w.ch-1),w);if(e.isWordChar(x)||E==o||e.isWordChar(E))return e.Pass;b="both"}else{if(!v||!(0===x.length||/\s/.test(x)||p.indexOf(x)>-1))return e.Pass;b="both"}else b=m&&d(t,w)?"both":h.indexOf(o)>=0&&t.getRange(w,n(w.line,w.ch+3))==o+o+o?"skipThree":"skip";if(f){if(f!=b)return e.Pass}else f=b}var C=u%2?a.charAt(u-1):o,k=u%2?o:a.charAt(u+1);t.operation((function(){if("skip"==f)l(t,1);else if("skipThree"==f)l(t,3);else if("surround"==f){for(var e=t.getSelections(),n=0;n0?{line:a.head.line,ch:a.head.ch+t}:{line:a.head.line-1};n.push({anchor:s,head:s})}e.setSelections(n,o)}function c(t){var r=e.cmpPos(t.anchor,t.head)>0;return{anchor:new n(t.anchor.line,t.anchor.ch+(r?-1:1)),head:new n(t.head.line,t.head.ch+(r?1:-1))}}function u(e,t){var r=e.getRange(n(t.line,t.ch-1),n(t.line,t.ch+1));return 2==r.length?r:null}function d(e,t){var r=e.getTokenAt(n(t.line,t.ch+1));return/\bstring/.test(r.type)&&r.start==t.ch&&(0==t.ch||!/\bstring/.test(e.getTokenTypeAt(t)))}i(t.pairs+"`")}(n(1448))},5106:(e,t,n)=>{"use strict";n.d(t,{K:()=>u});var r=n(5198),o=n(8255),i=n(2455),a=n(2704),s=n(2114),l=n(9494);function c(e){return Array.isArray(e)?e.map((([e,t])=>`subfields "${e}" conflict because `+c(t))).join(" and "):e}function u(e){const t=new x,n=new Map;return{SelectionSet(r){const i=function(e,t,n,r,o){const i=[],[a,s]=b(e,t,r,o);if(function(e,t,n,r,o){for(const[i,a]of Object.entries(o))if(a.length>1)for(let o=0;o{const t=D.find((t=>t.name.value===e.name.value));return!!t&&v(e.value,t.value)})))return[[i,"they have differing arguments"],[u],[w]];if(!function(e,t){const n=g(e),r=g(t);return!n&&!r||!(!n||!r)&&(m(n,r,"initialCount")&&m(n,r,"label"))}(null!==(T=u.directives)&&void 0!==T?T:[],null!==(S=w.directives)&&void 0!==S?S:[]))return[[i,"they have differing stream directives"],[u],[w]]}var N,D;const O=null==h?void 0:h.type,I=null==x?void 0:x.type;if(O&&I&&y(O,I))return[[i,`they return conflicting types "${(0,r.N)(O)}" and "${(0,r.N)(I)}"`],[u],[w]];const L=u.selectionSet,M=w.selectionSet;if(L&&M){const r=function(e,t,n,r,o,i,a,s){const l=[],[c,u]=b(e,t,o,i),[h,m]=b(e,t,a,s);p(e,l,t,n,r,c,h);for(const o of m)d(e,l,t,n,r,c,o);for(const o of u)d(e,l,t,n,r,h,o);for(const o of u)for(const i of m)f(e,l,t,n,r,o,i);return l}(e,t,n,E,(0,s.MR)(O),L,(0,s.MR)(I),M);return function(e,t,n,r){if(e.length>0)return[[t,e.map((([e])=>e))],[n,...e.map((([,e])=>e)).flat()],[r,...e.map((([,,e])=>e)).flat()]]}(r,i,u,w)}}function m(e,t,n){var r,o;const i=(null!==(r=e.arguments)&&void 0!==r?r:[]).find((e=>e.name.value===n));if(!i)return!1;const a=(null!==(o=t.arguments)&&void 0!==o?o:[]).find((e=>e.name.value===n));return!!a&&v(i.value,a.value)}function g(e){return e.find((e=>"stream"===e.name.value))}function v(e,t){return(0,a.y)(e)===(0,a.y)(t)}function y(e,t){return(0,s.Fs)(e)?!(0,s.Fs)(t)||y(e.ofType,t.ofType):!!(0,s.Fs)(t)||((0,s.bd)(e)?!(0,s.bd)(t)||y(e.ofType,t.ofType):!!(0,s.bd)(t)||!(!(0,s.zf)(e)&&!(0,s.zf)(t))&&e!==t)}function b(e,t,n,r){const o=t.get(r);if(o)return o;const i=Object.create(null),a=Object.create(null);w(e,n,r,i,a);const s=[i,Object.keys(a)];return t.set(r,s),s}function A(e,t,n){const r=t.get(n.selectionSet);if(r)return r;const o=(0,l.v)(e.getSchema(),n.typeCondition);return b(e,t,o,n.selectionSet)}function w(e,t,n,r,o){for(const a of n.selections)switch(a.kind){case i.b.FIELD:{const e=a.name.value;let n;((0,s.YQ)(t)||(0,s.kD)(t))&&(n=t.getFields()[e]);const o=a.alias?a.alias.value:e;r[o]||(r[o]=[]),r[o].push([t,a,n]);break}case i.b.FRAGMENT_SPREAD:o[a.name.value]=!0;break;case i.b.INLINE_FRAGMENT:{const n=a.typeCondition,i=n?(0,l.v)(e.getSchema(),n):t;w(e,i,a.selectionSet,r,o);break}}}class x{constructor(){this._data=new Map}has(e,t,n){var r;const[o,i]=e{"use strict";e.exports="data:font/woff2;base64,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"},5139:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"},5157:(e,t,n)=>{"use strict";n.d(t,{H:()=>o});var r=n(8255);function o(e){const t=Object.create(null);return{OperationDefinition(n){const o=n.name;return o&&(t[o.value]?e.reportError(new r.eO(`There can be only one operation named "${o.value}".`,[t[o.value],o])):t[o.value]=o),!1},FragmentDefinition:()=>!1}}},5187:(e,t,n)=>{"use strict";n.d(t,{A:()=>o});var r=n(2455);function o(e,t){let n=null;for(const i of e.definitions){var o;if(i.kind===r.b.OPERATION_DEFINITION)if(null==t){if(n)return null;n=i}else if((null===(o=i.name)||void 0===o?void 0:o.value)===t)return i}return n}},5198:(e,t,n)=>{"use strict";n.d(t,{N:()=>i});const r=10,o=2;function i(e){return a(e,[])}function a(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return function(e,t){if(null===e)return"null";if(t.includes(e))return"[Circular]";const n=[...t,e];if(function(e){return"function"==typeof e.toJSON}(e)){const t=e.toJSON();if(t!==e)return"string"==typeof t?t:a(t,n)}else if(Array.isArray(e))return function(e,t){if(0===e.length)return"[]";if(t.length>o)return"[Array]";const n=Math.min(r,e.length),i=e.length-n,s=[];for(let r=0;r1&&s.push(`... ${i} more items`),"["+s.join(", ")+"]"}(e,n);return function(e,t){const n=Object.entries(e);if(0===n.length)return"{}";if(t.length>o)return"["+function(e){const t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if("Object"===t&&"function"==typeof e.constructor){const t=e.constructor.name;if("string"==typeof t&&""!==t)return t}return t}(e)+"]";const r=n.map((([e,n])=>e+": "+a(n,t)));return"{ "+r.join(", ")+" }"}(e,n)}(e,t);default:return String(e)}}},5214:(e,t,n)=>{"use strict";t.A_=void 0;var r,o=(r=n(190))&&r.__esModule?r:{default:r};t.A_=o.default,o.default},5229:(e,t,n)=>{!function(e){"use strict";var t=e.commands,n=e.Pos;function r(t,r){t.extendSelectionsBy((function(o){return t.display.shift||t.doc.extend||o.empty()?function(t,r,o){if(o<0&&0==r.ch)return t.clipPos(n(r.line-1));var i=t.getLine(r.line);if(o>0&&r.ch>=i.length)return t.clipPos(n(r.line+1,0));for(var a,s="start",l=r.ch,c=l,u=o<0?0:i.length,d=0;c!=u;c+=o,d++){var f=i.charAt(o<0?c-1:c),p="_"!=f&&e.isWordChar(f)?"w":"o";if("w"==p&&f.toUpperCase()==f&&(p="W"),"start"==s)"o"!=p?(s="in",a=p):l=c+o;else if("in"==s&&a!=p){if("w"==a&&"W"==p&&o<0&&c--,"W"==a&&"w"==p&&o>0){if(c==l+1){a="w";continue}c--}break}}return n(r.line,c)}(t.doc,o.head,r):r<0?o.from():o.to()}))}function o(t,r){if(t.isReadOnly())return e.Pass;t.operation((function(){for(var e=t.listSelections().length,o=[],i=-1,a=0;a=n&&e.execCommand("goLineUp")}e.scrollTo(null,t.top-e.defaultTextHeight())},t.scrollLineDown=function(e){var t=e.getScrollInfo();if(!e.somethingSelected()){var n=e.lineAtHeight(t.top,"local")+1;e.getCursor().line<=n&&e.execCommand("goLineDown")}e.scrollTo(null,t.top+e.defaultTextHeight())},t.splitSelectionByLine=function(e){for(var t=e.listSelections(),r=[],o=0;oi.line&&s==a.line&&0==a.ch||r.push({anchor:s==i.line?i:n(s,0),head:s==a.line?a:n(s)});e.setSelections(r,0)},t.singleSelectionTop=function(e){var t=e.listSelections()[0];e.setSelection(t.anchor,t.head,{scroll:!1})},t.selectLine=function(e){for(var t=e.listSelections(),r=[],o=0;o=0;s--){var c=r[o[s]];if(!(l&&e.cmpPos(c.head,l)>0)){var u=i(t,c.head);l=u.from,t.replaceRange(n(u.word),u.from,u.to)}}}))}function f(t){var n=t.getCursor("from"),r=t.getCursor("to");if(0==e.cmpPos(n,r)){var o=i(t,n);if(!o.word)return;n=o.from,r=o.to}return{from:n,to:r,query:t.getRange(n,r),word:o}}function p(e,t){var r=f(e);if(r){var o=r.query,i=e.getSearchCursor(o,t?r.to:r.from);(t?i.findNext():i.findPrevious())?e.setSelection(i.from(),i.to()):(i=e.getSearchCursor(o,t?n(e.firstLine(),0):e.clipPos(n(e.lastLine()))),(t?i.findNext():i.findPrevious())?e.setSelection(i.from(),i.to()):r.word&&e.setSelection(r.from,r.to))}}t.selectScope=function(e){l(e)||e.execCommand("selectAll")},t.selectBetweenBrackets=function(t){if(!l(t))return e.Pass},t.goToBracket=function(t){t.extendSelectionsBy((function(r){var o=t.scanForBracket(r.head,1,c(t.getTokenTypeAt(r.head)));if(o&&0!=e.cmpPos(o.pos,r.head))return o.pos;var i=t.scanForBracket(r.head,-1,c(t.getTokenTypeAt(n(r.head.line,r.head.ch+1))));return i&&n(i.pos.line,i.pos.ch+1)||r.head}))},t.swapLineUp=function(t){if(t.isReadOnly())return e.Pass;for(var r=t.listSelections(),o=[],i=t.firstLine()-1,a=[],s=0;si?o.push(c,u):o.length&&(o[o.length-1]=u),i=u}t.operation((function(){for(var e=0;et.lastLine()?t.replaceRange("\n"+s,n(t.lastLine()),null,"+swapLine"):t.replaceRange(s+"\n",n(i,0),null,"+swapLine")}t.setSelections(a),t.scrollIntoView()}))},t.swapLineDown=function(t){if(t.isReadOnly())return e.Pass;for(var r=t.listSelections(),o=[],i=t.lastLine()+1,a=r.length-1;a>=0;a--){var s=r[a],l=s.to().line+1,c=s.from().line;0!=s.to().ch||s.empty()||l--,l=0;e-=2){var r=o[e],i=o[e+1],a=t.getLine(r);r==t.lastLine()?t.replaceRange("",n(r-1),n(r),"+swapLine"):t.replaceRange("",n(r,0),n(r+1,0),"+swapLine"),t.replaceRange(a+"\n",n(i,0),null,"+swapLine")}t.scrollIntoView()}))},t.toggleCommentIndented=function(e){e.toggleComment({indent:!0})},t.joinLines=function(e){for(var t=e.listSelections(),r=[],o=0;o=0;i--){var a=r[i].head,s=t.getRange({line:a.line,ch:0},a),l=e.countColumn(s,null,t.getOption("tabSize")),c=t.findPosH(a,-1,"char",!1);if(s&&!/\S/.test(s)&&l%o==0){var u=new n(a.line,e.findColumn(s,l-o,o));u.ch!=a.ch&&(c=u)}t.replaceRange("",c,a,"+delete")}}))},t.delLineRight=function(e){e.operation((function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange("",t[r].anchor,n(t[r].to().line),"+delete");e.scrollIntoView()}))},t.upcaseAtCursor=function(e){d(e,(function(e){return e.toUpperCase()}))},t.downcaseAtCursor=function(e){d(e,(function(e){return e.toLowerCase()}))},t.setSublimeMark=function(e){e.state.sublimeMark&&e.state.sublimeMark.clear(),e.state.sublimeMark=e.setBookmark(e.getCursor())},t.selectToSublimeMark=function(e){var t=e.state.sublimeMark&&e.state.sublimeMark.find();t&&e.setSelection(e.getCursor(),t)},t.deleteToSublimeMark=function(t){var n=t.state.sublimeMark&&t.state.sublimeMark.find();if(n){var r=t.getCursor(),o=n;if(e.cmpPos(r,o)>0){var i=o;o=r,r=i}t.state.sublimeKilled=t.getRange(r,o),t.replaceRange("",r,o)}},t.swapWithSublimeMark=function(e){var t=e.state.sublimeMark&&e.state.sublimeMark.find();t&&(e.state.sublimeMark.clear(),e.state.sublimeMark=e.setBookmark(e.getCursor()),e.setCursor(t))},t.sublimeYank=function(e){null!=e.state.sublimeKilled&&e.replaceSelection(e.state.sublimeKilled,null,"paste")},t.showInCenter=function(e){var t=e.cursorCoords(null,"local");e.scrollTo(null,(t.top+t.bottom)/2-e.getScrollInfo().clientHeight/2)},t.findUnder=function(e){p(e,!0)},t.findUnderPrevious=function(e){p(e,!1)},t.findAllUnder=function(e){var t=f(e);if(t){for(var n=e.getSearchCursor(t.query),r=[],o=-1;n.findNext();)r.push({anchor:n.from(),head:n.to()}),n.from().line<=t.from.line&&n.from().ch<=t.from.ch&&o++;e.setSelections(r,o)}};var h=e.keyMap;h.macSublime={"Cmd-Left":"goLineStartSmart","Shift-Tab":"indentLess","Shift-Ctrl-K":"deleteLine","Alt-Q":"wrapLines","Ctrl-Left":"goSubwordLeft","Ctrl-Right":"goSubwordRight","Ctrl-Alt-Up":"scrollLineUp","Ctrl-Alt-Down":"scrollLineDown","Cmd-L":"selectLine","Shift-Cmd-L":"splitSelectionByLine",Esc:"singleSelectionTop","Cmd-Enter":"insertLineAfter","Shift-Cmd-Enter":"insertLineBefore","Cmd-D":"selectNextOccurrence","Shift-Cmd-Space":"selectScope","Shift-Cmd-M":"selectBetweenBrackets","Cmd-M":"goToBracket","Cmd-Ctrl-Up":"swapLineUp","Cmd-Ctrl-Down":"swapLineDown","Cmd-/":"toggleCommentIndented","Cmd-J":"joinLines","Shift-Cmd-D":"duplicateLine",F5:"sortLines","Shift-F5":"reverseSortLines","Cmd-F5":"sortLinesInsensitive","Shift-Cmd-F5":"reverseSortLinesInsensitive",F2:"nextBookmark","Shift-F2":"prevBookmark","Cmd-F2":"toggleBookmark","Shift-Cmd-F2":"clearBookmarks","Alt-F2":"selectBookmarks",Backspace:"smartBackspace","Cmd-K Cmd-D":"skipAndSelectNextOccurrence","Cmd-K Cmd-K":"delLineRight","Cmd-K Cmd-U":"upcaseAtCursor","Cmd-K Cmd-L":"downcaseAtCursor","Cmd-K Cmd-Space":"setSublimeMark","Cmd-K Cmd-A":"selectToSublimeMark","Cmd-K Cmd-W":"deleteToSublimeMark","Cmd-K Cmd-X":"swapWithSublimeMark","Cmd-K Cmd-Y":"sublimeYank","Cmd-K Cmd-C":"showInCenter","Cmd-K Cmd-G":"clearBookmarks","Cmd-K Cmd-Backspace":"delLineLeft","Cmd-K Cmd-1":"foldAll","Cmd-K Cmd-0":"unfoldAll","Cmd-K Cmd-J":"unfoldAll","Ctrl-Shift-Up":"addCursorToPrevLine","Ctrl-Shift-Down":"addCursorToNextLine","Cmd-F3":"findUnder","Shift-Cmd-F3":"findUnderPrevious","Alt-F3":"findAllUnder","Shift-Cmd-[":"fold","Shift-Cmd-]":"unfold","Cmd-I":"findIncremental","Shift-Cmd-I":"findIncrementalReverse","Cmd-H":"replace",F3:"findNext","Shift-F3":"findPrev",fallthrough:"macDefault"},e.normalizeKeyMap(h.macSublime),h.pcSublime={"Shift-Tab":"indentLess","Shift-Ctrl-K":"deleteLine","Alt-Q":"wrapLines","Ctrl-T":"transposeChars","Alt-Left":"goSubwordLeft","Alt-Right":"goSubwordRight","Ctrl-Up":"scrollLineUp","Ctrl-Down":"scrollLineDown","Ctrl-L":"selectLine","Shift-Ctrl-L":"splitSelectionByLine",Esc:"singleSelectionTop","Ctrl-Enter":"insertLineAfter","Shift-Ctrl-Enter":"insertLineBefore","Ctrl-D":"selectNextOccurrence","Shift-Ctrl-Space":"selectScope","Shift-Ctrl-M":"selectBetweenBrackets","Ctrl-M":"goToBracket","Shift-Ctrl-Up":"swapLineUp","Shift-Ctrl-Down":"swapLineDown","Ctrl-/":"toggleCommentIndented","Ctrl-J":"joinLines","Shift-Ctrl-D":"duplicateLine",F9:"sortLines","Shift-F9":"reverseSortLines","Ctrl-F9":"sortLinesInsensitive","Shift-Ctrl-F9":"reverseSortLinesInsensitive",F2:"nextBookmark","Shift-F2":"prevBookmark","Ctrl-F2":"toggleBookmark","Shift-Ctrl-F2":"clearBookmarks","Alt-F2":"selectBookmarks",Backspace:"smartBackspace","Ctrl-K Ctrl-D":"skipAndSelectNextOccurrence","Ctrl-K Ctrl-K":"delLineRight","Ctrl-K Ctrl-U":"upcaseAtCursor","Ctrl-K Ctrl-L":"downcaseAtCursor","Ctrl-K Ctrl-Space":"setSublimeMark","Ctrl-K Ctrl-A":"selectToSublimeMark","Ctrl-K Ctrl-W":"deleteToSublimeMark","Ctrl-K Ctrl-X":"swapWithSublimeMark","Ctrl-K Ctrl-Y":"sublimeYank","Ctrl-K Ctrl-C":"showInCenter","Ctrl-K Ctrl-G":"clearBookmarks","Ctrl-K Ctrl-Backspace":"delLineLeft","Ctrl-K Ctrl-1":"foldAll","Ctrl-K Ctrl-0":"unfoldAll","Ctrl-K Ctrl-J":"unfoldAll","Ctrl-Alt-Up":"addCursorToPrevLine","Ctrl-Alt-Down":"addCursorToNextLine","Ctrl-F3":"findUnder","Shift-Ctrl-F3":"findUnderPrevious","Alt-F3":"findAllUnder","Shift-Ctrl-[":"fold","Shift-Ctrl-]":"unfold","Ctrl-I":"findIncremental","Shift-Ctrl-I":"findIncrementalReverse","Ctrl-H":"replace",F3:"findNext","Shift-F3":"findPrev",fallthrough:"pcDefault"},e.normalizeKeyMap(h.pcSublime);var m=h.default==h.macDefault;h.sublime=m?h.macSublime:h.pcSublime}(n(1448),n(5530),n(2278))},5261:(e,t,n)=>{"use strict";n.d(t,{S:()=>c,_:()=>l});var r=n(2455),o=n(7274),i=n(2114),a=n(9494),s=n(9390);function l(e,t,n,r,o){const i=new Map,a=[];return u(e,t,n,r,o,i,a,new Set),{fields:i,patches:a}}function c(e,t,n,r,o){const i=new Map,a=new Set,s=[],l={fields:i,patches:s};for(const l of o)l.selectionSet&&u(e,t,n,r,l.selectionSet,i,s,a);return l}function u(e,t,n,o,i,a,s,l){for(const h of i.selections)switch(h.kind){case r.b.FIELD:{if(!f(n,h))continue;const e=(c=h).alias?c.alias.value:c.name.value,t=a.get(e);void 0!==t?t.push(h):a.set(e,[h]);break}case r.b.INLINE_FRAGMENT:{if(!f(n,h)||!p(e,h,o))continue;const r=d(e,n,h);if(r){const i=new Map;u(e,t,n,o,h.selectionSet,i,s,l),s.push({label:r.label,fields:i})}else u(e,t,n,o,h.selectionSet,a,s,l);break}case r.b.FRAGMENT_SPREAD:{const r=h.name.value;if(!f(n,h))continue;const i=d(e,n,h);if(l.has(r)&&!i)continue;const c=t[r];if(!c||!p(e,c,o))continue;if(l.add(r),i){const r=new Map;u(e,t,n,o,c.selectionSet,r,s,l),s.push({label:i.label,fields:r})}else u(e,t,n,o,c.selectionSet,a,s,l);break}}var c}function d(e,t,n){if(!0!==e._enableDeferStream)return;const r=(0,s.YY)(o.BR,n,t);return r&&!1!==r.if?{label:"string"==typeof r.label?r.label:void 0}:void 0}function f(e,t){const n=(0,s.YY)(o.MQ,t,e);if(!0===(null==n?void 0:n.if))return!1;const r=(0,s.YY)(o.HQ,t,e);return!1!==(null==r?void 0:r.if)}function p(e,t,n){const r=t.typeCondition;if(!r)return!0;const o=(0,a.v)(e,r);return o===n||!!(0,i.Lc)(o)&&e.isSubType(o,n)}},5272:(e,t,n)=>{"use strict";n.d(t,{g:()=>B,H:()=>U});var r=n(8489),o=n(5157),i=n(4719),a=n(99),s=n(4466),l=n(9911),c=n(9461),u=n(48),d=n(5449),f=n(5536),p=n(8898),h=n(1981),m=n(8644),g=n(2833),v=n(2584),y=n(2027),b=n(9201),A=n(6868),w=n(6886),x=n(8255),E=n(7274),C=n(2114),k=n(825),T=n(2475),S=n(1838),N=n(7565),D=n(8022),O=n(5106),I=n(656),L=n(5343),M=n(354),F=n(7368),R=n(2954),P=n(3537),j=n(4410),V=n(7065),q=n(5966);const B=Object.freeze([r.T,o.H,i.P,a.R,s.y,l.T,c.J,u.A,d.Z,f.K,p.K,h.z,m.y,g.n,v._,y.Z,b.p,A.e,w.U,function(e){return{Directive(t){const n=e.getSchema().getMutationType(),r=e.getSchema().getSubscriptionType(),o=e.getParentType();o&&t.name.value===E.BR.name&&(n&&o===n&&e.reportError(new x.eO(`Defer directive cannot be used on root mutation type "${o.name}".`,t)),r&&o===r&&e.reportError(new x.eO(`Defer directive cannot be used on root subscription type "${o.name}".`,t))),o&&t.name.value===E.nK.name&&(n&&o===n&&e.reportError(new x.eO(`Stream directive cannot be used on root mutation type "${o.name}".`,t)),r&&o===r&&e.reportError(new x.eO(`Stream directive cannot be used on root subscription type "${o.name}".`,t)))}}},function(e){return{Directive(t){const n=e.getFieldDef(),r=e.getParentType();n&&r&&t.name.value===E.nK.name&&!((0,C.Fs)(n.type)||(0,C.lS)(n.type)&&(0,C.Fs)(n.type.ofType))&&e.reportError(new x.eO(`Stream directive cannot be used on non-list field "${n.name}" on type "${r.name}".`,t))}}},k.P,T.J,S.U,N.X,D.E,O.K,I.C]),U=Object.freeze([L.l,M.u,F.i,R.g,P.X,j.E,V.Z,s.y,A.e,w.U,q.S,k.W,T.J,I.C,N.A])},5302:(e,t,n)=>{const r=n(1918);function o(e,t,n){return"function"==typeof n.join?n.join(e):e[0]+t+e[1]}function i(e,t,n){return"function"!=typeof n.isValid||n.isValid(e,t)}function a(e){return r(e)||Array.isArray(e)||"function"==typeof e}e.exports=function(e,t,n){if(r(n)||(n={default:n}),!a(e))return void 0!==n.default?n.default:e;"number"==typeof t&&(t=String(t));const s=Array.isArray(t),l="string"==typeof t,c=n.separator||".",u=n.joinChar||("string"==typeof c?c:".");if(!l&&!s)return e;if(l&&t in e)return i(t,e,n)?e[t]:n.default;let d=s?t:function(e,t,n){return"function"==typeof n.split?n.split(e):e.split(t)}(t,c,n),f=d.length,p=0;do{let t=d[p];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=o([t.slice(0,-1),d[++p]||""],u,n);if(t in e){if(!i(t,e,n))return n.default;e=e[t]}else{let r=!1,a=p+1;for(;a{"use strict";n.d(t,{GU:()=>p,V4:()=>h,Wl:()=>f});var r=n(5198),o=n(698),i=n(3217),a=n(792),s=n(1070),l=n(9762),c=n(8957),u=n(7274),d=n(2114);function f(e){return(0,a.h)(e,h)}function p(e){if(!f(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL schema.`);return e}class h{constructor(e){var t,n;this.__validationErrors=!0===e.assumeValid?[]:void 0,this._enableDeferStream=e.enableDeferStream,(0,s.Z)(e)||(0,i.U)(!1,"Must provide configuration object."),!e.types||Array.isArray(e.types)||(0,i.U)(!1,`"types" must be Array if provided but got: ${(0,r.N)(e.types)}.`),!e.directives||Array.isArray(e.directives)||(0,i.U)(!1,`"directives" must be Array if provided but got: ${(0,r.N)(e.directives)}.`),this.description=e.description,this.extensions=(0,o.z)(e.extensions),this.astNode=e.astNode,this.extensionASTNodes=null!==(t=e.extensionASTNodes)&&void 0!==t?t:[],this._queryType=e.query,this._mutationType=e.mutation,this._subscriptionType=e.subscription,this._directives=null!==(n=e.directives)&&void 0!==n?n:u.rc,!0===e.enableDeferStream&&(this._directives.some((e=>"defer"===e.name))||(this._directives=[...this._directives,u.BR]),this._directives.some((e=>"stream"===e.name))||(this._directives=[...this._directives,u.nK]));const a=new Set(e.types);if(null!=e.types)for(const t of e.types)a.delete(t),m(t,a);null!=this._queryType&&m(this._queryType,a),null!=this._mutationType&&m(this._mutationType,a),null!=this._subscriptionType&&m(this._subscriptionType,a);for(const e of this._directives)if((0,u.qT)(e))for(const t of e.args)m(t.type,a);m(c.em,a),this._typeMap=Object.create(null),this._subTypeMap=Object.create(null),this._implementationsMap=Object.create(null);for(const e of a){if(null==e)continue;const t=e.name;if(t||(0,i.U)(!1,"One of the provided types for building the Schema is missing a name."),void 0!==this._typeMap[t])throw new Error(`Schema must contain uniquely named types but contains multiple types named "${t}".`);if(this._typeMap[t]=e,(0,d.kD)(e)){for(const t of e.getInterfaces())if((0,d.kD)(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.interfaces.push(e)}}else if((0,d.YQ)(e))for(const t of e.getInterfaces())if((0,d.kD)(t)){let n=this._implementationsMap[t.name];void 0===n&&(n=this._implementationsMap[t.name]={objects:[],interfaces:[]}),n.objects.push(e)}}}get[Symbol.toStringTag](){return"GraphQLSchema"}getQueryType(){return this._queryType}getMutationType(){return this._mutationType}getSubscriptionType(){return this._subscriptionType}getRootType(e){switch(e){case l.cE.QUERY:return this.getQueryType();case l.cE.MUTATION:return this.getMutationType();case l.cE.SUBSCRIPTION:return this.getSubscriptionType()}}getTypeMap(){return this._typeMap}getType(e){return this.getTypeMap()[e]}getPossibleTypes(e){return(0,d.CK)(e)?e.getTypes():this.getImplementations(e).objects}getImplementations(e){const t=this._implementationsMap[e.name];return null!=t?t:{objects:[],interfaces:[]}}isSubType(e,t){let n=this._subTypeMap[e.name];if(void 0===n){if(n=Object.create(null),(0,d.CK)(e))for(const t of e.getTypes())n[t.name]=!0;else{const t=this.getImplementations(e);for(const e of t.objects)n[e.name]=!0;for(const e of t.interfaces)n[e.name]=!0}this._subTypeMap[e.name]=n}return void 0!==n[t.name]}getDirectives(){return this._directives}getDirective(e){return this.getDirectives().find((t=>t.name===e))}toConfig(){return{description:this.description,query:this.getQueryType(),mutation:this.getMutationType(),subscription:this.getSubscriptionType(),types:Object.values(this.getTypeMap()),directives:this.getDirectives(),extensions:this.extensions,astNode:this.astNode,extensionASTNodes:this.extensionASTNodes,assumeValid:void 0!==this.__validationErrors}}}function m(e,t){const n=(0,d.MR)(e);if(!t.has(n))if(t.add(n),(0,d.CK)(n))for(const e of n.getTypes())m(e,t);else if((0,d.YQ)(n)||(0,d.kD)(n)){for(const e of n.getInterfaces())m(e,t);for(const e of Object.values(n.getFields())){m(e.type,t);for(const n of e.args)m(n.type,t)}}else if((0,d.qK)(n))for(const e of Object.values(n.getFields()))m(e.type,t);return t}},5343:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(8255);function o(e){var t,n,o;const i=e.getSchema(),a=null!==(t=null!==(n=null!==(o=null==i?void 0:i.astNode)&&void 0!==o?o:null==i?void 0:i.getQueryType())&&void 0!==n?n:null==i?void 0:i.getMutationType())&&void 0!==t?t:null==i?void 0:i.getSubscriptionType();let s=0;return{SchemaDefinition(t){a?e.reportError(new r.eO("Cannot define a new schema within a schema extension.",t)):(s>0&&e.reportError(new r.eO("Must provide only one schema definition.",t)),++s)}}}},5410:(e,t,n)=>{"use strict";n.d(t,{D:()=>h});var r=n(5198),o=n(3217),i=n(6394),a=n(1070),s=n(8195),l=n(5329),c=n(7274),u=n(4143),d=n(8957),f=n(2114),p=n(9327);function h(e,t){(0,a.Z)(e)&&(0,a.Z)(e.__schema)||(0,o.U)(!1,`Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${(0,r.N)(e)}.`);const n=e.__schema,h=(0,i.L)(n.types,(e=>e.name),(e=>function(e){if(null!=e&&null!=e.name&&null!=e.kind)switch(e.kind){case d.fY.SCALAR:return o=e,new f.Ag({name:o.name,description:o.description,specifiedByURL:o.specifiedByURL});case d.fY.OBJECT:return n=e,new f.bh({name:n.name,description:n.description,interfaces:()=>E(n),fields:()=>C(n)});case d.fY.INTERFACE:return t=e,new f.VA({name:t.name,description:t.description,interfaces:()=>E(t),fields:()=>C(t)});case d.fY.UNION:return function(e){if(!e.possibleTypes){const t=(0,r.N)(e);throw new Error(`Introspection result missing possibleTypes: ${t}.`)}return new f.hI({name:e.name,description:e.description,types:()=>e.possibleTypes.map(w)})}(e);case d.fY.ENUM:return function(e){if(!e.enumValues){const t=(0,r.N)(e);throw new Error(`Introspection result missing enumValues: ${t}.`)}return new f.Zb({name:e.name,description:e.description,values:(0,i.L)(e.enumValues,(e=>e.name),(e=>({description:e.description,deprecationReason:e.deprecationReason})))})}(e);case d.fY.INPUT_OBJECT:return function(e){if(!e.inputFields){const t=(0,r.N)(e);throw new Error(`Introspection result missing inputFields: ${t}.`)}return new f.zP({name:e.name,description:e.description,fields:()=>T(e.inputFields)})}(e)}var t,n,o;const a=(0,r.N)(e);throw new Error(`Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: ${a}.`)}(e)));for(const e of[...u.YC,...d.V4])h[e.name]&&(h[e.name]=e);const m=n.queryType?w(n.queryType):null,g=n.mutationType?w(n.mutationType):null,v=n.subscriptionType?w(n.subscriptionType):null,y=n.directives?n.directives.map((function(e){if(!e.args){const t=(0,r.N)(e);throw new Error(`Introspection result missing directive args: ${t}.`)}if(!e.locations){const t=(0,r.N)(e);throw new Error(`Introspection result missing directive locations: ${t}.`)}return new c.RR({name:e.name,description:e.description,isRepeatable:e.isRepeatable,locations:e.locations.slice(),args:T(e.args)})})):[];return new l.V4({description:n.description,query:m,mutation:g,subscription:v,types:Object.values(h),directives:y,assumeValid:null==t?void 0:t.assumeValid});function b(e){if(e.kind===d.fY.LIST){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");return new f.KT(b(t))}if(e.kind===d.fY.NON_NULL){const t=e.ofType;if(!t)throw new Error("Decorated type deeper than introspection query.");const n=b(t);return new f.Gc((0,f.wG)(n))}return A(e)}function A(e){const t=e.name;if(!t)throw new Error(`Unknown type reference: ${(0,r.N)(e)}.`);const n=h[t];if(!n)throw new Error(`Invalid or incomplete schema, unknown type: ${t}. Ensure that a full introspection query is used in order to build a client schema.`);return n}function w(e){return(0,f.qC)(A(e))}function x(e){return(0,f.qL)(A(e))}function E(e){if(null===e.interfaces&&e.kind===d.fY.INTERFACE)return[];if(!e.interfaces){const t=(0,r.N)(e);throw new Error(`Introspection result missing interfaces: ${t}.`)}return e.interfaces.map(x)}function C(e){if(!e.fields)throw new Error(`Introspection result missing fields: ${(0,r.N)(e)}.`);return(0,i.L)(e.fields,(e=>e.name),k)}function k(e){const t=b(e.type);if(!(0,f.oH)(t)){const e=(0,r.N)(t);throw new Error(`Introspection must provide output type for fields, but received: ${e}.`)}if(!e.args){const t=(0,r.N)(e);throw new Error(`Introspection result missing field args: ${t}.`)}return{description:e.description,deprecationReason:e.deprecationReason,type:t,args:T(e.args)}}function T(e){return(0,i.L)(e,(e=>e.name),S)}function S(e){const t=b(e.type);if(!(0,f.dX)(t)){const e=(0,r.N)(t);throw new Error(`Introspection must provide input type for arguments, but received: ${e}.`)}const n=null!=e.defaultValue?(0,p.i)((0,s.$x)(e.defaultValue),t):void 0;return{description:e.description,type:t,defaultValue:n,deprecationReason:e.deprecationReason}}}},5423:(e,t,n)=>{"use strict";n.r(t);var r=n(1448),o=n.n(r),i=n(1505);const a=["error","warning","information","hint"],s={"GraphQL: Validation":"validation","GraphQL: Deprecation":"deprecation","GraphQL: Syntax":"syntax"};o().registerHelper("lint","graphql",((e,t)=>{const{schema:n,validationRules:r,externalFragments:l}=t;return(0,i.VS)(e,n,r,void 0,l).map((e=>({message:e.message,severity:e.severity?a[e.severity-1]:a[0],type:e.source?s[e.source]:void 0,from:o().Pos(e.range.start.line,e.range.start.character),to:o().Pos(e.range.end.line,e.range.end.character)})))}))},5449:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var r=n(4833),o=n(6382),i=n(3858),a=n(8255),s=n(2114);function l(e){return{Field(t){const n=e.getParentType();if(n&&!e.getFieldDef()){const l=e.getSchema(),c=t.name.value;let u=(0,r.a)("to use an inline fragment on",function(e,t,n){if(!(0,s.Lc)(t))return[];const r=new Set,o=Object.create(null);for(const i of e.getPossibleTypes(t))if(i.getFields()[n]){r.add(i),o[i.name]=1;for(const e of i.getInterfaces()){var a;e.getFields()[n]&&(r.add(e),o[e.name]=(null!==(a=o[e.name])&&void 0!==a?a:0)+1)}}return[...r].sort(((t,n)=>{const r=o[n.name]-o[t.name];return 0!==r?r:(0,s.kD)(t)&&e.isSubType(t,n)?-1:(0,s.kD)(n)&&e.isSubType(n,t)?1:(0,i.p)(t.name,n.name)})).map((e=>e.name))}(l,n,c));""===u&&(u=(0,r.a)(function(e,t){if((0,s.YQ)(e)||(0,s.kD)(e)){const n=Object.keys(e.getFields());return(0,o.x)(t,n)}return[]}(n,c))),e.reportError(new a.eO(`Cannot query field "${c}" on type "${n.name}".`+u,t))}}}}},5479:(e,t,n)=>{!function(e){"use strict";function t(e,t){var n=Number(t);return/^[-+]/.test(t)?e.getCursor().line+n:n-1}e.defineOption("search",{bottom:!1}),e.commands.jumpToLine=function(e){var n=e.getCursor();!function(e,t,n,r,o){e.openDialog?e.openDialog(t,o,{value:r,selectValueOnOpen:!0,bottom:e.options.search.bottom}):o(prompt(n,r))}(e,function(e){return e.phrase("Jump to line:")+' '+e.phrase("(Use line:column or scroll% syntax)")+""}(e),e.phrase("Jump to line:"),n.line+1+":"+n.ch,(function(r){var o;if(r)if(o=/^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(r))e.setCursor(t(e,o[1]),Number(o[2]));else if(o=/^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(r)){var i=Math.round(e.lineCount()*Number(o[1])/100);/^[-+]/.test(o[1])&&(i=n.line+i+1),e.setCursor(i-1,n.ch)}else(o=/^\s*\:?\s*([\+\-]?\d+)\s*/.exec(r))&&e.setCursor(t(e,o[1]),n.ch)}))},e.keyMap.default["Alt-G"]="jumpToLine"}(n(1448),n(2804))},5487:(e,t,n)=>{"use strict";function r(e,t){const n=Object.create(null);for(const r of e)n[t(r)]=r;return n}n.d(t,{K:()=>r})},5530:(e,t,n)=>{!function(e){"use strict";var t,n,r=e.Pos;function o(e,t){for(var n=function(e){var t=e.flags;return null!=t?t:(e.ignoreCase?"i":"")+(e.global?"g":"")+(e.multiline?"m":"")}(e),r=n,o=0;ou);d++){var f=e.getLine(c++);s=null==s?f:s+"\n"+f}l*=2,t.lastIndex=n.ch;var p=t.exec(s);if(p){var h=s.slice(0,p.index).split("\n"),m=p[0].split("\n"),g=n.line+h.length-1,v=h[h.length-1].length;return{from:r(g,v),to:r(g+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:p}}}}function l(e,t,n){for(var r,o=0;o<=e.length;){t.lastIndex=o;var i=t.exec(e);if(!i)break;var a=i.index+i[0].length;if(a>e.length-n)break;(!r||a>r.index+r[0].length)&&(r=i),o=i.index+1}return r}function c(e,t,n){t=o(t,"g");for(var i=n.line,a=n.ch,s=e.firstLine();i>=s;i--,a=-1){var c=e.getLine(i),u=l(c,t,a<0?0:c.length-a);if(u)return{from:r(i,u.index),to:r(i,u.index+u[0].length),match:u}}}function u(e,t,n){if(!i(t))return c(e,t,n);t=o(t,"gm");for(var a,s=1,u=e.getLine(n.line).length-n.ch,d=n.line,f=e.firstLine();d>=f;){for(var p=0;p=f;p++){var h=e.getLine(d--);a=null==a?h:h+"\n"+a}s*=2;var m=l(a,t,u);if(m){var g=a.slice(0,m.index).split("\n"),v=m[0].split("\n"),y=d+g.length,b=g[g.length-1].length;return{from:r(y,b),to:r(y+v.length-1,1==v.length?b+v[0].length:v[v.length-1].length),match:m}}}}function d(e,t,n,r){if(e.length==t.length)return n;for(var o=0,i=n+Math.max(0,e.length-t.length);;){if(o==i)return o;var a=o+i>>1,s=r(e.slice(0,a)).length;if(s==n)return a;s>n?i=a:o=a+1}}function f(e,o,i,a){if(!o.length)return null;var s=a?t:n,l=s(o).split(/\r|\n\r?/);e:for(var c=i.line,u=i.ch,f=e.lastLine()+1-l.length;c<=f;c++,u=0){var p=e.getLine(c).slice(u),h=s(p);if(1==l.length){var m=h.indexOf(l[0]);if(-1==m)continue e;return i=d(p,h,m,s)+u,{from:r(c,d(p,h,m,s)+u),to:r(c,d(p,h,m+l[0].length,s)+u)}}var g=h.length-l[0].length;if(h.slice(g)==l[0]){for(var v=1;v=f;c--,u=-1){var p=e.getLine(c);u>-1&&(p=p.slice(0,u));var h=s(p);if(1==l.length){var m=h.lastIndexOf(l[0]);if(-1==m)continue e;return{from:r(c,d(p,h,m,s)),to:r(c,d(p,h,m+l[0].length,s))}}var g=l[l.length-1];if(h.slice(0,g.length)==g){var v=1;for(i=c-l.length+1;v(this.doc.getLine(n.line)||"").length&&(n.ch=0,n.line++)),0!=e.cmpPos(n,this.doc.clipPos(n))))return this.atOccurrence=!1;var o=this.matches(t,n);if(this.afterEmptyMatch=o&&0==e.cmpPos(o.from,o.to),o)return this.pos=o,this.atOccurrence=!0,this.pos.match||!0;var i=r(t?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:i,to:i},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t,n){if(this.atOccurrence){var o=e.splitLines(t);this.doc.replaceRange(o,this.pos.from,this.pos.to,n),this.pos.to=r(this.pos.from.line+o.length-1,o[o.length-1].length+(1==o.length?this.pos.from.ch:0))}}},e.defineExtension("getSearchCursor",(function(e,t,n){return new h(this.doc,e,t,n)})),e.defineDocExtension("getSearchCursor",(function(e,t,n){return new h(this,e,t,n)})),e.defineExtension("selectMatches",(function(t,n){for(var r=[],o=this.getSearchCursor(t,this.getCursor("from"),n);o.findNext()&&!(e.cmpPos(o.to(),this.getCursor("to"))>0);)r.push({anchor:o.from(),head:o.to()});r.length&&this.setSelections(r,0)}))}(n(1448))},5536:(e,t,n)=>{"use strict";n.d(t,{K:()=>o});var r=n(8255);function o(e){const t=Object.create(null);return{OperationDefinition:()=>!1,FragmentDefinition(n){const o=n.name.value;return t[o]?e.reportError(new r.eO(`There can be only one fragment named "${o}".`,[t[o],n.name])):t[o]=n.name,!1}}}},5541:(e,t,n)=>{!function(e){"use strict";e.defineOption("foldGutter",!1,(function(t,r,o){var i;o&&o!=e.Init&&(t.clearGutter(t.state.foldGutter.options.gutter),t.state.foldGutter=null,t.off("gutterClick",l),t.off("changes",u),t.off("viewportChange",d),t.off("fold",f),t.off("unfold",f),t.off("swapDoc",u),t.off("optionChange",c)),r&&(t.state.foldGutter=new n((!0===(i=r)&&(i={}),null==i.gutter&&(i.gutter="CodeMirror-foldgutter"),null==i.indicatorOpen&&(i.indicatorOpen="CodeMirror-foldgutter-open"),null==i.indicatorFolded&&(i.indicatorFolded="CodeMirror-foldgutter-folded"),i)),s(t),t.on("gutterClick",l),t.on("changes",u),t.on("viewportChange",d),t.on("fold",f),t.on("unfold",f),t.on("swapDoc",u),t.on("optionChange",c))}));var t=e.Pos;function n(e){this.options=e,this.from=this.to=0}function r(e,n){for(var r=e.findMarks(t(n,0),t(n+1,0)),o=0;o=c){if(f&&a&&f.test(a.className))return;i=o(s.indicatorOpen)}}(i||a)&&e.setGutterMarker(n,s.gutter,i)}))}function a(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}function s(e){var t=e.getViewport(),n=e.state.foldGutter;n&&(e.operation((function(){i(e,t.from,t.to)})),n.from=t.from,n.to=t.to)}function l(e,n,o){var i=e.state.foldGutter;if(i){var a=i.options;if(o==a.gutter){var s=r(e,n);s?s.clear():e.foldCode(t(n,0),a)}}}function c(e,t){"mode"==t&&u(e)}function u(e){var t=e.state.foldGutter;if(t){var n=t.options;t.from=t.to=0,clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){s(e)}),n.foldOnChangeTimeSpan||600)}}function d(e){var t=e.state.foldGutter;if(t){var n=t.options;clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){var n=e.getViewport();t.from==t.to||n.from-t.to>20||t.from-n.to>20?s(e):e.operation((function(){n.fromt.to&&(i(e,t.to,n.to),t.to=n.to)}))}),n.updateViewportTimeSpan||400)}}function f(e,t){var n=e.state.foldGutter;if(n){var r=t.line;r>=n.from&&r{"use strict";e.exports="data:font/woff2;base64,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"},5608:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__addDisposableResource:()=>R,__assign:()=>i,__asyncDelegator:()=>k,__asyncGenerator:()=>C,__asyncValues:()=>T,__await:()=>E,__awaiter:()=>h,__classPrivateFieldGet:()=>L,__classPrivateFieldIn:()=>F,__classPrivateFieldSet:()=>M,__createBinding:()=>g,__decorate:()=>s,__disposeResources:()=>j,__esDecorate:()=>c,__exportStar:()=>v,__extends:()=>o,__generator:()=>m,__importDefault:()=>I,__importStar:()=>O,__makeTemplateObject:()=>S,__metadata:()=>p,__param:()=>l,__propKey:()=>d,__read:()=>b,__rest:()=>a,__rewriteRelativeImportExtension:()=>V,__runInitializers:()=>u,__setFunctionName:()=>f,__spread:()=>A,__spreadArray:()=>x,__spreadArrays:()=>w,__values:()=>y,default:()=>q});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var i=function(){return i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function l(e,t){return function(n,r){t(n,r,e)}}function c(e,t,n,r,o,i){function a(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var s,l=r.kind,c="getter"===l?"get":"setter"===l?"set":"value",u=!t&&e?r.static?e:e.prototype:null,d=t||(u?Object.getOwnPropertyDescriptor(u,r.name):{}),f=!1,p=n.length-1;p>=0;p--){var h={};for(var m in r)h[m]="access"===m?{}:r[m];for(var m in r.access)h.access[m]=r.access[m];h.addInitializer=function(e){if(f)throw new TypeError("Cannot add initializers after decoration has completed");i.push(a(e||null))};var g=(0,n[p])("accessor"===l?{get:d.get,set:d.set}:d[c],h);if("accessor"===l){if(void 0===g)continue;if(null===g||"object"!=typeof g)throw new TypeError("Object expected");(s=a(g.get))&&(d.get=s),(s=a(g.set))&&(d.set=s),(s=a(g.init))&&o.unshift(s)}else(s=a(g))&&("field"===l?o.unshift(s):d[c]=s)}u&&Object.defineProperty(u,r.name,d),f=!0}function u(e,t,n){for(var r=arguments.length>2,o=0;o0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function b(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function A(){for(var e=[],t=0;t1||s(e,t)}))},t&&(r[e]=t(r[e])))}function s(e,t){try{(n=o[e](t)).value instanceof E?Promise.resolve(n.value.v).then(l,c):u(i[0][2],n)}catch(e){u(i[0][3],e)}var n}function l(e){s("next",e)}function c(e){s("throw",e)}function u(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function k(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:E(e[r](t)),done:!1}:o?o(t):t}:o}}function T(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=y(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){!function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)}(r,o,(t=e[n](t)).done,t.value)}))}}}function S(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var N=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t},D=function(e){return D=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},D(e)};function O(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=D(e),r=0;r{"use strict";e.exports=function(e){return"object"==typeof e?null===e:"function"!=typeof e}},5873:(e,t,n)=>{"use strict";var r=n(3144);t.H=r.createRoot,r.hydrateRoot},5881:(e,t,n)=>{"use strict";function r(e){return 9===e||32===e}function o(e){return e>=48&&e<=57}function i(e){return e>=97&&e<=122||e>=65&&e<=90}function a(e){return i(e)||95===e}function s(e){return i(e)||o(e)||95===e}n.d(t,{i0:()=>r,un:()=>a,xr:()=>s,yp:()=>o})},5966:(e,t,n)=>{"use strict";n.d(t,{S:()=>d});var r=n(5198),o=n(1306),i=n(4833),a=n(6382),s=n(8255),l=n(2455),c=n(3420),u=n(2114);function d(e){const t=e.getSchema(),n=Object.create(null);for(const t of e.getDocument().definitions)(0,c.a6)(t)&&(n[t.name.value]=t);return{ScalarTypeExtension:d,ObjectTypeExtension:d,InterfaceTypeExtension:d,UnionTypeExtension:d,EnumTypeExtension:d,InputObjectTypeExtension:d};function d(c){const d=c.name.value,p=n[d],h=null==t?void 0:t.getType(d);let m;if(p?m=f[p.kind]:h&&(g=h,m=(0,u.lg)(g)?l.b.SCALAR_TYPE_EXTENSION:(0,u.YQ)(g)?l.b.OBJECT_TYPE_EXTENSION:(0,u.kD)(g)?l.b.INTERFACE_TYPE_EXTENSION:(0,u.CK)(g)?l.b.UNION_TYPE_EXTENSION:(0,u.oF)(g)?l.b.ENUM_TYPE_EXTENSION:(0,u.qK)(g)?l.b.INPUT_OBJECT_TYPE_EXTENSION:void(0,o.V)(!1,"Unexpected type: "+(0,r.N)(g))),m){if(m!==c.kind){const t=function(e){switch(e){case l.b.SCALAR_TYPE_EXTENSION:return"scalar";case l.b.OBJECT_TYPE_EXTENSION:return"object";case l.b.INTERFACE_TYPE_EXTENSION:return"interface";case l.b.UNION_TYPE_EXTENSION:return"union";case l.b.ENUM_TYPE_EXTENSION:return"enum";case l.b.INPUT_OBJECT_TYPE_EXTENSION:return"input object";default:(0,o.V)(!1,"Unexpected kind: "+(0,r.N)(e))}}(c.kind);e.reportError(new s.eO(`Cannot extend non-${t} type "${d}".`,p?[p,c]:c))}}else{const r=Object.keys({...n,...null==t?void 0:t.getTypeMap()}),o=(0,a.x)(d,r);e.reportError(new s.eO(`Cannot extend type "${d}" because it is not defined.`+(0,i.a)(o),c.name))}var g}}const f={[l.b.SCALAR_TYPE_DEFINITION]:l.b.SCALAR_TYPE_EXTENSION,[l.b.OBJECT_TYPE_DEFINITION]:l.b.OBJECT_TYPE_EXTENSION,[l.b.INTERFACE_TYPE_DEFINITION]:l.b.INTERFACE_TYPE_EXTENSION,[l.b.UNION_TYPE_DEFINITION]:l.b.UNION_TYPE_EXTENSION,[l.b.ENUM_TYPE_DEFINITION]:l.b.ENUM_TYPE_EXTENSION,[l.b.INPUT_OBJECT_TYPE_DEFINITION]:l.b.INPUT_OBJECT_TYPE_EXTENSION}},5980:e=>{"use strict";e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="},6055:e=>{"use strict";e.exports="data:font/woff2;base64,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"},6078:(e,t,n)=>{"use strict";function r(e,t){var n,r;const{levels:o,indentLevel:i}=e;return((o&&0!==o.length?o.at(-1)-((null===(n=this.electricInput)||void 0===n?void 0:n.test(t))?1:0):i)||0)*((null===(r=this.config)||void 0===r?void 0:r.indentUnit)||0)}n.d(t,{A:()=>r})},6382:(e,t,n)=>{"use strict";n.d(t,{x:()=>o});var r=n(3858);function o(e,t){const n=Object.create(null),o=new i(e),a=Math.floor(.4*e.length)+1;for(const e of t){const t=o.measure(e,a);void 0!==t&&(n[e]=t)}return Object.keys(n).sort(((e,t)=>{const o=n[e]-n[t];return 0!==o?o:(0,r.p)(e,t)}))}class i{constructor(e){this._input=e,this._inputLowerCase=e.toLowerCase(),this._inputArray=a(this._inputLowerCase),this._rows=[new Array(e.length+1).fill(0),new Array(e.length+1).fill(0),new Array(e.length+1).fill(0)]}measure(e,t){if(this._input===e)return 0;const n=e.toLowerCase();if(this._inputLowerCase===n)return 1;let r=a(n),o=this._inputArray;if(r.lengtht)return;const l=this._rows;for(let e=0;e<=s;e++)l[0][e]=e;for(let e=1;e<=i;e++){const n=l[(e-1)%3],i=l[e%3];let a=i[0]=e;for(let t=1;t<=s;t++){const s=r[e-1]===o[t-1]?0:1;let c=Math.min(n[t]+1,i[t-1]+1,n[t-1]+s);if(e>1&&t>1&&r[e-1]===o[t-2]&&r[e-2]===o[t-1]){const n=l[(e-2)%3][t-2];c=Math.min(c,n+1)}ct)return}const c=l[i%3][s];return c<=t?c:void 0}}function a(e){const t=e.length,n=new Array(t);for(let r=0;r{"use strict";function r(e,t,n){const r=Object.create(null);for(const o of e)r[t(o)]=n(o);return r}n.d(t,{L:()=>r})},6712:(e,t,n)=>{"use strict";function r(e,t){const n=new Map;for(const r of e){const e=t(r),o=n.get(e);void 0===o?n.set(e,[r]):o.push(r)}return n}n.d(t,{$:()=>r})},6758:e=>{"use strict";e.exports=function(e){return e[1]}},6818:(e,t,n)=>{"use strict";n.d(t,{A:()=>Fe});var r=n(6758),o=n.n(r),i=n(935),a=n.n(i),s=n(62),l=n.n(s),c=new URL(n(7694),n.b),u=new URL(n(5109),n.b),d=new URL(n(7766),n.b),f=new URL(n(4803),n.b),p=new URL(n(1653),n.b),h=new URL(n(7723),n.b),m=new URL(n(8107),n.b),g=new URL(n(8913),n.b),v=new URL(n(6055),n.b),y=new URL(n(7095),n.b),b=new URL(n(4594),n.b),A=new URL(n(8458),n.b),w=new URL(n(79),n.b),x=new URL(n(9653),n.b),E=new URL(n(1051),n.b),C=new URL(n(9256),n.b),k=new URL(n(1945),n.b),T=new URL(n(1781),n.b),S=new URL(n(2911),n.b),N=new URL(n(5579),n.b),D=new URL(n(9131),n.b),O=new URL(n(8467),n.b),I=new URL(n(3906),n.b),L=new URL(n(4086),n.b),M=new URL(n(1427),n.b),F=new URL(n(8643),n.b),R=new URL(n(2878),n.b),P=new URL(n(9756),n.b),j=new URL(n(7321),n.b),V=new URL(n(4949),n.b),q=new URL(n(9060),n.b),B=new URL(n(1435),n.b),U=new URL(n(8881),n.b),z=new URL(n(8150),n.b),H=new URL(n(1954),n.b),Y=new URL(n(4912),n.b),W=new URL(n(5980),n.b),G=new URL(n(3604),n.b),Q=new URL(n(5139),n.b),Z=a()(o()),X=l()(c),K=l()(u),J=l()(d),_=l()(f),$=l()(p),ee=l()(h),te=l()(m),ne=l()(g),re=l()(v),oe=l()(y),ie=l()(b),ae=l()(A),se=l()(w),le=l()(x),ce=l()(E),ue=l()(C),de=l()(k),fe=l()(T),pe=l()(S),he=l()(N),me=l()(D),ge=l()(O),ve=l()(I),ye=l()(L),be=l()(M),Ae=l()(F),we=l()(R),xe=l()(P),Ee=l()(j),Ce=l()(V),ke=l()(q),Te=l()(B),Se=l()(U),Ne=l()(z),De=l()(H),Oe=l()(Y),Ie=l()(W),Le=l()(G),Me=l()(Q);Z.push([e.id,`/*!*********************************************************************************************!*\\\n !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/font/roboto.css ***!\n \\*********************************************************************************************/\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(${X})\n format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F,\n U+FE2E-FE2F;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(${K})\n format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(${J})\n format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(${_})\n format('woff2');\n unicode-range: U+0370-03FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(${$})\n format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1,\n U+01AF-01B0, U+1EA0-1EF9, U+20AB;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(${ee})\n format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,\n U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(${te})\n format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,\n U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,\n U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(${ne})\n format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F,\n U+FE2E-FE2F;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(${re})\n format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(${oe})\n format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(${ie})\n format('woff2');\n unicode-range: U+0370-03FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(${ae})\n format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1,\n U+01AF-01B0, U+1EA0-1EF9, U+20AB;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(${se})\n format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,\n U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(${le})\n format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,\n U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,\n U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${ce})\n format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F,\n U+FE2E-FE2F;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${ue})\n format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${de})\n format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${fe})\n format('woff2');\n unicode-range: U+0370-03FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${pe})\n format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1,\n U+01AF-01B0, U+1EA0-1EF9, U+20AB;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${he})\n format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,\n U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${me})\n format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,\n U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,\n U+FEFF, U+FFFD;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(${ge})\n format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F,\n U+FE2E-FE2F;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(${ve})\n format('woff2');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(${ye})\n format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(${be})\n format('woff2');\n unicode-range: U+0370-03FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(${Ae})\n format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1,\n U+01AF-01B0, U+1EA0-1EF9, U+20AB;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(${we})\n format('woff2');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,\n U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n@font-face {\n font-family: Roboto;\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(${xe})\n format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,\n U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,\n U+FEFF, U+FFFD;\n}\n\n/*!************************************************************************************************!*\\\n !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/font/fira-code.css ***!\n \\************************************************************************************************/\n@font-face {\n font-family: Fira Code;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${Ee})\n format('woff');\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F,\n U+FE2E-FE2F;\n}\n@font-face {\n font-family: Fira Code;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${Ce})\n format('woff');\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n@font-face {\n font-family: Fira Code;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${ke})\n format('woff');\n unicode-range: U+1F00-1FFF;\n}\n@font-face {\n font-family: Fira Code;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${Te})\n format('woff');\n unicode-range: U+0370-03FF;\n}\n@font-face {\n font-family: Fira Code;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${Se})\n format('woff');\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,\n U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n@font-face {\n font-family: Fira Code;\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(${Ne})\n format('woff');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,\n U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,\n U+FEFF, U+FFFD;\n}\n\n/*!********************************************************************************************!*\\\n !*** css ../../../node_modules/css-loader/dist/cjs.js!../../graphiql-react/dist/style.css ***!\n \\********************************************************************************************/\n/* a very simple box-model reset, intentionally does not include pseudo elements */\n.graphiql-container * {\n box-sizing: border-box;\n font-variant-ligatures: none;\n}\n\n.graphiql-container,\n.CodeMirror-info,\n.CodeMirror-lint-tooltip,\n.graphiql-dialog,\n.graphiql-dialog-overlay,\n.graphiql-tooltip,\n[data-radix-popper-content-wrapper] {\n /* Colors */\n --color-primary: 320, 95%, 43%;\n --color-secondary: 242, 51%, 61%;\n --color-tertiary: 188, 100%, 36%;\n --color-info: 208, 100%, 46%;\n --color-success: 158, 60%, 42%;\n --color-warning: 36, 100%, 41%;\n --color-error: 13, 93%, 58%;\n --color-neutral: 219, 28%, 32%;\n --color-base: 219, 28%, 100%;\n\n /* Color alpha values */\n --alpha-secondary: 0.76;\n --alpha-tertiary: 0.5;\n --alpha-background-heavy: 0.15;\n --alpha-background-medium: 0.1;\n --alpha-background-light: 0.07;\n\n /* Font */\n --font-family: 'Roboto', sans-serif;\n --font-family-mono: 'Fira Code', monospace;\n --font-size-hint: calc(12rem / 16);\n --font-size-inline-code: calc(13rem / 16);\n --font-size-body: calc(15rem / 16);\n --font-size-h4: calc(18rem / 16);\n --font-size-h3: calc(22rem / 16);\n --font-size-h2: calc(29rem / 16);\n --font-weight-regular: 400;\n --font-weight-medium: 500;\n --line-height: 1.5;\n\n /* Spacing */\n --px-2: 2px;\n --px-4: 4px;\n --px-6: 6px;\n --px-8: 8px;\n --px-10: 10px;\n --px-12: 12px;\n --px-16: 16px;\n --px-20: 20px;\n --px-24: 24px;\n\n /* Border radius */\n --border-radius-2: 2px;\n --border-radius-4: 4px;\n --border-radius-8: 8px;\n --border-radius-12: 12px;\n\n /* Popover styles (tooltip, dialog, etc) */\n --popover-box-shadow: 0px 6px 20px rgba(59, 76, 106, 0.13),\n 0px 1.34018px 4.46726px rgba(59, 76, 106, 0.0774939),\n 0px 0.399006px 1.33002px rgba(59, 76, 106, 0.0525061);\n --popover-border: none;\n\n /* Layout */\n --sidebar-width: 60px;\n --toolbar-width: 40px;\n --session-header-height: 51px;\n}\n\n@media (prefers-color-scheme: dark) {\n body:not(.graphiql-light) .graphiql-container,\n body:not(.graphiql-light) .CodeMirror-info,\n body:not(.graphiql-light) .CodeMirror-lint-tooltip,\n body:not(.graphiql-light) .graphiql-dialog,\n body:not(.graphiql-light) .graphiql-dialog-overlay,\n body:not(.graphiql-light) .graphiql-tooltip,\n body:not(.graphiql-light) [data-radix-popper-content-wrapper] {\n --color-primary: 338, 100%, 67%;\n --color-secondary: 243, 100%, 77%;\n --color-tertiary: 188, 100%, 44%;\n --color-info: 208, 100%, 72%;\n --color-success: 158, 100%, 42%;\n --color-warning: 30, 100%, 80%;\n --color-error: 13, 100%, 58%;\n --color-neutral: 219, 29%, 78%;\n --color-base: 219, 29%, 18%;\n\n --popover-box-shadow: none;\n --popover-border: 1px solid hsl(var(--color-neutral));\n }\n}\n\nbody.graphiql-dark .graphiql-container,\nbody.graphiql-dark .CodeMirror-info,\nbody.graphiql-dark .CodeMirror-lint-tooltip,\nbody.graphiql-dark .graphiql-dialog,\nbody.graphiql-dark .graphiql-dialog-overlay,\nbody.graphiql-dark .graphiql-tooltip,\nbody.graphiql-dark [data-radix-popper-content-wrapper] {\n --color-primary: 338, 100%, 67%;\n --color-secondary: 243, 100%, 77%;\n --color-tertiary: 188, 100%, 44%;\n --color-info: 208, 100%, 72%;\n --color-success: 158, 100%, 42%;\n --color-warning: 30, 100%, 80%;\n --color-error: 13, 100%, 58%;\n --color-neutral: 219, 29%, 78%;\n --color-base: 219, 29%, 18%;\n\n --popover-box-shadow: none;\n --popover-border: 1px solid hsl(var(--color-neutral));\n}\n\n.graphiql-container,\n .CodeMirror-info,\n .CodeMirror-lint-tooltip,\n .graphiql-dialog,\n .graphiql-container:is(button),\n .CodeMirror-info:is(button),\n .CodeMirror-lint-tooltip:is(button),\n .graphiql-dialog:is(button) {\n color: hsl(var(--color-neutral));\n font-family: var(--font-family);\n font-size: var(--font-size-body);\n font-weight: var(--font-weight-regular);\n line-height: var(--line-height);\n }\n\n.graphiql-container input, .CodeMirror-info input, .CodeMirror-lint-tooltip input, .graphiql-dialog input {\n color: hsl(var(--color-neutral));\n font-family: var(--font-family);\n font-size: var(--font-size-caption)\n }\n\n.graphiql-container input::placeholder, .CodeMirror-info input::placeholder, .CodeMirror-lint-tooltip input::placeholder, .graphiql-dialog input::placeholder {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n }\n\n.graphiql-container a, .CodeMirror-info a, .CodeMirror-lint-tooltip a, .graphiql-dialog a {\n color: hsl(var(--color-primary))\n }\n\n.graphiql-container a:focus, .CodeMirror-info a:focus, .CodeMirror-lint-tooltip a:focus, .graphiql-dialog a:focus {\n outline: hsl(var(--color-primary)) auto 1px;\n }\n.graphiql-un-styled,\nbutton.graphiql-un-styled {\n all: unset;\n border-radius: var(--border-radius-4);\n cursor: pointer\n}\n\n:is(.graphiql-un-styled,button.graphiql-un-styled):hover {\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n }\n\n:is(.graphiql-un-styled,button.graphiql-un-styled):active {\n background-color: hsla(\n var(--color-neutral),\n var(--alpha-background-medium)\n );\n }\n\n:is(.graphiql-un-styled,button.graphiql-un-styled):focus {\n outline: hsla(var(--color-neutral), var(--alpha-background-heavy)) auto 1px;\n }\n\n.graphiql-button,\nbutton.graphiql-button {\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n border: none;\n border-radius: var(--border-radius-4);\n color: hsl(var(--color-neutral));\n cursor: pointer;\n font-size: var(--font-size-body);\n padding: var(--px-8) var(--px-12)\n}\n\n:is(.graphiql-button,button.graphiql-button):hover,\n :is(.graphiql-button,button.graphiql-button):active {\n background-color: hsla(\n var(--color-neutral),\n var(--alpha-background-medium)\n );\n }\n\n:is(.graphiql-button,button.graphiql-button):focus {\n outline: hsla(var(--color-neutral), var(--alpha-background-heavy)) auto 1px;\n }\n\n.graphiql-button-success:is(.graphiql-button,button.graphiql-button) {\n background-color: hsla(var(--color-success), var(--alpha-background-heavy));\n }\n\n.graphiql-button-error:is(.graphiql-button,button.graphiql-button) {\n background-color: hsla(var(--color-error), var(--alpha-background-heavy));\n }\n.graphiql-button-group {\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n /* Border radius of button plus padding */\n border-radius: calc(var(--border-radius-4) + var(--px-4));\n display: flex;\n padding: var(--px-4)\n}\n.graphiql-button-group > button.graphiql-button {\n background-color: transparent\n }\n.graphiql-button-group > button.graphiql-button:hover {\n background-color: hsla(\n var(--color-neutral),\n var(--alpha-background-light)\n );\n }\n.graphiql-button-group > button.graphiql-button.active {\n background-color: hsl(var(--color-base));\n cursor: default;\n }\n.graphiql-button-group > * + * {\n margin-left: var(--px-8);\n }\n.graphiql-dialog-overlay {\n position: fixed;\n inset: 0;\n background-color: hsla(var(--color-neutral), var(--alpha-background-heavy));\n /**\n * CodeMirror has a \`z-index\` set for the container of the scrollbar of the\n * editor, so we have to add one here to make sure that the dialog is shown\n * above the editor scrollbar (if they are visible).\n */\n z-index: 10;\n}\n\n.graphiql-dialog {\n background-color: hsl(var(--color-base));\n border: var(--popover-border);\n border-radius: var(--border-radius-12);\n box-shadow: var(--popover-box-shadow);\n margin: 0;\n max-height: 80vh;\n max-width: 80vw;\n overflow: auto;\n padding: 0;\n width: unset;\n transform: translate(-50%, -50%);\n top: 50%;\n left: 50%;\n position: fixed;\n z-index: 10;\n}\n\n.graphiql-dialog-close > svg {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n display: block;\n height: var(--px-12);\n padding: var(--px-12);\n width: var(--px-12);\n}\n.graphiql-dropdown-content {\n background-color: hsl(var(--color-base));\n border: var(--popover-border);\n border-radius: var(--border-radius-8);\n box-shadow: var(--popover-box-shadow);\n font-size: inherit;\n max-width: 250px;\n padding: var(--px-4);\n font-family: var(--font-family);\n color: hsl(var(--color-neutral));\n max-height: min(\n calc(var(--radix-dropdown-menu-content-available-height) - 10px),\n 400px\n );\n overflow-y: scroll;\n}\n\n.graphiql-dropdown-item {\n border-radius: var(--border-radius-4);\n font-size: inherit;\n margin: var(--px-4);\n overflow: hidden;\n padding: var(--px-6) var(--px-8);\n text-overflow: ellipsis;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n line-height: var(--line-height)\n}\n\n.graphiql-dropdown-item[data-selected],\n .graphiql-dropdown-item[data-current-nav],\n .graphiql-dropdown-item:hover {\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n color: inherit;\n }\n\n.graphiql-dropdown-item:not(:first-child) {\n margin-top: 0;\n }\n/**\n * We render markdown in the following places:\n * - In the hint tooltip when typing in the query editor (field description\n * and, optionally, deprecation reason).\n * - In the info tooltip when hovering over a field in the query editor\n * (field description and, optionally, deprecation reason).\n */\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) blockquote {\n margin-left: 0;\n margin-right: 0;\n padding-left: var(--px-8);\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) code,\n :is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre {\n border-radius: var(--border-radius-4);\n font-family: var(--font-family-mono);\n font-size: var(--font-size-inline-code);\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) code {\n padding: var(--px-2);\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre {\n overflow: auto;\n padding: var(--px-6) var(--px-8);\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) pre code {\n background-color: initial;\n border-radius: 0;\n padding: 0;\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ol,\n :is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ul {\n padding-left: var(--px-16);\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ol {\n list-style-type: decimal;\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) ul {\n list-style-type: disc;\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) img {\n border-radius: var(--border-radius-4);\n max-height: 120px;\n max-width: 100%;\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) > :first-child {\n margin-top: 0;\n }\n\n:is(.graphiql-markdown-description,.graphiql-markdown-deprecation,.CodeMirror-hint-information-description,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-description,.CodeMirror-info .info-deprecation) > :last-child {\n margin-bottom: 0;\n }\n\n:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) a {\n color: hsl(var(--color-primary));\n text-decoration: none\n }\n\n:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) a:hover {\n text-decoration: underline;\n }\n\n:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) blockquote {\n border-left: 1.5px solid hsla(var(--color-neutral), var(--alpha-tertiary));\n }\n\n:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) code,\n :is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) pre {\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n color: hsl(var(--color-neutral));\n }\n\n:is(.graphiql-markdown-description,.CodeMirror-hint-information-description,.CodeMirror-info .info-description) > * {\n margin: var(--px-12) 0;\n }\n\n:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) a {\n color: hsl(var(--color-warning));\n text-decoration: underline;\n }\n\n:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) blockquote {\n border-left: 1.5px solid hsl(var(--color-warning));\n }\n\n:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) code,\n :is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) pre {\n background-color: hsla(var(--color-warning), var(--alpha-background-heavy));\n }\n\n:is(.graphiql-markdown-deprecation,.CodeMirror-hint-information-deprecation-reason,.CodeMirror-info .info-deprecation) > * {\n margin: var(--px-8) 0;\n }\n\n.graphiql-markdown-preview > :not(:first-child) {\n display: none;\n}\n\n/**\n * We show deprecations in the following places:\n * - In the hint tooltip when typing in the query editor.\n * - In the info tooltip when hovering over a field in the query editor.\n */\n\n.CodeMirror-hint-information-deprecation,\n.CodeMirror-info .info-deprecation {\n background-color: hsla(var(--color-warning), var(--alpha-background-light));\n border: 1px solid hsl(var(--color-warning));\n border-radius: var(--border-radius-4);\n color: hsl(var(--color-warning));\n margin-top: var(--px-12);\n padding: var(--px-6) var(--px-8);\n}\n\n.CodeMirror-hint-information-deprecation-label,\n.CodeMirror-info .info-deprecation-label {\n font-size: var(--font-size-hint);\n font-weight: var(--font-weight-medium);\n}\n\n.CodeMirror-hint-information-deprecation-reason,\n.CodeMirror-info .info-deprecation-reason {\n margin-top: var(--px-6);\n}\n.graphiql-spinner {\n height: 56px;\n margin: auto;\n margin-top: var(--px-16);\n width: 56px\n}\n\n.graphiql-spinner::after {\n animation: rotation 0.8s linear 0s infinite;\n border: 4px solid transparent;\n border-radius: 100%;\n border-top: 4px solid hsla(var(--color-neutral), var(--alpha-tertiary));\n content: '';\n display: inline-block;\n height: 46px;\n vertical-align: middle;\n width: 46px;\n }\n\n@keyframes rotation {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n.graphiql-tooltip {\n background: hsl(var(--color-base));\n border: var(--popover-border);\n border-radius: var(--border-radius-4);\n box-shadow: var(--popover-box-shadow);\n color: hsl(var(--color-neutral));\n font-size: inherit;\n padding: var(--px-4) var(--px-6);\n font-family: var(--font-family);\n}\n.graphiql-tabs {\n display: flex;\n align-items: center;\n overflow-x: auto;\n padding: var(--px-12)\n}\n\n.graphiql-tabs > :not(:first-child) {\n margin-left: var(--px-12);\n }\n\n.graphiql-tab {\n align-items: stretch;\n border-radius: var(--border-radius-8);\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n display: flex\n}\n\n.graphiql-tab > button.graphiql-tab-close {\n visibility: hidden;\n }\n\n.graphiql-tab.graphiql-tab-active > button.graphiql-tab-close,\n .graphiql-tab:hover > button.graphiql-tab-close,\n .graphiql-tab:focus-within > button.graphiql-tab-close {\n visibility: unset;\n }\n\n.graphiql-tab.graphiql-tab-active {\n background-color: hsla(var(--color-neutral), var(--alpha-background-heavy));\n color: hsla(var(--color-neutral), 1);\n }\n\nbutton.graphiql-tab-button {\n padding: var(--px-4) 0 var(--px-4) var(--px-8);\n}\n\nbutton.graphiql-tab-close {\n align-items: center;\n display: flex;\n padding: var(--px-4) var(--px-8)\n}\n\nbutton.graphiql-tab-close > svg {\n height: var(--px-8);\n width: var(--px-8);\n }\n.graphiql-history-header {\n font-size: var(--font-size-h2);\n font-weight: var(--font-weight-medium);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.graphiql-history-header button {\n font-size: var(--font-size-inline-code);\n padding: var(--px-6) var(--px-10);\n}\n\n.graphiql-history-items {\n margin: var(--px-16) 0 0;\n list-style: none;\n padding: 0;\n}\n\n.graphiql-history-item {\n border-radius: var(--border-radius-4);\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n display: flex;\n font-size: var(--font-size-inline-code);\n font-family: var(--font-family-mono);\n height: 34px\n}\n\n.graphiql-history-item:hover {\n color: hsl(var(--color-neutral));\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n }\n\n.graphiql-history-item:not(:first-child) {\n margin-top: var(--px-4);\n }\n\n.graphiql-history-item.editable {\n background-color: hsla(\n var(--color-primary),\n var(--alpha-background-medium)\n )\n }\n\n.graphiql-history-item.editable > input {\n background: transparent;\n border: none;\n flex: 1;\n margin: 0;\n outline: none;\n padding: 0 var(--px-10);\n width: 100%\n }\n\n.graphiql-history-item.editable > input::placeholder {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n }\n\n.graphiql-history-item.editable > button {\n color: hsl(var(--color-primary));\n padding: 0 var(--px-10)\n }\n\n.graphiql-history-item.editable > button:active {\n background-color: hsla(\n var(--color-primary),\n var(--alpha-background-heavy)\n );\n }\n\n.graphiql-history-item.editable > button:focus {\n outline: hsl(var(--color-primary)) auto 1px;\n }\n\n.graphiql-history-item.editable > button > svg {\n display: block;\n }\n\nbutton.graphiql-history-item-label {\n flex: 1;\n padding: var(--px-8) var(--px-10);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\nbutton.graphiql-history-item-action {\n align-items: center;\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n display: flex;\n padding: var(--px-8) var(--px-6)\n}\n\nbutton.graphiql-history-item-action:hover {\n color: hsl(var(--color-neutral));\n }\n\nbutton.graphiql-history-item-action > svg {\n height: 14px;\n width: 14px;\n }\n\n.graphiql-history-item-spacer {\n height: var(--px-16);\n}\n.graphiql-doc-explorer-default-value {\n color: hsl(var(--color-success));\n}\na.graphiql-doc-explorer-type-name {\n color: hsl(var(--color-warning));\n text-decoration: none\n}\na.graphiql-doc-explorer-type-name:hover {\n text-decoration: underline;\n }\na.graphiql-doc-explorer-type-name:focus {\n outline: hsl(var(--color-warning)) auto 1px;\n }\n\n .graphiql-doc-explorer-argument > * + * {\n margin-top: var(--px-12);\n }\n\n.graphiql-doc-explorer-argument-name {\n color: hsl(var(--color-secondary));\n}\n\n.graphiql-doc-explorer-argument-deprecation {\n background-color: hsla(var(--color-warning), var(--alpha-background-light));\n border: 1px solid hsl(var(--color-warning));\n border-radius: var(--border-radius-4);\n color: hsl(var(--color-warning));\n padding: var(--px-8);\n}\n\n.graphiql-doc-explorer-argument-deprecation-label {\n font-size: var(--font-size-hint);\n font-weight: var(--font-weight-medium);\n}\n.graphiql-doc-explorer-deprecation {\n background-color: hsla(var(--color-warning), var(--alpha-background-light));\n border: 1px solid hsl(var(--color-warning));\n border-radius: var(--px-4);\n color: hsl(var(--color-warning));\n padding: var(--px-8);\n}\n\n.graphiql-doc-explorer-deprecation-label {\n font-size: var(--font-size-hint);\n font-weight: var(--font-weight-medium);\n}\n.graphiql-doc-explorer-directive {\n color: hsl(var(--color-secondary));\n}\n.graphiql-doc-explorer-section-title {\n align-items: center;\n display: flex;\n font-size: var(--font-size-hint);\n font-weight: var(--font-weight-medium);\n line-height: 1\n}\n\n.graphiql-doc-explorer-section-title > svg {\n height: var(--px-16);\n margin-right: var(--px-8);\n width: var(--px-16);\n }\n\n.graphiql-doc-explorer-section-content {\n margin-left: var(--px-8);\n margin-top: var(--px-16)\n}\n\n.graphiql-doc-explorer-section-content > * + * {\n margin-top: var(--px-16);\n }\n.graphiql-doc-explorer-root-type {\n color: hsl(var(--color-info));\n}\n.graphiql-doc-explorer-search {\n color: hsla(var(--color-neutral), var(--alpha-secondary))\n}\n\n.graphiql-doc-explorer-search:not([data-state='idle']) {\n border: var(--popover-border);\n border-radius: var(--border-radius-4);\n box-shadow: var(--popover-box-shadow);\n color: hsl(var(--color-neutral))\n }\n\n.graphiql-doc-explorer-search:not([data-state='idle']) .graphiql-doc-explorer-search-input {\n background: hsl(var(--color-base));\n }\n\n.graphiql-doc-explorer-search-input {\n align-items: center;\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n border-radius: var(--border-radius-4);\n display: flex;\n padding: var(--px-8) var(--px-12);\n}\n\n.graphiql-doc-explorer-search [role='combobox'] {\n border: none;\n background-color: transparent;\n margin-left: var(--px-4);\n width: 100%\n}\n\n.graphiql-doc-explorer-search [role='combobox']:focus {\n outline: none;\n }\n\n.graphiql-doc-explorer-search [role='listbox'] {\n background-color: hsl(var(--color-base));\n border: none;\n border-bottom-left-radius: var(--border-radius-4);\n border-bottom-right-radius: var(--border-radius-4);\n border-top: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n max-height: 400px;\n overflow-y: auto;\n margin: 0;\n font-size: var(--font-size-body);\n padding: var(--px-4);\n /**\n * This makes sure that the logic for auto-scrolling the search results when\n * using keyboard navigation works properly (we use \`offsetTop\` there).\n */\n position: relative;\n}\n\n.graphiql-doc-explorer-search [role='option'] {\n border-radius: var(--border-radius-4);\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n overflow-x: hidden;\n padding: var(--px-8) var(--px-12);\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer\n}\n\n.graphiql-doc-explorer-search [role='option'][data-headlessui-state='active'] {\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n }\n\n.graphiql-doc-explorer-search [role='option']:hover {\n background-color: hsla(\n var(--color-neutral),\n var(--alpha-background-medium)\n );\n }\n\n.graphiql-doc-explorer-search [role='option'][data-headlessui-state='active']:hover {\n background-color: hsla(var(--color-neutral), var(--alpha-background-heavy));\n }\n\n:is(.graphiql-doc-explorer-search [role='option']) + :is(.graphiql-doc-explorer-search [role='option']) {\n margin-top: var(--px-4);\n }\n\n.graphiql-doc-explorer-search-type {\n color: hsl(var(--color-info));\n}\n\n.graphiql-doc-explorer-search-field {\n color: hsl(var(--color-warning));\n}\n\n.graphiql-doc-explorer-search-argument {\n color: hsl(var(--color-secondary));\n}\n\n.graphiql-doc-explorer-search-divider {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n font-size: var(--font-size-hint);\n font-weight: var(--font-weight-medium);\n margin-top: var(--px-8);\n padding: var(--px-8) var(--px-12);\n}\n\n.graphiql-doc-explorer-search-empty {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n padding: var(--px-8) var(--px-12);\n}\na.graphiql-doc-explorer-field-name {\n color: hsl(var(--color-info));\n text-decoration: none\n}\na.graphiql-doc-explorer-field-name:hover {\n text-decoration: underline;\n }\na.graphiql-doc-explorer-field-name:focus {\n outline: hsl(var(--color-info)) auto 1px;\n }\n.graphiql-doc-explorer-item > :not(:first-child) {\n margin-top: var(--px-12);\n}\n\n.graphiql-doc-explorer-argument-multiple {\n margin-left: var(--px-8);\n}\n\n.graphiql-doc-explorer-enum-value {\n color: hsl(var(--color-info));\n}\n/* The header of the doc explorer */\n.graphiql-doc-explorer-header {\n display: flex;\n justify-content: space-between;\n position: relative\n}\n.graphiql-doc-explorer-header:focus-within .graphiql-doc-explorer-title {\n /* Hide the header when focussing the search input */\n visibility: hidden;\n }\n.graphiql-doc-explorer-header:focus-within .graphiql-doc-explorer-back:not(:focus) {\n /**\n * Make the back link invisible when focussing the search input. Hiding\n * it in any other way makes it impossible to focus the link by pressing\n * Shift-Tab while the input is focussed.\n */\n color: transparent;\n }\n.graphiql-doc-explorer-header-content {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n\n/* The search input in the header of the doc explorer */\n.graphiql-doc-explorer-search {\n position: absolute;\n right: 0;\n top: 0\n}\n.graphiql-doc-explorer-search:focus-within {\n left: 0;\n }\n.graphiql-doc-explorer-search:not(:focus-within) [role='combobox'] {\n height: 24px;\n width: 5ch;\n }\n.graphiql-doc-explorer-search [role='combobox']:focus {\n width: 100%;\n }\n\n/* The back-button in the doc explorer */\na.graphiql-doc-explorer-back {\n align-items: center;\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n display: flex;\n text-decoration: none\n}\na.graphiql-doc-explorer-back:hover {\n text-decoration: underline;\n }\na.graphiql-doc-explorer-back:focus {\n outline: hsla(var(--color-neutral), var(--alpha-secondary)) auto 1px\n }\na.graphiql-doc-explorer-back:focus + .graphiql-doc-explorer-title {\n /* Don't hide the header when focussing the back link */\n visibility: unset;\n }\na.graphiql-doc-explorer-back > svg {\n height: var(--px-8);\n margin-right: var(--px-8);\n width: var(--px-8);\n }\n\n/* The title of the currently active page in the doc explorer */\n.graphiql-doc-explorer-title {\n font-weight: var(--font-weight-medium);\n font-size: var(--font-size-h2);\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap\n}\n.graphiql-doc-explorer-title:not(:first-child) {\n font-size: var(--font-size-h3);\n margin-top: var(--px-8);\n }\n\n/* The contents of the currently active page in the doc explorer */\n.graphiql-doc-explorer-content > * {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n margin-top: var(--px-20);\n}\n\n/* Error message */\n.graphiql-doc-explorer-error {\n background-color: hsla(var(--color-error), var(--alpha-background-heavy));\n border: 1px solid hsl(var(--color-error));\n border-radius: var(--border-radius-8);\n color: hsl(var(--color-error));\n padding: var(--px-8) var(--px-12);\n}\n/* BASICS */\n\n.CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-family: monospace;\n height: 300px;\n color: black;\n direction: ltr;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n padding: 4px 0; /* Vertical padding around content */\n}\n\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n}\n\n.CodeMirror-linenumbers {}\n\n.CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n}\n\n/* Shown when moving in bi-directional text */\n\n.CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n}\n\n.cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n}\n\n.cm-fat-cursor div.CodeMirror-cursors {\n z-index: 1;\n}\n\n.cm-fat-cursor .CodeMirror-line::selection,\n.cm-fat-cursor .CodeMirror-line > span::selection, \n.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; }\n\n.cm-fat-cursor .CodeMirror-line::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; }\n\n.cm-fat-cursor { caret-color: transparent; }\n\n@-moz-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n\n@-webkit-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n\n@keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n position: absolute;\n left: 0; right: 0; top: -50px; bottom: 0;\n overflow: hidden;\n}\n\n.CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0; bottom: 0;\n position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n\n.cm-s-default .cm-quote {color: #090;}\n\n.cm-negative {color: #d44;}\n\n.cm-positive {color: #292;}\n\n.cm-header, .cm-strong {font-weight: bold;}\n\n.cm-em {font-style: italic;}\n\n.cm-link {text-decoration: underline;}\n\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n\n.cm-s-default .cm-atom {color: #219;}\n\n.cm-s-default .cm-number {color: #164;}\n\n.cm-s-default .cm-def {color: #00f;}\n\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n\n.cm-s-default .cm-variable-2 {color: #05a;}\n\n.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}\n\n.cm-s-default .cm-comment {color: #a50;}\n\n.cm-s-default .cm-string {color: #a11;}\n\n.cm-s-default .cm-string-2 {color: #f50;}\n\n.cm-s-default .cm-meta {color: #555;}\n\n.cm-s-default .cm-qualifier {color: #555;}\n\n.cm-s-default .cm-builtin {color: #30a;}\n\n.cm-s-default .cm-bracket {color: #997;}\n\n.cm-s-default .cm-tag {color: #170;}\n\n.cm-s-default .cm-attribute {color: #00c;}\n\n.cm-s-default .cm-hr {color: #999;}\n\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}\n\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}\n\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n position: relative;\n overflow: hidden;\n background: white;\n}\n\n.CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 50px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -50px; margin-right: -50px;\n padding-bottom: 50px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n z-index: 0;\n}\n\n.CodeMirror-sizer {\n position: relative;\n border-right: 50px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 6;\n display: none;\n outline: none;\n}\n\n.CodeMirror-vscrollbar {\n right: 0; top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n\n.CodeMirror-hscrollbar {\n bottom: 0; left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n}\n\n.CodeMirror-scrollbar-filler {\n right: 0; bottom: 0;\n}\n\n.CodeMirror-gutter-filler {\n left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n position: absolute; left: 0; top: 0;\n min-height: 100%;\n z-index: 3;\n}\n\n.CodeMirror-gutter {\n white-space: normal;\n height: 100%;\n display: inline-block;\n vertical-align: top;\n margin-bottom: -50px;\n}\n\n.CodeMirror-gutter-wrapper {\n position: absolute;\n z-index: 4;\n background: none !important;\n border: none !important;\n}\n\n.CodeMirror-gutter-background {\n position: absolute;\n top: 0; bottom: 0;\n z-index: 4;\n}\n\n.CodeMirror-gutter-elt {\n position: absolute;\n cursor: default;\n z-index: 4;\n}\n\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n}\n\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n /* Reset some styles that the rest of the page might have set */\n -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: inherit;\n color: inherit;\n z-index: 2;\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n}\n\n.CodeMirror-wrap pre.CodeMirror-line,\n.CodeMirror-wrap pre.CodeMirror-line-like {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n}\n\n.CodeMirror-linebackground {\n position: absolute;\n left: 0; right: 0; top: 0; bottom: 0;\n z-index: 0;\n}\n\n.CodeMirror-linewidget {\n position: relative;\n z-index: 2;\n padding: 0.1px; /* Force widget margins to stay inside of the container */\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n}\n\n.CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n}\n\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n z-index: 3;\n}\n\ndiv.CodeMirror-dragcursors {\n visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n\n.CodeMirror-crosshair { cursor: crosshair; }\n\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n background-color: #ffa;\n background-color: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n /* Hide the cursor when printing */\n .CodeMirror div.CodeMirror-cursors {\n visibility: hidden;\n }\n}\n\n/* See issue #2901 */\n\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\n\nspan.CodeMirror-selectedtext { background: none; }\n\n/* Make the editors fill up their container and make them scrollable */\n\n.graphiql-container .CodeMirror {\n height: 100%;\n position: absolute;\n width: 100%;\n}\n\n/* Override font settings */\n\n.graphiql-container .CodeMirror {\n font-family: var(--font-family-mono);\n}\n\n/* Set default background color */\n\n.graphiql-container .CodeMirror,\n.graphiql-container .CodeMirror-gutters {\n background: none;\n background-color: var(--editor-background, hsl(var(--color-base)));\n}\n\n/* No padding around line numbers */\n\n.graphiql-container .CodeMirror-linenumber {\n padding: 0;\n}\n\n/* No border between gutter and editor */\n\n.graphiql-container .CodeMirror-gutters {\n border: none;\n}\n\n/**\n * Editor theme\n */\n\n.cm-s-graphiql {\n /* Default to punctuation */\n color: hsla(var(--color-neutral), var(--alpha-tertiary))\n\n /* OperationType, \`fragment\`, \`on\` */\n}\n\n.cm-s-graphiql .cm-keyword {\n color: hsl(var(--color-primary));\n }\n\n/* Name (OperationDefinition), FragmentName */\n\n.cm-s-graphiql .cm-def {\n color: hsl(var(--color-tertiary));\n }\n\n/* Punctuator (except \`$\` and \`@\`) */\n\n.cm-s-graphiql .cm-punctuation {\n color: hsla(var(--color-neutral), var(--alpha-tertiary));\n }\n\n/* Variable */\n\n.cm-s-graphiql .cm-variable {\n color: hsl(var(--color-secondary));\n }\n\n/* NamedType */\n\n.cm-s-graphiql .cm-atom {\n color: hsl(var(--color-tertiary));\n }\n\n/* IntValue, FloatValue */\n\n.cm-s-graphiql .cm-number {\n color: hsl(var(--color-success));\n }\n\n/* StringValue */\n\n.cm-s-graphiql .cm-string {\n color: hsl(var(--color-warning));\n }\n\n/* BooleanValue */\n\n.cm-s-graphiql .cm-builtin {\n color: hsl(var(--color-success));\n }\n\n/* EnumValue */\n\n.cm-s-graphiql .cm-string-2 {\n color: hsl(var(--color-secondary));\n }\n\n/* Name (ObjectField, Argument) */\n\n.cm-s-graphiql .cm-attribute {\n color: hsl(var(--color-tertiary));\n }\n\n/* Name (Directive) */\n\n.cm-s-graphiql .cm-meta {\n color: hsl(var(--color-tertiary));\n }\n\n/* Name (Alias, Field without Alias) */\n\n.cm-s-graphiql .cm-property {\n color: hsl(var(--color-info));\n }\n\n/* Name (Field with Alias) */\n\n.cm-s-graphiql .cm-qualifier {\n color: hsl(var(--color-secondary));\n }\n\n/* Comment */\n\n.cm-s-graphiql .cm-comment {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n }\n\n/* Whitespace */\n\n.cm-s-graphiql .cm-ws {\n color: hsla(var(--color-neutral), var(--alpha-tertiary));\n }\n\n/* Invalid characters */\n\n.cm-s-graphiql .cm-invalidchar {\n color: hsl(var(--color-error));\n }\n\n/* Cursor */\n\n.cm-s-graphiql .CodeMirror-cursor {\n border-left: 2px solid hsla(var(--color-neutral), var(--alpha-secondary));\n }\n\n/* Color for line numbers and fold-gutters */\n\n.cm-s-graphiql .CodeMirror-linenumber {\n color: hsla(var(--color-neutral), var(--alpha-tertiary));\n }\n\n/* Matching bracket colors */\n\n.graphiql-container div.CodeMirror span.CodeMirror-matchingbracket,\n.graphiql-container div.CodeMirror span.CodeMirror-nonmatchingbracket {\n color: hsl(var(--color-warning));\n}\n\n/* Selected text blocks */\n\n.graphiql-container .CodeMirror-selected,\n.graphiql-container .CodeMirror-focused .CodeMirror-selected {\n background: hsla(var(--color-neutral), var(--alpha-background-heavy));\n}\n\n/* Position the search dialog */\n\n.graphiql-container .CodeMirror-dialog {\n background: inherit;\n color: inherit;\n left: 0;\n right: 0;\n overflow: hidden;\n padding: var(--px-2) var(--px-6);\n position: absolute;\n z-index: 6;\n}\n\n.graphiql-container .CodeMirror-dialog-top {\n border-bottom: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n padding-bottom: var(--px-12);\n top: 0;\n}\n\n.graphiql-container .CodeMirror-dialog-bottom {\n border-top: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n bottom: 0;\n padding-top: var(--px-12);\n}\n\n/* Hide the search hint */\n\n.graphiql-container .CodeMirror-search-hint {\n display: none;\n}\n\n/* Style the input field for searching */\n\n.graphiql-container .CodeMirror-dialog input {\n border: 1px solid hsla(var(--color-neutral), var(--alpha-background-heavy));\n border-radius: var(--border-radius-4);\n padding: var(--px-4);\n}\n\n.graphiql-container .CodeMirror-dialog input:focus {\n outline: hsl(var(--color-primary)) solid 2px;\n}\n\n/* Set the highlight color for search results */\n\n.graphiql-container .cm-searching {\n background-color: hsla(var(--color-warning), var(--alpha-background-light));\n /**\n * When cycling through search results, CodeMirror overlays the current \n * selection with another element that has the .CodeMirror-selected class\n * applied. This adds another background color (see above), but this extra\n * box does not quite match the height of this element. To match them up we\n * add some extra padding here. (Note that this doesn't affect the line\n * height of the CodeMirror editor as all line wrappers have a fixed height.)\n */\n padding-bottom: 1.5px;\n padding-top: 0.5px;\n}\n.CodeMirror-foldmarker {\n color: blue;\n text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px;\n font-family: arial;\n line-height: .3;\n cursor: pointer;\n}\n.CodeMirror-foldgutter {\n width: .7em;\n}\n.CodeMirror-foldgutter-open,\n.CodeMirror-foldgutter-folded {\n cursor: pointer;\n}\n.CodeMirror-foldgutter-open:after {\n content: "\\25BE";\n}\n.CodeMirror-foldgutter-folded:after {\n content: "\\25B8";\n}\n.CodeMirror-foldgutter {\n width: var(--px-12);\n}\n.CodeMirror-foldmarker {\n background-color: hsl(var(--color-info));\n border-radius: var(--border-radius-4);\n color: hsl(var(--color-base));\n font-family: inherit;\n margin: 0 var(--px-4);\n padding: 0 var(--px-8);\n text-shadow: none;\n}\n.CodeMirror-foldgutter-open,\n.CodeMirror-foldgutter-folded {\n color: hsla(var(--color-neutral), var(--alpha-tertiary))\n}\n.CodeMirror-foldgutter-open::after, .CodeMirror-foldgutter-folded::after {\n margin: 0 var(--px-2);\n }\n.graphiql-editor {\n height: 100%;\n position: relative;\n width: 100%\n}\n.graphiql-editor.hidden {\n /* Just setting \`display: none;\` would break the editor gutters */\n left: -9999px;\n position: absolute;\n top: -9999px;\n visibility: hidden;\n }\n/* The lint marker gutter */\n.CodeMirror-lint-markers {\n width: 16px;\n}\n.CodeMirror-lint-tooltip {\n background-color: #ffd;\n border: 1px solid black;\n border-radius: 4px 4px 4px 4px;\n color: black;\n font-family: monospace;\n font-size: 10pt;\n overflow: hidden;\n padding: 2px 5px;\n position: fixed;\n white-space: pre;\n white-space: pre-wrap;\n z-index: 100;\n max-width: 600px;\n opacity: 0;\n transition: opacity .4s;\n -moz-transition: opacity .4s;\n -webkit-transition: opacity .4s;\n -o-transition: opacity .4s;\n -ms-transition: opacity .4s;\n}\n.CodeMirror-lint-mark {\n background-position: left bottom;\n background-repeat: repeat-x;\n}\n.CodeMirror-lint-mark-warning {\n background-image: url(${De});\n}\n.CodeMirror-lint-mark-error {\n background-image: url(${Oe});\n}\n.CodeMirror-lint-marker {\n background-position: center center;\n background-repeat: no-repeat;\n cursor: pointer;\n display: inline-block;\n height: 16px;\n width: 16px;\n vertical-align: middle;\n position: relative;\n}\n.CodeMirror-lint-message {\n padding-left: 18px;\n background-position: top left;\n background-repeat: no-repeat;\n}\n.CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning {\n background-image: url(${Ie});\n}\n.CodeMirror-lint-marker-error, .CodeMirror-lint-message-error {\n background-image: url(${Le});\n}\n.CodeMirror-lint-marker-multiple {\n background-image: url(${Me});\n background-repeat: no-repeat;\n background-position: right bottom;\n width: 100%; height: 100%;\n}\n.CodeMirror-lint-line-error {\n background-color: rgba(183, 76, 81, 0.08);\n}\n.CodeMirror-lint-line-warning {\n background-color: rgba(255, 211, 0, 0.1);\n}\n/* Text styles */\n.CodeMirror-lint-mark-error,\n.CodeMirror-lint-mark-warning {\n background-repeat: repeat-x;\n /**\n * The following two are very specific to the font size, so we use \n * "magic values" instead of variables.\n */\n background-size: 10px 3px;\n background-position: 0 95%;\n}\n.cm-s-graphiql .CodeMirror-lint-mark-error {\n color: hsl(var(--color-error));\n}\n.CodeMirror-lint-mark-error {\n background-image: linear-gradient(\n 45deg,\n transparent 65%,\n hsl(var(--color-error)) 80%,\n transparent 90%\n ),\n linear-gradient(\n 135deg,\n transparent 5%,\n hsl(var(--color-error)) 15%,\n transparent 25%\n ),\n linear-gradient(\n 135deg,\n transparent 45%,\n hsl(var(--color-error)) 55%,\n transparent 65%\n ),\n linear-gradient(\n 45deg,\n transparent 25%,\n hsl(var(--color-error)) 35%,\n transparent 50%\n );\n}\n.cm-s-graphiql .CodeMirror-lint-mark-warning {\n color: hsl(var(--color-warning));\n}\n.CodeMirror-lint-mark-warning {\n background-image: linear-gradient(\n 45deg,\n transparent 65%,\n hsl(var(--color-warning)) 80%,\n transparent 90%\n ),\n linear-gradient(\n 135deg,\n transparent 5%,\n hsl(var(--color-warning)) 15%,\n transparent 25%\n ),\n linear-gradient(\n 135deg,\n transparent 45%,\n hsl(var(--color-warning)) 55%,\n transparent 65%\n ),\n linear-gradient(\n 45deg,\n transparent 25%,\n hsl(var(--color-warning)) 35%,\n transparent 50%\n );\n}\n/* Popup styles */\n.CodeMirror-lint-tooltip {\n background-color: hsl(var(--color-base));\n border: var(--popover-border);\n border-radius: var(--border-radius-8);\n box-shadow: var(--popover-box-shadow);\n font-size: var(--font-size-body);\n font-family: var(--font-family);\n max-width: 600px;\n overflow: hidden;\n padding: var(--px-12);\n}\n.CodeMirror-lint-message-error,\n.CodeMirror-lint-message-warning {\n background-image: none;\n padding: 0;\n}\n.CodeMirror-lint-message-error {\n color: hsl(var(--color-error));\n}\n.CodeMirror-lint-message-warning {\n color: hsl(var(--color-warning));\n}\n.CodeMirror-hints {\n position: absolute;\n z-index: 10;\n overflow: hidden;\n list-style: none;\n\n margin: 0;\n padding: 2px;\n\n -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\n border-radius: 3px;\n border: 1px solid silver;\n\n background: white;\n font-size: 90%;\n font-family: monospace;\n\n max-height: 20em;\n overflow-y: auto;\n}\n\n.CodeMirror-hint {\n margin: 0;\n padding: 0 4px;\n border-radius: 2px;\n white-space: pre;\n color: black;\n cursor: pointer;\n}\n\nli.CodeMirror-hint-active {\n background: #08f;\n color: white;\n}\n\n/* Popup styles */\n\n.CodeMirror-hints {\n background: hsl(var(--color-base));\n border: var(--popover-border);\n border-radius: var(--border-radius-8);\n box-shadow: var(--popover-box-shadow);\n display: grid;\n font-family: var(--font-family);\n font-size: var(--font-size-body);\n grid-template-columns: auto fit-content(300px);\n /* By default this is equals exactly 8 items including margins */\n max-height: 264px;\n padding: 0;\n}\n\n/* Autocomplete items */\n\n.CodeMirror-hint {\n border-radius: var(--border-radius-4);\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n grid-column: 1 / 2;\n margin: var(--px-4);\n /* Override element style added by codemirror */\n padding: var(--px-6) var(--px-8) !important\n}\n\n.CodeMirror-hint:not(:first-child) {\n margin-top: 0;\n }\n\nli.CodeMirror-hint-active {\n background: hsla(var(--color-primary), var(--alpha-background-medium));\n color: hsl(var(--color-primary));\n}\n\n/* Sidebar with additional information */\n\n.CodeMirror-hint-information {\n border-left: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n grid-column: 2 / 3;\n grid-row: 1 / 99999;\n /* Same as the popup */\n max-height: 264px;\n overflow: auto;\n padding: var(--px-12);\n}\n\n.CodeMirror-hint-information-header {\n display: flex;\n align-items: baseline;\n}\n\n.CodeMirror-hint-information-field-name {\n font-size: var(--font-size-h4);\n font-weight: var(--font-weight-medium);\n}\n\n.CodeMirror-hint-information-type-name-pill {\n border: 1px solid hsla(var(--color-neutral), var(--alpha-tertiary));\n border-radius: var(--border-radius-4);\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n margin-left: var(--px-6);\n padding: var(--px-4);\n}\n\n.CodeMirror-hint-information-type-name {\n color: inherit;\n text-decoration: none\n}\n\n.CodeMirror-hint-information-type-name:hover {\n text-decoration: underline dotted;\n }\n\n.CodeMirror-hint-information-description {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n margin-top: var(--px-12);\n}\n/* Popup styles */\n.CodeMirror-info {\n background-color: hsl(var(--color-base));\n border: var(--popover-border);\n border-radius: var(--border-radius-8);\n box-shadow: var(--popover-box-shadow);\n color: hsl(var(--color-neutral));\n max-height: 300px;\n max-width: 400px;\n opacity: 0;\n overflow: auto;\n padding: var(--px-12);\n position: fixed;\n transition: opacity 0.15s;\n z-index: 10\n\n /* Link styles */\n}\n.CodeMirror-info a {\n color: inherit;\n text-decoration: none\n }\n.CodeMirror-info a:hover {\n text-decoration: underline dotted;\n }\n/* Align elements in header */\n.CodeMirror-info .CodeMirror-info-header {\n display: flex;\n align-items: baseline;\n }\n/* Main elements */\n.CodeMirror-info .CodeMirror-info-header > .type-name,\n .CodeMirror-info .CodeMirror-info-header > .field-name,\n .CodeMirror-info .CodeMirror-info-header > .arg-name,\n .CodeMirror-info .CodeMirror-info-header > .directive-name,\n .CodeMirror-info .CodeMirror-info-header > .enum-value {\n font-size: var(--font-size-h4);\n font-weight: var(--font-weight-medium);\n }\n/* Type names */\n.CodeMirror-info .type-name-pill {\n border: 1px solid hsla(var(--color-neutral), var(--alpha-tertiary));\n border-radius: var(--border-radius-4);\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n margin-left: var(--px-6);\n padding: var(--px-4);\n }\n/* Descriptions */\n.CodeMirror-info .info-description {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n margin-top: var(--px-12);\n overflow: hidden;\n }\n/* Underline the clickable token */\n.CodeMirror-jump-token {\n text-decoration: underline dotted;\n cursor: pointer;\n}\n.auto-inserted-leaf.cm-property {\n animation-duration: 6s;\n animation-name: insertionFade;\n border-radius: var(--border-radius-4);\n padding: var(--px-2);\n}\n\n@keyframes insertionFade {\n from,\n to {\n background-color: none;\n }\n\n 15%,\n 85% {\n background-color: hsla(var(--color-warning), var(--alpha-background-light));\n }\n}\nbutton.graphiql-toolbar-button {\n display: flex;\n align-items: center;\n justify-content: center;\n height: var(--toolbar-width);\n width: var(--toolbar-width)\n}\nbutton.graphiql-toolbar-button.error {\n background: hsla(var(--color-error), var(--alpha-background-heavy));\n }\n.graphiql-execute-button-wrapper {\n position: relative;\n}\n\nbutton.graphiql-execute-button {\n background-color: hsl(var(--color-primary));\n border: none;\n border-radius: var(--border-radius-8);\n cursor: pointer;\n height: var(--toolbar-width);\n padding: 0;\n width: var(--toolbar-width)\n}\n\nbutton.graphiql-execute-button:hover {\n background-color: hsla(var(--color-primary), 0.9);\n }\n\nbutton.graphiql-execute-button:active {\n background-color: hsla(var(--color-primary), 0.8);\n }\n\nbutton.graphiql-execute-button:focus {\n outline: hsla(var(--color-primary), 0.8) auto 1px;\n }\n\nbutton.graphiql-execute-button > svg {\n color: white;\n display: block;\n height: var(--px-16);\n margin: auto;\n width: var(--px-16);\n }\nbutton.graphiql-toolbar-menu {\n display: block;\n height: var(--toolbar-width);\n width: var(--toolbar-width);\n}\n\n/*!*********************************************************************************************************************!*\\\n !*** css ../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/postcss-loader/dist/cjs.js!./style.css ***!\n \\*********************************************************************************************************************/\n/* Everything */\n.graphiql-container {\n background-color: hsl(var(--color-base));\n display: flex;\n height: 100%;\n margin: 0;\n overflow: hidden;\n width: 100%;\n}\n/* The sidebar */\n.graphiql-container .graphiql-sidebar {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: var(--px-8);\n width: var(--sidebar-width);\n}\n.graphiql-container .graphiql-sidebar .graphiql-sidebar-section {\n display: flex;\n flex-direction: column;\n gap: var(--px-8);\n}\n.graphiql-container .graphiql-sidebar button {\n display: flex;\n align-items: center;\n justify-content: center;\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n height: calc(var(--sidebar-width) - (2 * var(--px-8)));\n width: calc(var(--sidebar-width) - (2 * var(--px-8)));\n}\n.graphiql-container .graphiql-sidebar button.active {\n color: hsl(var(--color-neutral));\n}\n.graphiql-container .graphiql-sidebar button:not(:first-child) {\n margin-top: var(--px-4);\n}\n.graphiql-container .graphiql-sidebar button > svg {\n height: var(--px-20);\n width: var(--px-20);\n}\n/* The main content, i.e. everything except the sidebar */\n.graphiql-container .graphiql-main {\n display: flex;\n flex: 1;\n min-width: 0;\n}\n/* The current session and tabs */\n.graphiql-container .graphiql-sessions {\n background-color: hsla(var(--color-neutral), var(--alpha-background-light));\n /* Adding the 8px of padding to the inner border radius of the query editor */\n border-radius: calc(var(--border-radius-12) + var(--px-8));\n display: flex;\n flex-direction: column;\n flex: 1;\n max-height: 100%;\n margin: var(--px-16);\n margin-left: 0;\n min-width: 0;\n}\n/* The session header containing tabs and the logo */\n.graphiql-container .graphiql-session-header {\n align-items: center;\n display: flex;\n justify-content: space-between;\n height: var(--session-header-height);\n}\n/* The button to add a new tab */\nbutton.graphiql-tab-add {\n height: 100%;\n padding: var(--px-4);\n}\nbutton.graphiql-tab-add > svg {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n display: block;\n height: var(--px-16);\n width: var(--px-16);\n}\n/* The right-hand-side of the session header */\n.graphiql-container .graphiql-session-header-right {\n align-items: center;\n display: flex;\n}\n/* The GraphiQL logo */\n.graphiql-container .graphiql-logo {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n font-size: var(--font-size-h4);\n font-weight: var(--font-weight-medium);\n padding: var(--px-12) var(--px-16);\n}\n/* Undo default link styling for the default GraphiQL logo link */\n.graphiql-container .graphiql-logo .graphiql-logo-link {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n text-decoration: none;\n}\n/* The editor of the session */\n.graphiql-container .graphiql-session {\n display: flex;\n flex: 1;\n padding: 0 var(--px-8) var(--px-8);\n}\n/* All editors (query, variable, headers) */\n.graphiql-container .graphiql-editors {\n background-color: hsl(var(--color-base));\n border-radius: calc(var(--border-radius-12));\n box-shadow: var(--popover-box-shadow);\n display: flex;\n flex: 1;\n flex-direction: column;\n}\n.graphiql-container .graphiql-editors.full-height {\n margin-top: calc(var(--px-8) - var(--session-header-height));\n}\n/* The query editor and the toolbar */\n.graphiql-container .graphiql-query-editor {\n border-bottom: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n padding: var(--px-16);\n column-gap: var(--px-16);\n display: flex;\n width: 100%;\n}\n/* The vertical toolbar next to the query editor */\n.graphiql-container .graphiql-toolbar {\n width: var(--toolbar-width);\n}\n.graphiql-container .graphiql-toolbar > * + * {\n margin-top: var(--px-8);\n}\n/* The toolbar icons */\n.graphiql-toolbar-icon {\n color: hsla(var(--color-neutral), var(--alpha-tertiary));\n display: block;\n height: calc(var(--toolbar-width) - (var(--px-8) * 2));\n width: calc(var(--toolbar-width) - (var(--px-8) * 2));\n}\n/* The tab bar for editor tools */\n.graphiql-container .graphiql-editor-tools {\n cursor: row-resize;\n display: flex;\n width: 100%;\n column-gap: var(--px-8);\n padding: var(--px-8);\n}\n.graphiql-container .graphiql-editor-tools button {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n}\n.graphiql-container .graphiql-editor-tools button.active {\n color: hsl(var(--color-neutral));\n}\n/* The tab buttons to switch between editor tools */\n.graphiql-container\n .graphiql-editor-tools\n > button:not(.graphiql-toggle-editor-tools) {\n padding: var(--px-8) var(--px-12);\n}\n.graphiql-container .graphiql-editor-tools .graphiql-toggle-editor-tools {\n margin-left: auto;\n}\n/* An editor tool, e.g. variable or header editor */\n.graphiql-container .graphiql-editor-tool {\n flex: 1;\n padding: var(--px-16);\n}\n/**\n * The way CodeMirror editors are styled they overflow their containing\n * element. For some OS-browser-combinations this might cause overlap issues,\n * setting the position of this to \`relative\` makes sure this element will\n * always be on top of any editors.\n */\n.graphiql-container .graphiql-toolbar,\n.graphiql-container .graphiql-editor-tools,\n.graphiql-container .graphiql-editor-tool {\n position: relative;\n}\n/* The response view */\n.graphiql-container .graphiql-response {\n --editor-background: transparent;\n display: flex;\n width: 100%;\n flex-direction: column;\n}\n/* The results editor wrapping container */\n.graphiql-container .graphiql-response .result-window {\n position: relative;\n flex: 1;\n}\n/* The footer below the response view */\n.graphiql-container .graphiql-footer {\n border-top: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n}\n/* The plugin container */\n.graphiql-container .graphiql-plugin {\n border-left: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n flex: 1;\n overflow-y: auto;\n padding: var(--px-16);\n}\n/* Generic drag bar for horizontal resizing */\n.graphiql-horizontal-drag-bar {\n width: var(--px-12);\n cursor: col-resize;\n}\n.graphiql-horizontal-drag-bar:hover::after {\n border: var(--px-2) solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n border-radius: var(--border-radius-2);\n content: '';\n display: block;\n height: 25%;\n margin: 0 auto;\n position: relative;\n /* (100% - 25%) / 2 = 37.5% */\n top: 37.5%;\n width: 0;\n}\n.graphiql-container .graphiql-chevron-icon {\n color: hsla(var(--color-neutral), var(--alpha-tertiary));\n display: block;\n height: var(--px-12);\n margin: var(--px-12);\n width: var(--px-12);\n}\n/* Generic spin animation */\n.graphiql-spin {\n animation: spin 0.8s linear 0s infinite;\n}\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n/* The header of the settings dialog */\n.graphiql-dialog .graphiql-dialog-header {\n align-items: center;\n display: flex;\n justify-content: space-between;\n padding: var(--px-24);\n}\n/* The title of the settings dialog */\n.graphiql-dialog .graphiql-dialog-title {\n font-size: var(--font-size-h3);\n font-weight: var(--font-weight-medium);\n margin: 0;\n}\n/* A section inside the settings dialog */\n.graphiql-dialog .graphiql-dialog-section {\n align-items: center;\n border-top: 1px solid\n hsla(var(--color-neutral), var(--alpha-background-heavy));\n display: flex;\n justify-content: space-between;\n padding: var(--px-24);\n}\n.graphiql-dialog .graphiql-dialog-section > :not(:first-child) {\n margin-left: var(--px-24);\n}\n/* The section title in the settings dialog */\n.graphiql-dialog .graphiql-dialog-section-title {\n font-size: var(--font-size-h4);\n font-weight: var(--font-weight-medium);\n}\n/* The section caption in the settings dialog */\n.graphiql-dialog .graphiql-dialog-section-caption {\n color: hsla(var(--color-neutral), var(--alpha-secondary));\n}\n.graphiql-dialog .graphiql-warning-text {\n color: hsl(var(--color-warning));\n font-weight: var(--font-weight-medium);\n}\n.graphiql-dialog .graphiql-table {\n border-collapse: collapse;\n width: 100%;\n}\n.graphiql-dialog .graphiql-table :is(th, td) {\n border: 1px solid hsla(var(--color-neutral), var(--alpha-background-heavy));\n padding: var(--px-8) var(--px-12);\n}\n/* A single key the short-key dialog */\n.graphiql-dialog .graphiql-key {\n background-color: hsla(var(--color-neutral), var(--alpha-background-medium));\n border-radius: var(--border-radius-4);\n padding: var(--px-4);\n}\n/* Avoid showing native tooltips for icons with titles */\n.graphiql-container svg {\n pointer-events: none;\n}`,""]);const Fe=Z},6856:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ANSI_REGEXP=void 0,t.stripAnsi=function(e){return e.replace(t.ANSI_REGEXP,"")},t.ANSI_REGEXP=/[\u001B\u009B][[\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\d\/#&.:=?%@~_]+)*|[a-zA-Z\d]+(?:;[-a-zA-Z\d\/#&.:=?%@~_]*)*)?\u0007)|(?:(?:\d{1,4}(?:;\d{0,4})*)?[\dA-PR-TZcf-nq-uy=><~]))/g},6868:(e,t,n)=>{"use strict";n.d(t,{e:()=>u});var r=n(5198),o=n(1306),i=n(8255),a=n(2455),s=n(9762),l=n(2868),c=n(7274);function u(e){const t=Object.create(null),n=e.getSchema(),u=n?n.getDirectives():c.rc;for(const e of u)t[e.name]=e.locations;const d=e.getDocument().definitions;for(const e of d)e.kind===a.b.DIRECTIVE_DEFINITION&&(t[e.name.value]=e.locations.map((e=>e.value)));return{Directive(n,c,u,d,f){const p=n.name.value,h=t[p];if(!h)return void e.reportError(new i.eO(`Unknown directive "@${p}".`,n));const m=function(e){const t=e[e.length-1];switch("kind"in t||(0,o.V)(!1),t.kind){case a.b.OPERATION_DEFINITION:return function(e){switch(e){case s.cE.QUERY:return l.H.QUERY;case s.cE.MUTATION:return l.H.MUTATION;case s.cE.SUBSCRIPTION:return l.H.SUBSCRIPTION}}(t.operation);case a.b.FIELD:return l.H.FIELD;case a.b.FRAGMENT_SPREAD:return l.H.FRAGMENT_SPREAD;case a.b.INLINE_FRAGMENT:return l.H.INLINE_FRAGMENT;case a.b.FRAGMENT_DEFINITION:return l.H.FRAGMENT_DEFINITION;case a.b.VARIABLE_DEFINITION:return l.H.VARIABLE_DEFINITION;case a.b.SCHEMA_DEFINITION:case a.b.SCHEMA_EXTENSION:return l.H.SCHEMA;case a.b.SCALAR_TYPE_DEFINITION:case a.b.SCALAR_TYPE_EXTENSION:return l.H.SCALAR;case a.b.OBJECT_TYPE_DEFINITION:case a.b.OBJECT_TYPE_EXTENSION:return l.H.OBJECT;case a.b.FIELD_DEFINITION:return l.H.FIELD_DEFINITION;case a.b.INTERFACE_TYPE_DEFINITION:case a.b.INTERFACE_TYPE_EXTENSION:return l.H.INTERFACE;case a.b.UNION_TYPE_DEFINITION:case a.b.UNION_TYPE_EXTENSION:return l.H.UNION;case a.b.ENUM_TYPE_DEFINITION:case a.b.ENUM_TYPE_EXTENSION:return l.H.ENUM;case a.b.ENUM_VALUE_DEFINITION:return l.H.ENUM_VALUE;case a.b.INPUT_OBJECT_TYPE_DEFINITION:case a.b.INPUT_OBJECT_TYPE_EXTENSION:return l.H.INPUT_OBJECT;case a.b.INPUT_VALUE_DEFINITION:{const t=e[e.length-3];return"kind"in t||(0,o.V)(!1),t.kind===a.b.INPUT_OBJECT_TYPE_DEFINITION?l.H.INPUT_FIELD_DEFINITION:l.H.ARGUMENT_DEFINITION}default:(0,o.V)(!1,"Unexpected kind: "+(0,r.N)(t.kind))}}(f);m&&!h.includes(m)&&e.reportError(new i.eO(`Directive "@${p}" may not be used on ${m}.`,n))}}}},6886:(e,t,n)=>{"use strict";n.d(t,{U:()=>s});var r=n(8255),o=n(2455),i=n(3420),a=n(7274);function s(e){const t=Object.create(null),n=e.getSchema(),s=n?n.getDirectives():a.rc;for(const e of s)t[e.name]=!e.isRepeatable;const l=e.getDocument().definitions;for(const e of l)e.kind===o.b.DIRECTIVE_DEFINITION&&(t[e.name.value]=!e.repeatable);const c=Object.create(null),u=Object.create(null);return{enter(n){if(!("directives"in n)||!n.directives)return;let a;if(n.kind===o.b.SCHEMA_DEFINITION||n.kind===o.b.SCHEMA_EXTENSION)a=c;else if((0,i.a6)(n)||(0,i.i7)(n)){const e=n.name.value;a=u[e],void 0===a&&(u[e]=a=Object.create(null))}else a=Object.create(null);for(const o of n.directives){const n=o.name.value;t[n]&&(a[n]?e.reportError(new r.eO(`The directive "@${n}" can only be used once at this location.`,[a[n],o])):a[n]=o)}}}}},7065:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(8255);function o(e){const t=Object.create(null),n=e.getSchema();return{DirectiveDefinition(o){const i=o.name.value;if(null==n||!n.getDirective(i))return t[i]?e.reportError(new r.eO(`There can be only one directive named "@${i}".`,[t[i],o.name])):t[i]=o.name,!1;e.reportError(new r.eO(`Directive "@${i}" already exists in the schema. It cannot be redefined.`,o.name))}}}},7095:e=>{"use strict";e.exports="data:font/woff2;base64,d09GMgABAAAAAANUAA4AAAAABbwAAAMBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGiYbIBw2BmAANBEMCoI0ghgLEAABNgIkAxwEIAWDMgcgG5sECK4GbGM62A+KOMNGmZWUwcdhKI9l4Sh/WwYP/3af9w0W4ERa2bOg405uoSptTooGKkF8HniO5b+Iojvye4dReBbNtVHwcLQTG2gBzQfYOqjJ/XYU/jItwgxa4I3czM4Fj9LAAnlHz+dzgSO71Jqn2QML8H66dROj0qAFLYnRhtm0b89/erW/v8l/LA6we9gCizDBtQzSf4EtkcwDT6RtmgYEQXnDKGQslZyX/CkQSFgBAE4ERggEAgmwACwQgADMsONAJKVkFWEBgAJgwMz1NlLWec3G+jtZu+rXO1i7rx/sZi0AEwB5WVY28FUE1CORQAjvtSPftAwCQQjGAbTUfm4qwrvbNmDEf5pjR4JoxElAiYiMWjQyIAEy4EBGAA4UNKCgIMC7a5Cej2sCAA+SMEEyYA2AMQBWgCmQAObACrAAQAUAJCSDMEDmo7CztfXoRGu7SUeVdbvosOq6N6PHnZ2yf9l3eXPj/q2qXdkjBL+qrix1cYsqzItOvXfRPaMXkUvPeFWoxr7tZB8gfxIhMauBapmSUhO8d3O8wUt0MoI7UAxLzt0/zhCwJnVHrsPYXenm8suPeLYORWqn/3wwK6Qp+frDiYGvxHSXFzoXfpihfmlODl9oFbOqKa8nXbZgd6axNivh4JS8xEZKChij/nuDBPx/MrxQA/WBACCtK44947xa66g/k0YcALjxaesDuBuQP/7x/3bTwmQACVMkAAQYd/7HYBqK1H97hriqWIzlN7cD8Qu1mY6Ql7eR9v8qAcCY/apKqAgArEBCCmOEAExoJiOUENTgBAI3NSBhwSjIbLboV0Blo3PIiN06hxVFfmrr0WtMvzYtWg3SBPDjz58mVY8eLTrpNOm6NfKhidepk6ZAbgbym+oG6PoN0zXxUaBHgx6Demiy6Zq0GdIl3aB6ndo04r7WvSV0/Qa0Nd2+yKcNFCrSvh/6dNKO3xV33aBeEXxNZKTyQUaverfOR49+LZno1XUboBt4oSzpEiXLUSjZDgF8+JHBMIY0KQAA"},7122:(e,t,n)=>{!function(e){"use strict";var t="CodeMirror-hint-active";function n(e,t){if(this.cm=e,this.options=t,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor("start"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length,this.options.updateOnCursorActivity){var n=this;e.on("cursorActivity",this.activityFunc=function(){n.cursorActivity()})}}e.showHint=function(e,t,n){if(!t)return e.showHint(n);n&&n.async&&(t.async=!0);var r={hint:t};if(n)for(var o in n)r[o]=n[o];return e.showHint(r)},e.defineExtension("showHint",(function(t){t=function(e,t,n){var r=e.options.hintOptions,o={};for(var i in c)o[i]=c[i];if(r)for(var i in r)void 0!==r[i]&&(o[i]=r[i]);if(n)for(var i in n)void 0!==n[i]&&(o[i]=n[i]);return o.hint.resolve&&(o.hint=o.hint.resolve(e,t)),o}(this,this.getCursor("start"),t);var r=this.listSelections();if(!(r.length>1)){if(this.somethingSelected()){if(!t.hint.supportsSelection)return;for(var o=0;ou.clientHeight+1;if(setTimeout((function(){D=s.getScrollInfo()})),O.bottom-N>0){var L=O.bottom-O.top,M=O.top-(y.bottom-y.top)-2;N-O.topM&&(u.style.height=(L=M)+"px"),u.style.top=(A=y.top-L)+E+"px",w=!1):u.style.height=N-O.top-2+"px"}var F,R=O.right-S;if(I&&(R+=s.display.nativeBarWidth),R>0&&(O.right-O.left>S&&(u.style.width=S-5+"px",R-=O.right-O.left-S),u.style.left=(b=Math.max(y.left-R-x,0))+"px"),I)for(var P=u.firstChild;P;P=P.nextSibling)P.style.paddingRight=s.display.nativeBarWidth+"px";s.addKeyMap(this.keyMap=function(e,t){var n={Up:function(){t.moveFocus(-1)},Down:function(){t.moveFocus(1)},PageUp:function(){t.moveFocus(1-t.menuSize(),!0)},PageDown:function(){t.moveFocus(t.menuSize()-1,!0)},Home:function(){t.setFocus(0)},End:function(){t.setFocus(t.length-1)},Enter:t.pick,Tab:t.pick,Esc:t.close};/Mac/.test(navigator.platform)&&(n["Ctrl-P"]=function(){t.moveFocus(-1)},n["Ctrl-N"]=function(){t.moveFocus(1)});var r=e.options.customKeys,o=r?{}:n;function i(e,r){var i;i="string"!=typeof r?function(e){return r(e,t)}:n.hasOwnProperty(r)?n[r]:r,o[e]=i}if(r)for(var a in r)r.hasOwnProperty(a)&&i(a,r[a]);var s=e.options.extraKeys;if(s)for(var a in s)s.hasOwnProperty(a)&&i(a,s[a]);return o}(n,{moveFocus:function(e,t){o.changeActive(o.selectedHint+e,t)},setFocus:function(e){o.changeActive(e)},menuSize:function(){return o.screenAmount()},length:f.length,close:function(){n.close()},pick:function(){o.pick()},data:r})),n.options.closeOnUnfocus&&(s.on("blur",this.onBlur=function(){F=setTimeout((function(){n.close()}),100)}),s.on("focus",this.onFocus=function(){clearTimeout(F)})),s.on("scroll",this.onScroll=function(){var e=s.getScrollInfo(),t=s.getWrapperElement().getBoundingClientRect();D||(D=s.getScrollInfo());var r=A+D.top-e.top,o=r-(c.pageYOffset||(l.documentElement||l.body).scrollTop);if(w||(o+=u.offsetHeight),o<=t.top||o>=t.bottom)return n.close();u.style.top=r+"px",u.style.left=b+D.left-e.left+"px"}),e.on(u,"dblclick",(function(e){var t=a(u,e.target||e.srcElement);t&&null!=t.hintId&&(o.changeActive(t.hintId),o.pick())})),e.on(u,"click",(function(e){var t=a(u,e.target||e.srcElement);t&&null!=t.hintId&&(o.changeActive(t.hintId),n.options.completeOnSingleClick&&o.pick())})),e.on(u,"mousedown",(function(){setTimeout((function(){s.focus()}),20)}));var j=this.getSelectedHintRange();return 0===j.from&&0===j.to||this.scrollToActive(),e.signal(r,"select",f[this.selectedHint],u.childNodes[this.selectedHint]),!0}function l(e,t,n,r){if(e.async)e(t,r,n);else{var o=e(t,n);o&&o.then?o.then(r):r(o)}}n.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.options.updateOnCursorActivity&&this.cm.off("cursorActivity",this.activityFunc),this.widget&&this.data&&e.signal(this.data,"close"),this.widget&&this.widget.close(),e.signal(this.cm,"endCompletion",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(t,n){var r=t.list[n],o=this;this.cm.operation((function(){r.hint?r.hint(o.cm,t,r):o.cm.replaceRange(i(r),r.from||t.from,r.to||t.to,"complete"),e.signal(t,"pick",r),o.cm.scrollIntoView()})),this.options.closeOnPick&&this.close()},cursorActivity:function(){this.debounce&&(o(this.debounce),this.debounce=0);var e=this.startPos;this.data&&(e=this.data.from);var t=this.cm.getCursor(),n=this.cm.getLine(t.line);if(t.line!=this.startPos.line||n.length-t.ch!=this.startLen-this.startPos.ch||t.ch=this.data.list.length?n=r?this.data.list.length-1:0:n<0&&(n=r?0:this.data.list.length-1),this.selectedHint!=n){var o=this.hints.childNodes[this.selectedHint];o&&(o.className=o.className.replace(" "+t,""),o.removeAttribute("aria-selected")),(o=this.hints.childNodes[this.selectedHint=n]).className+=" "+t,o.setAttribute("aria-selected","true"),this.completion.cm.getInputField().setAttribute("aria-activedescendant",o.id),this.scrollToActive(),e.signal(this.data,"select",this.data.list[this.selectedHint],o)}},scrollToActive:function(){var e=this.getSelectedHintRange(),t=this.hints.childNodes[e.from],n=this.hints.childNodes[e.to],r=this.hints.firstChild;t.offsetTopthis.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=n.offsetTop+n.offsetHeight-this.hints.clientHeight+r.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1},getSelectedHintRange:function(){var e=this.completion.options.scrollMargin||0;return{from:Math.max(0,this.selectedHint-e),to:Math.min(this.data.list.length-1,this.selectedHint+e)}}},e.registerHelper("hint","auto",{resolve:function(t,n){var r,o=t.getHelpers(n,"hint");if(o.length){var i=function(e,t,n){var r=function(e,t){if(!e.somethingSelected())return t;for(var n=[],r=0;r0?t(e):o(i+1)}))}(0)};return i.async=!0,i.supportsSelection=!0,i}return(r=t.getHelper(t.getCursor(),"hintWords"))?function(t){return e.hint.fromList(t,{words:r})}:e.hint.anyword?function(t,n){return e.hint.anyword(t,n)}:function(){}}}),e.registerHelper("hint","fromList",(function(t,n){var r,o=t.getCursor(),i=t.getTokenAt(o),a=e.Pos(o.line,i.start),s=o;i.start,]/,closeOnPick:!0,closeOnUnfocus:!0,updateOnCursorActivity:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null,paddingForScrollbar:!0,moveOnOverlap:!0};e.defineOption("hintOptions",null)}(n(1448))},7258:(e,t,n)=>{"use strict";n.r(t);var r=n(2114),o=n(1448),i=n.n(o),a=n(9786),s=n(3958);function l(e,t,n,o){const i=document.createElement("span");i.className="type-name-pill",o instanceof r.Gc?(c(i,t,n,o.ofType),d(i,"!")):o instanceof r.KT?(d(i,"["),c(i,t,n,o.ofType),d(i,"]")):d(i,(null==o?void 0:o.name)||"","type-name",n,(0,s.a2)(t,o)),e.append(i)}function c(e,t,n,o){o instanceof r.Gc?(c(e,t,n,o.ofType),d(e,"!")):o instanceof r.KT?(d(e,"["),c(e,t,n,o.ofType),d(e,"]")):d(e,(null==o?void 0:o.name)||"","type-name",n,(0,s.a2)(t,o))}function u(e,t,n){const{description:r}=n;if(r){const n=document.createElement("div");n.className="info-description",t.renderDescription?n.innerHTML=t.renderDescription(r):n.append(document.createTextNode(r)),e.append(n)}!function(e,t,n){const r=n.deprecationReason;if(r){const n=document.createElement("div");n.className="info-deprecation",e.append(n);const o=document.createElement("span");o.className="info-deprecation-label",o.append(document.createTextNode("Deprecated")),n.append(o);const i=document.createElement("div");i.className="info-deprecation-reason",t.renderDescription?i.innerHTML=t.renderDescription(r):i.append(document.createTextNode(r)),n.append(i)}}(e,t,n)}function d(e,t,n="",r={onClick:null},o=null){if(n){const{onClick:i}=r;let a;i?(a=document.createElement("a"),a.href="javascript:void 0",a.addEventListener("click",(e=>{e.preventDefault(),i(o,e)}))):a=document.createElement("span"),a.className=n,a.append(document.createTextNode(t)),e.append(a)}else e.append(document.createTextNode(t))}n(8059),i().registerHelper("info","graphql",((e,t)=>{var n;if(!t.schema||!e.state)return;const{kind:r,step:o}=e.state,i=(0,a.A)(t.schema,e.state);if("Field"===r&&0===o&&i.fieldDef||"AliasedField"===r&&2===o&&i.fieldDef||"ObjectField"===r&&0===o&&i.fieldDef){const e=document.createElement("div");e.className="CodeMirror-info-header",function(e,t,n){(function(e,t,n){var r;d(e,(null===(r=t.fieldDef)||void 0===r?void 0:r.name)||"","field-name",n,(0,s.Q0)(t))})(e,t,n),l(e,t,n,t.type)}(e,i,t);const n=document.createElement("div");return n.append(e),u(n,t,i.fieldDef),n}if("Directive"===r&&1===o&&i.directiveDef){const e=document.createElement("div");e.className="CodeMirror-info-header",function(e,t,n){var r;d(e,"@"+((null===(r=t.directiveDef)||void 0===r?void 0:r.name)||""),"directive-name",n,(0,s.t8)(t))}(e,i,t);const n=document.createElement("div");return n.append(e),u(n,t,i.directiveDef),n}if("Argument"===r&&0===o&&i.argDef){const e=document.createElement("div");e.className="CodeMirror-info-header",function(e,t,n){var r;d(e,(null===(r=t.argDef)||void 0===r?void 0:r.name)||"","arg-name",n,(0,s.Hh)(t)),l(e,t,n,t.inputType)}(e,i,t);const n=document.createElement("div");return n.append(e),u(n,t,i.argDef),n}if("EnumValue"===r&&(null===(n=i.enumValue)||void 0===n?void 0:n.description)){const e=document.createElement("div");e.className="CodeMirror-info-header",function(e,t,n){var r;const o=(null===(r=t.enumValue)||void 0===r?void 0:r.name)||"";c(e,t,n,t.inputType),d(e,"."),d(e,o,"enum-value",n,(0,s.IR)(t))}(e,i,t);const n=document.createElement("div");return n.append(e),u(n,t,i.enumValue),n}if("NamedType"===r&&i.type&&i.type.description){const e=document.createElement("div");e.className="CodeMirror-info-header",c(e,i,t,i.type);const n=document.createElement("div");return n.append(e),u(n,t,i.type),n}}))},7274:(e,t,n)=>{"use strict";n.d(t,{BR:()=>v,HQ:()=>m,Il:()=>b,MQ:()=>g,Qe:()=>E,RR:()=>h,gw:()=>w,nK:()=>y,qT:()=>f,rc:()=>x,yK:()=>A,yq:()=>p});var r=n(5198),o=n(698),i=n(3217),a=n(792),s=n(1070),l=n(2868),c=n(567),u=n(4143),d=n(2114);function f(e){return(0,a.h)(e,h)}function p(e){if(!f(e))throw new Error(`Expected ${(0,r.N)(e)} to be a GraphQL directive.`);return e}class h{constructor(e){var t,n;this.name=(0,c.I)(e.name),this.description=e.description,this.locations=e.locations,this.isRepeatable=null!==(t=e.isRepeatable)&&void 0!==t&&t,this.extensions=(0,o.z)(e.extensions),this.astNode=e.astNode,Array.isArray(e.locations)||(0,i.U)(!1,`@${e.name} locations must be an Array.`);const r=null!==(n=e.args)&&void 0!==n?n:{};(0,s.Z)(r)&&!Array.isArray(r)||(0,i.U)(!1,`@${e.name} args must be an object with argument names as keys.`),this.args=(0,d.Kx)(r)}get[Symbol.toStringTag](){return"GraphQLDirective"}toConfig(){return{name:this.name,description:this.description,locations:this.locations,args:(0,d.g0)(this.args),isRepeatable:this.isRepeatable,extensions:this.extensions,astNode:this.astNode}}toString(){return"@"+this.name}toJSON(){return this.toString()}}const m=new h({name:"include",description:"Directs the executor to include this field or fragment only when the `if` argument is true.",locations:[l.H.FIELD,l.H.FRAGMENT_SPREAD,l.H.INLINE_FRAGMENT],args:{if:{type:new d.Gc(u.kk),description:"Included when true."}}}),g=new h({name:"skip",description:"Directs the executor to skip this field or fragment when the `if` argument is true.",locations:[l.H.FIELD,l.H.FRAGMENT_SPREAD,l.H.INLINE_FRAGMENT],args:{if:{type:new d.Gc(u.kk),description:"Skipped when true."}}}),v=new h({name:"defer",description:"Directs the executor to defer this fragment when the `if` argument is true or undefined.",locations:[l.H.FRAGMENT_SPREAD,l.H.INLINE_FRAGMENT],args:{if:{type:u.kk,description:"Deferred when true or undefined."},label:{type:u.FV,description:"Unique name"}}}),y=new h({name:"stream",description:"Directs the executor to stream plural fields when the `if` argument is true or undefined.",locations:[l.H.FIELD],args:{if:{type:u.kk,description:"Stream when true or undefined."},label:{type:u.FV,description:"Unique name"},initialCount:{defaultValue:0,type:u.Fh,description:"Number of items to return immediately"}}}),b="No longer supported",A=new h({name:"deprecated",description:"Marks an element of a GraphQL schema as no longer supported.",locations:[l.H.FIELD_DEFINITION,l.H.ARGUMENT_DEFINITION,l.H.INPUT_FIELD_DEFINITION,l.H.ENUM_VALUE],args:{reason:{type:u.FV,description:"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).",defaultValue:b}}}),w=new h({name:"specifiedBy",description:"Exposes a URL that specifies the behavior of this scalar.",locations:[l.H.SCALAR],args:{url:{type:new d.Gc(u.FV),description:"The URL that specifies the behavior of this scalar."}}}),x=Object.freeze([m,g,A,w]);function E(e){return x.some((({name:t})=>t===e.name))}},7321:e=>{"use strict";e.exports="data:font/woff;base64,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"},7350:(e,t,n)=>{"use strict";n.d(t,{D:()=>c,S:()=>d});var r=n(2455),o=n(9762),i=n(424),a=n(2114),s=n(8957),l=n(9494);class c{constructor(e,t,n){this._schema=e,this._typeStack=[],this._parentTypeStack=[],this._inputTypeStack=[],this._fieldDefStack=[],this._defaultValueStack=[],this._directive=null,this._argument=null,this._enumValue=null,this._getFieldDef=null!=n?n:u,t&&((0,a.dX)(t)&&this._inputTypeStack.push(t),(0,a.ML)(t)&&this._parentTypeStack.push(t),(0,a.oH)(t)&&this._typeStack.push(t))}get[Symbol.toStringTag](){return"TypeInfo"}getType(){if(this._typeStack.length>0)return this._typeStack[this._typeStack.length-1]}getParentType(){if(this._parentTypeStack.length>0)return this._parentTypeStack[this._parentTypeStack.length-1]}getInputType(){if(this._inputTypeStack.length>0)return this._inputTypeStack[this._inputTypeStack.length-1]}getParentInputType(){if(this._inputTypeStack.length>1)return this._inputTypeStack[this._inputTypeStack.length-2]}getFieldDef(){if(this._fieldDefStack.length>0)return this._fieldDefStack[this._fieldDefStack.length-1]}getDefaultValue(){if(this._defaultValueStack.length>0)return this._defaultValueStack[this._defaultValueStack.length-1]}getDirective(){return this._directive}getArgument(){return this._argument}getEnumValue(){return this._enumValue}enter(e){const t=this._schema;switch(e.kind){case r.b.SELECTION_SET:{const e=(0,a.MR)(this.getType());this._parentTypeStack.push((0,a.ML)(e)?e:void 0);break}case r.b.FIELD:{const n=this.getParentType();let r,o;n&&(r=this._getFieldDef(t,n,e),r&&(o=r.type)),this._fieldDefStack.push(r),this._typeStack.push((0,a.oH)(o)?o:void 0);break}case r.b.DIRECTIVE:this._directive=t.getDirective(e.name.value);break;case r.b.OPERATION_DEFINITION:{const n=t.getRootType(e.operation);this._typeStack.push((0,a.YQ)(n)?n:void 0);break}case r.b.INLINE_FRAGMENT:case r.b.FRAGMENT_DEFINITION:{const n=e.typeCondition,r=n?(0,l.v)(t,n):(0,a.MR)(this.getType());this._typeStack.push((0,a.oH)(r)?r:void 0);break}case r.b.VARIABLE_DEFINITION:{const n=(0,l.v)(t,e.type);this._inputTypeStack.push((0,a.dX)(n)?n:void 0);break}case r.b.ARGUMENT:{var n;let t,r;const o=null!==(n=this.getDirective())&&void 0!==n?n:this.getFieldDef();o&&(t=o.args.find((t=>t.name===e.name.value)),t&&(r=t.type)),this._argument=t,this._defaultValueStack.push(t?t.defaultValue:void 0),this._inputTypeStack.push((0,a.dX)(r)?r:void 0);break}case r.b.LIST:{const e=(0,a.yl)(this.getInputType()),t=(0,a.Fs)(e)?e.ofType:e;this._defaultValueStack.push(void 0),this._inputTypeStack.push((0,a.dX)(t)?t:void 0);break}case r.b.OBJECT_FIELD:{const t=(0,a.MR)(this.getInputType());let n,r;(0,a.qK)(t)&&(r=t.getFields()[e.name.value],r&&(n=r.type)),this._defaultValueStack.push(r?r.defaultValue:void 0),this._inputTypeStack.push((0,a.dX)(n)?n:void 0);break}case r.b.ENUM:{const t=(0,a.MR)(this.getInputType());let n;(0,a.oF)(t)&&(n=t.getValue(e.value)),this._enumValue=n;break}}}leave(e){switch(e.kind){case r.b.SELECTION_SET:this._parentTypeStack.pop();break;case r.b.FIELD:this._fieldDefStack.pop(),this._typeStack.pop();break;case r.b.DIRECTIVE:this._directive=null;break;case r.b.OPERATION_DEFINITION:case r.b.INLINE_FRAGMENT:case r.b.FRAGMENT_DEFINITION:this._typeStack.pop();break;case r.b.VARIABLE_DEFINITION:this._inputTypeStack.pop();break;case r.b.ARGUMENT:this._argument=null,this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case r.b.LIST:case r.b.OBJECT_FIELD:this._defaultValueStack.pop(),this._inputTypeStack.pop();break;case r.b.ENUM:this._enumValue=null}}}function u(e,t,n){const r=n.name.value;return r===s.S0.name&&e.getQueryType()===t?s.S0:r===s.Xe.name&&e.getQueryType()===t?s.Xe:r===s.of.name&&(0,a.ML)(t)?s.of:(0,a.YQ)(t)||(0,a.kD)(t)?t.getFields()[r]:void 0}function d(e,t){return{enter(...n){const r=n[0];e.enter(r);const a=(0,i.XO)(t,r.kind).enter;if(a){const i=a.apply(t,n);return void 0!==i&&(e.leave(r),(0,o.Ll)(i)&&e.enter(i)),i}},leave(...n){const r=n[0],o=(0,i.XO)(t,r.kind).leave;let a;return o&&(a=o.apply(t,n)),e.leave(r),a}}}},7368:(e,t,n)=>{"use strict";n.d(t,{i:()=>o});var r=n(8255);function o(e){const t=Object.create(null),n=e.getSchema();return{ScalarTypeDefinition:o,ObjectTypeDefinition:o,InterfaceTypeDefinition:o,UnionTypeDefinition:o,EnumTypeDefinition:o,InputObjectTypeDefinition:o};function o(o){const i=o.name.value;if(null==n||!n.getType(i))return t[i]?e.reportError(new r.eO(`There can be only one type named "${i}".`,[t[i],o.name])):t[i]=o.name,!1;e.reportError(new r.eO(`Type "${i}" already exists in the schema. It cannot also be defined in this type definition.`,o.name))}}},7400:(e,t,n)=>{"use strict";var r=n(4041),o=n(7967);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n

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 G1h*P#(GHsUPAPL8H-WoS0?<0&hkNneZ=dh>=Ul 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≤+l(3Tt8@`-LkzX@>ZmlJ|kql?b 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