velocious 1.0.461 → 1.0.462
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/application.js +1 -3
- package/build/background-jobs/cron-expression.js +1 -3
- package/build/background-jobs/forked-runner-child.js +1 -3
- package/build/background-jobs/job.js +1 -3
- package/build/background-jobs/scheduler.js +2 -6
- package/build/background-jobs/store.js +2 -6
- package/build/background-jobs/web/controller.js +1 -3
- package/build/background-jobs/worker.js +1 -3
- package/build/beacon/client.js +2 -6
- package/build/cli/tenant-database-command-helper.js +1 -3
- package/build/configuration.js +29 -32
- package/build/controller.js +4 -14
- package/build/database/drivers/mssql/index.js +1 -3
- package/build/database/drivers/mysql/index.js +2 -6
- package/build/database/drivers/pgsql/index.js +1 -3
- package/build/database/drivers/sqlite/base.js +3 -9
- package/build/database/drivers/sqlite/index.js +3 -9
- package/build/database/drivers/sqlite/table.js +1 -3
- package/build/database/migrator.js +1 -3
- package/build/database/pool/async-tracked-multi-connection.js +20 -45
- package/build/database/pool/base-methods-forward.js +2 -10
- package/build/database/pool/base.js +5 -15
- package/build/database/query/index.js +4 -12
- package/build/database/query/join-object.js +3 -9
- package/build/database/query/model-class-query.js +21 -63
- package/build/database/query/preloader/belongs-to.js +9 -27
- package/build/database/query/preloader/has-many.js +7 -21
- package/build/database/query/preloader/has-one.js +3 -9
- package/build/database/query/preloader.js +6 -18
- package/build/database/query/query-data.js +5 -15
- package/build/database/query/where-model-class-hash.js +5 -15
- package/build/database/query/with-count.js +5 -15
- package/build/database/record/acts-as-list.js +10 -38
- package/build/database/record/attachments/normalize-input.js +7 -25
- package/build/database/record/attachments/storage-drivers/s3.js +4 -12
- package/build/database/record/attachments/store.js +2 -6
- package/build/database/record/index.js +55 -171
- package/build/database/record/instance-relationships/base.js +6 -20
- package/build/database/record/instance-relationships/belongs-to.js +2 -6
- package/build/database/record/instance-relationships/has-many.js +4 -12
- package/build/database/record/instance-relationships/has-one.js +4 -12
- package/build/database/record/relationships/base.js +1 -5
- package/build/database/record/validators/presence.js +1 -3
- package/build/database/record/validators/uniqueness.js +4 -12
- package/build/environment-handlers/browser.js +1 -3
- package/build/environment-handlers/node/cli/commands/console.js +2 -6
- package/build/environment-handlers/node/cli/commands/db/schema/load.js +1 -3
- package/build/environment-handlers/node/cli/commands/generate/frontend-models.js +67 -11
- package/build/environment-handlers/node.js +15 -6
- package/build/frontend-model-controller.js +34 -110
- package/build/frontend-models/base.js +45 -151
- package/build/frontend-models/clear-pending-debounced-callback.js +1 -3
- package/build/frontend-models/preloader.js +3 -9
- package/build/frontend-models/query.js +11 -33
- package/build/frontend-models/resource-definition.js +2 -6
- package/build/frontend-models/transport-serialization.js +7 -21
- package/build/frontend-models/use-destroyed-event.js +2 -6
- package/build/frontend-models/use-model-class-event.js +2 -6
- package/build/frontend-models/use-updated-event.js +3 -9
- package/build/frontend-models/websocket-channel.js +9 -27
- package/build/frontend-models/websocket-publishers.js +12 -23
- package/build/http-server/client/index.js +6 -18
- package/build/http-server/client/params-to-object.js +6 -18
- package/build/http-server/client/request-buffer/index.js +1 -3
- package/build/http-server/client/request-parser.js +1 -3
- package/build/http-server/client/request-runner.js +4 -12
- package/build/http-server/client/websocket-session.js +6 -18
- package/build/http-server/development-reloader.js +2 -6
- package/build/http-server/remote-address.js +1 -5
- package/build/http-server/server-client.js +3 -9
- package/build/http-server/server-lock.js +2 -6
- package/build/http-server/websocket-channel-subscribers.js +2 -6
- package/build/http-server/websocket-event-log-store.js +5 -15
- package/build/http-server/websocket-events-host.js +1 -3
- package/build/http-server/worker-handler/in-process.js +3 -11
- package/build/http-server/worker-handler/worker-thread.js +1 -3
- package/build/logger.js +2 -6
- package/build/mailer/backends/smtp.js +1 -5
- package/build/mailer/base.js +4 -16
- package/build/plugins/sqljs-wasm-route-controller.js +1 -3
- package/build/routes/basic-route.js +1 -3
- package/build/routes/resolver.js +4 -14
- package/build/src/application.d.ts.map +1 -1
- package/build/src/application.js +2 -4
- package/build/src/background-jobs/cron-expression.d.ts.map +1 -1
- package/build/src/background-jobs/cron-expression.js +2 -4
- package/build/src/background-jobs/forked-runner-child.js +2 -4
- package/build/src/background-jobs/job.d.ts.map +1 -1
- package/build/src/background-jobs/job.js +2 -4
- package/build/src/background-jobs/scheduler.d.ts.map +1 -1
- package/build/src/background-jobs/scheduler.js +3 -7
- package/build/src/background-jobs/store.d.ts.map +1 -1
- package/build/src/background-jobs/store.js +3 -7
- package/build/src/background-jobs/web/controller.d.ts.map +1 -1
- package/build/src/background-jobs/web/controller.js +2 -5
- package/build/src/background-jobs/worker.d.ts.map +1 -1
- package/build/src/background-jobs/worker.js +2 -4
- package/build/src/beacon/client.d.ts.map +1 -1
- package/build/src/beacon/client.js +3 -7
- package/build/src/cli/tenant-database-command-helper.d.ts.map +1 -1
- package/build/src/cli/tenant-database-command-helper.js +2 -4
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +27 -35
- package/build/src/controller.d.ts.map +1 -1
- package/build/src/controller.js +5 -15
- package/build/src/database/drivers/mssql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mssql/index.js +2 -4
- package/build/src/database/drivers/mysql/index.d.ts.map +1 -1
- package/build/src/database/drivers/mysql/index.js +3 -7
- package/build/src/database/drivers/pgsql/index.d.ts.map +1 -1
- package/build/src/database/drivers/pgsql/index.js +2 -4
- package/build/src/database/drivers/sqlite/base.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/base.js +4 -10
- package/build/src/database/drivers/sqlite/index.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/index.js +4 -10
- package/build/src/database/drivers/sqlite/table.d.ts.map +1 -1
- package/build/src/database/drivers/sqlite/table.js +2 -4
- package/build/src/database/migrator.d.ts.map +1 -1
- package/build/src/database/migrator.js +2 -4
- package/build/src/database/pool/async-tracked-multi-connection.d.ts.map +1 -1
- package/build/src/database/pool/async-tracked-multi-connection.js +21 -47
- package/build/src/database/pool/base-methods-forward.d.ts.map +1 -1
- package/build/src/database/pool/base-methods-forward.js +3 -11
- package/build/src/database/pool/base.d.ts.map +1 -1
- package/build/src/database/pool/base.js +6 -16
- package/build/src/database/query/index.d.ts.map +1 -1
- package/build/src/database/query/index.js +5 -13
- package/build/src/database/query/join-object.d.ts.map +1 -1
- package/build/src/database/query/join-object.js +4 -10
- package/build/src/database/query/model-class-query.d.ts.map +1 -1
- package/build/src/database/query/model-class-query.js +22 -64
- package/build/src/database/query/preloader/belongs-to.d.ts.map +1 -1
- package/build/src/database/query/preloader/belongs-to.js +10 -28
- package/build/src/database/query/preloader/has-many.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-many.js +8 -22
- package/build/src/database/query/preloader/has-one.d.ts.map +1 -1
- package/build/src/database/query/preloader/has-one.js +4 -10
- package/build/src/database/query/preloader.d.ts.map +1 -1
- package/build/src/database/query/preloader.js +7 -20
- package/build/src/database/query/query-data.d.ts.map +1 -1
- package/build/src/database/query/query-data.js +6 -16
- package/build/src/database/query/where-model-class-hash.d.ts.map +1 -1
- package/build/src/database/query/where-model-class-hash.js +6 -16
- package/build/src/database/query/with-count.d.ts.map +1 -1
- package/build/src/database/query/with-count.js +6 -17
- package/build/src/database/record/acts-as-list.d.ts.map +1 -1
- package/build/src/database/record/acts-as-list.js +11 -47
- package/build/src/database/record/attachments/normalize-input.d.ts.map +1 -1
- package/build/src/database/record/attachments/normalize-input.js +8 -30
- package/build/src/database/record/attachments/storage-drivers/s3.d.ts.map +1 -1
- package/build/src/database/record/attachments/storage-drivers/s3.js +5 -13
- package/build/src/database/record/attachments/store.d.ts.map +1 -1
- package/build/src/database/record/attachments/store.js +3 -7
- package/build/src/database/record/index.d.ts +4 -9
- package/build/src/database/record/index.d.ts.map +1 -1
- package/build/src/database/record/index.js +53 -173
- package/build/src/database/record/instance-relationships/base.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/base.js +7 -21
- package/build/src/database/record/instance-relationships/belongs-to.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/belongs-to.js +3 -7
- package/build/src/database/record/instance-relationships/has-many.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-many.js +5 -13
- package/build/src/database/record/instance-relationships/has-one.d.ts.map +1 -1
- package/build/src/database/record/instance-relationships/has-one.js +5 -13
- package/build/src/database/record/relationships/base.d.ts.map +1 -1
- package/build/src/database/record/relationships/base.js +2 -6
- package/build/src/database/record/validators/presence.d.ts.map +1 -1
- package/build/src/database/record/validators/presence.js +2 -4
- package/build/src/database/record/validators/uniqueness.d.ts.map +1 -1
- package/build/src/database/record/validators/uniqueness.js +5 -14
- package/build/src/environment-handlers/browser.d.ts.map +1 -1
- package/build/src/environment-handlers/browser.js +2 -4
- package/build/src/environment-handlers/node/cli/commands/console.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/console.js +3 -7
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/db/schema/load.js +2 -4
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts +38 -0
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.d.ts.map +1 -1
- package/build/src/environment-handlers/node/cli/commands/generate/frontend-models.js +58 -12
- package/build/src/environment-handlers/node.d.ts.map +1 -1
- package/build/src/environment-handlers/node.js +16 -7
- package/build/src/frontend-model-controller.d.ts.map +1 -1
- package/build/src/frontend-model-controller.js +35 -114
- package/build/src/frontend-models/base.d.ts.map +1 -1
- package/build/src/frontend-models/base.js +46 -158
- package/build/src/frontend-models/clear-pending-debounced-callback.d.ts.map +1 -1
- package/build/src/frontend-models/clear-pending-debounced-callback.js +2 -4
- package/build/src/frontend-models/preloader.d.ts.map +1 -1
- package/build/src/frontend-models/preloader.js +4 -11
- package/build/src/frontend-models/query.d.ts.map +1 -1
- package/build/src/frontend-models/query.js +12 -34
- package/build/src/frontend-models/resource-definition.d.ts.map +1 -1
- package/build/src/frontend-models/resource-definition.js +3 -7
- package/build/src/frontend-models/transport-serialization.d.ts.map +1 -1
- package/build/src/frontend-models/transport-serialization.js +8 -23
- package/build/src/frontend-models/use-destroyed-event.js +3 -7
- package/build/src/frontend-models/use-model-class-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-model-class-event.js +3 -7
- package/build/src/frontend-models/use-updated-event.d.ts.map +1 -1
- package/build/src/frontend-models/use-updated-event.js +4 -10
- package/build/src/frontend-models/websocket-channel.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-channel.js +10 -32
- package/build/src/frontend-models/websocket-publishers.d.ts.map +1 -1
- package/build/src/frontend-models/websocket-publishers.js +14 -25
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +7 -21
- package/build/src/http-server/client/params-to-object.d.ts.map +1 -1
- package/build/src/http-server/client/params-to-object.js +7 -21
- package/build/src/http-server/client/request-buffer/index.d.ts.map +1 -1
- package/build/src/http-server/client/request-buffer/index.js +2 -4
- package/build/src/http-server/client/request-parser.d.ts.map +1 -1
- package/build/src/http-server/client/request-parser.js +2 -4
- package/build/src/http-server/client/request-runner.d.ts.map +1 -1
- package/build/src/http-server/client/request-runner.js +5 -14
- package/build/src/http-server/client/websocket-session.d.ts.map +1 -1
- package/build/src/http-server/client/websocket-session.js +7 -20
- package/build/src/http-server/development-reloader.d.ts.map +1 -1
- package/build/src/http-server/development-reloader.js +3 -7
- package/build/src/http-server/remote-address.d.ts.map +1 -1
- package/build/src/http-server/remote-address.js +2 -6
- package/build/src/http-server/server-client.d.ts.map +1 -1
- package/build/src/http-server/server-client.js +4 -10
- package/build/src/http-server/server-lock.d.ts.map +1 -1
- package/build/src/http-server/server-lock.js +3 -7
- package/build/src/http-server/websocket-channel-subscribers.d.ts.map +1 -1
- package/build/src/http-server/websocket-channel-subscribers.js +3 -7
- package/build/src/http-server/websocket-event-log-store.d.ts.map +1 -1
- package/build/src/http-server/websocket-event-log-store.js +6 -16
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +2 -5
- package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/in-process.js +4 -12
- package/build/src/http-server/worker-handler/worker-thread.d.ts.map +1 -1
- package/build/src/http-server/worker-handler/worker-thread.js +2 -4
- package/build/src/logger.d.ts.map +1 -1
- package/build/src/logger.js +3 -7
- package/build/src/mailer/backends/smtp.d.ts.map +1 -1
- package/build/src/mailer/backends/smtp.js +2 -6
- package/build/src/mailer/base.d.ts.map +1 -1
- package/build/src/mailer/base.js +5 -17
- package/build/src/plugins/sqljs-wasm-route-controller.d.ts.map +1 -1
- package/build/src/plugins/sqljs-wasm-route-controller.js +2 -4
- package/build/src/routes/basic-route.d.ts.map +1 -1
- package/build/src/routes/basic-route.js +2 -4
- package/build/src/routes/resolver.d.ts.map +1 -1
- package/build/src/routes/resolver.js +5 -15
- package/build/src/testing/expect-utils.d.ts.map +1 -1
- package/build/src/testing/expect-utils.js +9 -27
- package/build/src/testing/expect.d.ts.map +1 -1
- package/build/src/testing/expect.js +5 -15
- package/build/src/testing/test-runner.d.ts.map +1 -1
- package/build/src/testing/test-runner.js +4 -10
- package/build/src/testing/test.d.ts.map +1 -1
- package/build/src/testing/test.js +5 -17
- package/build/src/utils/model-scope.d.ts.map +1 -1
- package/build/src/utils/model-scope.js +2 -5
- package/build/src/utils/ransack.d.ts.map +1 -1
- package/build/src/utils/ransack.js +15 -42
- package/build/src/utils/with-tracked-stack-async-hooks.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack-async-hooks.js +4 -12
- package/build/src/utils/with-tracked-stack.d.ts.map +1 -1
- package/build/src/utils/with-tracked-stack.js +3 -8
- package/build/testing/expect-utils.js +8 -26
- package/build/testing/expect.js +4 -14
- package/build/testing/test-runner.js +3 -9
- package/build/testing/test.js +4 -12
- package/build/utils/model-scope.js +1 -3
- package/build/utils/ransack.js +15 -41
- package/build/utils/with-tracked-stack-async-hooks.js +3 -9
- package/build/utils/with-tracked-stack.js +2 -6
- package/package.json +3 -2
- package/src/application.js +1 -3
- package/src/background-jobs/cron-expression.js +1 -3
- package/src/background-jobs/forked-runner-child.js +1 -3
- package/src/background-jobs/job.js +1 -3
- package/src/background-jobs/scheduler.js +2 -6
- package/src/background-jobs/store.js +2 -6
- package/src/background-jobs/web/controller.js +1 -3
- package/src/background-jobs/worker.js +1 -3
- package/src/beacon/client.js +2 -6
- package/src/cli/tenant-database-command-helper.js +1 -3
- package/src/configuration.js +29 -32
- package/src/controller.js +4 -14
- package/src/database/drivers/mssql/index.js +1 -3
- package/src/database/drivers/mysql/index.js +2 -6
- package/src/database/drivers/pgsql/index.js +1 -3
- package/src/database/drivers/sqlite/base.js +3 -9
- package/src/database/drivers/sqlite/index.js +3 -9
- package/src/database/drivers/sqlite/table.js +1 -3
- package/src/database/migrator.js +1 -3
- package/src/database/pool/async-tracked-multi-connection.js +20 -45
- package/src/database/pool/base-methods-forward.js +2 -10
- package/src/database/pool/base.js +5 -15
- package/src/database/query/index.js +4 -12
- package/src/database/query/join-object.js +3 -9
- package/src/database/query/model-class-query.js +21 -63
- package/src/database/query/preloader/belongs-to.js +9 -27
- package/src/database/query/preloader/has-many.js +7 -21
- package/src/database/query/preloader/has-one.js +3 -9
- package/src/database/query/preloader.js +6 -18
- package/src/database/query/query-data.js +5 -15
- package/src/database/query/where-model-class-hash.js +5 -15
- package/src/database/query/with-count.js +5 -15
- package/src/database/record/acts-as-list.js +10 -38
- package/src/database/record/attachments/normalize-input.js +7 -25
- package/src/database/record/attachments/storage-drivers/s3.js +4 -12
- package/src/database/record/attachments/store.js +2 -6
- package/src/database/record/index.js +55 -171
- package/src/database/record/instance-relationships/base.js +6 -20
- package/src/database/record/instance-relationships/belongs-to.js +2 -6
- package/src/database/record/instance-relationships/has-many.js +4 -12
- package/src/database/record/instance-relationships/has-one.js +4 -12
- package/src/database/record/relationships/base.js +1 -5
- package/src/database/record/validators/presence.js +1 -3
- package/src/database/record/validators/uniqueness.js +4 -12
- package/src/environment-handlers/browser.js +1 -3
- package/src/environment-handlers/node/cli/commands/console.js +2 -6
- package/src/environment-handlers/node/cli/commands/db/schema/load.js +1 -3
- package/src/environment-handlers/node/cli/commands/generate/frontend-models.js +67 -11
- package/src/environment-handlers/node.js +15 -6
- package/src/frontend-model-controller.js +34 -110
- package/src/frontend-models/base.js +45 -151
- package/src/frontend-models/clear-pending-debounced-callback.js +1 -3
- package/src/frontend-models/preloader.js +3 -9
- package/src/frontend-models/query.js +11 -33
- package/src/frontend-models/resource-definition.js +2 -6
- package/src/frontend-models/transport-serialization.js +7 -21
- package/src/frontend-models/use-destroyed-event.js +2 -6
- package/src/frontend-models/use-model-class-event.js +2 -6
- package/src/frontend-models/use-updated-event.js +3 -9
- package/src/frontend-models/websocket-channel.js +9 -27
- package/src/frontend-models/websocket-publishers.js +12 -23
- package/src/http-server/client/index.js +6 -18
- package/src/http-server/client/params-to-object.js +6 -18
- package/src/http-server/client/request-buffer/index.js +1 -3
- package/src/http-server/client/request-parser.js +1 -3
- package/src/http-server/client/request-runner.js +4 -12
- package/src/http-server/client/websocket-session.js +6 -18
- package/src/http-server/development-reloader.js +2 -6
- package/src/http-server/remote-address.js +1 -5
- package/src/http-server/server-client.js +3 -9
- package/src/http-server/server-lock.js +2 -6
- package/src/http-server/websocket-channel-subscribers.js +2 -6
- package/src/http-server/websocket-event-log-store.js +5 -15
- package/src/http-server/websocket-events-host.js +1 -3
- package/src/http-server/worker-handler/in-process.js +3 -11
- package/src/http-server/worker-handler/worker-thread.js +1 -3
- package/src/logger.js +2 -6
- package/src/mailer/backends/smtp.js +1 -5
- package/src/mailer/base.js +4 -16
- package/src/plugins/sqljs-wasm-route-controller.js +1 -3
- package/src/routes/basic-route.js +1 -3
- package/src/routes/resolver.js +4 -14
- package/src/testing/expect-utils.js +8 -26
- package/src/testing/expect.js +4 -14
- package/src/testing/test-runner.js +3 -9
- package/src/testing/test.js +4 -12
- package/src/utils/model-scope.js +1 -3
- package/src/utils/ransack.js +15 -41
- package/src/utils/with-tracked-stack-async-hooks.js +3 -9
- package/src/utils/with-tracked-stack.js +2 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-methods-forward.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/base-methods-forward.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qDAHW,cAAc,WAAW,EAAE,OAAO,GAChC,IAAI,
|
|
1
|
+
{"version":3,"file":"base-methods-forward.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/base-methods-forward.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qDAHW,cAAc,WAAW,EAAE,OAAO,GAChC,IAAI,CAsChB"}
|
|
@@ -26,19 +26,11 @@ export default function baseMethodsForward(PoolBase) {
|
|
|
26
26
|
"update",
|
|
27
27
|
"updateSql"
|
|
28
28
|
];
|
|
29
|
-
const prototype = /**
|
|
30
|
-
* Narrows the runtime value to the documented type.
|
|
31
|
-
* @type {Record<string, (...args: Array<?>) => ?>} */ ( /**
|
|
32
|
-
* Narrows the runtime value to the documented type.
|
|
33
|
-
* @type {?} */(PoolBase.prototype));
|
|
29
|
+
const prototype = /** @type {Record<string, (...args: Array<?>) => ?>} */ ( /** @type {?} */(PoolBase.prototype));
|
|
34
30
|
for (const forwardMethod of forwardMethods) {
|
|
35
31
|
prototype[forwardMethod] = function (...args) {
|
|
36
32
|
const connection = this.getCurrentConnection();
|
|
37
|
-
const connectionRecord = /**
|
|
38
|
-
* Narrows the runtime value to the documented type.
|
|
39
|
-
* @type {Record<string, (...args: Array<?>) => ?>} */ ( /**
|
|
40
|
-
* Narrows the runtime value to the documented type.
|
|
41
|
-
* @type {?} */(connection));
|
|
33
|
+
const connectionRecord = /** @type {Record<string, (...args: Array<?>) => ?>} */ ( /** @type {?} */(connection));
|
|
42
34
|
const connectionMethod = connectionRecord[forwardMethod];
|
|
43
35
|
if (!connectionMethod)
|
|
44
36
|
throw new Error(`${forwardMethod} isn't defined on driver`);
|
|
@@ -46,4 +38,4 @@ export default function baseMethodsForward(PoolBase) {
|
|
|
46
38
|
};
|
|
47
39
|
}
|
|
48
40
|
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tZXRob2RzLWZvcndhcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcG9vbC9iYXNlLW1ldGhvZHMtZm9yd2FyZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVo7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsa0JBQWtCLENBQUMsUUFBUTtJQUNqRCxNQUFNLGNBQWMsR0FBRztRQUNyQixZQUFZO1FBQ1osZ0JBQWdCO1FBQ2hCLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsYUFBYTtRQUNiLGdCQUFnQjtRQUNoQixRQUFRO1FBQ1IsV0FBVztRQUNYLFdBQVc7UUFDWCxRQUFRO1FBQ1IsV0FBVztRQUNYLGdCQUFnQjtRQUNoQixPQUFPO1FBQ1AsT0FBTztRQUNQLGFBQWE7UUFDYixZQUFZO1FBQ1osUUFBUTtRQUNSLFFBQVE7UUFDUixXQUFXO0tBQ1osQ0FBQTtJQUVELE1BQU0sU0FBUyxHQUFHLHVEQUF1RCxDQUFDLEVBQUMsZ0JBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFFakgsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMzQyxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBUyxHQUFHLElBQUk7WUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7WUFDOUMsTUFBTSxnQkFBZ0IsR0FBRyx1REFBdUQsQ0FBQyxFQUFDLGdCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7WUFDaEgsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUV4RCxJQUFJLENBQUMsZ0JBQWdCO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxhQUFhLDBCQUEwQixDQUFDLENBQUE7WUFFbEYsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2pELENBQUMsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogUnVucyBiYXNlIG1ldGhvZHMgZm9yd2FyZC5cbiAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4vYmFzZS5qc1wiKS5kZWZhdWx0fSBQb29sQmFzZSAtIFBvb2wgYmFzZS5cbiAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFzZU1ldGhvZHNGb3J3YXJkKFBvb2xCYXNlKSB7XG4gIGNvbnN0IGZvcndhcmRNZXRob2RzID0gW1xuICAgIFwiYWx0ZXJUYWJsZVwiLFxuICAgIFwiYWx0ZXJUYWJsZVNRTHNcIixcbiAgICBcImNyZWF0ZUluZGV4XCIsXG4gICAgXCJjcmVhdGVJbmRleFNRTHNcIixcbiAgICBcImNyZWF0ZVRhYmxlXCIsXG4gICAgXCJjcmVhdGVUYWJsZVNxbFwiLFxuICAgIFwiZGVsZXRlXCIsXG4gICAgXCJkZWxldGVTcWxcIixcbiAgICBcImdldFRhYmxlc1wiLFxuICAgIFwiaW5zZXJ0XCIsXG4gICAgXCJpbnNlcnRTcWxcIixcbiAgICBcInByaW1hcnlLZXlUeXBlXCIsXG4gICAgXCJxdWVyeVwiLFxuICAgIFwicXVvdGVcIixcbiAgICBcInF1b3RlQ29sdW1uXCIsXG4gICAgXCJxdW90ZVRhYmxlXCIsXG4gICAgXCJzZWxlY3RcIixcbiAgICBcInVwZGF0ZVwiLFxuICAgIFwidXBkYXRlU3FsXCJcbiAgXVxuXG4gIGNvbnN0IHByb3RvdHlwZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IEFycmF5PD8+KSA9PiA/Pn0gKi8gKC8qKiBAdHlwZSB7P30gKi8gKFBvb2xCYXNlLnByb3RvdHlwZSkpXG5cbiAgZm9yIChjb25zdCBmb3J3YXJkTWV0aG9kIG9mIGZvcndhcmRNZXRob2RzKSB7XG4gICAgcHJvdG90eXBlW2ZvcndhcmRNZXRob2RdID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMuZ2V0Q3VycmVudENvbm5lY3Rpb24oKVxuICAgICAgY29uc3QgY29ubmVjdGlvblJlY29yZCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgKC4uLmFyZ3M6IEFycmF5PD8+KSA9PiA/Pn0gKi8gKC8qKiBAdHlwZSB7P30gKi8gKGNvbm5lY3Rpb24pKVxuICAgICAgY29uc3QgY29ubmVjdGlvbk1ldGhvZCA9IGNvbm5lY3Rpb25SZWNvcmRbZm9yd2FyZE1ldGhvZF1cblxuICAgICAgaWYgKCFjb25uZWN0aW9uTWV0aG9kKSB0aHJvdyBuZXcgRXJyb3IoYCR7Zm9yd2FyZE1ldGhvZH0gaXNuJ3QgZGVmaW5lZCBvbiBkcml2ZXJgKVxuXG4gICAgICByZXR1cm4gY29ubmVjdGlvbk1ldGhvZC5hcHBseShjb25uZWN0aW9uLCBhcmdzKVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/base.js"],"names":[],"mappings":"AAMA,mDAA6E;;;;;;;;;;;;;;;;;;kBAW/D,MAAM,GAAG,SAAS;;;;gBAClB,MAAM;;;;WACN,MAAM;;;;wBACN,MAAM,GAAG,IAAI;;;;cACb,MAAM;;;;eACN,MAAM,GAAG,IAAI;;;;mBACb,MAAM,GAAG,IAAI;;;;kBACb,MAAM;;;;;;;;;mBAMN,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC;;;;iBACjB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC,CAAC;;;;6BACxB,MAAM;;;;eACN,MAAM;;;;gBACN,MAAM;;;;gBACN,MAAM;;;;;;;;0BAEN,MAAM;;;;eACN,MAAM;;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/database/pool/base.js"],"names":[],"mappings":"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"}
|
|
@@ -50,13 +50,9 @@ function stableStringify(value) {
|
|
|
50
50
|
}
|
|
51
51
|
if (value && typeof value === "object") {
|
|
52
52
|
const entries = Object
|
|
53
|
-
.keys(/**
|
|
54
|
-
* Narrows the runtime value to the documented type.
|
|
55
|
-
* @type {Record<string, ?>} */ (value))
|
|
53
|
+
.keys(/** @type {Record<string, ?>} */ (value))
|
|
56
54
|
.sort()
|
|
57
|
-
.map((key) => `${JSON.stringify(key)}:${stableStringify(/**
|
|
58
|
-
* Narrows the runtime value to the documented type.
|
|
59
|
-
* @type {Record<string, ?>} */ (value)[key])}`);
|
|
55
|
+
.map((key) => `${JSON.stringify(key)}:${stableStringify(/** @type {Record<string, ?>} */ (value)[key])}`);
|
|
60
56
|
return `{${entries.join(",")}}`;
|
|
61
57
|
}
|
|
62
58
|
return JSON.stringify(value);
|
|
@@ -172,9 +168,7 @@ class VelociousDatabasePoolBase {
|
|
|
172
168
|
* @returns {boolean} - Whether connection matches current resolved configuration.
|
|
173
169
|
*/
|
|
174
170
|
connectionMatchesCurrentConfiguration(connection) {
|
|
175
|
-
const connectionWithPoolKey = /**
|
|
176
|
-
* Narrows the runtime value to the documented type.
|
|
177
|
-
* @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection);
|
|
171
|
+
const connectionWithPoolKey = /** @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection);
|
|
178
172
|
return connectionWithPoolKey[POOL_CONFIGURATION_KEY] === this.getConfigurationReuseKey();
|
|
179
173
|
}
|
|
180
174
|
/**
|
|
@@ -223,9 +217,7 @@ class VelociousDatabasePoolBase {
|
|
|
223
217
|
const databaseConfig = this.getConfiguration();
|
|
224
218
|
this.logger.debug("spawnConnection", { identifier: this.identifier, databaseConfig });
|
|
225
219
|
const connection = await this.spawnConnectionWithConfiguration(databaseConfig);
|
|
226
|
-
const connectionWithPoolKey = /**
|
|
227
|
-
* Narrows the runtime value to the documented type.
|
|
228
|
-
* @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection);
|
|
220
|
+
const connectionWithPoolKey = /** @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection);
|
|
229
221
|
connectionWithPoolKey[POOL_CONFIGURATION_KEY] = this.getConfigurationReuseKey();
|
|
230
222
|
connection.setSchemaCacheInvalidator(() => {
|
|
231
223
|
this.clearSchemaCache();
|
|
@@ -328,9 +320,7 @@ class VelociousDatabasePoolBase {
|
|
|
328
320
|
* @returns {Record<string, ?>} - Connection diagnostic snapshot.
|
|
329
321
|
*/
|
|
330
322
|
debugConnectionSnapshot(connection, details = {}) {
|
|
331
|
-
const connectionWithPoolKey = /**
|
|
332
|
-
* Narrows the runtime value to the documented type.
|
|
333
|
-
* @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection);
|
|
323
|
+
const connectionWithPoolKey = /** @type {import("../drivers/base.js").default & {[POOL_CONFIGURATION_KEY]?: string}} */ (connection);
|
|
334
324
|
return {
|
|
335
325
|
...connection.getDebugSnapshot(),
|
|
336
326
|
...details,
|
|
@@ -345,4 +335,4 @@ class VelociousDatabasePoolBase {
|
|
|
345
335
|
}
|
|
346
336
|
baseMethodsForward(VelociousDatabasePoolBase);
|
|
347
337
|
export default VelociousDatabasePoolBase;
|
|
348
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9wb29sL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sa0JBQWtCLE1BQU0sMkJBQTJCLENBQUE7QUFFMUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUE7QUFFN0U7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBRUg7OzZEQUU2RDtBQUM3RCxNQUFNLE1BQU0sR0FBRztJQUNiLFdBQVcsRUFBRSxJQUFJO0NBQ2xCLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBSztJQUM1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7SUFDdEUsQ0FBQztJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU07YUFDbkIsSUFBSSxDQUFDOzs2Q0FFK0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdDLElBQUksRUFBRTthQUNOLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQzs7K0ZBRStCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUUxRyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVELE1BQU0seUJBQXlCO0lBQzdCOzt3REFFb0Q7SUFDcEQsZ0NBQWdDLEdBQUcsU0FBUyxDQUFBO0lBRTVDOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBRTNFLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQTtJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLElBQUksS0FBSyxhQUFhLENBQUEsQ0FBQyxDQUFDO0lBRW5FOzs7OztPQUtHO0lBQ0gsWUFBWSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRTdELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQTtRQUUzRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLFdBQVc7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBQyxRQUFRO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsb0JBQW9CO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDJCQUEyQjtRQUN6QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILCtCQUErQixDQUFDLFFBQVE7UUFDdEMsSUFBSSxJQUFJLENBQUMsZ0NBQWdDO1lBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBRXBILE9BQU8sUUFBUSxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRXJELE9BQU8sZUFBZSxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO1lBQ3hDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO1lBQ2hDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO1lBQ2hDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO1lBQ2hDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxNQUFNO1lBQ3BDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxXQUFXO1lBQzlDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxTQUFTO1lBQzFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxJQUFJO1lBQ2hDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxXQUFXO1lBQzlDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO1NBQ3pDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gscUNBQXFDLENBQUMsVUFBVTtRQUM5QyxNQUFNLHFCQUFxQixHQUFHOzs4SEFFd0YsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRW5JLE9BQU8scUJBQXFCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtJQUMxRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQjtRQUNkLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMkJBQTJCLENBQUMsVUFBVTtRQUNwQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsQ0FBQTtJQUNyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFVBQVU7UUFDUixNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQTtJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLFdBQVc7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBRTlDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFDLENBQUMsQ0FBQTtRQUVuRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUU5RSxNQUFNLHFCQUFxQixHQUFHOzs4SEFFd0YsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ25JLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUE7UUFDL0UsVUFBVSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRTtZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUE7UUFDbEYsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNO1FBQzNDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQTtRQUVyRCxJQUFJLENBQUMsV0FBVztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQTtRQUU1RixNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBRTlELElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsaUNBQWlDLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDeEQsTUFBTSxLQUFLLENBQUE7UUFDYixDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUE7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsaUNBQWlDLENBQUMsVUFBVTtRQUNoRCxJQUFJLENBQUM7WUFDSCxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUMxQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxFQUFFLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQTtRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxjQUFjLENBQUMsa0JBQWtCLEVBQUUsU0FBUztRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFDckQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsc0JBQXNCO1FBQzFCLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGdCQUFnQjtRQUNkLE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ2hELFdBQVcsRUFBRSxFQUFFO1lBQ2YsdUJBQXVCLEVBQUUsQ0FBQztZQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsU0FBUyxFQUFFLENBQUM7WUFDWixVQUFVLEVBQUUsQ0FBQztZQUNiLG9CQUFvQixFQUFFLENBQUM7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtTQUNqQyxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILDBCQUEwQjtRQUN4QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtRQUM5QyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFBO1FBRXRDLE9BQU87WUFDTCxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSTtZQUNuQyxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7WUFDekIsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO1lBQ3JDLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtZQUN6QixJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3JHLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtZQUN6QixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDN0IsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1lBQ3pCLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVztZQUN2QyxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7U0FDbEMsQ0FBQTtJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFDLFVBQVUsRUFBRSxPQUFPLEdBQUcsRUFBRTtRQUM5QyxNQUFNLHFCQUFxQixHQUFHOzs4SEFFd0YsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRW5JLE9BQU87WUFDTCxHQUFHLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNoQyxHQUFHLE9BQU87WUFDVixRQUFRLEVBQUUscUJBQXFCLENBQUMsc0JBQXNCLENBQUM7U0FDeEQsQ0FBQTtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsUUFBUSxLQUFJLENBQUM7Q0FDcEI7QUFFRCxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0FBRTdDLGVBQWUseUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IENvbmZpZ3VyYXRpb24gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb24uanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBiYXNlTWV0aG9kc0ZvcndhcmQgZnJvbSBcIi4vYmFzZS1tZXRob2RzLWZvcndhcmQuanNcIlxuXG5leHBvcnQgY29uc3QgUE9PTF9DT05GSUdVUkFUSU9OX0tFWSA9IFN5bWJvbChcInZlbG9jaW91c1Bvb2xDb25maWd1cmF0aW9uS2V5XCIpXG5cbi8qKlxuICogQ29ubmVjdGlvbkNoZWNrb3V0T3B0aW9ucyB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gQ29ubmVjdGlvbkNoZWNrb3V0T3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIEh1bWFuLXJlYWRhYmxlIG5hbWUgZm9yIHRoZSBjaGVja2VkLW91dCBjb25uZWN0aW9uLlxuICovXG5cbi8qKlxuICogRGF0YWJhc2VQb29sUGVuZGluZ0NoZWNrb3V0RGVidWdTbmFwc2hvdCB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gRGF0YWJhc2VQb29sUGVuZGluZ0NoZWNrb3V0RGVidWdTbmFwc2hvdFxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IGNoZWNrb3V0TmFtZSAtIEh1bWFuLXJlYWRhYmxlIGNoZWNrb3V0IG5hbWUuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZW5xdWV1ZWRBdCAtIFRpbWVzdGFtcCB3aGVuIHRoZSBjaGVja291dCBzdGFydGVkIHdhaXRpbmcuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5kZXggLSBQZW5kaW5nIGNoZWNrb3V0IHF1ZXVlIGluZGV4LlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSByZW1haW5pbmdUaW1lb3V0TXMgLSBNaWxsaXNlY29uZHMgYmVmb3JlIHRoZSBjaGVja291dCB0aW1lcyBvdXQsIG9yIG51bGwgd2hlbiBkaXNhYmxlZC5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZXVzZUtleSAtIERhdGFiYXNlIGNvbmZpZ3VyYXRpb24gcmV1c2Uga2V5IG5lZWRlZCBieSB0aGUgY2hlY2tvdXQuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IHRpbWVvdXRBdCAtIFRpbWVzdGFtcCB3aGVuIHRoZSBjaGVja291dCB3aWxsIHRpbWUgb3V0LCBvciBudWxsIHdoZW4gZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkge251bWJlciB8IG51bGx9IHRpbWVvdXRNaWxsaXMgLSBUaW1lb3V0IGNvbmZpZ3VyZWQgZm9yIHRoZSBjaGVja291dCwgb3IgbnVsbCB3aGVuIGRpc2FibGVkLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdhaXRpbmdGb3JNcyAtIE1pbGxpc2Vjb25kcyBhbHJlYWR5IHNwZW50IHdhaXRpbmcuXG4gKi9cblxuLyoqXG4gKiBEYXRhYmFzZVBvb2xEZWJ1Z1NuYXBzaG90IHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBEYXRhYmFzZVBvb2xEZWJ1Z1NuYXBzaG90XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsID8+fSBjb25maWd1cmF0aW9uIC0gU2FuaXRpemVkIHJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcHJvcGVydHkge0FycmF5PFJlY29yZDxzdHJpbmcsID8+Pn0gY29ubmVjdGlvbnMgLSBMaXZlIGNvbm5lY3Rpb24gc25hcHNob3RzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbm5lY3Rpb25zQmVpbmdTcGF3bmVkIC0gTnVtYmVyIG9mIGluLXByb2dyZXNzIGNvbm5lY3Rpb24gc3Bhd25zLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGlkbGVDb3VudCAtIE51bWJlciBvZiBpZGxlIGNvbm5lY3Rpb25zLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkZW50aWZpZXIgLSBEYXRhYmFzZSBpZGVudGlmaWVyLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluVXNlQ291bnQgLSBOdW1iZXIgb2YgY2hlY2tlZC1vdXQgY29ubmVjdGlvbnMuXG4gKiBAcHJvcGVydHkge0FycmF5PERhdGFiYXNlUG9vbFBlbmRpbmdDaGVja291dERlYnVnU25hcHNob3Q+fSBbcGVuZGluZ0NoZWNrb3V0c10gLSBXYWl0aW5nIGNoZWNrb3V0IHNuYXBzaG90cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBwZW5kaW5nQ2hlY2tvdXRDb3VudCAtIE51bWJlciBvZiBxdWV1ZWQgY2hlY2tvdXQgcmVxdWVzdHMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcG9vbENsYXNzIC0gUG9vbCBjbGFzcyBuYW1lLlxuICovXG5cbi8qKlxuICogU2hhcmVkLlxuICogQHR5cGUge3tjdXJyZW50UG9vbDogVmVsb2Npb3VzRGF0YWJhc2VQb29sQmFzZSB8IG51bGx9fSAqL1xuY29uc3Qgc2hhcmVkID0ge1xuICBjdXJyZW50UG9vbDogbnVsbFxufVxuXG4vKipcbiAqIFJ1bnMgc3RhYmxlIHN0cmluZ2lmeS5cbiAqIEBwYXJhbSB7P30gdmFsdWUgLSBWYWx1ZSB0byBzdHJpbmdpZnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFN0YWJsZSBKU09OIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gc3RhYmxlU3RyaW5naWZ5KHZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBgWyR7dmFsdWUubWFwKChlbnRyeSkgPT4gc3RhYmxlU3RyaW5naWZ5KGVudHJ5KSkuam9pbihcIixcIil9XWBcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0XG4gICAgICAua2V5cygvKipcbiAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKHZhbHVlKSlcbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoKGtleSkgPT4gYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06JHtzdGFibGVTdHJpbmdpZnkoLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsID8+fSAqLyAodmFsdWUpW2tleV0pfWApXG5cbiAgICByZXR1cm4gYHske2VudHJpZXMuam9pbihcIixcIil9fWBcbiAgfVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbn1cblxuY2xhc3MgVmVsb2Npb3VzRGF0YWJhc2VQb29sQmFzZSB7XG4gIC8qKlxuICAgKiBXaXRob3V0IGN1cnJlbnQgY29ubmVjdGlvbiBjb250ZXh0LlxuICAgKiBAdHlwZSB7dW5kZWZpbmVkIHwgKChjYWxsYmFjazogKCkgPT4gPykgPT4gPyl9ICovXG4gIF93aXRob3V0Q3VycmVudENvbm5lY3Rpb25Db250ZXh0ID0gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFJ1bnMgY3VycmVudC5cbiAgICogQHJldHVybnMge1ZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2V9IC0gVGhlIGN1cnJlbnQuXG4gICAqL1xuICBzdGF0aWMgY3VycmVudCgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50UG9vbCkgdGhyb3cgbmV3IEVycm9yKFwiQSBkYXRhYmFzZSBwb29sIGhhc24ndCBiZWVuIHNldFwiKVxuXG4gICAgcmV0dXJuIHNoYXJlZC5jdXJyZW50UG9vbFxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbnkgZ2xvYmFsIGNvbm5lY3Rpb25zIGZvciB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgcG9vbC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc3RhdGljIGNsZWFyR2xvYmFsQ29ubmVjdGlvbnMoY29uZmlndXJhdGlvbikgeyB2b2lkIGNvbmZpZ3VyYXRpb24gfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0NvbmZpZ3VyYXRpb259IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmlkZW50aWZpZXIgLSBJZGVudGlmaWVyLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIGlkZW50aWZpZXJ9KSB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCBDb25maWd1cmF0aW9uLmN1cnJlbnQoKVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcbiAgICBpZiAoIWlkZW50aWZpZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGlkZW50aWZpZXIgd2FzIGdpdmVuXCIpXG5cbiAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjaGVja2luLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gX2Nvbm5lY3Rpb24gLSBDb25uZWN0aW9uLlxuICAgKi9cbiAgY2hlY2tpbihfY29ubmVjdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidjaGVja2luJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNoZWNrb3V0LlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtDb25uZWN0aW9uQ2hlY2tvdXRPcHRpb25zfSBbX29wdGlvbnNdIC0gQ2hlY2tvdXQgb3B0aW9ucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGNoZWNrb3V0LlxuICAgKi9cbiAgY2hlY2tvdXQoX29wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY2hlY2tvdXQnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gLSBUaGUgY3VycmVudCBjb25uZWN0aW9uLlxuICAgKi9cbiAgZ2V0Q3VycmVudENvbm5lY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2dldEN1cnJlbnRDb25uZWN0aW9uJyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb25uZWN0aW9uIHBpbm5lZCB0byB0aGUgY3VycmVudCBjb250ZXh0LCBpZiBhbnkuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmZXJzIHRvIGBnZXRDdXJyZW50Q29ubmVjdGlvbmAuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZH0gLSBUaGUgY3VycmVudCBjb250ZXh0IGNvbm5lY3Rpb24uXG4gICAqL1xuICBnZXRDdXJyZW50Q29udGV4dENvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudENvbm5lY3Rpb24oKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2l0aG91dCBjdXJyZW50IGNvbm5lY3Rpb24gY29udGV4dC5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHsoKSA9PiBUfSBjYWxsYmFjayAtIENhbGxiYWNrIHRvIHJ1biB3aXRob3V0ID8gY3VycmVudCBjb25uZWN0aW9uIGNvbnRleHQuXG4gICAqIEByZXR1cm5zIHtUfSAtIENhbGxiYWNrIHJlc3VsdC5cbiAgICovXG4gIHdpdGhvdXRDdXJyZW50Q29ubmVjdGlvbkNvbnRleHQoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5fd2l0aG91dEN1cnJlbnRDb25uZWN0aW9uQ29udGV4dCkgcmV0dXJuIC8qKiBAdHlwZSB7VH0gKi8gKHRoaXMuX3dpdGhvdXRDdXJyZW50Q29ubmVjdGlvbkNvbnRleHQoY2FsbGJhY2spKVxuXG4gICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSAtIFJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwb29sIGlkZW50aWZpZXIuXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ucmVzb2x2ZURhdGFiYXNlQ29uZmlndXJhdGlvbih0aGlzLmlkZW50aWZpZXIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgY29uZmlndXJhdGlvbiByZXVzZSBrZXkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gUmV1c2Uga2V5IGZvciB0aGUgY3VycmVudGx5IHJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBnZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VDb25maWd1cmF0aW9uID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKClcblxuICAgIHJldHVybiBzdGFibGVTdHJpbmdpZnkoe1xuICAgICAgZGF0YWJhc2U6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5kYXRhYmFzZSxcbiAgICAgIGhvc3Q6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5ob3N0LFxuICAgICAgbmFtZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLm5hbWUsXG4gICAgICBwb3J0OiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24ucG9ydCxcbiAgICAgIHNjaGVtYTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnNjaGVtYSxcbiAgICAgIHNjaGVtYUNhY2hlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uc2NoZW1hQ2FjaGUsXG4gICAgICBzcWxDb25maWc6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5zcWxDb25maWcsXG4gICAgICB0eXBlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24udHlwZSxcbiAgICAgIHVzZURhdGFiYXNlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24udXNlRGF0YWJhc2UsXG4gICAgICB1c2VybmFtZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnVzZXJuYW1lXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbm5lY3Rpb24gbWF0Y2hlcyBjdXJyZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBDb25uZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gLSBXaGV0aGVyIGNvbm5lY3Rpb24gbWF0Y2hlcyBjdXJyZW50IHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBjb25uZWN0aW9uTWF0Y2hlc0N1cnJlbnRDb25maWd1cmF0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICBjb25zdCBjb25uZWN0aW9uV2l0aFBvb2xLZXkgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0ICYge1tQT09MX0NPTkZJR1VSQVRJT05fS0VZXT86IHN0cmluZ319ICovIChjb25uZWN0aW9uKVxuXG4gICAgcmV0dXJuIGNvbm5lY3Rpb25XaXRoUG9vbEtleVtQT09MX0NPTkZJR1VSQVRJT05fS0VZXSA9PT0gdGhpcy5nZXRDb25maWd1cmF0aW9uUmV1c2VLZXkoKVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBzY2hlbWEgbWV0YWRhdGEgY2FjaGVkIGJ5IHRoaXMgcG9vbCdzIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICogUG9vbHMgdGhhdCBrZWVwIG11bHRpcGxlIGNvbm5lY3Rpb25zIGFsaXZlIHNob3VsZCBvdmVycmlkZSB0aGlzIHRvIGNsZWFyIGV2ZXJ5IGxpdmUgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgY2xlYXJTY2hlbWFDYWNoZSgpIHtcbiAgICB0aGlzLl9jbGVhckNvbm5lY3Rpb25TY2hlbWFDYWNoZSh0aGlzLmdldEN1cnJlbnRDb25uZWN0aW9uKCkpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjbGVhciBjb25uZWN0aW9uIHNjaGVtYSBjYWNoZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gY29ubmVjdGlvbiAtIENvbm5lY3Rpb24gd2hvc2UgbG9jYWwgc2NoZW1hIGNhY2hlIHNob3VsZCBiZSBjbGVhcmVkLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBfY2xlYXJDb25uZWN0aW9uU2NoZW1hQ2FjaGUoY29ubmVjdGlvbikge1xuICAgIGNvbm5lY3Rpb24uX2NsZWFyTG9jYWxTY2hlbWFDYWNoZSgpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBwcmltYXJ5IGtleSB0eXBlLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgcHJpbWFyeSBrZXkgdHlwZS5cbiAgICovXG4gIHByaW1hcnlLZXlUeXBlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidwcmltYXJ5S2V5VHlwZScgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzZXQgY3VycmVudC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgc2V0Q3VycmVudCgpIHtcbiAgICBzaGFyZWQuY3VycmVudFBvb2wgPSB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzZXQgZHJpdmVyIGNsYXNzLlxuICAgKiBAcGFyYW0ge3R5cGVvZiBpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gZHJpdmVyQ2xhc3MgLSBEcml2ZXIgY2xhc3MuXG4gICAqL1xuICBzZXREcml2ZXJDbGFzcyhkcml2ZXJDbGFzcykge1xuICAgIHRoaXMuZHJpdmVyQ2xhc3MgPSBkcml2ZXJDbGFzc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3Bhd24gY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIHNwYXduIGNvbm5lY3Rpb24uXG4gICAqL1xuICBhc3luYyBzcGF3bkNvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgZGF0YWJhc2VDb25maWcgPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKVxuXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJzcGF3bkNvbm5lY3Rpb25cIiwge2lkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllciwgZGF0YWJhc2VDb25maWd9KVxuXG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IHRoaXMuc3Bhd25Db25uZWN0aW9uV2l0aENvbmZpZ3VyYXRpb24oZGF0YWJhc2VDb25maWcpXG5cbiAgICBjb25zdCBjb25uZWN0aW9uV2l0aFBvb2xLZXkgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0ICYge1tQT09MX0NPTkZJR1VSQVRJT05fS0VZXT86IHN0cmluZ319ICovIChjb25uZWN0aW9uKVxuICAgIGNvbm5lY3Rpb25XaXRoUG9vbEtleVtQT09MX0NPTkZJR1VSQVRJT05fS0VZXSA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvblJldXNlS2V5KClcbiAgICBjb25uZWN0aW9uLnNldFNjaGVtYUNhY2hlSW52YWxpZGF0b3IoKCkgPT4ge1xuICAgICAgdGhpcy5jbGVhclNjaGVtYUNhY2hlKClcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5jbGVhclNjaGVtYUNhY2hlc0ZvclJldXNlS2V5KHRoaXMuZ2V0Q29uZmlndXJhdGlvblJldXNlS2V5KCkpXG4gICAgfSlcblxuICAgIHJldHVybiBjb25uZWN0aW9uXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzcGF3biBjb25uZWN0aW9uIHdpdGggY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi8uLi9jb25maWd1cmF0aW9uLXR5cGVzLmpzXCIpLkRhdGFiYXNlQ29uZmlndXJhdGlvblR5cGV9IGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgc3Bhd24gY29ubmVjdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBhc3luYyBzcGF3bkNvbm5lY3Rpb25XaXRoQ29uZmlndXJhdGlvbihjb25maWcpIHtcbiAgICBjb25zdCBEcml2ZXJDbGFzcyA9IGNvbmZpZy5kcml2ZXIgfHwgdGhpcy5kcml2ZXJDbGFzc1xuXG4gICAgaWYgKCFEcml2ZXJDbGFzcykgdGhyb3cgbmV3IEVycm9yKFwiTm8gZHJpdmVyIGNsYXNzIHNldCBpbiBkYXRhYmFzZSBwb29sIG9yIGluIGdpdmVuIGNvbmZpZ1wiKVxuXG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5ldyBEcml2ZXJDbGFzcyhjb25maWcsIHRoaXMuY29uZmlndXJhdGlvbilcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb25uZWN0aW9uLmNvbm5lY3QoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsb3NlQ29ubmVjdGlvbkFmdGVyRmFpbGVkQ29ubmVjdChjb25uZWN0aW9uKVxuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG5cbiAgICByZXR1cm4gY29ubmVjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2xvc2UgY29ubmVjdGlvbiBhZnRlciBmYWlsZWQgY29ubmVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gY29ubmVjdGlvbiAtIENvbm5lY3Rpb24gdG8gY2xvc2UuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY2xlYW51cCBoYXMgYmVlbiBhdHRlbXB0ZWQuXG4gICAqL1xuICBhc3luYyBjbG9zZUNvbm5lY3Rpb25BZnRlckZhaWxlZENvbm5lY3QoY29ubmVjdGlvbikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcIkZhaWxlZCB0byBjbG9zZSBkYXRhYmFzZSBjb25uZWN0aW9uIGFmdGVyIGNvbm5lY3QgZmFpbGVkXCIsIHtlcnJvcn0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2l0aCBjb25uZWN0aW9uLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtDb25uZWN0aW9uQ2hlY2tvdXRPcHRpb25zIHwgZnVuY3Rpb24oaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpIDogUHJvbWlzZTxUPn0gX29wdGlvbnNPckNhbGxiYWNrIC0gQ2hlY2tvdXQgb3B0aW9ucyBvciBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCkgOiBQcm9taXNlPFQ+fSBbX2NhbGxiYWNrXSAtIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICB3aXRoQ29ubmVjdGlvbihfb3B0aW9uc09yQ2FsbGJhY2ssIF9jYWxsYmFjaykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIid3aXRoQ29ubmVjdGlvbicgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyBhIHJldXNhYmxlIGNvbm5lY3Rpb24gZXhpc3RzIGZvciBjb250ZXh0cyB3aGVyZSBBc3luY0xvY2FsU3RvcmFnZSBpc24ndCBzZXQuXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24ganVzdCBjaGVja3Mgb3V0IGEgY29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIGdsb2JhbCBjb25uZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgZW5zdXJlR2xvYmFsQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja291dCgpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZGVidWcgc25hcHNob3QuXG4gICAqIEByZXR1cm5zIHtEYXRhYmFzZVBvb2xEZWJ1Z1NuYXBzaG90fSAtIERpYWdub3N0aWMgc25hcHNob3QgZm9yIHRoaXMgcG9vbC5cbiAgICovXG4gIGdldERlYnVnU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZ3VyYXRpb246IHRoaXMuZGVidWdDb25maWd1cmF0aW9uU25hcHNob3QoKSxcbiAgICAgIGNvbm5lY3Rpb25zOiBbXSxcbiAgICAgIGNvbm5lY3Rpb25zQmVpbmdTcGF3bmVkOiAwLFxuICAgICAgaWRlbnRpZmllcjogdGhpcy5pZGVudGlmaWVyLFxuICAgICAgaWRsZUNvdW50OiAwLFxuICAgICAgaW5Vc2VDb3VudDogMCxcbiAgICAgIHBlbmRpbmdDaGVja291dENvdW50OiAwLFxuICAgICAgcG9vbENsYXNzOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZWJ1ZyBjb25maWd1cmF0aW9uIHNuYXBzaG90LlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgPz59IC0gU2FuaXRpemVkIHJlc29sdmVkIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBkZWJ1Z0NvbmZpZ3VyYXRpb25TbmFwc2hvdCgpIHtcbiAgICBjb25zdCBkYXRhYmFzZUNvbmZpZyA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgY29uc3QgcG9vbENvbmZpZyA9IGRhdGFiYXNlQ29uZmlnLnBvb2xcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhYmFzZTogZGF0YWJhc2VDb25maWcuZGF0YWJhc2UsXG4gICAgICBkcml2ZXI6IGRhdGFiYXNlQ29uZmlnLmRyaXZlcj8ubmFtZSxcbiAgICAgIGhvc3Q6IGRhdGFiYXNlQ29uZmlnLmhvc3QsXG4gICAgICBtaWdyYXRpb25zOiBkYXRhYmFzZUNvbmZpZy5taWdyYXRpb25zLFxuICAgICAgbmFtZTogZGF0YWJhc2VDb25maWcubmFtZSxcbiAgICAgIHBvb2w6IHBvb2xDb25maWcgPyB7aWRsZVRpbWVvdXRNaWxsaXM6IHBvb2xDb25maWcuaWRsZVRpbWVvdXRNaWxsaXMsIG1heDogcG9vbENvbmZpZy5tYXh9IDogdW5kZWZpbmVkLFxuICAgICAgcG9ydDogZGF0YWJhc2VDb25maWcucG9ydCxcbiAgICAgIHNjaGVtYTogZGF0YWJhc2VDb25maWcuc2NoZW1hLFxuICAgICAgdHlwZTogZGF0YWJhc2VDb25maWcudHlwZSxcbiAgICAgIHVzZURhdGFiYXNlOiBkYXRhYmFzZUNvbmZpZy51c2VEYXRhYmFzZSxcbiAgICAgIHVzZXJuYW1lOiBkYXRhYmFzZUNvbmZpZy51c2VybmFtZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGRlYnVnIGNvbm5lY3Rpb24gc25hcHNob3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBEYXRhYmFzZSBjb25uZWN0aW9uLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBkZXRhaWxzIC0gRXh0cmEgZGlhZ25vc3RpYyBmaWVsZHMuXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gLSBDb25uZWN0aW9uIGRpYWdub3N0aWMgc25hcHNob3QuXG4gICAqL1xuICBkZWJ1Z0Nvbm5lY3Rpb25TbmFwc2hvdChjb25uZWN0aW9uLCBkZXRhaWxzID0ge30pIHtcbiAgICBjb25zdCBjb25uZWN0aW9uV2l0aFBvb2xLZXkgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0ICYge1tQT09MX0NPTkZJR1VSQVRJT05fS0VZXT86IHN0cmluZ319ICovIChjb25uZWN0aW9uKVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbm5lY3Rpb24uZ2V0RGVidWdTbmFwc2hvdCgpLFxuICAgICAgLi4uZGV0YWlscyxcbiAgICAgIHJldXNlS2V5OiBjb25uZWN0aW9uV2l0aFBvb2xLZXlbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIGFsbCBjb25uZWN0aW9ucyBmb3IgdGhpcyBwb29sLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgYXN5bmMgY2xvc2VBbGwoKSB7fVxufVxuXG5iYXNlTWV0aG9kc0ZvcndhcmQoVmVsb2Npb3VzRGF0YWJhc2VQb29sQmFzZSlcblxuZXhwb3J0IGRlZmF1bHQgVmVsb2Npb3VzRGF0YWJhc2VQb29sQmFzZVxuIl19
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kYXRhYmFzZS9wb29sL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sYUFBYSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELE9BQU8sTUFBTSxNQUFNLGlCQUFpQixDQUFBO0FBQ3BDLE9BQU8sa0JBQWtCLE1BQU0sMkJBQTJCLENBQUE7QUFFMUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUE7QUFFN0U7Ozs7R0FJRztBQUVIOzs7Ozs7Ozs7OztHQVdHO0FBRUg7Ozs7Ozs7Ozs7OztHQVlHO0FBRUg7OzZEQUU2RDtBQUM3RCxNQUFNLE1BQU0sR0FBRztJQUNiLFdBQVcsRUFBRSxJQUFJO0NBQ2xCLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsS0FBSztJQUM1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUE7SUFDdEUsQ0FBQztJQUVELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLE1BQU07YUFDbkIsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDOUMsSUFBSSxFQUFFO2FBQ04sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLGdDQUFnQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxD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QWMsQ0FBQyxJQUFJO1lBQ3pCLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtZQUM3QixJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7WUFDekIsV0FBVyxFQUFFLGNBQWMsQ0FBQyxXQUFXO1lBQ3ZDLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtTQUNsQyxDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsdUJBQXVCLENBQUMsVUFBVSxFQUFFLE9BQU8sR0FBRyxFQUFFO1FBQzlDLE1BQU0scUJBQXFCLEdBQUcseUZBQXlGLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVwSSxPQUFPO1lBQ0wsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDaEMsR0FBRyxPQUFPO1lBQ1YsUUFBUSxFQUFFLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDO1NBQ3hELENBQUE7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsS0FBSSxDQUFDO0NBQ3BCO0FBRUQsa0JBQWtCLENBQUMseUJBQXlCLENBQUMsQ0FBQTtBQUU3QyxlQUFlLHlCQUF5QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBDb25maWd1cmF0aW9uIGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4uLy4uL2xvZ2dlci5qc1wiXG5pbXBvcnQgYmFzZU1ldGhvZHNGb3J3YXJkIGZyb20gXCIuL2Jhc2UtbWV0aG9kcy1mb3J3YXJkLmpzXCJcblxuZXhwb3J0IGNvbnN0IFBPT0xfQ09ORklHVVJBVElPTl9LRVkgPSBTeW1ib2woXCJ2ZWxvY2lvdXNQb29sQ29uZmlndXJhdGlvbktleVwiKVxuXG4vKipcbiAqIENvbm5lY3Rpb25DaGVja291dE9wdGlvbnMgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IENvbm5lY3Rpb25DaGVja291dE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbmFtZV0gLSBIdW1hbi1yZWFkYWJsZSBuYW1lIGZvciB0aGUgY2hlY2tlZC1vdXQgY29ubmVjdGlvbi5cbiAqL1xuXG4vKipcbiAqIERhdGFiYXNlUG9vbFBlbmRpbmdDaGVja291dERlYnVnU25hcHNob3QgdHlwZS5cbiAqIEB0eXBlZGVmIHtvYmplY3R9IERhdGFiYXNlUG9vbFBlbmRpbmdDaGVja291dERlYnVnU25hcHNob3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBjaGVja291dE5hbWUgLSBIdW1hbi1yZWFkYWJsZSBjaGVja291dCBuYW1lLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGVucXVldWVkQXQgLSBUaW1lc3RhbXAgd2hlbiB0aGUgY2hlY2tvdXQgc3RhcnRlZCB3YWl0aW5nLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZGV4IC0gUGVuZGluZyBjaGVja291dCBxdWV1ZSBpbmRleC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgbnVsbH0gcmVtYWluaW5nVGltZW91dE1zIC0gTWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgY2hlY2tvdXQgdGltZXMgb3V0LCBvciBudWxsIHdoZW4gZGlzYWJsZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcmV1c2VLZXkgLSBEYXRhYmFzZSBjb25maWd1cmF0aW9uIHJldXNlIGtleSBuZWVkZWQgYnkgdGhlIGNoZWNrb3V0LlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSB0aW1lb3V0QXQgLSBUaW1lc3RhbXAgd2hlbiB0aGUgY2hlY2tvdXQgd2lsbCB0aW1lIG91dCwgb3IgbnVsbCB3aGVuIGRpc2FibGVkLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSB0aW1lb3V0TWlsbGlzIC0gVGltZW91dCBjb25maWd1cmVkIGZvciB0aGUgY2hlY2tvdXQsIG9yIG51bGwgd2hlbiBkaXNhYmxlZC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3YWl0aW5nRm9yTXMgLSBNaWxsaXNlY29uZHMgYWxyZWFkeSBzcGVudCB3YWl0aW5nLlxuICovXG5cbi8qKlxuICogRGF0YWJhc2VQb29sRGVidWdTbmFwc2hvdCB0eXBlLlxuICogQHR5cGVkZWYge29iamVjdH0gRGF0YWJhc2VQb29sRGVidWdTbmFwc2hvdFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCA/Pn0gY29uZmlndXJhdGlvbiAtIFNhbml0aXplZCByZXNvbHZlZCBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICogQHByb3BlcnR5IHtBcnJheTxSZWNvcmQ8c3RyaW5nLCA/Pj59IGNvbm5lY3Rpb25zIC0gTGl2ZSBjb25uZWN0aW9uIHNuYXBzaG90cy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb25uZWN0aW9uc0JlaW5nU3Bhd25lZCAtIE51bWJlciBvZiBpbi1wcm9ncmVzcyBjb25uZWN0aW9uIHNwYXducy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZGxlQ291bnQgLSBOdW1iZXIgb2YgaWRsZSBjb25uZWN0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZGVudGlmaWVyIC0gRGF0YWJhc2UgaWRlbnRpZmllci5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpblVzZUNvdW50IC0gTnVtYmVyIG9mIGNoZWNrZWQtb3V0IGNvbm5lY3Rpb25zLlxuICogQHByb3BlcnR5IHtBcnJheTxEYXRhYmFzZVBvb2xQZW5kaW5nQ2hlY2tvdXREZWJ1Z1NuYXBzaG90Pn0gW3BlbmRpbmdDaGVja291dHNdIC0gV2FpdGluZyBjaGVja291dCBzbmFwc2hvdHMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcGVuZGluZ0NoZWNrb3V0Q291bnQgLSBOdW1iZXIgb2YgcXVldWVkIGNoZWNrb3V0IHJlcXVlc3RzLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHBvb2xDbGFzcyAtIFBvb2wgY2xhc3MgbmFtZS5cbiAqL1xuXG4vKipcbiAqIFNoYXJlZC5cbiAqIEB0eXBlIHt7Y3VycmVudFBvb2w6IFZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2UgfCBudWxsfX0gKi9cbmNvbnN0IHNoYXJlZCA9IHtcbiAgY3VycmVudFBvb2w6IG51bGxcbn1cblxuLyoqXG4gKiBSdW5zIHN0YWJsZSBzdHJpbmdpZnkuXG4gKiBAcGFyYW0gez99IHZhbHVlIC0gVmFsdWUgdG8gc3RyaW5naWZ5LlxuICogQHJldHVybnMge3N0cmluZ30gLSBTdGFibGUgSlNPTiBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0cmluZ2lmeSh2YWx1ZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYFske3ZhbHVlLm1hcCgoZW50cnkpID0+IHN0YWJsZVN0cmluZ2lmeShlbnRyeSkpLmpvaW4oXCIsXCIpfV1gXG4gIH1cblxuICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdFxuICAgICAgLmtleXMoLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKHZhbHVlKSlcbiAgICAgIC5zb3J0KClcbiAgICAgIC5tYXAoKGtleSkgPT4gYCR7SlNPTi5zdHJpbmdpZnkoa2V5KX06JHtzdGFibGVTdHJpbmdpZnkoLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gKi8gKHZhbHVlKVtrZXldKX1gKVxuXG4gICAgcmV0dXJuIGB7JHtlbnRyaWVzLmpvaW4oXCIsXCIpfX1gXG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG59XG5cbmNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2Uge1xuICAvKipcbiAgICogV2l0aG91dCBjdXJyZW50IGNvbm5lY3Rpb24gY29udGV4dC5cbiAgICogQHR5cGUge3VuZGVmaW5lZCB8ICgoY2FsbGJhY2s6ICgpID0+ID8pID0+ID8pfSAqL1xuICBfd2l0aG91dEN1cnJlbnRDb25uZWN0aW9uQ29udGV4dCA9IHVuZGVmaW5lZFxuXG4gIC8qKlxuICAgKiBSdW5zIGN1cnJlbnQuXG4gICAqIEByZXR1cm5zIHtWZWxvY2lvdXNEYXRhYmFzZVBvb2xCYXNlfSAtIFRoZSBjdXJyZW50LlxuICAgKi9cbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudFBvb2wpIHRocm93IG5ldyBFcnJvcihcIkEgZGF0YWJhc2UgcG9vbCBoYXNuJ3QgYmVlbiBzZXRcIilcblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudFBvb2xcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYW55IGdsb2JhbCBjb25uZWN0aW9ucyBmb3IgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBjb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBvd25pbmcgdGhlIHBvb2wuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHN0YXRpYyBjbGVhckdsb2JhbENvbm5lY3Rpb25zKGNvbmZpZ3VyYXRpb24pIHsgdm9pZCBjb25maWd1cmF0aW9uIH1cblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtDb25maWd1cmF0aW9ufSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBDb25maWd1cmF0aW9uIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5pZGVudGlmaWVyIC0gSWRlbnRpZmllci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWd1cmF0aW9uLCBpZGVudGlmaWVyfSkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24gfHwgQ29uZmlndXJhdGlvbi5jdXJyZW50KClcblxuICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG4gICAgaWYgKCFpZGVudGlmaWVyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBpZGVudGlmaWVyIHdhcyBnaXZlblwiKVxuXG4gICAgdGhpcy5pZGVudGlmaWVyID0gaWRlbnRpZmllclxuICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcih0aGlzKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2hlY2tpbi5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IF9jb25uZWN0aW9uIC0gQ29ubmVjdGlvbi5cbiAgICovXG4gIGNoZWNraW4oX2Nvbm5lY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInY2hlY2tpbicgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjaGVja291dC5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkNoZWNrb3V0T3B0aW9uc30gW19vcHRpb25zXSAtIENoZWNrb3V0IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBjaGVja291dC5cbiAgICovXG4gIGNoZWNrb3V0KF9vcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiJ2NoZWNrb3V0JyBub3QgaW1wbGVtZW50ZWRcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IC0gVGhlIGN1cnJlbnQgY29ubmVjdGlvbi5cbiAgICovXG4gIGdldEN1cnJlbnRDb25uZWN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIidnZXRDdXJyZW50Q29ubmVjdGlvbicgbm90IGltcGxlbWVudGVkXCIpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ubmVjdGlvbiBwaW5uZWQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCwgaWYgYW55LlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmVycyB0byBgZ2V0Q3VycmVudENvbm5lY3Rpb25gLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQgfCB1bmRlZmluZWR9IC0gVGhlIGN1cnJlbnQgY29udGV4dCBjb25uZWN0aW9uLlxuICAgKi9cbiAgZ2V0Q3VycmVudENvbnRleHRDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRDb25uZWN0aW9uKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdpdGhvdXQgY3VycmVudCBjb25uZWN0aW9uIGNvbnRleHQuXG4gICAqIEB0ZW1wbGF0ZSBUXG4gICAqIEBwYXJhbSB7KCkgPT4gVH0gY2FsbGJhY2sgLSBDYWxsYmFjayB0byBydW4gd2l0aG91dCA/IGN1cnJlbnQgY29ubmVjdGlvbiBjb250ZXh0LlxuICAgKiBAcmV0dXJucyB7VH0gLSBDYWxsYmFjayByZXN1bHQuXG4gICAqL1xuICB3aXRob3V0Q3VycmVudENvbm5lY3Rpb25Db250ZXh0KGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuX3dpdGhvdXRDdXJyZW50Q29ubmVjdGlvbkNvbnRleHQpIHJldHVybiAvKiogQHR5cGUge1R9ICovICh0aGlzLl93aXRob3V0Q3VycmVudENvbm5lY3Rpb25Db250ZXh0KGNhbGxiYWNrKSlcblxuICAgIHJldHVybiBjYWxsYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uLy4uL2NvbmZpZ3VyYXRpb24tdHlwZXMuanNcIikuRGF0YWJhc2VDb25maWd1cmF0aW9uVHlwZX0gLSBSZXNvbHZlZCBkYXRhYmFzZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcG9vbCBpZGVudGlmaWVyLlxuICAgKi9cbiAgZ2V0Q29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uLnJlc29sdmVEYXRhYmFzZUNvbmZpZ3VyYXRpb24odGhpcy5pZGVudGlmaWVyKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGNvbmZpZ3VyYXRpb24gcmV1c2Uga2V5LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFJldXNlIGtleSBmb3IgdGhlIGN1cnJlbnRseSByZXNvbHZlZCBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZ2V0Q29uZmlndXJhdGlvblJldXNlS2V5KCkge1xuICAgIGNvbnN0IGRhdGFiYXNlQ29uZmlndXJhdGlvbiA9IHRoaXMuZ2V0Q29uZmlndXJhdGlvbigpXG5cbiAgICByZXR1cm4gc3RhYmxlU3RyaW5naWZ5KHtcbiAgICAgIGRhdGFiYXNlOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2UsXG4gICAgICBob3N0OiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uaG9zdCxcbiAgICAgIG5hbWU6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5uYW1lLFxuICAgICAgcG9ydDogZGF0YWJhc2VDb25maWd1cmF0aW9uLnBvcnQsXG4gICAgICBzY2hlbWE6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi5zY2hlbWEsXG4gICAgICBzY2hlbWFDYWNoZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnNjaGVtYUNhY2hlLFxuICAgICAgc3FsQ29uZmlnOiBkYXRhYmFzZUNvbmZpZ3VyYXRpb24uc3FsQ29uZmlnLFxuICAgICAgdHlwZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnR5cGUsXG4gICAgICB1c2VEYXRhYmFzZTogZGF0YWJhc2VDb25maWd1cmF0aW9uLnVzZURhdGFiYXNlLFxuICAgICAgdXNlcm5hbWU6IGRhdGFiYXNlQ29uZmlndXJhdGlvbi51c2VybmFtZVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUnVucyBjb25uZWN0aW9uIG1hdGNoZXMgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gQ29ubmVjdGlvbi5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IC0gV2hldGhlciBjb25uZWN0aW9uIG1hdGNoZXMgY3VycmVudCByZXNvbHZlZCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgY29ubmVjdGlvbk1hdGNoZXNDdXJyZW50Q29uZmlndXJhdGlvbihjb25uZWN0aW9uKSB7XG4gICAgY29uc3QgY29ubmVjdGlvbldpdGhQb29sS2V5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCAmIHtbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0/OiBzdHJpbmd9fSAqLyAoY29ubmVjdGlvbilcblxuICAgIHJldHVybiBjb25uZWN0aW9uV2l0aFBvb2xLZXlbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0gPT09IHRoaXMuZ2V0Q29uZmlndXJhdGlvblJldXNlS2V5KClcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgc2NoZW1hIG1ldGFkYXRhIGNhY2hlZCBieSB0aGlzIHBvb2wncyBjdXJyZW50IGNvbm5lY3Rpb24uXG4gICAqIFBvb2xzIHRoYXQga2VlcCBtdWx0aXBsZSBjb25uZWN0aW9ucyBhbGl2ZSBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBjbGVhciBldmVyeSBsaXZlIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGNsZWFyU2NoZW1hQ2FjaGUoKSB7XG4gICAgdGhpcy5fY2xlYXJDb25uZWN0aW9uU2NoZW1hQ2FjaGUodGhpcy5nZXRDdXJyZW50Q29ubmVjdGlvbigpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2xlYXIgY29ubmVjdGlvbiBzY2hlbWEgY2FjaGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBDb25uZWN0aW9uIHdob3NlIGxvY2FsIHNjaGVtYSBjYWNoZSBzaG91bGQgYmUgY2xlYXJlZC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX2NsZWFyQ29ubmVjdGlvblNjaGVtYUNhY2hlKGNvbm5lY3Rpb24pIHtcbiAgICBjb25uZWN0aW9uLl9jbGVhckxvY2FsU2NoZW1hQ2FjaGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcHJpbWFyeSBrZXkgdHlwZS5cbiAgICogQGFic3RyYWN0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIHByaW1hcnkga2V5IHR5cGUuXG4gICAqL1xuICBwcmltYXJ5S2V5VHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIncHJpbWFyeUtleVR5cGUnIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2V0IGN1cnJlbnQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldEN1cnJlbnQoKSB7XG4gICAgc2hhcmVkLmN1cnJlbnRQb29sID0gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2V0IGRyaXZlciBjbGFzcy5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGRyaXZlckNsYXNzIC0gRHJpdmVyIGNsYXNzLlxuICAgKi9cbiAgc2V0RHJpdmVyQ2xhc3MoZHJpdmVyQ2xhc3MpIHtcbiAgICB0aGlzLmRyaXZlckNsYXNzID0gZHJpdmVyQ2xhc3NcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNwYXduIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBzcGF3biBjb25uZWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgc3Bhd25Db25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGRhdGFiYXNlQ29uZmlnID0gdGhpcy5nZXRDb25maWd1cmF0aW9uKClcblxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwic3Bhd25Db25uZWN0aW9uXCIsIHtpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsIGRhdGFiYXNlQ29uZmlnfSlcblxuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCB0aGlzLnNwYXduQ29ubmVjdGlvbldpdGhDb25maWd1cmF0aW9uKGRhdGFiYXNlQ29uZmlnKVxuXG4gICAgY29uc3QgY29ubmVjdGlvbldpdGhQb29sS2V5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCAmIHtbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0/OiBzdHJpbmd9fSAqLyAoY29ubmVjdGlvbilcbiAgICBjb25uZWN0aW9uV2l0aFBvb2xLZXlbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0gPSB0aGlzLmdldENvbmZpZ3VyYXRpb25SZXVzZUtleSgpXG4gICAgY29ubmVjdGlvbi5zZXRTY2hlbWFDYWNoZUludmFsaWRhdG9yKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYXJTY2hlbWFDYWNoZSgpXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uY2xlYXJTY2hlbWFDYWNoZXNGb3JSZXVzZUtleSh0aGlzLmdldENvbmZpZ3VyYXRpb25SZXVzZUtleSgpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gY29ubmVjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc3Bhd24gY29ubmVjdGlvbiB3aXRoIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vLi4vY29uZmlndXJhdGlvbi10eXBlcy5qc1wiKS5EYXRhYmFzZUNvbmZpZ3VyYXRpb25UeXBlfSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQ+fSAtIFJlc29sdmVzIHdpdGggdGhlIHNwYXduIGNvbm5lY3Rpb24gd2l0aCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgYXN5bmMgc3Bhd25Db25uZWN0aW9uV2l0aENvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgY29uc3QgRHJpdmVyQ2xhc3MgPSBjb25maWcuZHJpdmVyIHx8IHRoaXMuZHJpdmVyQ2xhc3NcblxuICAgIGlmICghRHJpdmVyQ2xhc3MpIHRocm93IG5ldyBFcnJvcihcIk5vIGRyaXZlciBjbGFzcyBzZXQgaW4gZGF0YWJhc2UgcG9vbCBvciBpbiBnaXZlbiBjb25maWdcIilcblxuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBuZXcgRHJpdmVyQ2xhc3MoY29uZmlnLCB0aGlzLmNvbmZpZ3VyYXRpb24pXG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29ubmVjdGlvbi5jb25uZWN0KClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgdGhpcy5jbG9zZUNvbm5lY3Rpb25BZnRlckZhaWxlZENvbm5lY3QoY29ubmVjdGlvbilcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbm5lY3Rpb25cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNsb3NlIGNvbm5lY3Rpb24gYWZ0ZXIgZmFpbGVkIGNvbm5lY3QuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IGNvbm5lY3Rpb24gLSBDb25uZWN0aW9uIHRvIGNsb3NlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNsZWFudXAgaGFzIGJlZW4gYXR0ZW1wdGVkLlxuICAgKi9cbiAgYXN5bmMgY2xvc2VDb25uZWN0aW9uQWZ0ZXJGYWlsZWRDb25uZWN0KGNvbm5lY3Rpb24pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29ubmVjdGlvbi5jbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJGYWlsZWQgdG8gY2xvc2UgZGF0YWJhc2UgY29ubmVjdGlvbiBhZnRlciBjb25uZWN0IGZhaWxlZFwiLCB7ZXJyb3J9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdpdGggY29ubmVjdGlvbi5cbiAgICogQHRlbXBsYXRlIFRcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7Q29ubmVjdGlvbkNoZWNrb3V0T3B0aW9ucyB8IGZ1bmN0aW9uKGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0KSA6IFByb21pc2U8VD59IF9vcHRpb25zT3JDYWxsYmFjayAtIENoZWNrb3V0IG9wdGlvbnMgb3IgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oaW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHQpIDogUHJvbWlzZTxUPn0gW19jYWxsYmFja10gLSBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8VD59IC0gUmVzb2x2ZXMgd2l0aCB0aGUgY2FsbGJhY2sgcmVzdWx0LlxuICAgKi9cbiAgd2l0aENvbm5lY3Rpb24oX29wdGlvbnNPckNhbGxiYWNrLCBfY2FsbGJhY2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCInd2l0aENvbm5lY3Rpb24nIG5vdCBpbXBsZW1lbnRlZFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgYSByZXVzYWJsZSBjb25uZWN0aW9uIGV4aXN0cyBmb3IgY29udGV4dHMgd2hlcmUgQXN5bmNMb2NhbFN0b3JhZ2UgaXNuJ3Qgc2V0LlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgY2hlY2tzIG91dCBhIGNvbm5lY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBSZXNvbHZlcyB3aXRoIHRoZSBnbG9iYWwgY29ubmVjdGlvbi5cbiAgICovXG4gIGFzeW5jIGVuc3VyZUdsb2JhbENvbm5lY3Rpb24oKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tvdXQoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGRlYnVnIHNuYXBzaG90LlxuICAgKiBAcmV0dXJucyB7RGF0YWJhc2VQb29sRGVidWdTbmFwc2hvdH0gLSBEaWFnbm9zdGljIHNuYXBzaG90IGZvciB0aGlzIHBvb2wuXG4gICAqL1xuICBnZXREZWJ1Z1NuYXBzaG90KCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb25maWd1cmF0aW9uOiB0aGlzLmRlYnVnQ29uZmlndXJhdGlvblNuYXBzaG90KCksXG4gICAgICBjb25uZWN0aW9uczogW10sXG4gICAgICBjb25uZWN0aW9uc0JlaW5nU3Bhd25lZDogMCxcbiAgICAgIGlkZW50aWZpZXI6IHRoaXMuaWRlbnRpZmllcixcbiAgICAgIGlkbGVDb3VudDogMCxcbiAgICAgIGluVXNlQ291bnQ6IDAsXG4gICAgICBwZW5kaW5nQ2hlY2tvdXRDb3VudDogMCxcbiAgICAgIHBvb2xDbGFzczogdGhpcy5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZGVidWcgY29uZmlndXJhdGlvbiBzbmFwc2hvdC5cbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsID8+fSAtIFNhbml0aXplZCByZXNvbHZlZCBkYXRhYmFzZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgZGVidWdDb25maWd1cmF0aW9uU25hcHNob3QoKSB7XG4gICAgY29uc3QgZGF0YWJhc2VDb25maWcgPSB0aGlzLmdldENvbmZpZ3VyYXRpb24oKVxuICAgIGNvbnN0IHBvb2xDb25maWcgPSBkYXRhYmFzZUNvbmZpZy5wb29sXG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YWJhc2U6IGRhdGFiYXNlQ29uZmlnLmRhdGFiYXNlLFxuICAgICAgZHJpdmVyOiBkYXRhYmFzZUNvbmZpZy5kcml2ZXI/Lm5hbWUsXG4gICAgICBob3N0OiBkYXRhYmFzZUNvbmZpZy5ob3N0LFxuICAgICAgbWlncmF0aW9uczogZGF0YWJhc2VDb25maWcubWlncmF0aW9ucyxcbiAgICAgIG5hbWU6IGRhdGFiYXNlQ29uZmlnLm5hbWUsXG4gICAgICBwb29sOiBwb29sQ29uZmlnID8ge2lkbGVUaW1lb3V0TWlsbGlzOiBwb29sQ29uZmlnLmlkbGVUaW1lb3V0TWlsbGlzLCBtYXg6IHBvb2xDb25maWcubWF4fSA6IHVuZGVmaW5lZCxcbiAgICAgIHBvcnQ6IGRhdGFiYXNlQ29uZmlnLnBvcnQsXG4gICAgICBzY2hlbWE6IGRhdGFiYXNlQ29uZmlnLnNjaGVtYSxcbiAgICAgIHR5cGU6IGRhdGFiYXNlQ29uZmlnLnR5cGUsXG4gICAgICB1c2VEYXRhYmFzZTogZGF0YWJhc2VDb25maWcudXNlRGF0YWJhc2UsXG4gICAgICB1c2VybmFtZTogZGF0YWJhc2VDb25maWcudXNlcm5hbWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBkZWJ1ZyBjb25uZWN0aW9uIHNuYXBzaG90LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0fSBjb25uZWN0aW9uIC0gRGF0YWJhc2UgY29ubmVjdGlvbi5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCA/Pn0gZGV0YWlscyAtIEV4dHJhIGRpYWdub3N0aWMgZmllbGRzLlxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgPz59IC0gQ29ubmVjdGlvbiBkaWFnbm9zdGljIHNuYXBzaG90LlxuICAgKi9cbiAgZGVidWdDb25uZWN0aW9uU25hcHNob3QoY29ubmVjdGlvbiwgZGV0YWlscyA9IHt9KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbldpdGhQb29sS2V5ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdCAmIHtbUE9PTF9DT05GSUdVUkFUSU9OX0tFWV0/OiBzdHJpbmd9fSAqLyAoY29ubmVjdGlvbilcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb25uZWN0aW9uLmdldERlYnVnU25hcHNob3QoKSxcbiAgICAgIC4uLmRldGFpbHMsXG4gICAgICByZXVzZUtleTogY29ubmVjdGlvbldpdGhQb29sS2V5W1BPT0xfQ09ORklHVVJBVElPTl9LRVldXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbGwgY29ubmVjdGlvbnMgZm9yIHRoaXMgcG9vbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIGNsb3NlQWxsKCkge31cbn1cblxuYmFzZU1ldGhvZHNGb3J3YXJkKFZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2UpXG5cbmV4cG9ydCBkZWZhdWx0IFZlbG9jaW91c0RhdGFiYXNlUG9vbEJhc2VcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/query/index.js"],"names":[],"mappings":"AA8GA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;IACE;;;OAGG;IACH,sKAFW,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/database/query/index.js"],"names":[],"mappings":"AA8GA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;IACE;;;OAGG;IACH,sKAFW,aAAa,EA2DvB;IApCC;;4DAEwD;IACxD,WADU,MAAM,OAAO,oBAAoB,EAAE,OAAO,CACiB;IACrE,yCAAsB;IACtB,eAA8B;IAC9B,2CAAmB;IACnB,kBAAqB;IACrB,2CAAmB;IACnB,sBAAmB;IACnB,uBAAqB;IACrB,qBAAqB;IACrB,qBAAiB;IACjB,6BAAuB;IACvB,8BAAuB;IAEvB;;0CAEsC;IACtC,iBADU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CACG;IAErC;;0CAEsC;IACtC,sBADU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CACa;IAC/C,mBAAyB;IACzB,uBAAuB;IAEvB;;qDAEiD;IACjD,SADU,OAAO,iBAAiB,EAAE,OAAO,EAAE,CACxB;IAuSvB;;;;OAIG;IACH,aAHW,iBAAiB,GACf,IAAI,CAYhB;IA/SD;;;OAGG;IACH,SAFa,IAAI,CAsBhB;IAED;;;OAGG;IACH,YAFa,OAAO,gBAAgB,EAAE,OAAO,EAAE,CAI9C;IAED;;;OAGG;IACH,aAFa,MAAM,EAAE,CAIpB;IAED;;;OAGG;IACH,cAFa,OAAO,4BAA4B,EAAE,OAAO,CAEZ;IAE7C;;;OAGG;IACH,cAFa,KAAK,CAAC,OAAO,kBAAkB,EAAE,OAAO,CAAC,CAEjB;IAErC;;;;OAIG;IACH,WAHW,MAAM,GAAC,OAAO,gBAAgB,EAAE,OAAO,GACrC,IAAI,CAOhB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,IAAI,CAKhB;IAED;;;;OAIG;IACH,YAHW,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,kBAAkB,EAAE,eAAe,GAC5D,IAAI,CAchB;IAED;;;;OAIG;IACH,aAHW,MAAM,GACJ,IAAI,CAKhB;IAED;;;;OAIG;IACH,cAHW,MAAM,GACJ,IAAI,CAKhB;IAED;;;;OAIG;IACH,aAHW,iBAAiB,GACf,IAAI,CAgBhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,IAAI,CAMhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,IAAI,CAMhB;IAED;;;;;;;OAOG;IACH,oBAFa,IAAI,CAUhB;IAED;;;;OAIG;IACH,eAHW,iBAAiB,GACf,IAAI,CAMhB;IAED;;;OAGG;IACH,gBAFa,IAAI,CAQhB;IAED;;;;OAIG;IACH,iBAHW,OAAO,GACL,IAAI,CAKhB;IAED;;;;;;;;OAQG;IACH,kBAHW,kBAAkB,GAChB,IAAI,CAQhB;IAED;;;;OAIG;IACH,eAHW,kBAAkB,GAChB,IAAI,CAoBhB;IAED;;;;;OAKG;IACH,4BAHG;QAAsB,OAAO;KAC7B,GAAU,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAOlC;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAIlC;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;OAGG;IACH,SAFa,MAAM,CAE4B;IAmB/C;;;;OAIG;IACH,gBAHW,iBAAiB,GACf,IAAI,CAYhB;IAED;;;OAGG;IACH,cAFa,OAAO,oBAAoB,EAAE,OAAO,CAIhD;CACF;;;;kCA1fY;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,mBAAmB,CAAA;CAAE;;;;gCACnE,MAAM,GAAG,MAAM,GAAG,OAAO,iBAAiB,EAAE,OAAO,GAAG,OAAO,mBAAmB,EAAE,gBAAgB;;;;iCAClG,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,kBAAkB,EAAE,OAAO,GAAG,OAAO,kBAAkB,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;;;;gCACjI,MAAM,GAAG,MAAM;;;;;;;;YA4Fd,OAAO,oBAAoB,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,oBAAoB,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;aAInF,OAAO,eAAe,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA/G1B,iBAAiB;sBACd,iBAAiB;uBAGhB,kBAAkB"}
|
|
@@ -150,9 +150,7 @@ export default class VelociousDatabaseQuery {
|
|
|
150
150
|
* Narrows the runtime value to the documented type.
|
|
151
151
|
* @type {import("./where-base.js").default[]} */
|
|
152
152
|
this._wheres = wheres;
|
|
153
|
-
const boundWhere = /**
|
|
154
|
-
* Narrows the runtime value to the documented type.
|
|
155
|
-
* @type {?} */ (this.where.bind(this));
|
|
153
|
+
const boundWhere = /** @type {?} */ (this.where.bind(this));
|
|
156
154
|
boundWhere.not = this.whereNot.bind(this);
|
|
157
155
|
this.where = boundWhere;
|
|
158
156
|
}
|
|
@@ -161,9 +159,7 @@ export default class VelociousDatabaseQuery {
|
|
|
161
159
|
* @returns {this} - The clone.
|
|
162
160
|
*/
|
|
163
161
|
clone() {
|
|
164
|
-
const QueryClass = /**
|
|
165
|
-
* Narrows the runtime value to the documented type.
|
|
166
|
-
* @type {new (args: QueryArgsType) => this} */ (this.constructor);
|
|
162
|
+
const QueryClass = /** @type {new (args: QueryArgsType) => this} */ (this.constructor);
|
|
167
163
|
const newQuery = new QueryClass({
|
|
168
164
|
driver: this._driverFn,
|
|
169
165
|
froms: [...this._froms],
|
|
@@ -432,9 +428,7 @@ export default class VelociousDatabaseQuery {
|
|
|
432
428
|
this._wheres.push(new WherePlain(this, where));
|
|
433
429
|
}
|
|
434
430
|
else if (typeof where == "object" && (where.constructor.name == "object" || where.constructor.name == "Object")) {
|
|
435
|
-
this._wheres.push(new WhereHash(this, /**
|
|
436
|
-
* Narrows the runtime value to the documented type.
|
|
437
|
-
* @type {import("./where-hash.js").WhereHash} */ (where)));
|
|
431
|
+
this._wheres.push(new WhereHash(this, /** @type {import("./where-hash.js").WhereHash} */ (where)));
|
|
438
432
|
}
|
|
439
433
|
else {
|
|
440
434
|
throw new Error(`Invalid type of where: ${typeof where} (${where.constructor.name})`);
|
|
@@ -451,9 +445,7 @@ export default class VelociousDatabaseQuery {
|
|
|
451
445
|
this._wheres.push(new WhereNot(new WherePlain(this, where)));
|
|
452
446
|
}
|
|
453
447
|
else if (typeof where == "object" && (where.constructor.name == "object" || where.constructor.name == "Object")) {
|
|
454
|
-
this._wheres.push(new WhereNot(new WhereHash(this, /**
|
|
455
|
-
* Narrows the runtime value to the documented type.
|
|
456
|
-
* @type {import("./where-hash.js").WhereHash} */ (where))));
|
|
448
|
+
this._wheres.push(new WhereNot(new WhereHash(this, /** @type {import("./where-hash.js").WhereHash} */ (where))));
|
|
457
449
|
}
|
|
458
450
|
else {
|
|
459
451
|
throw new Error(`Invalid type of where: ${typeof where} (${where.constructor.name})`);
|
|
@@ -468,4 +460,4 @@ export default class VelociousDatabaseQuery {
|
|
|
468
460
|
return this._driverFn();
|
|
469
461
|
}
|
|
470
462
|
}
|
|
471
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUM3QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV6Qzs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUFJO0lBQy9CLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFcEIsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEVBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUMsQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEI7OzJEQUVtRDtRQUNuRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFakIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLEVB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SSxFQUFFOztnSEFFaUQsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxLQUFLLEtBQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZGLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEZyb21QbGFpbiBmcm9tIFwiLi9mcm9tLXBsYWluLmpzXCJcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSBcImlzLXBsYWluLW9iamVjdFwiXG5pbXBvcnQgSm9pbk9iamVjdCBmcm9tIFwiLi9qb2luLW9iamVjdC5qc1wiXG5pbXBvcnQgSm9pblBsYWluIGZyb20gXCIuL2pvaW4tcGxhaW4uanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBPcmRlckJhc2UgZnJvbSBcIi4vb3JkZXItYmFzZS5qc1wiXG5pbXBvcnQgT3JkZXJDb2x1bW4gZnJvbSBcIi4vb3JkZXItY29sdW1uLmpzXCJcbmltcG9ydCBPcmRlclBsYWluIGZyb20gXCIuL29yZGVyLXBsYWluLmpzXCJcbmltcG9ydCBTZWxlY3RCYXNlIGZyb20gXCIuL3NlbGVjdC1iYXNlLmpzXCJcbmltcG9ydCBTZWxlY3RQbGFpbiBmcm9tIFwiLi9zZWxlY3QtcGxhaW4uanNcIlxuaW1wb3J0IFdoZXJlSGFzaCBmcm9tIFwiLi93aGVyZS1oYXNoLmpzXCJcbmltcG9ydCBXaGVyZU5vdCBmcm9tIFwiLi93aGVyZS1ub3QuanNcIlxuaW1wb3J0IFdoZXJlUGxhaW4gZnJvbSBcIi4vd2hlcmUtcGxhaW4uanNcIlxuXG4vKipcbiAqIE9yZGVyQXJndW1lbnRUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IGJvb2xlYW4gfCBzdHJpbmcgfCBzdHJpbmdbXSB8IE5lc3RlZFByZWxvYWRSZWNvcmQgfX0gTmVzdGVkUHJlbG9hZFJlY29yZFxuICogQHR5cGVkZWYge3N0cmluZyB8IG51bWJlciB8IGltcG9ydChcIi4vb3JkZXItYmFzZS5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9vcmRlci1jb2x1bW4uanNcIikuT3JkZXJDb2x1bW5JbnB1dH0gT3JkZXJBcmd1bWVudFR5cGVcbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBzdHJpbmdbXSB8IGltcG9ydChcIi4vc2VsZWN0LWJhc2UuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vc2VsZWN0LWJhc2UuanNcIikuZGVmYXVsdFtdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSBTZWxlY3RBcmd1bWVudFR5cGVcbiAqIEB0eXBlZGVmIHtvYmplY3QgfCBzdHJpbmd9IFdoZXJlQXJndW1lbnRUeXBlXG4gKi9cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBqb2luIG9iamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0SW5wdXQgfCBzdHJpbmcgfCBzdHJpbmdbXX0gam9pbiAtIEpvaW4gZGF0YSBpbiBzaG9ydGhhbmQgb3IgbmVzdGVkIGZvcm0uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAtIE5vcm1hbGl6ZWQgam9pbiByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUpvaW5PYmplY3Qoam9pbikge1xuICBpZiAoIWpvaW4pIHJldHVybiB7fVxuXG4gIGlmICh0eXBlb2Ygam9pbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHtbam9pbl06IHRydWV9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShqb2luKSkge1xuICAgIC8qKlxuICAgICAqIFJlc3VsdC5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGpvaW4pIHtcbiAgICAgIGlmICh0eXBlb2YgZW50cnkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc3VsdFtlbnRyeV1cbiAgICAgICAgcmVzdWx0W2VudHJ5XSA9IG1lcmdlSm9pblZhbHVlKGV4aXN0aW5nLCB0cnVlKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUpvaW5PYmplY3QoZW50cnkpXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc3VsdFtrZXldXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGpvaW4gZW50cnkgdHlwZTogJHt0eXBlb2YgZW50cnl9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3Qoam9pbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgam9pbiB0eXBlOiAke3R5cGVvZiBqb2lufWApXG4gIH1cblxuICAvKipcbiAgICogUmVzdWx0LlxuICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAqL1xuICBjb25zdCByZXN1bHQgPSB7fVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpvaW4pKSB7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRba2V5XVxuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgdmFsdWUpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRba2V5XVxuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgbm9ybWFsaXplSm9pbk9iamVjdCh2YWx1ZSkpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBqb2luIHZhbHVlIGZvciAke2tleX06ICR7dHlwZW9mIHZhbHVlfWApXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogUnVucyBtZXJnZSBqb2luIHZhbHVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3Rbc3RyaW5nXSB8IHVuZGVmaW5lZH0gZXhpc3RpbmcgLSBFeGlzdGluZyBub3JtYWxpemVkIGpvaW4gdmFsdWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vam9pbi1vYmplY3QuanNcIikuSm9pbk9iamVjdFtzdHJpbmddfSBpbmNvbWluZyAtIEluY29taW5nIG5vcm1hbGl6ZWQgam9pbiB2YWx1ZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3Rbc3RyaW5nXX0gLSBNZXJnZWQgam9pbiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VKb2luVmFsdWUoZXhpc3RpbmcsIGluY29taW5nKSB7XG4gIGlmICghZXhpc3RpbmcpIHJldHVybiBpbmNvbWluZ1xuICBpZiAoZXhpc3RpbmcgPT09IHRydWUgfHwgaW5jb21pbmcgPT09IHRydWUpIHJldHVybiB0cnVlXG5cbiAgaWYgKHR5cGVvZiBleGlzdGluZyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpbmNvbWluZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHsuLi5leGlzdGluZywgLi4uaW5jb21pbmd9XG4gIH1cblxuICByZXR1cm4gaW5jb21pbmdcbn1cblxuLyoqXG4gKiBRdWVyeUFyZ3NUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBRdWVyeUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgKCgpID0+IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0KX0gZHJpdmVyIC0gRHJpdmVyIGluc3RhbmNlIG9yIGZhY3RvcnkgZm9yIHF1ZXJ5IGV4ZWN1dGlvbi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9mcm9tLWJhc2UuanNcIikuZGVmYXVsdD59IFtmcm9tc10gLSBGUk9NIGNsYXVzZXMgZm9yIHRoZSBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtncm91cHNdIC0gR1JPVVAgQlkgY29sdW1ucy5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9qb2luLWJhc2UuanNcIikuZGVmYXVsdD59IFtqb2luc10gLSBKT0lOIGNsYXVzZXMgZm9yIHRoZSBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vaGFuZGxlci5qc1wiKS5kZWZhdWx0fSBoYW5kbGVyIC0gSGFuZGxlciB1c2VkIGZvciBleGVjdXRpbmcgYW5kIHRyYW5zZm9ybWluZyByZXN1bHRzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbbGltaXRdIC0gTElNSVQgY2xhdXNlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbb2Zmc2V0XSAtIE9GRlNFVCBjbGF1c2UgdmFsdWUuXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vb3JkZXItYmFzZS5qc1wiKS5kZWZhdWx0Pn0gW29yZGVyc10gLSBPUkRFUiBCWSBjbGF1c2VzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcGFnZV0gLSBQYWdlIG51bWJlciBmb3IgcGFnaW5hdGlvbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGVyUGFnZV0gLSBSZWNvcmRzIHBlciBwYWdlIGZvciBwYWdpbmF0aW9uLlxuICogQHByb3BlcnR5IHtOZXN0ZWRQcmVsb2FkUmVjb3JkfSBbcHJlbG9hZF0gLSBQcmVsb2FkIGdyYXBoIGZvciByZWxhdGVkIHJlY29yZHMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3ByZWxvYWRTZWxlY3RzXSAtIEF0dHJpYnV0ZSBuYW1lcyB0byBsb2FkIGZvciBwcmVsb2FkZWQgcmVsYXRpb25zaGlwcywga2V5ZWQgYnkgdGFyZ2V0IG1vZGVsIG5hbWUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3ByZWxvYWRTZWxlY3RzRXh0cmFdIC0gRXh0cmEgc2VsZWN0cyB0byBsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0cyBmb3IgcHJlbG9hZGVkIHJlbGF0aW9uc2hpcHMsIGtleWVkIGJ5IHRhcmdldCBtb2RlbCBuYW1lLlxuICogQHByb3BlcnR5IHtBcnJheTxpbXBvcnQoXCIuL3NlbGVjdC1iYXNlLmpzXCIpLmRlZmF1bHQ+fSBbc2VsZWN0c10gLSBTRUxFQ1QgY2xhdXNlcyBmb3IgdGhlIHF1ZXJ5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzdGluY3RdIC0gV2hldGhlciB0aGUgcXVlcnkgc2hvdWxkIHVzZSBESVNUSU5DVC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi93aGVyZS1iYXNlLmpzXCIpLmRlZmF1bHQ+fSBbd2hlcmVzXSAtIFdIRVJFIGNvbmRpdGlvbnMgZm9yIHRoZSBxdWVyeS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5IHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7UXVlcnlBcmdzVHlwZX0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe1xuICAgIGRyaXZlcixcbiAgICBmcm9tcyA9IFtdLFxuICAgIGdyb3VwcyA9IFtdLFxuICAgIGpvaW5zID0gW10sXG4gICAgaGFuZGxlcixcbiAgICBsaW1pdCA9IG51bGwsXG4gICAgb2Zmc2V0ID0gbnVsbCxcbiAgICBvcmRlcnMgPSBbXSxcbiAgICBwYWdlID0gbnVsbCxcbiAgICBwZXJQYWdlLFxuICAgIHByZWxvYWQgPSB7fSxcbiAgICBwcmVsb2FkU2VsZWN0cyA9IHt9LFxuICAgIHByZWxvYWRTZWxlY3RzRXh0cmEgPSB7fSxcbiAgICBkaXN0aW5jdCA9IGZhbHNlLFxuICAgIHNlbGVjdHMgPSBbXSxcbiAgICB3aGVyZXMgPSBbXVxuICB9KSB7XG4gICAgaWYgKCFkcml2ZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGRyaXZlciBnaXZlbiB0byBxdWVyeVwiKVxuICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gaGFuZGxlciBnaXZlbiB0byBxdWVyeVwiKVxuXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHsoKSA9PiBpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gKi9cbiAgICB0aGlzLl9kcml2ZXJGbiA9IHR5cGVvZiBkcml2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IGRyaXZlciA6ICgpID0+IGRyaXZlclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLl9mcm9tcyA9IGZyb21zXG4gICAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzXG4gICAgdGhpcy5fam9pbnMgPSBqb2luc1xuICAgIHRoaXMuX2xpbWl0ID0gbGltaXRcbiAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXRcbiAgICB0aGlzLl9vcmRlcnMgPSBvcmRlcnNcbiAgICB0aGlzLl9wYWdlID0gcGFnZVxuICAgIHRoaXMuX3BlclBhZ2UgPSBwZXJQYWdlXG4gICAgdGhpcy5fcHJlbG9hZCA9IHByZWxvYWRcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSAqL1xuICAgIHRoaXMuX3ByZWxvYWRTZWxlY3RzID0gcHJlbG9hZFNlbGVjdHNcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSAqL1xuICAgIHRoaXMuX3ByZWxvYWRTZWxlY3RzRXh0cmEgPSBwcmVsb2FkU2VsZWN0c0V4dHJhXG4gICAgdGhpcy5fZGlzdGluY3QgPSBkaXN0aW5jdFxuICAgIHRoaXMuX3NlbGVjdHMgPSBzZWxlY3RzXG5cbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtYmFzZS5qc1wiKS5kZWZhdWx0W119ICovXG4gICAgdGhpcy5fd2hlcmVzID0gd2hlcmVzXG5cbiAgICBjb25zdCBib3VuZFdoZXJlID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUgez99ICovICh0aGlzLndoZXJlLmJpbmQodGhpcykpXG4gICAgYm91bmRXaGVyZS5ub3QgPSB0aGlzLndoZXJlTm90LmJpbmQodGhpcylcbiAgICB0aGlzLndoZXJlID0gYm91bmRXaGVyZVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgY2xvbmUuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBjbG9uZS5cbiAgICovXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IFF1ZXJ5Q2xhc3MgPSAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7bmV3IChhcmdzOiBRdWVyeUFyZ3NUeXBlKSA9PiB0aGlzfSAqLyAodGhpcy5jb25zdHJ1Y3RvcilcbiAgICBjb25zdCBuZXdRdWVyeSA9IG5ldyBRdWVyeUNsYXNzKHtcbiAgICAgIGRyaXZlcjogdGhpcy5fZHJpdmVyRm4sXG4gICAgICBmcm9tczogWy4uLnRoaXMuX2Zyb21zXSxcbiAgICAgIGhhbmRsZXI6IHRoaXMuaGFuZGxlci5jbG9uZSgpLFxuICAgICAgZ3JvdXBzOiBbLi4udGhpcy5fZ3JvdXBzXSxcbiAgICAgIGpvaW5zOiBbLi4udGhpcy5fam9pbnNdLFxuICAgICAgbGltaXQ6IHRoaXMuX2xpbWl0LFxuICAgICAgb2Zmc2V0OiB0aGlzLl9vZmZzZXQsXG4gICAgICBvcmRlcnM6IFsuLi50aGlzLl9vcmRlcnNdLFxuICAgICAgcGFnZTogdGhpcy5fcGFnZSxcbiAgICAgIHBlclBhZ2U6IHRoaXMuX3BlclBhZ2UsXG4gICAgICBwcmVsb2FkOiB7Li4udGhpcy5fcHJlbG9hZH0sXG4gICAgICBkaXN0aW5jdDogdGhpcy5fZGlzdGluY3QsXG4gICAgICBzZWxlY3RzOiBbLi4udGhpcy5fc2VsZWN0c10sXG4gICAgICB3aGVyZXM6IFsuLi50aGlzLl93aGVyZXNdXG4gICAgfSlcblxuICAgIHJldHVybiBuZXdRdWVyeVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGZyb21zLlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9mcm9tLWJhc2UuanNcIikuZGVmYXVsdFtdfSAtIFRoZSBmcm9tcy5cbiAgICovXG4gIGdldEZyb21zKCkge1xuICAgIHJldHVybiB0aGlzLl9mcm9tc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IGdyb3Vwcy5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfSAtIFRoZSBncm91cHMuXG4gICAqL1xuICBnZXRHcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dyb3Vwc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ2V0IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9xdWVyeS1wYXJzZXIvb3B0aW9ucy5qc1wiKS5kZWZhdWx0fSAtIFRoZSBvcHRpb25zIG9wdGlvbnMuXG4gICAqL1xuICBnZXRPcHRpb25zKCkgeyByZXR1cm4gdGhpcy5kcml2ZXIub3B0aW9ucygpIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgc2VsZWN0cy5cbiAgICogQHJldHVybnMge0FycmF5PGltcG9ydChcIi4vc2VsZWN0LWJhc2UuanNcIikuZGVmYXVsdD59IC0gVGhlIHNlbGVjdHMuXG4gICAqL1xuICBnZXRTZWxlY3RzKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0cyB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZnJvbS5cbiAgICogQHBhcmFtIHtzdHJpbmd8aW1wb3J0KFwiLi9mcm9tLWJhc2UuanNcIikuZGVmYXVsdH0gZnJvbSAtIEZyb20uXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBmcm9tLlxuICAgKi9cbiAgZnJvbShmcm9tKSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09IFwic3RyaW5nXCIpIGZyb20gPSBuZXcgRnJvbVBsYWluKGZyb20pXG5cbiAgICB0aGlzLl9mcm9tcy5wdXNoKGZyb20pXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdyb3VwLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXAgLSBHcm91cC5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGdyb3VwLlxuICAgKi9cbiAgZ3JvdXAoZ3JvdXApIHtcbiAgICB0aGlzLl9ncm91cHMucHVzaChncm91cClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgam9pbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3RJbnB1dH0gam9pbiAtIEpvaW4gY2xhdXNlIG9yIGpvaW4gZGVzY3JpcHRvci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGpvaW5zLlxuICAgKi9cbiAgam9pbnMoam9pbikge1xuICAgIGlmICh0eXBlb2Ygam9pbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9qb2lucy5wdXNoKG5ldyBKb2luUGxhaW4oam9pbikpXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGpvaW4pKSB7XG4gICAgICB0aGlzLl9qb2lucy5wdXNoKG5ldyBKb2luT2JqZWN0KG5vcm1hbGl6ZUpvaW5PYmplY3Qoam9pbikpKVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChqb2luKSkge1xuICAgICAgdGhpcy5fam9pbnMucHVzaChuZXcgSm9pbk9iamVjdChub3JtYWxpemVKb2luT2JqZWN0KGpvaW4pKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2Ygam9pbjogJHt0eXBlb2Ygam9pbn1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBsaW1pdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gdXNlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgbGltaXQuXG4gICAqL1xuICBsaW1pdCh2YWx1ZSkge1xuICAgIHRoaXMuX2xpbWl0ID0gdmFsdWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgb2Zmc2V0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBWYWx1ZSB0byB1c2UuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBvZmZzZXQuXG4gICAqL1xuICBvZmZzZXQodmFsdWUpIHtcbiAgICB0aGlzLl9vZmZzZXQgPSB2YWx1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBvcmRlci5cbiAgICogQHBhcmFtIHtPcmRlckFyZ3VtZW50VHlwZX0gb3JkZXIgLSBPcmRlci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIG9yZGVyLlxuICAgKi9cbiAgb3JkZXIob3JkZXIpIHtcbiAgICBpZiAodHlwZW9mIG9yZGVyID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG5ldyBPcmRlclBsYWluKHRoaXMsIG9yZGVyKSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcmRlciA9PSBcIm51bWJlclwiKSB7XG4gICAgICB0aGlzLl9vcmRlcnMucHVzaChuZXcgT3JkZXJQbGFpbih0aGlzLCBgJHtvcmRlcn1gKSlcbiAgICB9IGVsc2UgaWYgKG9yZGVyIGluc3RhbmNlb2YgT3JkZXJCYXNlKSB7XG4gICAgICB0aGlzLl9vcmRlcnMucHVzaChvcmRlcilcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3JkZXIpKSB7XG4gICAgICB0aGlzLl9vcmRlcnMucHVzaChuZXcgT3JkZXJDb2x1bW4odGhpcywgb3JkZXIpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gb3JkZXIgdHlwZTogJHt0eXBlb2Ygb3JkZXJ9YClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcGFnZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VOdW1iZXIgLSBQYWdlIG51bWJlci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBhZ2UuXG4gICAqL1xuICBwYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICB0aGlzLl9wYWdlID0gcGFnZU51bWJlclxuICAgIHRoaXMuX2FwcGx5UGFnaW5hdGlvbigpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBlciBwYWdlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGVyUGFnZSAtIFBhZ2Ugc2l6ZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHBlciBwYWdlLlxuICAgKi9cbiAgcGVyUGFnZShwZXJQYWdlKSB7XG4gICAgdGhpcy5fcGVyUGFnZSA9IHBlclBhZ2VcbiAgICB0aGlzLl9hcHBseVBhZ2luYXRpb24oKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmUtZGVyaXZlIExJTUlUIGFuZCBPRkZTRVQgZnJvbSB3aGljaGV2ZXIgb2YgYF9wYWdlYCAvIGBfcGVyUGFnZWBcbiAgICogYXJlIGN1cnJlbnRseSBzZXQuIENhbGxlZCBmcm9tIGJvdGggYHBhZ2UoKWAgYW5kIGBwZXJQYWdlKClgIHNvIHRoZVxuICAgKiBjaGFpbmluZyBvcmRlciAoYHBhZ2UobikucGVyUGFnZShwcClgIHZzIGBwZXJQYWdlKHBwKS5wYWdlKG4pYCkgbm9cbiAgICogbG9uZ2VyIGRldGVybWluZXMgd2hpY2ggcGVyUGFnZSB2YWx1ZSB3aW5zIOKAlCB0aGUgbGFzdCB2YWx1ZSBvZlxuICAgKiBlYWNoIHNldHRlciBhbHdheXMgdGFrZXMgZWZmZWN0LlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIF9hcHBseVBhZ2luYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuX3BhZ2UgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICBjb25zdCBwZXJQYWdlID0gdGhpcy5fcGVyUGFnZSB8fCAzMFxuICAgIGNvbnN0IG9mZnNldCA9ICh0aGlzLl9wYWdlIC0gMSkgKiBwZXJQYWdlXG5cbiAgICB0aGlzLmxpbWl0KHBlclBhZ2UpXG4gICAgdGhpcy5vZmZzZXQob2Zmc2V0KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcmVvcmRlci5cbiAgICogQHBhcmFtIHtPcmRlckFyZ3VtZW50VHlwZX0gb3JkZXIgLSBPcmRlci5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHJlb3JkZXIuXG4gICAqL1xuICByZW9yZGVyKG9yZGVyKSB7XG4gICAgdGhpcy5fb3JkZXJzID0gW11cbiAgICB0aGlzLm9yZGVyKG9yZGVyKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyByZXZlcnNlIG9yZGVyLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcmV2ZXJzZSBvcmRlci5cbiAgICovXG4gIHJldmVyc2VPcmRlcigpIHtcbiAgICBmb3IgKGNvbnN0IG9yZGVyIG9mIHRoaXMuX29yZGVycykge1xuICAgICAgb3JkZXIuc2V0UmV2ZXJzZU9yZGVyKHRydWUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGRpc3RpbmN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt2YWx1ZV0gLSBWYWx1ZSB0byB1c2UuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBkaXN0aW5jdC5cbiAgICovXG4gIGRpc3RpbmN0KHZhbHVlID0gdHJ1ZSkge1xuICAgIHRoaXMuX2Rpc3RpbmN0ID0gdmFsdWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBjdXJyZW50IHNldCBvZiBgU0VMRUNUYCBjbGF1c2VzIHdpdGggdGhlIGdpdmVuIG9uZXMuXG4gICAqIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgc2VsZWN0KC4uLilgIGFmdGVyIGZpcnN0IHdpcGluZyBhbnkgcHJldmlvdXNseVxuICAgKiBhY2N1bXVsYXRlZCBzZWxlY3RzIOKAlCBtaXJyb3JzIEFjdGl2ZSBSZWNvcmQncyBgcmVzZWxlY3RgLiBQYXNzIG5vXG4gICAqIGFyZ3VtZW50IChvciBhbiBlbXB0eSBhcnJheSkgdG8gZHJvcCB0aGUgcHJvamVjdGlvbiBlbnRpcmVseSBzbyB0aGVcbiAgICogZHJpdmVyIGZhbGxzIGJhY2sgdG8gaXRzIGRlZmF1bHQgYFNFTEVDVCAqYC5cbiAgICogQHBhcmFtIHtTZWxlY3RBcmd1bWVudFR5cGV9IFtzZWxlY3RdIC0gU2VsZWN0IHRvIHJlcGxhY2UgZXhpc3Rpbmcgc2VsZWN0cyB3aXRoLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcXVlcnkgZm9yIGNoYWluaW5nLlxuICAgKi9cbiAgcmVzZWxlY3Qoc2VsZWN0KSB7XG4gICAgdGhpcy5fc2VsZWN0cyA9IFtdXG5cbiAgICBpZiAodHlwZW9mIHNlbGVjdCA9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gdGhpc1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0KHNlbGVjdClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNlbGVjdC5cbiAgICogQHBhcmFtIHtTZWxlY3RBcmd1bWVudFR5cGV9IHNlbGVjdCAtIFNlbGVjdC5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIHNlbGVjdC5cbiAgICovXG4gIHNlbGVjdChzZWxlY3QpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3QpKSB7XG4gICAgICBmb3IgKGNvbnN0IHNlbGVjdEluQXJyYXkgb2Ygc2VsZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0KHNlbGVjdEluQXJyYXkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZWxlY3QgPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fc2VsZWN0cy5wdXNoKG5ldyBTZWxlY3RQbGFpbihzZWxlY3QpKVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0IGluc3RhbmNlb2YgU2VsZWN0QmFzZSkge1xuICAgICAgdGhpcy5fc2VsZWN0cy5wdXNoKHNlbGVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNlbGVjdCB0eXBlOiAke3R5cGVvZiBzZWxlY3R9YClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZXhlY3V0ZSBxdWVyeS5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXSAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MubG9nTmFtZV0gLSBRdWVyeSBsb2cgbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8b2JqZWN0Pj59IEFycmF5IG9mIHJlc3VsdHMgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGFzeW5jIF9leGVjdXRlUXVlcnkoe2xvZ05hbWUgPSB0aGlzLnF1ZXJ5TG9nTmFtZShcIkxvYWRcIil9ID0ge30pIHtcbiAgICBjb25zdCBzcWwgPSB0aGlzLnRvU3FsKClcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5kcml2ZXIucXVlcnkoc3FsLCB7bG9nTmFtZX0pXG5cbiAgICByZXR1cm4gcmVzdWx0c1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcmVzdWx0cy5cbiAgICogQHJldHVybnMge1Byb21pc2U8QXJyYXk8b2JqZWN0Pj59IEFycmF5IG9mIHJlc3VsdHMgZnJvbSB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGFzeW5jIHJlc3VsdHMoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2V4ZWN1dGVRdWVyeSgpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBxdWVyeSBsb2cgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wZXJhdGlvbiAtIFF1ZXJ5IG9wZXJhdGlvbi5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBRdWVyeSBsb2cgbmFtZS5cbiAgICovXG4gIHF1ZXJ5TG9nTmFtZShvcGVyYXRpb24pIHtcbiAgICB2b2lkIG9wZXJhdGlvblxuICAgIHJldHVybiBcIlNRTFwiXG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIFNRTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgcXVlcnlcbiAgICogQHJldHVybnMge3N0cmluZ30gU1FMIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBxdWVyeVxuICAgKi9cbiAgdG9TcWwoKSB7IHJldHVybiB0aGlzLmRyaXZlci5xdWVyeVRvU3FsKHRoaXMpIH1cblxuICAvKipcbiAgICogUnVucyB3aGVyZS5cbiAgICogQHBhcmFtIHtXaGVyZUFyZ3VtZW50VHlwZX0gd2hlcmUgLSBXaGVyZS5cbiAgICogQHJldHVybnMge3RoaXN9IFRoaXMgcXVlcnkgaW5zdGFuY2VcbiAgICovXG4gIHdoZXJlKHdoZXJlKSB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl93aGVyZXMucHVzaChuZXcgV2hlcmVQbGFpbih0aGlzLCB3aGVyZSkpXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygd2hlcmUgPT0gXCJvYmplY3RcIiAmJiAod2hlcmUuY29uc3RydWN0b3IubmFtZSA9PSBcIm9iamVjdFwiIHx8IHdoZXJlLmNvbnN0cnVjdG9yLm5hbWUgPT0gXCJPYmplY3RcIikpIHtcbiAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZUhhc2godGhpcywgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtaGFzaC5qc1wiKS5XaGVyZUhhc2h9ICovICh3aGVyZSkpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB3aGVyZTogJHt0eXBlb2Ygd2hlcmV9ICgke3doZXJlLmNvbnN0cnVjdG9yLm5hbWV9KWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZXJlIG5vdC5cbiAgICogQHBhcmFtIHtXaGVyZUFyZ3VtZW50VHlwZX0gd2hlcmUgLSBXaGVyZS5cbiAgICogQHJldHVybnMge3RoaXN9IFRoaXMgcXVlcnkgaW5zdGFuY2VcbiAgICovXG4gIHdoZXJlTm90KHdoZXJlKSB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl93aGVyZXMucHVzaChuZXcgV2hlcmVOb3QobmV3IFdoZXJlUGxhaW4odGhpcywgd2hlcmUpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aGVyZSA9PSBcIm9iamVjdFwiICYmICh3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwib2JqZWN0XCIgfHwgd2hlcmUuY29uc3RydWN0b3IubmFtZSA9PSBcIk9iamVjdFwiKSkge1xuICAgICAgdGhpcy5fd2hlcmVzLnB1c2gobmV3IFdoZXJlTm90KG5ldyBXaGVyZUhhc2godGhpcywgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi93aGVyZS1oYXNoLmpzXCIpLldoZXJlSGFzaH0gKi8gKHdoZXJlKSkpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB3aGVyZTogJHt0eXBlb2Ygd2hlcmV9ICgke3doZXJlLmNvbnN0cnVjdG9yLm5hbWV9KWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyB0aGUgY3VycmVudCBkcml2ZXIgbGF6aWx5LlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vZHJpdmVycy9iYXNlLmpzXCIpLmRlZmF1bHR9IC0gQSB2YWx1ZS5cbiAgICovXG4gIGdldCBkcml2ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyaXZlckZuKClcbiAgfVxufVxuIl19
|
|
463
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUM3QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLFdBQVcsTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLFNBQVMsTUFBTSxpQkFBaUIsQ0FBQTtBQUN2QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUV6Qzs7Ozs7O0dBTUc7QUFFSDs7OztHQUlHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxJQUFJO0lBQy9CLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFFcEIsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM1QixPQUFPLEVBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUMsQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDeEI7OzJEQUVtRDtRQUNuRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUE7UUFFakIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLEVB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RUFBRSxrREFBa0QsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2xILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxLQUFLLEtBQUssS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZGLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUN6QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IEZyb21QbGFpbiBmcm9tIFwiLi9mcm9tLXBsYWluLmpzXCJcbmltcG9ydCB7aXNQbGFpbk9iamVjdH0gZnJvbSBcImlzLXBsYWluLW9iamVjdFwiXG5pbXBvcnQgSm9pbk9iamVjdCBmcm9tIFwiLi9qb2luLW9iamVjdC5qc1wiXG5pbXBvcnQgSm9pblBsYWluIGZyb20gXCIuL2pvaW4tcGxhaW4uanNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vLi4vbG9nZ2VyLmpzXCJcbmltcG9ydCBPcmRlckJhc2UgZnJvbSBcIi4vb3JkZXItYmFzZS5qc1wiXG5pbXBvcnQgT3JkZXJDb2x1bW4gZnJvbSBcIi4vb3JkZXItY29sdW1uLmpzXCJcbmltcG9ydCBPcmRlclBsYWluIGZyb20gXCIuL29yZGVyLXBsYWluLmpzXCJcbmltcG9ydCBTZWxlY3RCYXNlIGZyb20gXCIuL3NlbGVjdC1iYXNlLmpzXCJcbmltcG9ydCBTZWxlY3RQbGFpbiBmcm9tIFwiLi9zZWxlY3QtcGxhaW4uanNcIlxuaW1wb3J0IFdoZXJlSGFzaCBmcm9tIFwiLi93aGVyZS1oYXNoLmpzXCJcbmltcG9ydCBXaGVyZU5vdCBmcm9tIFwiLi93aGVyZS1ub3QuanNcIlxuaW1wb3J0IFdoZXJlUGxhaW4gZnJvbSBcIi4vd2hlcmUtcGxhaW4uanNcIlxuXG4vKipcbiAqIE9yZGVyQXJndW1lbnRUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IGJvb2xlYW4gfCBzdHJpbmcgfCBzdHJpbmdbXSB8IE5lc3RlZFByZWxvYWRSZWNvcmQgfX0gTmVzdGVkUHJlbG9hZFJlY29yZFxuICogQHR5cGVkZWYge3N0cmluZyB8IG51bWJlciB8IGltcG9ydChcIi4vb3JkZXItYmFzZS5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9vcmRlci1jb2x1bW4uanNcIikuT3JkZXJDb2x1bW5JbnB1dH0gT3JkZXJBcmd1bWVudFR5cGVcbiAqIEB0eXBlZGVmIHtzdHJpbmcgfCBzdHJpbmdbXSB8IGltcG9ydChcIi4vc2VsZWN0LWJhc2UuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vc2VsZWN0LWJhc2UuanNcIikuZGVmYXVsdFtdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+fSBTZWxlY3RBcmd1bWVudFR5cGVcbiAqIEB0eXBlZGVmIHtvYmplY3QgfCBzdHJpbmd9IFdoZXJlQXJndW1lbnRUeXBlXG4gKi9cblxuLyoqXG4gKiBSdW5zIG5vcm1hbGl6ZSBqb2luIG9iamVjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0SW5wdXQgfCBzdHJpbmcgfCBzdHJpbmdbXX0gam9pbiAtIEpvaW4gZGF0YSBpbiBzaG9ydGhhbmQgb3IgbmVzdGVkIGZvcm0uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAtIE5vcm1hbGl6ZWQgam9pbiByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUpvaW5PYmplY3Qoam9pbikge1xuICBpZiAoIWpvaW4pIHJldHVybiB7fVxuXG4gIGlmICh0eXBlb2Ygam9pbiA9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHtbam9pbl06IHRydWV9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShqb2luKSkge1xuICAgIC8qKlxuICAgICAqIFJlc3VsdC5cbiAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGpvaW4pIHtcbiAgICAgIGlmICh0eXBlb2YgZW50cnkgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc3VsdFtlbnRyeV1cbiAgICAgICAgcmVzdWx0W2VudHJ5XSA9IG1lcmdlSm9pblZhbHVlKGV4aXN0aW5nLCB0cnVlKVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChlbnRyeSkpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUpvaW5PYmplY3QoZW50cnkpXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IHJlc3VsdFtrZXldXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGpvaW4gZW50cnkgdHlwZTogJHt0eXBlb2YgZW50cnl9YClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3Qoam9pbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgam9pbiB0eXBlOiAke3R5cGVvZiBqb2lufWApXG4gIH1cblxuICAvKipcbiAgICogUmVzdWx0LlxuICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9qb2luLW9iamVjdC5qc1wiKS5Kb2luT2JqZWN0fSAqL1xuICBjb25zdCByZXN1bHQgPSB7fVxuXG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpvaW4pKSB7XG4gICAgaWYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRba2V5XVxuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgdmFsdWUpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSByZXN1bHRba2V5XVxuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZUpvaW5WYWx1ZShleGlzdGluZywgbm9ybWFsaXplSm9pbk9iamVjdCh2YWx1ZSkpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBqb2luIHZhbHVlIGZvciAke2tleX06ICR7dHlwZW9mIHZhbHVlfWApXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogUnVucyBtZXJnZSBqb2luIHZhbHVlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3Rbc3RyaW5nXSB8IHVuZGVmaW5lZH0gZXhpc3RpbmcgLSBFeGlzdGluZyBub3JtYWxpemVkIGpvaW4gdmFsdWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vam9pbi1vYmplY3QuanNcIikuSm9pbk9iamVjdFtzdHJpbmddfSBpbmNvbWluZyAtIEluY29taW5nIG5vcm1hbGl6ZWQgam9pbiB2YWx1ZS5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2pvaW4tb2JqZWN0LmpzXCIpLkpvaW5PYmplY3Rbc3RyaW5nXX0gLSBNZXJnZWQgam9pbiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VKb2luVmFsdWUoZXhpc3RpbmcsIGluY29taW5nKSB7XG4gIGlmICghZXhpc3RpbmcpIHJldHVybiBpbmNvbWluZ1xuICBpZiAoZXhpc3RpbmcgPT09IHRydWUgfHwgaW5jb21pbmcgPT09IHRydWUpIHJldHVybiB0cnVlXG5cbiAgaWYgKHR5cGVvZiBleGlzdGluZyA9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBpbmNvbWluZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHsuLi5leGlzdGluZywgLi4uaW5jb21pbmd9XG4gIH1cblxuICByZXR1cm4gaW5jb21pbmdcbn1cblxuLyoqXG4gKiBRdWVyeUFyZ3NUeXBlIHR5cGUuXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBRdWVyeUFyZ3NUeXBlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0IHwgKCgpID0+IGltcG9ydChcIi4uL2RyaXZlcnMvYmFzZS5qc1wiKS5kZWZhdWx0KX0gZHJpdmVyIC0gRHJpdmVyIGluc3RhbmNlIG9yIGZhY3RvcnkgZm9yIHF1ZXJ5IGV4ZWN1dGlvbi5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9mcm9tLWJhc2UuanNcIikuZGVmYXVsdD59IFtmcm9tc10gLSBGUk9NIGNsYXVzZXMgZm9yIHRoZSBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IFtncm91cHNdIC0gR1JPVVAgQlkgY29sdW1ucy5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi9qb2luLWJhc2UuanNcIikuZGVmYXVsdD59IFtqb2luc10gLSBKT0lOIGNsYXVzZXMgZm9yIHRoZSBxdWVyeS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi4vaGFuZGxlci5qc1wiKS5kZWZhdWx0fSBoYW5kbGVyIC0gSGFuZGxlciB1c2VkIGZvciBleGVjdXRpbmcgYW5kIHRyYW5zZm9ybWluZyByZXN1bHRzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbbGltaXRdIC0gTElNSVQgY2xhdXNlIHZhbHVlLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbb2Zmc2V0XSAtIE9GRlNFVCBjbGF1c2UgdmFsdWUuXG4gKiBAcHJvcGVydHkge0FycmF5PGltcG9ydChcIi4vb3JkZXItYmFzZS5qc1wiKS5kZWZhdWx0Pn0gW29yZGVyc10gLSBPUkRFUiBCWSBjbGF1c2VzLlxuICogQHByb3BlcnR5IHtudW1iZXIgfCBudWxsfSBbcGFnZV0gLSBQYWdlIG51bWJlciBmb3IgcGFnaW5hdGlvbi5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcGVyUGFnZV0gLSBSZWNvcmRzIHBlciBwYWdlIGZvciBwYWdpbmF0aW9uLlxuICogQHByb3BlcnR5IHtOZXN0ZWRQcmVsb2FkUmVjb3JkfSBbcHJlbG9hZF0gLSBQcmVsb2FkIGdyYXBoIGZvciByZWxhdGVkIHJlY29yZHMuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3ByZWxvYWRTZWxlY3RzXSAtIEF0dHJpYnV0ZSBuYW1lcyB0byBsb2FkIGZvciBwcmVsb2FkZWQgcmVsYXRpb25zaGlwcywga2V5ZWQgYnkgdGFyZ2V0IG1vZGVsIG5hbWUuXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHN0cmluZ1tdPn0gW3ByZWxvYWRTZWxlY3RzRXh0cmFdIC0gRXh0cmEgc2VsZWN0cyB0byBsb2FkIGluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0cyBmb3IgcHJlbG9hZGVkIHJlbGF0aW9uc2hpcHMsIGtleWVkIGJ5IHRhcmdldCBtb2RlbCBuYW1lLlxuICogQHByb3BlcnR5IHtBcnJheTxpbXBvcnQoXCIuL3NlbGVjdC1iYXNlLmpzXCIpLmRlZmF1bHQ+fSBbc2VsZWN0c10gLSBTRUxFQ1QgY2xhdXNlcyBmb3IgdGhlIHF1ZXJ5LlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZGlzdGluY3RdIC0gV2hldGhlciB0aGUgcXVlcnkgc2hvdWxkIHVzZSBESVNUSU5DVC5cbiAqIEBwcm9wZXJ0eSB7QXJyYXk8aW1wb3J0KFwiLi93aGVyZS1iYXNlLmpzXCIpLmRlZmF1bHQ+fSBbd2hlcmVzXSAtIFdIRVJFIGNvbmRpdGlvbnMgZm9yIHRoZSBxdWVyeS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5IHtcbiAgLyoqXG4gICAqIFJ1bnMgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7UXVlcnlBcmdzVHlwZX0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe1xuICAgIGRyaXZlcixcbiAgICBmcm9tcyA9IFtdLFxuICAgIGdyb3VwcyA9IFtdLFxuICAgIGpvaW5zID0gW10sXG4gICAgaGFuZGxlcixcbiAgICBsaW1pdCA9IG51bGwsXG4gICAgb2Zmc2V0ID0gbnVsbCxcbiAgICBvcmRlcnMgPSBbXSxcbiAgICBwYWdlID0gbnVsbCxcbiAgICBwZXJQYWdlLFxuICAgIHByZWxvYWQgPSB7fSxcbiAgICBwcmVsb2FkU2VsZWN0cyA9IHt9LFxuICAgIHByZWxvYWRTZWxlY3RzRXh0cmEgPSB7fSxcbiAgICBkaXN0aW5jdCA9IGZhbHNlLFxuICAgIHNlbGVjdHMgPSBbXSxcbiAgICB3aGVyZXMgPSBbXVxuICB9KSB7XG4gICAgaWYgKCFkcml2ZXIpIHRocm93IG5ldyBFcnJvcihcIk5vIGRyaXZlciBnaXZlbiB0byBxdWVyeVwiKVxuICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gaGFuZGxlciBnaXZlbiB0byBxdWVyeVwiKVxuXG4gICAgLyoqXG4gICAgICogTmFycm93cyB0aGUgcnVudGltZSB2YWx1ZSB0byB0aGUgZG9jdW1lbnRlZCB0eXBlLlxuICAgICAqIEB0eXBlIHsoKSA9PiBpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gKi9cbiAgICB0aGlzLl9kcml2ZXJGbiA9IHR5cGVvZiBkcml2ZXIgPT09IFwiZnVuY3Rpb25cIiA/IGRyaXZlciA6ICgpID0+IGRyaXZlclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLl9mcm9tcyA9IGZyb21zXG4gICAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzXG4gICAgdGhpcy5fam9pbnMgPSBqb2luc1xuICAgIHRoaXMuX2xpbWl0ID0gbGltaXRcbiAgICB0aGlzLl9vZmZzZXQgPSBvZmZzZXRcbiAgICB0aGlzLl9vcmRlcnMgPSBvcmRlcnNcbiAgICB0aGlzLl9wYWdlID0gcGFnZVxuICAgIHRoaXMuX3BlclBhZ2UgPSBwZXJQYWdlXG4gICAgdGhpcy5fcHJlbG9hZCA9IHByZWxvYWRcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSAqL1xuICAgIHRoaXMuX3ByZWxvYWRTZWxlY3RzID0gcHJlbG9hZFNlbGVjdHNcblxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nW10+fSAqL1xuICAgIHRoaXMuX3ByZWxvYWRTZWxlY3RzRXh0cmEgPSBwcmVsb2FkU2VsZWN0c0V4dHJhXG4gICAgdGhpcy5fZGlzdGluY3QgPSBkaXN0aW5jdFxuICAgIHRoaXMuX3NlbGVjdHMgPSBzZWxlY3RzXG5cbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtYmFzZS5qc1wiKS5kZWZhdWx0W119ICovXG4gICAgdGhpcy5fd2hlcmVzID0gd2hlcmVzXG5cbiAgICBjb25zdCBib3VuZFdoZXJlID0gLyoqIEB0eXBlIHs/fSAqLyAodGhpcy53aGVyZS5iaW5kKHRoaXMpKVxuICAgIGJvdW5kV2hlcmUubm90ID0gdGhpcy53aGVyZU5vdC5iaW5kKHRoaXMpXG4gICAgdGhpcy53aGVyZSA9IGJvdW5kV2hlcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGNsb25lLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgY2xvbmUuXG4gICAqL1xuICBjbG9uZSgpIHtcbiAgICBjb25zdCBRdWVyeUNsYXNzID0gLyoqIEB0eXBlIHtuZXcgKGFyZ3M6IFF1ZXJ5QXJnc1R5cGUpID0+IHRoaXN9ICovICh0aGlzLmNvbnN0cnVjdG9yKVxuICAgIGNvbnN0IG5ld1F1ZXJ5ID0gbmV3IFF1ZXJ5Q2xhc3Moe1xuICAgICAgZHJpdmVyOiB0aGlzLl9kcml2ZXJGbixcbiAgICAgIGZyb21zOiBbLi4udGhpcy5fZnJvbXNdLFxuICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLmNsb25lKCksXG4gICAgICBncm91cHM6IFsuLi50aGlzLl9ncm91cHNdLFxuICAgICAgam9pbnM6IFsuLi50aGlzLl9qb2luc10sXG4gICAgICBsaW1pdDogdGhpcy5fbGltaXQsXG4gICAgICBvZmZzZXQ6IHRoaXMuX29mZnNldCxcbiAgICAgIG9yZGVyczogWy4uLnRoaXMuX29yZGVyc10sXG4gICAgICBwYWdlOiB0aGlzLl9wYWdlLFxuICAgICAgcGVyUGFnZTogdGhpcy5fcGVyUGFnZSxcbiAgICAgIHByZWxvYWQ6IHsuLi50aGlzLl9wcmVsb2FkfSxcbiAgICAgIGRpc3RpbmN0OiB0aGlzLl9kaXN0aW5jdCxcbiAgICAgIHNlbGVjdHM6IFsuLi50aGlzLl9zZWxlY3RzXSxcbiAgICAgIHdoZXJlczogWy4uLnRoaXMuX3doZXJlc11cbiAgICB9KVxuXG4gICAgcmV0dXJuIG5ld1F1ZXJ5XG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZnJvbXMuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL2Zyb20tYmFzZS5qc1wiKS5kZWZhdWx0W119IC0gVGhlIGZyb21zLlxuICAgKi9cbiAgZ2V0RnJvbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb21zXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgZ3JvdXBzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IC0gVGhlIGdyb3Vwcy5cbiAgICovXG4gIGdldEdyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBnZXQgb3B0aW9ucy5cbiAgICogQHJldHVybnMge2ltcG9ydChcIi4uL3F1ZXJ5LXBhcnNlci9vcHRpb25zLmpzXCIpLmRlZmF1bHR9IC0gVGhlIG9wdGlvbnMgb3B0aW9ucy5cbiAgICovXG4gIGdldE9wdGlvbnMoKSB7IHJldHVybiB0aGlzLmRyaXZlci5vcHRpb25zKCkgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGdldCBzZWxlY3RzLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8aW1wb3J0KFwiLi9zZWxlY3QtYmFzZS5qc1wiKS5kZWZhdWx0Pn0gLSBUaGUgc2VsZWN0cy5cbiAgICovXG4gIGdldFNlbGVjdHMoKSB7IHJldHVybiB0aGlzLl9zZWxlY3RzIH1cblxuICAvKipcbiAgICogUnVucyBmcm9tLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xpbXBvcnQoXCIuL2Zyb20tYmFzZS5qc1wiKS5kZWZhdWx0fSBmcm9tIC0gRnJvbS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGZyb20uXG4gICAqL1xuICBmcm9tKGZyb20pIHtcbiAgICBpZiAodHlwZW9mIGZyb20gPT0gXCJzdHJpbmdcIikgZnJvbSA9IG5ldyBGcm9tUGxhaW4oZnJvbSlcblxuICAgIHRoaXMuX2Zyb21zLnB1c2goZnJvbSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZ3JvdXAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cCAtIEdyb3VwLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgZ3JvdXAuXG4gICAqL1xuICBncm91cChncm91cCkge1xuICAgIHRoaXMuX2dyb3Vwcy5wdXNoKGdyb3VwKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBqb2lucy5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IGltcG9ydChcIi4vam9pbi1vYmplY3QuanNcIikuSm9pbk9iamVjdElucHV0fSBqb2luIC0gSm9pbiBjbGF1c2Ugb3Igam9pbiBkZXNjcmlwdG9yLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgam9pbnMuXG4gICAqL1xuICBqb2lucyhqb2luKSB7XG4gICAgaWYgKHR5cGVvZiBqb2luID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX2pvaW5zLnB1c2gobmV3IEpvaW5QbGFpbihqb2luKSlcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoam9pbikpIHtcbiAgICAgIHRoaXMuX2pvaW5zLnB1c2gobmV3IEpvaW5PYmplY3Qobm9ybWFsaXplSm9pbk9iamVjdChqb2luKSkpXG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGpvaW4pKSB7XG4gICAgICB0aGlzLl9qb2lucy5wdXNoKG5ldyBKb2luT2JqZWN0KG5vcm1hbGl6ZUpvaW5PYmplY3Qoam9pbikpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdHlwZSBvZiBqb2luOiAke3R5cGVvZiBqb2lufWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGxpbWl0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBWYWx1ZSB0byB1c2UuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBsaW1pdC5cbiAgICovXG4gIGxpbWl0KHZhbHVlKSB7XG4gICAgdGhpcy5fbGltaXQgPSB2YWx1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBvZmZzZXQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIG9mZnNldC5cbiAgICovXG4gIG9mZnNldCh2YWx1ZSkge1xuICAgIHRoaXMuX29mZnNldCA9IHZhbHVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIG9yZGVyLlxuICAgKiBAcGFyYW0ge09yZGVyQXJndW1lbnRUeXBlfSBvcmRlciAtIE9yZGVyLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgb3JkZXIuXG4gICAqL1xuICBvcmRlcihvcmRlcikge1xuICAgIGlmICh0eXBlb2Ygb3JkZXIgPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5fb3JkZXJzLnB1c2gobmV3IE9yZGVyUGxhaW4odGhpcywgb3JkZXIpKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9yZGVyID09IFwibnVtYmVyXCIpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG5ldyBPcmRlclBsYWluKHRoaXMsIGAke29yZGVyfWApKVxuICAgIH0gZWxzZSBpZiAob3JkZXIgaW5zdGFuY2VvZiBPcmRlckJhc2UpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG9yZGVyKVxuICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChvcmRlcikpIHtcbiAgICAgIHRoaXMuX29yZGVycy5wdXNoKG5ldyBPcmRlckNvbHVtbih0aGlzLCBvcmRlcikpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBvcmRlciB0eXBlOiAke3R5cGVvZiBvcmRlcn1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBwYWdlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZU51bWJlciAtIFBhZ2UgbnVtYmVyLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcGFnZS5cbiAgICovXG4gIHBhZ2UocGFnZU51bWJlcikge1xuICAgIHRoaXMuX3BhZ2UgPSBwYWdlTnVtYmVyXG4gICAgdGhpcy5fYXBwbHlQYWdpbmF0aW9uKClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcGVyIHBhZ2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwZXJQYWdlIC0gUGFnZSBzaXplLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcGVyIHBhZ2UuXG4gICAqL1xuICBwZXJQYWdlKHBlclBhZ2UpIHtcbiAgICB0aGlzLl9wZXJQYWdlID0gcGVyUGFnZVxuICAgIHRoaXMuX2FwcGx5UGFnaW5hdGlvbigpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1kZXJpdmUgTElNSVQgYW5kIE9GRlNFVCBmcm9tIHdoaWNoZXZlciBvZiBgX3BhZ2VgIC8gYF9wZXJQYWdlYFxuICAgKiBhcmUgY3VycmVudGx5IHNldC4gQ2FsbGVkIGZyb20gYm90aCBgcGFnZSgpYCBhbmQgYHBlclBhZ2UoKWAgc28gdGhlXG4gICAqIGNoYWluaW5nIG9yZGVyIChgcGFnZShuKS5wZXJQYWdlKHBwKWAgdnMgYHBlclBhZ2UocHApLnBhZ2UobilgKSBub1xuICAgKiBsb25nZXIgZGV0ZXJtaW5lcyB3aGljaCBwZXJQYWdlIHZhbHVlIHdpbnMg4oCUIHRoZSBsYXN0IHZhbHVlIG9mXG4gICAqIGVhY2ggc2V0dGVyIGFsd2F5cyB0YWtlcyBlZmZlY3QuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgX2FwcGx5UGFnaW5hdGlvbigpIHtcbiAgICBpZiAodGhpcy5fcGFnZSA9PSBudWxsKSByZXR1cm5cblxuICAgIGNvbnN0IHBlclBhZ2UgPSB0aGlzLl9wZXJQYWdlIHx8IDMwXG4gICAgY29uc3Qgb2Zmc2V0ID0gKHRoaXMuX3BhZ2UgLSAxKSAqIHBlclBhZ2VcblxuICAgIHRoaXMubGltaXQocGVyUGFnZSlcbiAgICB0aGlzLm9mZnNldChvZmZzZXQpXG4gIH1cblxuICAvKipcbiAgICogUnVucyByZW9yZGVyLlxuICAgKiBAcGFyYW0ge09yZGVyQXJndW1lbnRUeXBlfSBvcmRlciAtIE9yZGVyLlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgcmVvcmRlci5cbiAgICovXG4gIHJlb3JkZXIob3JkZXIpIHtcbiAgICB0aGlzLl9vcmRlcnMgPSBbXVxuICAgIHRoaXMub3JkZXIob3JkZXIpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJldmVyc2Ugb3JkZXIuXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSByZXZlcnNlIG9yZGVyLlxuICAgKi9cbiAgcmV2ZXJzZU9yZGVyKCkge1xuICAgIGZvciAoY29uc3Qgb3JkZXIgb2YgdGhpcy5fb3JkZXJzKSB7XG4gICAgICBvcmRlci5zZXRSZXZlcnNlT3JkZXIodHJ1ZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZGlzdGluY3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ZhbHVlXSAtIFZhbHVlIHRvIHVzZS5cbiAgICogQHJldHVybnMge3RoaXN9IC0gVGhlIGRpc3RpbmN0LlxuICAgKi9cbiAgZGlzdGluY3QodmFsdWUgPSB0cnVlKSB7XG4gICAgdGhpcy5fZGlzdGluY3QgPSB2YWx1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgc2V0IG9mIGBTRUxFQ1RgIGNsYXVzZXMgd2l0aCB0aGUgZ2l2ZW4gb25lcy5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBzZWxlY3QoLi4uKWAgYWZ0ZXIgZmlyc3Qgd2lwaW5nIGFueSBwcmV2aW91c2x5XG4gICAqIGFjY3VtdWxhdGVkIHNlbGVjdHMg4oCUIG1pcnJvcnMgQWN0aXZlIFJlY29yZCdzIGByZXNlbGVjdGAuIFBhc3Mgbm9cbiAgICogYXJndW1lbnQgKG9yIGFuIGVtcHR5IGFycmF5KSB0byBkcm9wIHRoZSBwcm9qZWN0aW9uIGVudGlyZWx5IHNvIHRoZVxuICAgKiBkcml2ZXIgZmFsbHMgYmFjayB0byBpdHMgZGVmYXVsdCBgU0VMRUNUICpgLlxuICAgKiBAcGFyYW0ge1NlbGVjdEFyZ3VtZW50VHlwZX0gW3NlbGVjdF0gLSBTZWxlY3QgdG8gcmVwbGFjZSBleGlzdGluZyBzZWxlY3RzIHdpdGguXG4gICAqIEByZXR1cm5zIHt0aGlzfSAtIFRoZSBxdWVyeSBmb3IgY2hhaW5pbmcuXG4gICAqL1xuICByZXNlbGVjdChzZWxlY3QpIHtcbiAgICB0aGlzLl9zZWxlY3RzID0gW11cblxuICAgIGlmICh0eXBlb2Ygc2VsZWN0ID09IFwidW5kZWZpbmVkXCIpIHJldHVybiB0aGlzXG5cbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qoc2VsZWN0KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2VsZWN0LlxuICAgKiBAcGFyYW0ge1NlbGVjdEFyZ3VtZW50VHlwZX0gc2VsZWN0IC0gU2VsZWN0LlxuICAgKiBAcmV0dXJucyB7dGhpc30gLSBUaGUgc2VsZWN0LlxuICAgKi9cbiAgc2VsZWN0KHNlbGVjdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdCkpIHtcbiAgICAgIGZvciAoY29uc3Qgc2VsZWN0SW5BcnJheSBvZiBzZWxlY3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Qoc2VsZWN0SW5BcnJheSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNlbGVjdCA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl9zZWxlY3RzLnB1c2gobmV3IFNlbGVjdFBsYWluKHNlbGVjdCkpXG4gICAgfSBlbHNlIGlmIChzZWxlY3QgaW5zdGFuY2VvZiBTZWxlY3RCYXNlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RzLnB1c2goc2VsZWN0KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VsZWN0IHR5cGU6ICR7dHlwZW9mIHNlbGVjdH1gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogUnVucyBleGVjdXRlIHF1ZXJ5LlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5sb2dOYW1lXSAtIFF1ZXJ5IGxvZyBuYW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxvYmplY3Q+Pn0gQXJyYXkgb2YgcmVzdWx0cyBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgYXN5bmMgX2V4ZWN1dGVRdWVyeSh7bG9nTmFtZSA9IHRoaXMucXVlcnlMb2dOYW1lKFwiTG9hZFwiKX0gPSB7fSkge1xuICAgIGNvbnN0IHNxbCA9IHRoaXMudG9TcWwoKVxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmRyaXZlci5xdWVyeShzcWwsIHtsb2dOYW1lfSlcblxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICAvKipcbiAgICogUnVucyByZXN1bHRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxvYmplY3Q+Pn0gQXJyYXkgb2YgcmVzdWx0cyBmcm9tIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgYXN5bmMgcmVzdWx0cygpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fZXhlY3V0ZVF1ZXJ5KClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHF1ZXJ5IGxvZyBuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3BlcmF0aW9uIC0gUXVlcnkgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFF1ZXJ5IGxvZyBuYW1lLlxuICAgKi9cbiAgcXVlcnlMb2dOYW1lKG9wZXJhdGlvbikge1xuICAgIHZvaWQgb3BlcmF0aW9uXG4gICAgcmV0dXJuIFwiU1FMXCJcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgU1FMIHN0cmluZyByZXByZXNlbnRpbmcgdGhpcyBxdWVyeVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTUUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIHF1ZXJ5XG4gICAqL1xuICB0b1NxbCgpIHsgcmV0dXJuIHRoaXMuZHJpdmVyLnF1ZXJ5VG9TcWwodGhpcykgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZXJlLlxuICAgKiBAcGFyYW0ge1doZXJlQXJndW1lbnRUeXBlfSB3aGVyZSAtIFdoZXJlLlxuICAgKiBAcmV0dXJucyB7dGhpc30gVGhpcyBxdWVyeSBpbnN0YW5jZVxuICAgKi9cbiAgd2hlcmUod2hlcmUpIHtcbiAgICBpZiAodHlwZW9mIHdoZXJlID09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuX3doZXJlcy5wdXNoKG5ldyBXaGVyZVBsYWluKHRoaXMsIHdoZXJlKSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aGVyZSA9PSBcIm9iamVjdFwiICYmICh3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwib2JqZWN0XCIgfHwgd2hlcmUuY29uc3RydWN0b3IubmFtZSA9PSBcIk9iamVjdFwiKSkge1xuICAgICAgdGhpcy5fd2hlcmVzLnB1c2gobmV3IFdoZXJlSGFzaCh0aGlzLCAvKiogQHR5cGUge2ltcG9ydChcIi4vd2hlcmUtaGFzaC5qc1wiKS5XaGVyZUhhc2h9ICovICh3aGVyZSkpKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB3aGVyZTogJHt0eXBlb2Ygd2hlcmV9ICgke3doZXJlLmNvbnN0cnVjdG9yLm5hbWV9KWApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZXJlIG5vdC5cbiAgICogQHBhcmFtIHtXaGVyZUFyZ3VtZW50VHlwZX0gd2hlcmUgLSBXaGVyZS5cbiAgICogQHJldHVybnMge3RoaXN9IFRoaXMgcXVlcnkgaW5zdGFuY2VcbiAgICovXG4gIHdoZXJlTm90KHdoZXJlKSB7XG4gICAgaWYgKHR5cGVvZiB3aGVyZSA9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzLl93aGVyZXMucHVzaChuZXcgV2hlcmVOb3QobmV3IFdoZXJlUGxhaW4odGhpcywgd2hlcmUpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aGVyZSA9PSBcIm9iamVjdFwiICYmICh3aGVyZS5jb25zdHJ1Y3Rvci5uYW1lID09IFwib2JqZWN0XCIgfHwgd2hlcmUuY29uc3RydWN0b3IubmFtZSA9PSBcIk9iamVjdFwiKSkge1xuICAgICAgdGhpcy5fd2hlcmVzLnB1c2gobmV3IFdoZXJlTm90KG5ldyBXaGVyZUhhc2godGhpcywgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3doZXJlLWhhc2guanNcIikuV2hlcmVIYXNofSAqLyAod2hlcmUpKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHdoZXJlOiAke3R5cGVvZiB3aGVyZX0gKCR7d2hlcmUuY29uc3RydWN0b3IubmFtZX0pYClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBjdXJyZW50IGRyaXZlciBsYXppbHkuXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9kcml2ZXJzL2Jhc2UuanNcIikuZGVmYXVsdH0gLSBBIHZhbHVlLlxuICAgKi9cbiAgZ2V0IGRyaXZlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZHJpdmVyRm4oKVxuICB9XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-object.d.ts","sourceRoot":"","sources":["../../../../src/database/query/join-object.js"],"names":[],"mappings":"AAMA;;;;GAIG;AAEH;IACE;;;;OAIG;IACH,oBAHW,UAAU,aACV,MAAM,EAAE,EAMlB;IAFC,mBAAoB;IACpB,mBAAwB;IAG1B,
|
|
1
|
+
{"version":3,"file":"join-object.d.ts","sourceRoot":"","sources":["../../../../src/database/query/join-object.js"],"names":[],"mappings":"AAMA;;;;GAIG;AAEH;IACE;;;;OAIG;IACH,oBAHW,UAAU,aACV,MAAM,EAAE,EAMlB;IAFC,mBAAoB;IACpB,mBAAwB;IAG1B,gBAaC;IAED;;;;;;;;OAQG;IACH,iBAPW,UAAU,cACV,cAAc,oBAAoB,EAAE,OAAO,OAC3C,MAAM,cACN,MAAM,QACN,MAAM,EAAE,GACN,MAAM,CAwDlB;IAED;;;;;;;;;OASG;IACH,+EAPG;QAAgE,YAAY,EAApE,OAAO,iCAAiC,EAAE,OAAO;QACF,KAAK,EAApD,OAAO,wBAAwB,EAAE,OAAO;QACU,gBAAgB,EAAlE,cAAc,oBAAoB,EAAE,OAAO;QAC5B,QAAQ,EAAvB,MAAM,EAAE;QACK,cAAc,EAA3B,MAAM;KACd,GAAU,MAAM,CAkBlB;IAED;;;;;OAKG;IACH,yBAJW,OAAO,iBAAiB,EAAE,OAAO,kBACjC,MAAM,GACJ,MAAM,CAuBlB;CACF;;;;8BAxJY;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,eAAe,CAAA;CAAC;;;;yBAC9D;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;CAAC;qBAP7B,gBAAgB"}
|
|
@@ -23,12 +23,8 @@ export default class VelociousDatabaseQueryJoinObject extends JoinBase {
|
|
|
23
23
|
if (query.constructor.name != "VelociousDatabaseQueryModelClassQuery") {
|
|
24
24
|
throw new Error(`Query has to be a ModelClassQuery but was a ${query.constructor.name}`);
|
|
25
25
|
}
|
|
26
|
-
const modelQuery = /**
|
|
27
|
-
|
|
28
|
-
* @type {import("./model-class-query.js").default} */ (query);
|
|
29
|
-
const ModelClass = /**
|
|
30
|
-
* Narrows the runtime value to the documented type.
|
|
31
|
-
* @type {typeof import("../record/index.js").default} */ (this.basePath.length > 0 ? modelQuery._resolveModelClassForJoinPath(this.basePath) : modelQuery.modelClass);
|
|
26
|
+
const modelQuery = /** @type {import("./model-class-query.js").default} */ (query);
|
|
27
|
+
const ModelClass = /** @type {typeof import("../record/index.js").default} */ (this.basePath.length > 0 ? modelQuery._resolveModelClassForJoinPath(this.basePath) : modelQuery.modelClass);
|
|
32
28
|
return this.joinObject(this.object, ModelClass, "", 0, modelQuery.getJoinBasePath().concat(this.basePath));
|
|
33
29
|
}
|
|
34
30
|
/**
|
|
@@ -43,9 +39,7 @@ export default class VelociousDatabaseQueryJoinObject extends JoinBase {
|
|
|
43
39
|
joinObject(join, modelClass, sql, joinsCount, path) {
|
|
44
40
|
const pretty = this.pretty;
|
|
45
41
|
const conn = this.getQuery().driver;
|
|
46
|
-
const query = /**
|
|
47
|
-
* Narrows the runtime value to the documented type.
|
|
48
|
-
* @type {import("./model-class-query.js").default} */ (this.getQuery());
|
|
42
|
+
const query = /** @type {import("./model-class-query.js").default} */ (this.getQuery());
|
|
49
43
|
for (const joinKey in join) {
|
|
50
44
|
const joinValue = join[joinKey];
|
|
51
45
|
const relationship = modelClass.getRelationshipByName(joinKey);
|
|
@@ -139,4 +133,4 @@ export default class VelociousDatabaseQueryJoinObject extends JoinBase {
|
|
|
139
133
|
return where.toSql();
|
|
140
134
|
}
|
|
141
135
|
}
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pbi1vYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvam9pbi1vYmplY3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JDLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFBO0FBRXJDOzs7O0dBSUc7QUFFSCxNQUFNLENBQUMsT0FBTyxPQUFPLGdDQUFpQyxTQUFRLFFBQVE7SUFDcEU7Ozs7T0FJRztJQUNILFlBQVksTUFBTSxFQUFFLFFBQVEsR0FBRyxFQUFFO1FBQy9CLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDMUIsQ0FBQztJQUVELEtBQUs7UUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFN0IsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSx1Q0FBdUMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUMxRixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUc7O2lGQUVzRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakYsTUFBTSxVQUFVLEdBQUc7O29GQUV5RCxDQUFDLENBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FDM0csQ0FBQTtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUs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QUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQzNILE1BQU0sUUFBUSxHQUFHLFNBQVM7Z0JBQ3hCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDckIsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQTtZQUU5RCxPQUFPLFFBQVEsUUFBUSxHQUFHLENBQUE7UUFDNUIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgSm9pbkJhc2UgZnJvbSBcIi4vam9pbi1iYXNlLmpzXCJcbmltcG9ydCBXaGVyZUhhc2ggZnJvbSBcIi4vd2hlcmUtaGFzaC5qc1wiXG5pbXBvcnQgV2hlcmVOb3QgZnJvbSBcIi4vd2hlcmUtbm90LmpzXCJcblxuLyoqXG4gKiBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5Sm9pbk9iamVjdCBjbGFzcy5cbiAqIEB0eXBlZGVmIHt7W2tleTogc3RyaW5nXTogYm9vbGVhbiB8IHN0cmluZyB8IHN0cmluZ1tdIHwgSm9pbk9iamVjdElucHV0fX0gSm9pbk9iamVjdElucHV0XG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IGJvb2xlYW4gfCBKb2luT2JqZWN0fX0gSm9pbk9iamVjdFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlKb2luT2JqZWN0IGV4dGVuZHMgSm9pbkJhc2Uge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtKb2luT2JqZWN0fSBvYmplY3QgLSBPYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFtiYXNlUGF0aF0gLSBKb2luIGJhc2UgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBxdWVyeS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9iamVjdCwgYmFzZVBhdGggPSBbXSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdFxuICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aFxuICB9XG5cbiAgdG9TcWwoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFF1ZXJ5KClcblxuICAgIGlmIChxdWVyeS5jb25zdHJ1Y3Rvci5uYW1lICE9IFwiVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFF1ZXJ5IGhhcyB0byBiZSBhIE1vZGVsQ2xhc3NRdWVyeSBidXQgd2FzIGEgJHtxdWVyeS5jb25zdHJ1Y3Rvci5uYW1lfWApXG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxRdWVyeSA9IC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAqIEB0eXBlIHtpbXBvcnQoXCIuL21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHR9ICovIChxdWVyeSlcbiAgICBjb25zdCBNb2RlbENsYXNzID0gLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge3R5cGVvZiBpbXBvcnQoXCIuLi9yZWNvcmQvaW5kZXguanNcIikuZGVmYXVsdH0gKi8gKFxuICAgICAgdGhpcy5iYXNlUGF0aC5sZW5ndGggPiAwID8gbW9kZWxRdWVyeS5fcmVzb2x2ZU1vZGVsQ2xhc3NGb3JKb2luUGF0aCh0aGlzLmJhc2VQYXRoKSA6IG1vZGVsUXVlcnkubW9kZWxDbGFzc1xuICAgIClcblxuICAgIHJldHVybiB0aGlzLmpvaW5PYmplY3QodGhpcy5vYmplY3QsIE1vZGVsQ2xhc3MsIFwiXCIsIDAsIG1vZGVsUXVlcnkuZ2V0Sm9pbkJhc2VQYXRoKCkuY29uY2F0KHRoaXMuYmFzZVBhdGgpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgam9pbiBvYmplY3QuXG4gICAqIEBwYXJhbSB7Sm9pbk9iamVjdH0gam9pbiAtIEpvaW4uXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBtb2RlbENsYXNzIC0gTW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzcWwgLSBTUUwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gam9pbnNDb3VudCAtIEpvaW5zIGNvdW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gSm9pbiBwYXRoLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBqb2luIG9iamVjdC5cbiAgICovXG4gIGpvaW5PYmplY3Qoam9pbiwgbW9kZWxDbGFzcywgc3FsLCBqb2luc0NvdW50LCBwYXRoKSB7XG4gICAgY29uc3QgcHJldHR5ID0gdGhpcy5wcmV0dHlcbiAgICBjb25zdCBjb25uID0gdGhpcy5nZXRRdWVyeSgpLmRyaXZlclxuICAgIGNvbnN0IHF1ZXJ5ID0gLyoqXG4gICAgICAgICAgICAgICAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSAqLyAodGhpcy5nZXRRdWVyeSgpKVxuXG4gICAgZm9yIChjb25zdCBqb2luS2V5IGluIGpvaW4pIHtcbiAgICAgIGNvbnN0IGpvaW5WYWx1ZSA9IGpvaW5bam9pbktleV1cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zaGlwQnlOYW1lKGpvaW5LZXkpXG4gICAgICBjb25zdCB0YXJnZXRNb2RlbENsYXNzID0gcmVsYXRpb25zaGlwLmdldFRhcmdldE1vZGVsQ2xhc3MoKVxuXG4gICAgICBpZiAoIXRhcmdldE1vZGVsQ2xhc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWxhdGlvbnNoaXAgJHttb2RlbENsYXNzLm5hbWV9IyR7am9pbktleX0gaGFzIG5vIHRhcmdldCBtb2RlbCBjbGFzc2ApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpvaW5QYXRoID0gcGF0aC5jb25jYXQoW2pvaW5LZXldKVxuICAgICAgY29uc3QgcGFyZW50VGFibGVSZWYgPSBxdWVyeS5nZXRKb2luVGFibGVSZWZlcmVuY2UocGF0aClcbiAgICAgIGNvbnN0IHRhcmdldEVudHJ5ID0gcXVlcnkuX3JlZ2lzdGVySm9pblBhdGgoam9pblBhdGgpXG4gICAgICBjb25zdCB0YXJnZXRUYWJsZVJlZiA9IHRhcmdldEVudHJ5LmFsaWFzIHx8IHRhcmdldEVudHJ5LnRhYmxlTmFtZVxuICAgICAgY29uc3Qgam9pblRhYmxlU3FsID0gdGFyZ2V0RW50cnkuYWxpYXNcbiAgICAgICAgPyBgJHtjb25uLnF1b3RlVGFibGUodGFyZ2V0RW50cnkudGFibGVOYW1lKX0gQVMgJHtjb25uLnF1b3RlVGFibGUodGFyZ2V0RW50cnkuYWxpYXMpfWBcbiAgICAgICAgOiBjb25uLnF1b3RlVGFibGUodGFyZ2V0RW50cnkudGFibGVOYW1lKVxuXG4gICAgICBpZiAoam9pbnNDb3VudCA+IDApIHtcbiAgICAgICAgaWYgKHByZXR0eSkge1xuICAgICAgICAgIHNxbCArPSBcIlxcblxcblwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3FsICs9IFwiIFwiXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3FsICs9IGBMRUZUIEpPSU4gJHtqb2luVGFibGVTcWx9IE9OIGBcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJiZWxvbmdzVG9cIikge1xuICAgICAgICBzcWwgKz0gYCR7Y29ubi5xdW90ZVRhYmxlKHRhcmdldFRhYmxlUmVmKX0uJHtjb25uLnF1b3RlQ29sdW1uKHJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KCkpfSA9IGBcbiAgICAgICAgc3FsICs9IGAke2Nvbm4ucXVvdGVUYWJsZShwYXJlbnRUYWJsZVJlZil9LiR7Y29ubi5xdW90ZUNvbHVtbihyZWxhdGlvbnNoaXAuZ2V0Rm9yZWlnbktleSgpKX1gXG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNNYW55XCIgfHwgcmVsYXRpb25zaGlwLmdldFR5cGUoKSA9PSBcImhhc09uZVwiKSB7XG4gICAgICAgIHNxbCArPSBgJHtjb25uLnF1b3RlVGFibGUodGFyZ2V0VGFibGVSZWYpfS4ke2Nvbm4ucXVvdGVDb2x1bW4ocmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXkoKSl9ID0gYFxuICAgICAgICBzcWwgKz0gYCR7Y29ubi5xdW90ZVRhYmxlKHBhcmVudFRhYmxlUmVmKX0uJHtjb25uLnF1b3RlQ29sdW1uKHJlbGF0aW9uc2hpcC5nZXRQcmltYXJ5S2V5KCkpfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByZWxhdGlvbnNoaXAgdHlwZTogJHtyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpfWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjb3BlU3FsID0gdGhpcy5fc2NvcGVTcWwoe3JlbGF0aW9uc2hpcCwgcXVlcnksIHRhcmdldE1vZGVsQ2xhc3MsIGpvaW5QYXRoLCB0YXJnZXRUYWJsZVJlZn0pXG5cbiAgICAgIGlmIChzY29wZVNxbCkge1xuICAgICAgICBzcWwgKz0gYCBBTkQgJHtzY29wZVNxbH1gXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygam9pblZhbHVlID09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgc3FsID0gdGhpcy5qb2luT2JqZWN0KGpvaW5WYWx1ZSwgdGFyZ2V0TW9kZWxDbGFzcywgc3FsLCBqb2luc0NvdW50ICsgMSwgam9pblBhdGgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNxbFxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2NvcGUgc3FsLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3JlY29yZC9yZWxhdGlvbnNoaXBzL2Jhc2UuanNcIikuZGVmYXVsdH0gYXJncy5yZWxhdGlvbnNoaXAgLSBSZWxhdGlvbnNoaXAgZGVmaW5pdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL21vZGVsLWNsYXNzLXF1ZXJ5LmpzXCIpLmRlZmF1bHR9IGFyZ3MucXVlcnkgLSBNb2RlbCBjbGFzcyBxdWVyeS5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IGFyZ3MudGFyZ2V0TW9kZWxDbGFzcyAtIFRhcmdldCBtb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncy5qb2luUGF0aCAtIEpvaW4gcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudGFyZ2V0VGFibGVSZWYgLSBUYXJnZXQgdGFibGUgcmVmZXJlbmNlLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSAtIFNjb3BlIFNRTC5cbiAgICovXG4gIF9zY29wZVNxbCh7cmVsYXRpb25zaGlwLCBxdWVyeSwgdGFyZ2V0TW9kZWxDbGFzcywgam9pblBhdGgsIHRhcmdldFRhYmxlUmVmfSkge1xuICAgIGlmICghcmVsYXRpb25zaGlwLmdldFNjb3BlKCkpIHJldHVybiBcIlwiXG5cbiAgICBjb25zdCBzY29wZWRRdWVyeSA9IHF1ZXJ5LmJ1aWxkSm9pblNjb3BlUXVlcnkodGFyZ2V0TW9kZWxDbGFzcywgam9pblBhdGgpXG4gICAgY29uc3QgYXBwbGllZFF1ZXJ5ID0gcmVsYXRpb25zaGlwLmFwcGx5U2NvcGUoc2NvcGVkUXVlcnkpIHx8IHNjb3BlZFF1ZXJ5XG4gICAgY29uc3Qgd2hlcmVzID0gYXBwbGllZFF1ZXJ5Ll93aGVyZXNcblxuICAgIGlmICghd2hlcmVzIHx8IHdoZXJlcy5sZW5ndGggPT09IDApIHJldHVybiBcIlwiXG5cbiAgICBjb25zdCBwYXJ0cyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHdoZXJlIG9mIHdoZXJlcykge1xuICAgICAgcGFydHMucHVzaCh0aGlzLl9zY29wZVNxbEZvcldoZXJlKHdoZXJlLCB0YXJnZXRUYWJsZVJlZikpXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oXCIgQU5EIFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2NvcGUgc3FsIGZvciB3aGVyZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3doZXJlLWJhc2UuanNcIikuZGVmYXVsdH0gd2hlcmUgLSBXaGVyZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldFRhYmxlUmVmIC0gVGFyZ2V0IHRhYmxlIHJlZmVyZW5jZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTY29wZSB3aGVyZSBTUUwuXG4gICAqL1xuICBfc2NvcGVTcWxGb3JXaGVyZSh3aGVyZSwgdGFyZ2V0VGFibGVSZWYpIHtcbiAgICBpZiAod2hlcmUgaW5zdGFuY2VvZiBXaGVyZUhhc2gpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSB3aGVyZS5oYXNoXG4gICAgICBjb25zdCBoYXNOZXN0ZWQgPSBPYmplY3QudmFsdWVzKGhhc2gpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuXG4gICAgICByZXR1cm4gaGFzTmVzdGVkXG4gICAgICAgID8gd2hlcmUudG9TcWwoKVxuICAgICAgICA6IGAoJHt3aGVyZS5fd2hlcmVTUUxGcm9tSGFzaChoYXNoLCB0YXJnZXRUYWJsZVJlZil9KWBcbiAgICB9XG5cbiAgICBpZiAod2hlcmUgaW5zdGFuY2VvZiBXaGVyZU5vdCAmJiB3aGVyZS53aGVyZSBpbnN0YW5jZW9mIFdoZXJlSGFzaCkge1xuICAgICAgY29uc3QgaGFzaCA9IHdoZXJlLndoZXJlLmhhc2hcbiAgICAgIGNvbnN0IGhhc05lc3RlZCA9IE9iamVjdC52YWx1ZXMoaGFzaCkuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICBjb25zdCBpbm5lclNxbCA9IGhhc05lc3RlZFxuICAgICAgICA/IHdoZXJlLndoZXJlLnRvU3FsKClcbiAgICAgICAgOiBgKCR7d2hlcmUud2hlcmUuX3doZXJlU1FMRnJvbUhhc2goaGFzaCwgdGFyZ2V0VGFibGVSZWYpfSlgXG5cbiAgICAgIHJldHVybiBgTk9UICgke2lubmVyU3FsfSlgXG4gICAgfVxuXG4gICAgcmV0dXJuIHdoZXJlLnRvU3FsKClcbiAgfVxufVxuIl19
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9pbi1vYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZGF0YWJhc2UvcXVlcnkvam9pbi1vYmplY3QuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JDLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBQ3ZDLE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFBO0FBRXJDOzs7O0dBSUc7QUFFSCxNQUFNLENBQUMsT0FBTyxPQUFPLGdDQUFpQyxTQUFRLFFBQVE7SUFDcEU7Ozs7T0FJRztJQUNILFlBQVksTUFBTSxFQUFFLFFBQVEsR0FBRyxFQUFFO1FBQy9CLEtBQUssRUFBRSxDQUFBO1FBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDcEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDMUIsQ0FBQztJQUVELEtBQUs7UUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUE7UUFFN0IsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSx1Q0FBdUMsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUMxRixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsdURBQXVELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsRixNQUFNLFVBQVUsR0FBRywwREFBMEQsQ0FBQyxDQUM1RSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQzNHLENBQUE7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENB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LE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQzNILE1BQU0sUUFBUSxHQUFHLFNBQVM7Z0JBQ3hCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDckIsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQTtZQUU5RCxPQUFPLFFBQVEsUUFBUSxHQUFHLENBQUE7UUFDNUIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3RCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgSm9pbkJhc2UgZnJvbSBcIi4vam9pbi1iYXNlLmpzXCJcbmltcG9ydCBXaGVyZUhhc2ggZnJvbSBcIi4vd2hlcmUtaGFzaC5qc1wiXG5pbXBvcnQgV2hlcmVOb3QgZnJvbSBcIi4vd2hlcmUtbm90LmpzXCJcblxuLyoqXG4gKiBWZWxvY2lvdXNEYXRhYmFzZVF1ZXJ5Sm9pbk9iamVjdCBjbGFzcy5cbiAqIEB0eXBlZGVmIHt7W2tleTogc3RyaW5nXTogYm9vbGVhbiB8IHN0cmluZyB8IHN0cmluZ1tdIHwgSm9pbk9iamVjdElucHV0fX0gSm9pbk9iamVjdElucHV0XG4gKiBAdHlwZWRlZiB7e1trZXk6IHN0cmluZ106IGJvb2xlYW4gfCBKb2luT2JqZWN0fX0gSm9pbk9iamVjdFxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlbG9jaW91c0RhdGFiYXNlUXVlcnlKb2luT2JqZWN0IGV4dGVuZHMgSm9pbkJhc2Uge1xuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtKb2luT2JqZWN0fSBvYmplY3QgLSBPYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFtiYXNlUGF0aF0gLSBKb2luIGJhc2UgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBxdWVyeS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9iamVjdCwgYmFzZVBhdGggPSBbXSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdFxuICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aFxuICB9XG5cbiAgdG9TcWwoKSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFF1ZXJ5KClcblxuICAgIGlmIChxdWVyeS5jb25zdHJ1Y3Rvci5uYW1lICE9IFwiVmVsb2Npb3VzRGF0YWJhc2VRdWVyeU1vZGVsQ2xhc3NRdWVyeVwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFF1ZXJ5IGhhcyB0byBiZSBhIE1vZGVsQ2xhc3NRdWVyeSBidXQgd2FzIGEgJHtxdWVyeS5jb25zdHJ1Y3Rvci5uYW1lfWApXG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxRdWVyeSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSAqLyAocXVlcnkpXG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IC8qKiBAdHlwZSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSAqLyAoXG4gICAgICB0aGlzLmJhc2VQYXRoLmxlbmd0aCA+IDAgPyBtb2RlbFF1ZXJ5Ll9yZXNvbHZlTW9kZWxDbGFzc0ZvckpvaW5QYXRoKHRoaXMuYmFzZVBhdGgpIDogbW9kZWxRdWVyeS5tb2RlbENsYXNzXG4gICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuam9pbk9iamVjdCh0aGlzLm9iamVjdCwgTW9kZWxDbGFzcywgXCJcIiwgMCwgbW9kZWxRdWVyeS5nZXRKb2luQmFzZVBhdGgoKS5jb25jYXQodGhpcy5iYXNlUGF0aCkpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBqb2luIG9iamVjdC5cbiAgICogQHBhcmFtIHtKb2luT2JqZWN0fSBqb2luIC0gSm9pbi5cbiAgICogQHBhcmFtIHt0eXBlb2YgaW1wb3J0KFwiLi4vcmVjb3JkL2luZGV4LmpzXCIpLmRlZmF1bHR9IG1vZGVsQ2xhc3MgLSBNb2RlbCBjbGFzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNxbCAtIFNRTCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqb2luc0NvdW50IC0gSm9pbnMgY291bnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBKb2luIHBhdGguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gVGhlIGpvaW4gb2JqZWN0LlxuICAgKi9cbiAgam9pbk9iamVjdChqb2luLCBtb2RlbENsYXNzLCBzcWwsIGpvaW5zQ291bnQsIHBhdGgpIHtcbiAgICBjb25zdCBwcmV0dHkgPSB0aGlzLnByZXR0eVxuICAgIGNvbnN0IGNvbm4gPSB0aGlzLmdldFF1ZXJ5KCkuZHJpdmVyXG4gICAgY29uc3QgcXVlcnkgPSAvKiogQHR5cGUge2ltcG9ydChcIi4vbW9kZWwtY2xhc3MtcXVlcnkuanNcIikuZGVmYXVsdH0gKi8gKHRoaXMuZ2V0UXVlcnkoKSlcblxuICAgIGZvciAoY29uc3Qgam9pbktleSBpbiBqb2luKSB7XG4gICAgICBjb25zdCBqb2luVmFsdWUgPSBqb2luW2pvaW5LZXldXG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9uc2hpcEJ5TmFtZShqb2luS2V5KVxuICAgICAgY29uc3QgdGFyZ2V0TW9kZWxDbGFzcyA9IHJlbGF0aW9uc2hpcC5nZXRUYXJnZXRNb2RlbENsYXNzKClcblxuICAgICAgaWYgKCF0YXJnZXRNb2RlbENsYXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVsYXRpb25zaGlwICR7bW9kZWxDbGFzcy5uYW1lfSMke2pvaW5LZXl9IGhhcyBubyB0YXJnZXQgbW9kZWwgY2xhc3NgKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBqb2luUGF0aCA9IHBhdGguY29uY2F0KFtqb2luS2V5XSlcbiAgICAgIGNvbnN0IHBhcmVudFRhYmxlUmVmID0gcXVlcnkuZ2V0Sm9pblRhYmxlUmVmZXJlbmNlKHBhdGgpXG4gICAgICBjb25zdCB0YXJnZXRFbnRyeSA9IHF1ZXJ5Ll9yZWdpc3RlckpvaW5QYXRoKGpvaW5QYXRoKVxuICAgICAgY29uc3QgdGFyZ2V0VGFibGVSZWYgPSB0YXJnZXRFbnRyeS5hbGlhcyB8fCB0YXJnZXRFbnRyeS50YWJsZU5hbWVcbiAgICAgIGNvbnN0IGpvaW5UYWJsZVNxbCA9IHRhcmdldEVudHJ5LmFsaWFzXG4gICAgICAgID8gYCR7Y29ubi5xdW90ZVRhYmxlKHRhcmdldEVudHJ5LnRhYmxlTmFtZSl9IEFTICR7Y29ubi5xdW90ZVRhYmxlKHRhcmdldEVudHJ5LmFsaWFzKX1gXG4gICAgICAgIDogY29ubi5xdW90ZVRhYmxlKHRhcmdldEVudHJ5LnRhYmxlTmFtZSlcblxuICAgICAgaWYgKGpvaW5zQ291bnQgPiAwKSB7XG4gICAgICAgIGlmIChwcmV0dHkpIHtcbiAgICAgICAgICBzcWwgKz0gXCJcXG5cXG5cIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNxbCArPSBcIiBcIlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNxbCArPSBgTEVGVCBKT0lOICR7am9pblRhYmxlU3FsfSBPTiBgXG5cbiAgICAgIGlmIChyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpID09IFwiYmVsb25nc1RvXCIpIHtcbiAgICAgICAgc3FsICs9IGAke2Nvbm4ucXVvdGVUYWJsZSh0YXJnZXRUYWJsZVJlZil9LiR7Y29ubi5xdW90ZUNvbHVtbihyZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpKX0gPSBgXG4gICAgICAgIHNxbCArPSBgJHtjb25uLnF1b3RlVGFibGUocGFyZW50VGFibGVSZWYpfS4ke2Nvbm4ucXVvdGVDb2x1bW4ocmVsYXRpb25zaGlwLmdldEZvcmVpZ25LZXkoKSl9YFxuICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbnNoaXAuZ2V0VHlwZSgpID09IFwiaGFzTWFueVwiIHx8IHJlbGF0aW9uc2hpcC5nZXRUeXBlKCkgPT0gXCJoYXNPbmVcIikge1xuICAgICAgICBzcWwgKz0gYCR7Y29ubi5xdW90ZVRhYmxlKHRhcmdldFRhYmxlUmVmKX0uJHtjb25uLnF1b3RlQ29sdW1uKHJlbGF0aW9uc2hpcC5nZXRGb3JlaWduS2V5KCkpfSA9IGBcbiAgICAgICAgc3FsICs9IGAke2Nvbm4ucXVvdGVUYWJsZShwYXJlbnRUYWJsZVJlZil9LiR7Y29ubi5xdW90ZUNvbHVtbihyZWxhdGlvbnNoaXAuZ2V0UHJpbWFyeUtleSgpKX1gXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcmVsYXRpb25zaGlwIHR5cGU6ICR7cmVsYXRpb25zaGlwLmdldFR5cGUoKX1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzY29wZVNxbCA9IHRoaXMuX3Njb3BlU3FsKHtyZWxhdGlvbnNoaXAsIHF1ZXJ5LCB0YXJnZXRNb2RlbENsYXNzLCBqb2luUGF0aCwgdGFyZ2V0VGFibGVSZWZ9KVxuXG4gICAgICBpZiAoc2NvcGVTcWwpIHtcbiAgICAgICAgc3FsICs9IGAgQU5EICR7c2NvcGVTcWx9YFxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGpvaW5WYWx1ZSA9PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHNxbCA9IHRoaXMuam9pbk9iamVjdChqb2luVmFsdWUsIHRhcmdldE1vZGVsQ2xhc3MsIHNxbCwgam9pbnNDb3VudCArIDEsIGpvaW5QYXRoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzcWxcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNjb3BlIHNxbC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9yZWNvcmQvcmVsYXRpb25zaGlwcy9iYXNlLmpzXCIpLmRlZmF1bHR9IGFyZ3MucmVsYXRpb25zaGlwIC0gUmVsYXRpb25zaGlwIGRlZmluaXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9tb2RlbC1jbGFzcy1xdWVyeS5qc1wiKS5kZWZhdWx0fSBhcmdzLnF1ZXJ5IC0gTW9kZWwgY2xhc3MgcXVlcnkuXG4gICAqIEBwYXJhbSB7dHlwZW9mIGltcG9ydChcIi4uL3JlY29yZC9pbmRleC5qc1wiKS5kZWZhdWx0fSBhcmdzLnRhcmdldE1vZGVsQ2xhc3MgLSBUYXJnZXQgbW9kZWwgY2xhc3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3Muam9pblBhdGggLSBKb2luIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRhcmdldFRhYmxlUmVmIC0gVGFyZ2V0IHRhYmxlIHJlZmVyZW5jZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gLSBTY29wZSBTUUwuXG4gICAqL1xuICBfc2NvcGVTcWwoe3JlbGF0aW9uc2hpcCwgcXVlcnksIHRhcmdldE1vZGVsQ2xhc3MsIGpvaW5QYXRoLCB0YXJnZXRUYWJsZVJlZn0pIHtcbiAgICBpZiAoIXJlbGF0aW9uc2hpcC5nZXRTY29wZSgpKSByZXR1cm4gXCJcIlxuXG4gICAgY29uc3Qgc2NvcGVkUXVlcnkgPSBxdWVyeS5idWlsZEpvaW5TY29wZVF1ZXJ5KHRhcmdldE1vZGVsQ2xhc3MsIGpvaW5QYXRoKVxuICAgIGNvbnN0IGFwcGxpZWRRdWVyeSA9IHJlbGF0aW9uc2hpcC5hcHBseVNjb3BlKHNjb3BlZFF1ZXJ5KSB8fCBzY29wZWRRdWVyeVxuICAgIGNvbnN0IHdoZXJlcyA9IGFwcGxpZWRRdWVyeS5fd2hlcmVzXG5cbiAgICBpZiAoIXdoZXJlcyB8fCB3aGVyZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCJcIlxuXG4gICAgY29uc3QgcGFydHMgPSBbXVxuXG4gICAgZm9yIChjb25zdCB3aGVyZSBvZiB3aGVyZXMpIHtcbiAgICAgIHBhcnRzLnB1c2godGhpcy5fc2NvcGVTcWxGb3JXaGVyZSh3aGVyZSwgdGFyZ2V0VGFibGVSZWYpKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiIEFORCBcIilcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNjb3BlIHNxbCBmb3Igd2hlcmUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi93aGVyZS1iYXNlLmpzXCIpLmRlZmF1bHR9IHdoZXJlIC0gV2hlcmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXRUYWJsZVJlZiAtIFRhcmdldCB0YWJsZSByZWZlcmVuY2UuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IC0gU2NvcGUgd2hlcmUgU1FMLlxuICAgKi9cbiAgX3Njb3BlU3FsRm9yV2hlcmUod2hlcmUsIHRhcmdldFRhYmxlUmVmKSB7XG4gICAgaWYgKHdoZXJlIGluc3RhbmNlb2YgV2hlcmVIYXNoKSB7XG4gICAgICBjb25zdCBoYXNoID0gd2hlcmUuaGFzaFxuICAgICAgY29uc3QgaGFzTmVzdGVkID0gT2JqZWN0LnZhbHVlcyhoYXNoKS5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSlcblxuICAgICAgcmV0dXJuIGhhc05lc3RlZFxuICAgICAgICA/IHdoZXJlLnRvU3FsKClcbiAgICAgICAgOiBgKCR7d2hlcmUuX3doZXJlU1FMRnJvbUhhc2goaGFzaCwgdGFyZ2V0VGFibGVSZWYpfSlgXG4gICAgfVxuXG4gICAgaWYgKHdoZXJlIGluc3RhbmNlb2YgV2hlcmVOb3QgJiYgd2hlcmUud2hlcmUgaW5zdGFuY2VvZiBXaGVyZUhhc2gpIHtcbiAgICAgIGNvbnN0IGhhc2ggPSB3aGVyZS53aGVyZS5oYXNoXG4gICAgICBjb25zdCBoYXNOZXN0ZWQgPSBPYmplY3QudmFsdWVzKGhhc2gpLnNvbWUoKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgY29uc3QgaW5uZXJTcWwgPSBoYXNOZXN0ZWRcbiAgICAgICAgPyB3aGVyZS53aGVyZS50b1NxbCgpXG4gICAgICAgIDogYCgke3doZXJlLndoZXJlLl93aGVyZVNRTEZyb21IYXNoKGhhc2gsIHRhcmdldFRhYmxlUmVmKX0pYFxuXG4gICAgICByZXR1cm4gYE5PVCAoJHtpbm5lclNxbH0pYFxuICAgIH1cblxuICAgIHJldHVybiB3aGVyZS50b1NxbCgpXG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"AAmKA;;;GAGG;AACH;;;;GAIG;AAEH;;;GAGG;AACH,2DAZ4D,EAAE,SAAjD,cAAe,oBAAoB,EAAE,OAAQ;IAaxD;;;OAGG;IACH,kBAFW,uBAAuB,CAAC,EAAE,CAAC,EA+BrC;IArBC;;oBAEgB;IAChB,YADU,EAAE,CACgB;IAE5B;;0BAEsB;IACtB,eADU,MAAM,EAAE,CAC0B;IAC5C,0BAAsF;IACtF,gCAAiE;IAEjE;;4DAEwD;IACxD,YADU,OAAO,iBAAiB,EAAE,cAAc,EAAE,CACO;IAE3D;;4DAEwD;IACxD,YADU,OAAO,iBAAiB,EAAE,cAAc,EAAE,CACO;IAG7D;;;OAGG;IACH,SAFa,IAAI,
|
|
1
|
+
{"version":3,"file":"model-class-query.d.ts","sourceRoot":"","sources":["../../../../src/database/query/model-class-query.js"],"names":[],"mappings":"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"}
|