@decaf-ts/core 0.9.0 → 0.9.1-9.tasks
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/README.md +1 -1
- package/dist/core.cjs +6705 -2
- package/dist/core.js +6932 -2
- package/lib/auth/constants.cjs +1 -1
- package/lib/auth/decorators.cjs +1 -1
- package/lib/auth/index.cjs +1 -1
- package/lib/esm/auth/constants.js +1 -1
- package/lib/esm/auth/decorators.js +1 -1
- package/lib/esm/auth/index.js +1 -1
- package/lib/esm/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/esm/fs/FilesystemAdapter.js +3 -2
- package/lib/esm/fs/FsDispatch.js +1 -1
- package/lib/esm/fs/helpers.js +1 -1
- package/lib/esm/fs/index.js +1 -1
- package/lib/esm/fs/indexStore.js +1 -1
- package/lib/esm/fs/locks/FilesystemLock.js +1 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js +1 -1
- package/lib/esm/fs/types.d.ts +6 -0
- package/lib/esm/fs/types.js +1 -1
- package/lib/esm/identity/decorators.js +1 -1
- package/lib/esm/identity/index.js +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +2 -2
- package/lib/esm/interfaces/ContextuallyLogged.js +1 -1
- package/lib/esm/interfaces/ErrorParser.js +1 -1
- package/lib/esm/interfaces/Executor.js +1 -1
- package/lib/esm/interfaces/Observable.js +1 -1
- package/lib/esm/interfaces/Observer.js +1 -1
- package/lib/esm/interfaces/Paginatable.js +1 -1
- package/lib/esm/interfaces/Queriable.js +1 -1
- package/lib/esm/interfaces/RawExecutor.js +1 -1
- package/lib/esm/interfaces/SequenceOptions.js +1 -1
- package/lib/esm/interfaces/index.js +1 -1
- package/lib/esm/migrations/Migration.js +1 -1
- package/lib/esm/migrations/MigrationService.js +1 -1
- package/lib/esm/migrations/MigrationTasks.js +1 -1
- package/lib/esm/migrations/constants.js +1 -1
- package/lib/esm/migrations/decorators.js +1 -1
- package/lib/esm/migrations/index.js +1 -1
- package/lib/esm/migrations/types.js +1 -1
- package/lib/esm/model/BaseModel.js +1 -1
- package/lib/esm/model/SequenceModel.js +1 -1
- package/lib/esm/model/construction.d.ts +1 -1
- package/lib/esm/model/construction.js +25 -3
- package/lib/esm/model/decorators.js +1 -1
- package/lib/esm/model/index.js +1 -1
- package/lib/esm/model/indexing.js +1 -1
- package/lib/esm/model/types.js +1 -1
- package/lib/esm/overrides/Metadata.js +1 -1
- package/lib/esm/overrides/Model.js +1 -1
- package/lib/esm/overrides/ModelBuilder.js +1 -1
- package/lib/esm/overrides/index.js +1 -1
- package/lib/esm/overrides/injectables.js +1 -1
- package/lib/esm/overrides/overrides.js +29 -1
- package/lib/esm/persistence/Adapter.js +14 -2
- package/lib/esm/persistence/Context.js +1 -1
- package/lib/esm/persistence/ContextLock.js +1 -1
- package/lib/esm/persistence/Dispatch.d.ts +7 -0
- package/lib/esm/persistence/Dispatch.js +20 -3
- package/lib/esm/persistence/ObserverHandler.js +1 -1
- package/lib/esm/persistence/Sequence.js +1 -1
- package/lib/esm/persistence/constants.js +2 -1
- package/lib/esm/persistence/decorators.js +1 -1
- package/lib/esm/persistence/errors.js +1 -1
- package/lib/esm/persistence/event-filters.js +1 -1
- package/lib/esm/persistence/generators.js +1 -1
- package/lib/esm/persistence/index.js +1 -1
- package/lib/esm/persistence/transactions.js +1 -1
- package/lib/esm/persistence/types.d.ts +1 -0
- package/lib/esm/persistence/types.js +1 -1
- package/lib/esm/query/Condition.js +1 -1
- package/lib/esm/query/MethodQueryBuilder.js +1 -1
- package/lib/esm/query/Paginator.js +1 -1
- package/lib/esm/query/Statement.js +1 -1
- package/lib/esm/query/constants.js +1 -1
- package/lib/esm/query/decorators.js +1 -1
- package/lib/esm/query/errors.js +1 -1
- package/lib/esm/query/index.js +1 -1
- package/lib/esm/query/options.js +1 -1
- package/lib/esm/query/selectors.js +1 -1
- package/lib/esm/query/types.js +1 -1
- package/lib/esm/query/utils.js +1 -1
- package/lib/esm/ram/RamAdapter.js +1 -1
- package/lib/esm/ram/RamPaginator.js +1 -1
- package/lib/esm/ram/RamStatement.js +1 -1
- package/lib/esm/ram/constants.js +1 -1
- package/lib/esm/ram/handlers.js +1 -1
- package/lib/esm/ram/index.js +1 -1
- package/lib/esm/ram/types.js +1 -1
- package/lib/esm/repository/Repository.d.ts +2 -2
- package/lib/esm/repository/Repository.js +19 -16
- package/lib/esm/repository/constants.js +1 -1
- package/lib/esm/repository/decorators.js +2 -2
- package/lib/esm/repository/errors.js +1 -1
- package/lib/esm/repository/index.js +1 -1
- package/lib/esm/repository/injectables.js +4 -2
- package/lib/esm/repository/types.js +1 -1
- package/lib/esm/repository/utils.js +1 -1
- package/lib/esm/services/ModelService.d.ts +4 -5
- package/lib/esm/services/ModelService.js +4 -2
- package/lib/esm/services/PersistenceService.js +1 -1
- package/lib/esm/services/index.js +1 -1
- package/lib/esm/services/services.js +1 -1
- package/lib/esm/tasks/CleanUpTask.js +1 -1
- package/lib/esm/tasks/TaskContext.d.ts +3 -1
- package/lib/esm/tasks/TaskContext.js +9 -2
- package/lib/esm/tasks/TaskEngine.d.ts +2 -0
- package/lib/esm/tasks/TaskEngine.js +84 -20
- package/lib/esm/tasks/TaskErrors.js +1 -1
- package/lib/esm/tasks/TaskEventBus.js +1 -1
- package/lib/esm/tasks/TaskEventService.d.ts +7 -0
- package/lib/esm/tasks/TaskEventService.js +16 -0
- package/lib/esm/tasks/TaskHandler.js +1 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js +1 -1
- package/lib/esm/tasks/TaskService.d.ts +5 -1
- package/lib/esm/tasks/TaskService.js +11 -37
- package/lib/esm/tasks/TaskStateChangeError.js +1 -1
- package/lib/esm/tasks/TaskTracker.js +1 -1
- package/lib/esm/tasks/builder.js +1 -1
- package/lib/esm/tasks/constants.js +1 -1
- package/lib/esm/tasks/decorators.js +1 -1
- package/lib/esm/tasks/index.d.ts +1 -0
- package/lib/esm/tasks/index.js +2 -1
- package/lib/esm/tasks/logging.js +4 -7
- package/lib/esm/tasks/models/TaskBackoffModel.js +1 -1
- package/lib/esm/tasks/models/TaskErrorModel.js +1 -1
- package/lib/esm/tasks/models/TaskEventModel.js +1 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js +1 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskLogEntryModel.js +6 -2
- package/lib/esm/tasks/models/TaskModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js +1 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/esm/tasks/models/TaskStepSpecModel.js +7 -3
- package/lib/esm/tasks/models/index.js +1 -1
- package/lib/esm/tasks/types.d.ts +7 -3
- package/lib/esm/tasks/types.js +1 -1
- package/lib/esm/tasks/utils.js +1 -1
- package/lib/esm/utils/ContextualLoggedClass.js +1 -1
- package/lib/esm/utils/decorators.js +1 -1
- package/lib/esm/utils/errors.js +1 -1
- package/lib/esm/utils/index.js +1 -1
- package/lib/esm/utils/throttling.js +1 -1
- package/lib/esm/utils/types.js +1 -1
- package/lib/esm/utils/utils.d.ts +2 -1
- package/lib/esm/utils/utils.js +23 -6
- package/lib/esm/workers/TaskEngine.js +15 -4
- package/lib/esm/workers/WorkThreadEnvironment.js +1 -1
- package/lib/esm/workers/index.js +1 -1
- package/lib/esm/workers/messages.js +1 -1
- package/lib/esm/workers/types.js +1 -1
- package/lib/esm/workers/workerThread.js +36 -8
- package/lib/fs/FilesystemAdapter.cjs +3 -2
- package/lib/fs/FilesystemAdapter.d.ts +1 -0
- package/lib/fs/FsDispatch.cjs +1 -1
- package/lib/fs/helpers.cjs +1 -1
- package/lib/fs/index.cjs +1 -1
- package/lib/fs/indexStore.cjs +1 -1
- package/lib/fs/locks/FilesystemLock.cjs +1 -1
- package/lib/fs/locks/FilesystemMultiLock.cjs +1 -1
- package/lib/fs/types.cjs +1 -1
- package/lib/fs/types.d.ts +6 -0
- package/lib/identity/decorators.cjs +1 -1
- package/lib/identity/index.cjs +1 -1
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +1 -1
- package/lib/interfaces/ContextuallyLogged.cjs +1 -1
- package/lib/interfaces/ErrorParser.cjs +1 -1
- package/lib/interfaces/Executor.cjs +1 -1
- package/lib/interfaces/Observable.cjs +1 -1
- package/lib/interfaces/Observer.cjs +1 -1
- package/lib/interfaces/Paginatable.cjs +1 -1
- package/lib/interfaces/Queriable.cjs +1 -1
- package/lib/interfaces/RawExecutor.cjs +1 -1
- package/lib/interfaces/SequenceOptions.cjs +1 -1
- package/lib/interfaces/index.cjs +1 -1
- package/lib/migrations/Migration.cjs +1 -1
- package/lib/migrations/MigrationService.cjs +1 -1
- package/lib/migrations/MigrationTasks.cjs +1 -1
- package/lib/migrations/constants.cjs +1 -1
- package/lib/migrations/decorators.cjs +1 -1
- package/lib/migrations/index.cjs +1 -1
- package/lib/migrations/types.cjs +1 -1
- package/lib/model/BaseModel.cjs +1 -1
- package/lib/model/SequenceModel.cjs +1 -1
- package/lib/model/construction.cjs +25 -3
- package/lib/model/construction.d.ts +1 -1
- package/lib/model/decorators.cjs +1 -1
- package/lib/model/index.cjs +1 -1
- package/lib/model/indexing.cjs +1 -1
- package/lib/model/types.cjs +1 -1
- package/lib/overrides/Metadata.cjs +1 -1
- package/lib/overrides/Model.cjs +1 -1
- package/lib/overrides/ModelBuilder.cjs +1 -1
- package/lib/overrides/index.cjs +1 -1
- package/lib/overrides/injectables.cjs +1 -1
- package/lib/overrides/overrides.cjs +29 -1
- package/lib/persistence/Adapter.cjs +14 -2
- package/lib/persistence/Context.cjs +1 -1
- package/lib/persistence/ContextLock.cjs +1 -1
- package/lib/persistence/Dispatch.cjs +20 -3
- package/lib/persistence/Dispatch.d.ts +7 -0
- package/lib/persistence/ObserverHandler.cjs +1 -1
- package/lib/persistence/Sequence.cjs +1 -1
- package/lib/persistence/constants.cjs +2 -1
- package/lib/persistence/decorators.cjs +1 -1
- package/lib/persistence/errors.cjs +1 -1
- package/lib/persistence/event-filters.cjs +1 -1
- package/lib/persistence/generators.cjs +1 -1
- package/lib/persistence/index.cjs +1 -1
- package/lib/persistence/transactions.cjs +1 -1
- package/lib/persistence/types.cjs +1 -1
- package/lib/persistence/types.d.ts +1 -0
- package/lib/query/Condition.cjs +1 -1
- package/lib/query/MethodQueryBuilder.cjs +1 -1
- package/lib/query/Paginator.cjs +1 -1
- package/lib/query/Statement.cjs +1 -1
- package/lib/query/constants.cjs +1 -1
- package/lib/query/decorators.cjs +1 -1
- package/lib/query/errors.cjs +1 -1
- package/lib/query/index.cjs +1 -1
- package/lib/query/options.cjs +1 -1
- package/lib/query/selectors.cjs +1 -1
- package/lib/query/types.cjs +1 -1
- package/lib/query/utils.cjs +1 -1
- package/lib/ram/RamAdapter.cjs +1 -1
- package/lib/ram/RamPaginator.cjs +1 -1
- package/lib/ram/RamStatement.cjs +1 -1
- package/lib/ram/constants.cjs +1 -1
- package/lib/ram/handlers.cjs +1 -1
- package/lib/ram/index.cjs +1 -1
- package/lib/ram/types.cjs +1 -1
- package/lib/repository/Repository.cjs +19 -16
- package/lib/repository/Repository.d.ts +2 -2
- package/lib/repository/constants.cjs +1 -1
- package/lib/repository/decorators.cjs +2 -2
- package/lib/repository/errors.cjs +1 -1
- package/lib/repository/index.cjs +1 -1
- package/lib/repository/injectables.cjs +4 -2
- package/lib/repository/types.cjs +1 -1
- package/lib/repository/utils.cjs +1 -1
- package/lib/services/ModelService.cjs +4 -2
- package/lib/services/ModelService.d.ts +4 -5
- package/lib/services/PersistenceService.cjs +1 -1
- package/lib/services/index.cjs +1 -1
- package/lib/services/services.cjs +1 -1
- package/lib/tasks/CleanUpTask.cjs +1 -1
- package/lib/tasks/TaskContext.cjs +9 -2
- package/lib/tasks/TaskContext.d.ts +3 -1
- package/lib/tasks/TaskEngine.cjs +84 -20
- package/lib/tasks/TaskEngine.d.ts +2 -0
- package/lib/tasks/TaskErrors.cjs +1 -1
- package/lib/tasks/TaskEventBus.cjs +1 -1
- package/lib/tasks/TaskEventService.cjs +20 -0
- package/lib/tasks/TaskEventService.d.ts +7 -0
- package/lib/tasks/TaskHandler.cjs +1 -1
- package/lib/tasks/TaskHandlerRegistry.cjs +1 -1
- package/lib/tasks/TaskService.cjs +10 -36
- package/lib/tasks/TaskService.d.ts +5 -1
- package/lib/tasks/TaskStateChangeError.cjs +1 -1
- package/lib/tasks/TaskTracker.cjs +1 -1
- package/lib/tasks/builder.cjs +1 -1
- package/lib/tasks/constants.cjs +1 -1
- package/lib/tasks/decorators.cjs +1 -1
- package/lib/tasks/index.cjs +2 -1
- package/lib/tasks/index.d.ts +1 -0
- package/lib/tasks/logging.cjs +4 -7
- package/lib/tasks/models/TaskBackoffModel.cjs +1 -1
- package/lib/tasks/models/TaskErrorModel.cjs +1 -1
- package/lib/tasks/models/TaskEventModel.cjs +1 -1
- package/lib/tasks/models/TaskIOSerializer.cjs +1 -1
- package/lib/tasks/models/TaskLogEntryModel.cjs +5 -1
- package/lib/tasks/models/TaskLogEntryModel.d.ts +1 -0
- package/lib/tasks/models/TaskModel.cjs +1 -1
- package/lib/tasks/models/TaskStepResultModel.cjs +1 -1
- package/lib/tasks/models/TaskStepSpecModel.cjs +6 -2
- package/lib/tasks/models/TaskStepSpecModel.d.ts +1 -0
- package/lib/tasks/models/index.cjs +1 -1
- package/lib/tasks/types.cjs +1 -1
- package/lib/tasks/types.d.ts +7 -3
- package/lib/tasks/utils.cjs +1 -1
- package/lib/utils/ContextualLoggedClass.cjs +1 -1
- package/lib/utils/decorators.cjs +1 -1
- package/lib/utils/errors.cjs +1 -1
- package/lib/utils/index.cjs +1 -1
- package/lib/utils/throttling.cjs +1 -1
- package/lib/utils/types.cjs +1 -1
- package/lib/utils/utils.cjs +22 -5
- package/lib/utils/utils.d.ts +2 -1
- package/lib/workers/TaskEngine.cjs +15 -4
- package/lib/workers/WorkThreadEnvironment.cjs +1 -1
- package/lib/workers/index.cjs +1 -1
- package/lib/workers/messages.cjs +1 -1
- package/lib/workers/types.cjs +1 -1
- package/lib/workers/workerThread.cjs +35 -7
- package/package.json +1 -1
- package/dist/core.cjs.map +0 -1
- package/dist/core.js.map +0 -1
- package/lib/auth/constants.js.map +0 -1
- package/lib/auth/decorators.js.map +0 -1
- package/lib/auth/index.js.map +0 -1
- package/lib/esm/auth/constants.js.map +0 -1
- package/lib/esm/auth/decorators.js.map +0 -1
- package/lib/esm/auth/index.js.map +0 -1
- package/lib/esm/fs/FilesystemAdapter.js.map +0 -1
- package/lib/esm/fs/FsDispatch.js.map +0 -1
- package/lib/esm/fs/helpers.js.map +0 -1
- package/lib/esm/fs/index.js.map +0 -1
- package/lib/esm/fs/indexStore.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/esm/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/esm/fs/types.js.map +0 -1
- package/lib/esm/identity/decorators.js.map +0 -1
- package/lib/esm/identity/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/esm/interfaces/ErrorParser.js.map +0 -1
- package/lib/esm/interfaces/Executor.js.map +0 -1
- package/lib/esm/interfaces/Observable.js.map +0 -1
- package/lib/esm/interfaces/Observer.js.map +0 -1
- package/lib/esm/interfaces/Paginatable.js.map +0 -1
- package/lib/esm/interfaces/Queriable.js.map +0 -1
- package/lib/esm/interfaces/RawExecutor.js.map +0 -1
- package/lib/esm/interfaces/SequenceOptions.js.map +0 -1
- package/lib/esm/interfaces/index.js.map +0 -1
- package/lib/esm/migrations/Migration.js.map +0 -1
- package/lib/esm/migrations/MigrationService.js.map +0 -1
- package/lib/esm/migrations/MigrationTasks.js.map +0 -1
- package/lib/esm/migrations/constants.js.map +0 -1
- package/lib/esm/migrations/decorators.js.map +0 -1
- package/lib/esm/migrations/index.js.map +0 -1
- package/lib/esm/migrations/types.js.map +0 -1
- package/lib/esm/model/BaseModel.js.map +0 -1
- package/lib/esm/model/SequenceModel.js.map +0 -1
- package/lib/esm/model/construction.js.map +0 -1
- package/lib/esm/model/decorators.js.map +0 -1
- package/lib/esm/model/index.js.map +0 -1
- package/lib/esm/model/indexing.js.map +0 -1
- package/lib/esm/model/types.js.map +0 -1
- package/lib/esm/overrides/Metadata.js.map +0 -1
- package/lib/esm/overrides/Model.js.map +0 -1
- package/lib/esm/overrides/ModelBuilder.js.map +0 -1
- package/lib/esm/overrides/index.js.map +0 -1
- package/lib/esm/overrides/injectables.js.map +0 -1
- package/lib/esm/overrides/overrides.js.map +0 -1
- package/lib/esm/persistence/Adapter.js.map +0 -1
- package/lib/esm/persistence/Context.js.map +0 -1
- package/lib/esm/persistence/ContextLock.js.map +0 -1
- package/lib/esm/persistence/Dispatch.js.map +0 -1
- package/lib/esm/persistence/ObserverHandler.js.map +0 -1
- package/lib/esm/persistence/Sequence.js.map +0 -1
- package/lib/esm/persistence/constants.js.map +0 -1
- package/lib/esm/persistence/decorators.js.map +0 -1
- package/lib/esm/persistence/errors.js.map +0 -1
- package/lib/esm/persistence/event-filters.js.map +0 -1
- package/lib/esm/persistence/generators.js.map +0 -1
- package/lib/esm/persistence/index.js.map +0 -1
- package/lib/esm/persistence/transactions.js.map +0 -1
- package/lib/esm/persistence/types.js.map +0 -1
- package/lib/esm/query/Condition.js.map +0 -1
- package/lib/esm/query/MethodQueryBuilder.js.map +0 -1
- package/lib/esm/query/Paginator.js.map +0 -1
- package/lib/esm/query/Statement.js.map +0 -1
- package/lib/esm/query/constants.js.map +0 -1
- package/lib/esm/query/decorators.js.map +0 -1
- package/lib/esm/query/errors.js.map +0 -1
- package/lib/esm/query/index.js.map +0 -1
- package/lib/esm/query/options.js.map +0 -1
- package/lib/esm/query/selectors.js.map +0 -1
- package/lib/esm/query/types.js.map +0 -1
- package/lib/esm/query/utils.js.map +0 -1
- package/lib/esm/ram/RamAdapter.js.map +0 -1
- package/lib/esm/ram/RamPaginator.js.map +0 -1
- package/lib/esm/ram/RamStatement.js.map +0 -1
- package/lib/esm/ram/constants.js.map +0 -1
- package/lib/esm/ram/handlers.js.map +0 -1
- package/lib/esm/ram/index.js.map +0 -1
- package/lib/esm/ram/types.js.map +0 -1
- package/lib/esm/repository/Repository.js.map +0 -1
- package/lib/esm/repository/constants.js.map +0 -1
- package/lib/esm/repository/decorators.js.map +0 -1
- package/lib/esm/repository/errors.js.map +0 -1
- package/lib/esm/repository/index.js.map +0 -1
- package/lib/esm/repository/injectables.js.map +0 -1
- package/lib/esm/repository/types.js.map +0 -1
- package/lib/esm/repository/utils.js.map +0 -1
- package/lib/esm/services/ModelService.js.map +0 -1
- package/lib/esm/services/PersistenceService.js.map +0 -1
- package/lib/esm/services/index.js.map +0 -1
- package/lib/esm/services/services.js.map +0 -1
- package/lib/esm/tasks/CleanUpTask.js.map +0 -1
- package/lib/esm/tasks/TaskContext.js.map +0 -1
- package/lib/esm/tasks/TaskEngine.js.map +0 -1
- package/lib/esm/tasks/TaskErrors.js.map +0 -1
- package/lib/esm/tasks/TaskEventBus.js.map +0 -1
- package/lib/esm/tasks/TaskHandler.js.map +0 -1
- package/lib/esm/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/esm/tasks/TaskService.js.map +0 -1
- package/lib/esm/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/esm/tasks/TaskTracker.js.map +0 -1
- package/lib/esm/tasks/builder.js.map +0 -1
- package/lib/esm/tasks/constants.js.map +0 -1
- package/lib/esm/tasks/decorators.js.map +0 -1
- package/lib/esm/tasks/index.js.map +0 -1
- package/lib/esm/tasks/logging.js.map +0 -1
- package/lib/esm/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/esm/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/esm/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/esm/tasks/models/index.js.map +0 -1
- package/lib/esm/tasks/types.js.map +0 -1
- package/lib/esm/tasks/utils.js.map +0 -1
- package/lib/esm/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/esm/utils/decorators.js.map +0 -1
- package/lib/esm/utils/errors.js.map +0 -1
- package/lib/esm/utils/index.js.map +0 -1
- package/lib/esm/utils/throttling.js.map +0 -1
- package/lib/esm/utils/types.js.map +0 -1
- package/lib/esm/utils/utils.js.map +0 -1
- package/lib/esm/workers/TaskEngine.js.map +0 -1
- package/lib/esm/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/esm/workers/index.js.map +0 -1
- package/lib/esm/workers/messages.js.map +0 -1
- package/lib/esm/workers/types.js.map +0 -1
- package/lib/esm/workers/workerThread.js.map +0 -1
- package/lib/fs/FilesystemAdapter.js.map +0 -1
- package/lib/fs/FsDispatch.js.map +0 -1
- package/lib/fs/helpers.js.map +0 -1
- package/lib/fs/index.js.map +0 -1
- package/lib/fs/indexStore.js.map +0 -1
- package/lib/fs/locks/FilesystemLock.js.map +0 -1
- package/lib/fs/locks/FilesystemMultiLock.js.map +0 -1
- package/lib/fs/types.js.map +0 -1
- package/lib/identity/decorators.js.map +0 -1
- package/lib/identity/index.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/interfaces/ContextuallyLogged.js.map +0 -1
- package/lib/interfaces/ErrorParser.js.map +0 -1
- package/lib/interfaces/Executor.js.map +0 -1
- package/lib/interfaces/Observable.js.map +0 -1
- package/lib/interfaces/Observer.js.map +0 -1
- package/lib/interfaces/Paginatable.js.map +0 -1
- package/lib/interfaces/Queriable.js.map +0 -1
- package/lib/interfaces/RawExecutor.js.map +0 -1
- package/lib/interfaces/SequenceOptions.js.map +0 -1
- package/lib/interfaces/index.js.map +0 -1
- package/lib/migrations/Migration.js.map +0 -1
- package/lib/migrations/MigrationService.js.map +0 -1
- package/lib/migrations/MigrationTasks.js.map +0 -1
- package/lib/migrations/constants.js.map +0 -1
- package/lib/migrations/decorators.js.map +0 -1
- package/lib/migrations/index.js.map +0 -1
- package/lib/migrations/types.js.map +0 -1
- package/lib/model/BaseModel.js.map +0 -1
- package/lib/model/SequenceModel.js.map +0 -1
- package/lib/model/construction.js.map +0 -1
- package/lib/model/decorators.js.map +0 -1
- package/lib/model/index.js.map +0 -1
- package/lib/model/indexing.js.map +0 -1
- package/lib/model/types.js.map +0 -1
- package/lib/overrides/Metadata.js.map +0 -1
- package/lib/overrides/Model.js.map +0 -1
- package/lib/overrides/ModelBuilder.js.map +0 -1
- package/lib/overrides/index.js.map +0 -1
- package/lib/overrides/injectables.js.map +0 -1
- package/lib/overrides/overrides.js.map +0 -1
- package/lib/persistence/Adapter.js.map +0 -1
- package/lib/persistence/Context.js.map +0 -1
- package/lib/persistence/ContextLock.js.map +0 -1
- package/lib/persistence/Dispatch.js.map +0 -1
- package/lib/persistence/ObserverHandler.js.map +0 -1
- package/lib/persistence/Sequence.js.map +0 -1
- package/lib/persistence/constants.js.map +0 -1
- package/lib/persistence/decorators.js.map +0 -1
- package/lib/persistence/errors.js.map +0 -1
- package/lib/persistence/event-filters.js.map +0 -1
- package/lib/persistence/generators.js.map +0 -1
- package/lib/persistence/index.js.map +0 -1
- package/lib/persistence/transactions.js.map +0 -1
- package/lib/persistence/types.js.map +0 -1
- package/lib/query/Condition.js.map +0 -1
- package/lib/query/MethodQueryBuilder.js.map +0 -1
- package/lib/query/Paginator.js.map +0 -1
- package/lib/query/Statement.js.map +0 -1
- package/lib/query/constants.js.map +0 -1
- package/lib/query/decorators.js.map +0 -1
- package/lib/query/errors.js.map +0 -1
- package/lib/query/index.js.map +0 -1
- package/lib/query/options.js.map +0 -1
- package/lib/query/selectors.js.map +0 -1
- package/lib/query/types.js.map +0 -1
- package/lib/query/utils.js.map +0 -1
- package/lib/ram/RamAdapter.js.map +0 -1
- package/lib/ram/RamPaginator.js.map +0 -1
- package/lib/ram/RamStatement.js.map +0 -1
- package/lib/ram/constants.js.map +0 -1
- package/lib/ram/handlers.js.map +0 -1
- package/lib/ram/index.js.map +0 -1
- package/lib/ram/types.js.map +0 -1
- package/lib/repository/Repository.js.map +0 -1
- package/lib/repository/constants.js.map +0 -1
- package/lib/repository/decorators.js.map +0 -1
- package/lib/repository/errors.js.map +0 -1
- package/lib/repository/index.js.map +0 -1
- package/lib/repository/injectables.js.map +0 -1
- package/lib/repository/types.js.map +0 -1
- package/lib/repository/utils.js.map +0 -1
- package/lib/services/ModelService.js.map +0 -1
- package/lib/services/PersistenceService.js.map +0 -1
- package/lib/services/index.js.map +0 -1
- package/lib/services/services.js.map +0 -1
- package/lib/tasks/CleanUpTask.js.map +0 -1
- package/lib/tasks/TaskContext.js.map +0 -1
- package/lib/tasks/TaskEngine.js.map +0 -1
- package/lib/tasks/TaskErrors.js.map +0 -1
- package/lib/tasks/TaskEventBus.js.map +0 -1
- package/lib/tasks/TaskHandler.js.map +0 -1
- package/lib/tasks/TaskHandlerRegistry.js.map +0 -1
- package/lib/tasks/TaskService.js.map +0 -1
- package/lib/tasks/TaskStateChangeError.js.map +0 -1
- package/lib/tasks/TaskTracker.js.map +0 -1
- package/lib/tasks/builder.js.map +0 -1
- package/lib/tasks/constants.js.map +0 -1
- package/lib/tasks/decorators.js.map +0 -1
- package/lib/tasks/index.js.map +0 -1
- package/lib/tasks/logging.js.map +0 -1
- package/lib/tasks/models/TaskBackoffModel.js.map +0 -1
- package/lib/tasks/models/TaskErrorModel.js.map +0 -1
- package/lib/tasks/models/TaskEventModel.js.map +0 -1
- package/lib/tasks/models/TaskIOSerializer.js.map +0 -1
- package/lib/tasks/models/TaskLogEntryModel.js.map +0 -1
- package/lib/tasks/models/TaskModel.js.map +0 -1
- package/lib/tasks/models/TaskStepResultModel.js.map +0 -1
- package/lib/tasks/models/TaskStepSpecModel.js.map +0 -1
- package/lib/tasks/models/index.js.map +0 -1
- package/lib/tasks/types.js.map +0 -1
- package/lib/tasks/utils.js.map +0 -1
- package/lib/utils/ContextualLoggedClass.js.map +0 -1
- package/lib/utils/decorators.js.map +0 -1
- package/lib/utils/errors.js.map +0 -1
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/throttling.js.map +0 -1
- package/lib/utils/types.js.map +0 -1
- package/lib/utils/utils.js.map +0 -1
- package/lib/workers/TaskEngine.js.map +0 -1
- package/lib/workers/WorkThreadEnvironment.js.map +0 -1
- package/lib/workers/index.js.map +0 -1
- package/lib/workers/messages.js.map +0 -1
- package/lib/workers/types.js.map +0 -1
- package/lib/workers/workerThread.js.map +0 -1
|
@@ -160,4 +160,4 @@ Metadata.set(PersistenceKeys.MIGRATION, DefaultFlavour, [
|
|
|
160
160
|
...current,
|
|
161
161
|
MigrationService,
|
|
162
162
|
]);
|
|
163
|
-
//# sourceMappingURL=MigrationService.js.map
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taWdyYXRpb25zL01pZ3JhdGlvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHVCQUFvQjtBQUVyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLGtDQUE2QjtBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLG9DQUErQjtBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNDQUFpQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLG1DQUE4QjtBQU12RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsTUFBTSxPQUFPLGdCQUtYLFNBQVEsa0JBR1A7SUFTRDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBTkQsY0FBUyxHQUFXLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUMxQyxlQUFVLEdBQ2pCLElBQUksQ0FBQztJQUtQLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBc0M7UUFJeEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQzlELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2QixJQUFJLENBQUM7WUFDSCw2REFBNkQ7WUFDN0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDN0QsNkRBQTZEO1FBQy9ELENBQUM7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WixHQUFHLElBQW9DO1FBRXZDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLEdBQ1gsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLGNBQWMsQ0FBQztJQUMzRSxFQUFFLENBQUM7QUFFTCxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFO0lBQ3RELEdBQUcsT0FBTztJQUNWLGdCQUFnQjtDQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0TWlncmF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNaWdyYXRpb24sIE1pZ3JhdGlvbkNvbmZpZyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBDbGllbnRCYXNlZFNlcnZpY2UsIFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvc2VydmljZXNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvQWRhcHRlclwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTWlncmF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvZXJyb3JzXCI7XG5pbXBvcnQgeyBDb250ZXh0T2YgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvdHlwZXNcIjtcbmltcG9ydCB7XG4gIENvbnRleHR1YWxBcmdzLFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG59IGZyb20gXCIuLi91dGlscy9Db250ZXh0dWFsTG9nZ2VkQ2xhc3NcIjtcbmltcG9ydCB7IHN0eWxlIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBEZWZhdWx0Rmxhdm91ciwgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuZXhwb3J0IGNsYXNzIE1pZ3JhdGlvblNlcnZpY2U8XG4gICAgUEVSU0lTVCBleHRlbmRzIGJvb2xlYW4sXG4gICAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PiA9IGFueSxcbiAgICBSID0gdm9pZCxcbiAgPlxuICBleHRlbmRzIENsaWVudEJhc2VkU2VydmljZTxcbiAgICBQRVJTSVNUIGV4dGVuZHMgYm9vbGVhbiA/IEEgOiB2b2lkLFxuICAgIE1pZ3JhdGlvbkNvbmZpZzxQRVJTSVNUPlxuICA+XG4gIGltcGxlbWVudHMgTWlncmF0aW9uPGFueSwgQSwgUj5cbntcbiAgZmxhdm91cj86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVmZXJlbmNlOiBzdHJpbmcgPSBNaWdyYXRpb25TZXJ2aWNlLm5hbWU7XG4gIHJlYWRvbmx5IHByZWNlZGVuY2U6IE1pZ3JhdGlvbjxhbnksIGFueT4gfCBNaWdyYXRpb248YW55LCBhbnk+W10gfCBudWxsID1cbiAgICBudWxsO1xuICB0cmFuc2FjdGlvbiE6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXRpYWxpemUoLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxBPj4pOiBQcm9taXNlPHtcbiAgICBjb25maWc6IE1pZ3JhdGlvbkNvbmZpZzxQRVJTSVNUPjtcbiAgICBjbGllbnQ6IFBFUlNJU1QgZXh0ZW5kcyBib29sZWFuID8gQSA6IHZvaWQ7XG4gIH0+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQZXJzaXN0ZW5jZUtleXMuSU5JVElBTElaQVRJT04sIHRydWUpXG4gICAgKS5mb3IodGhpcy5pbml0aWFsaXplKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IFNlcnZpY2UuZ2V0KFBlcnNpc3RlbmNlS2V5cy5QRVJTSVNURU5DRSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKCFjdHguZ2V0KFwiaWdub3JlRGV2U2FmZUd1YXJkc1wiKSlcbiAgICAgICAgbG9nLndhcm4oXG4gICAgICAgICAgYFBlcnNpc3RlbmNlIHNlcnZpY2Ugbm90IGF2YWlsYWJsZS4gdGhpcyBtYXkgaW5kaWNhdGUgcG9vciBpbml0aWFsaXphdGlvbiBvZiB0aGUgcGVyc2lzdGVuY2UgbGF5ZXIgKG9yIG5vdClgXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2ZnOiBNaWdyYXRpb25Db25maWc8UEVSU0lTVD4gPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBhcmdzLmxlbmd0aCA/IGFyZ3NbMF0gOiBEZWZhdWx0TWlncmF0aW9uQ29uZmlnLFxuICAgICAgRGVmYXVsdE1pZ3JhdGlvbkNvbmZpZ1xuICAgICk7XG4gICAgdGhpcy50cmFuc2FjdGlvbiA9IGNmZy5wZXJzaXN0TWlncmF0aW9uU3RlcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbmZpZzogY2ZnLFxuICAgICAgY2xpZW50OiBBZGFwdGVyLmdldChjZmcucGVyc2lzdGVuY2VGbGF2b3VyKSBhcyBQRVJTSVNUIGV4dGVuZHMgYm9vbGVhblxuICAgICAgICA/IEFcbiAgICAgICAgOiB2b2lkLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkb3duKFxuICAgIHFyOiBhbnksXG4gICAgYWRhcHRlcjogYW55LFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHRPZjxhbnk+PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGxvZyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy5kb3duKTtcbiAgICBsb2cudmVyYm9zZShzdHlsZShcIkNsZWFuaW5nIHVwIGFmdGVyIGFsbCBtaWdyYXRpb25zXCIpLmdyZWVuLmJvbGQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNvcnQobWlncmF0aW9uczogTWlncmF0aW9uPGFueSwgYW55PltdKSB7XG4gICAgcmV0dXJuIG1pZ3JhdGlvbnMuc29ydCgobWlncmF0aW9uMSwgbWlncmF0aW9uMikgPT4ge1xuICAgICAgaWYgKCFtaWdyYXRpb24xLnByZWNlZGVuY2UgJiYgIW1pZ3JhdGlvbjIucHJlY2VkZW5jZSlcbiAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgYE9ubHkgb25lIG1pZ3JhdGlvbiBjYW4gaGF2ZSBhIG51bGwgcHJlY2VkZW5jZTogJHttaWdyYXRpb24xLnJlZmVyZW5jZX0gdnMgJHttaWdyYXRpb24yLnJlZmVyZW5jZX1gXG4gICAgICAgICk7XG4gICAgICBpZiAoIW1pZ3JhdGlvbjEucHJlY2VkZW5jZSkgcmV0dXJuIDE7XG4gICAgICBpZiAoIW1pZ3JhdGlvbjIucHJlY2VkZW5jZSkgcmV0dXJuIC0xO1xuICAgICAgY29uc3QgcHJlY2VkZW5jZXMxID0gQXJyYXkuaXNBcnJheShtaWdyYXRpb24xLnByZWNlZGVuY2UpXG4gICAgICAgID8gbWlncmF0aW9uMS5wcmVjZWRlbmNlXG4gICAgICAgIDogW21pZ3JhdGlvbjFdO1xuICAgICAgY29uc3QgcHJlY2VkZW5jZXMyID0gQXJyYXkuaXNBcnJheShtaWdyYXRpb24yLnByZWNlZGVuY2UpXG4gICAgICAgID8gbWlncmF0aW9uMi5wcmVjZWRlbmNlXG4gICAgICAgIDogW21pZ3JhdGlvbjJdO1xuXG4gICAgICBjb25zdCBpbmNsdWRlczEgPSBwcmVjZWRlbmNlczEuZXZlcnkoKHApID0+IHAgPT09IG1pZ3JhdGlvbjIpO1xuICAgICAgY29uc3QgaW5jbHVkZXMyID0gcHJlY2VkZW5jZXMyLmV2ZXJ5KChwKSA9PiBwID09PSBtaWdyYXRpb24xKTtcblxuICAgICAgLy8gc29ydCB3aGVuIHRoZXkgcmVmZXJlbmNlIGVhY2ggb3RoZXJcbiAgICAgIGlmIChpbmNsdWRlczEgJiYgIWluY2x1ZGVzMikgcmV0dXJuIDE7XG4gICAgICBpZiAoaW5jbHVkZXMyICYmICFpbmNsdWRlczEpIHJldHVybiAtMTtcblxuICAgICAgY29uc3QgYW55Tm90SW5jbHVkZWQxID0gcHJlY2VkZW5jZXMxLmZpbmQoXG4gICAgICAgIChwKSA9PiAhcHJlY2VkZW5jZXMyLmluY2x1ZGVzKHApXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsSW5jbHVkZWQxID0gcHJlY2VkZW5jZXMxLmV2ZXJ5KChwKSA9PiBwcmVjZWRlbmNlczIuaW5jbHVkZXMocCkpO1xuXG4gICAgICBjb25zdCBhbnlOb3RJbmNsdWRlZDIgPSBwcmVjZWRlbmNlczIuZmluZChcbiAgICAgICAgKHApID0+ICFwcmVjZWRlbmNlczEuaW5jbHVkZXMocClcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxJbmNsdWRlZDIgPSBwcmVjZWRlbmNlczIuZXZlcnkoKHApID0+IHByZWNlZGVuY2VzMS5pbmNsdWRlcyhwKSk7XG5cbiAgICAgIC8vIHNvbHZlIGFsbCBkaWZmZXJlbmNlc1xuICAgICAgaWYgKGFueU5vdEluY2x1ZGVkMSAmJiAhYW55Tm90SW5jbHVkZWQyICYmICFhbGxJbmNsdWRlZDEgJiYgIWFsbEluY2x1ZGVkMilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoIWFueU5vdEluY2x1ZGVkMSAmJiBhbnlOb3RJbmNsdWRlZDIgJiYgIWFsbEluY2x1ZGVkMSAmJiAhYWxsSW5jbHVkZWQyKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoIWFueU5vdEluY2x1ZGVkMSAmJiAhYW55Tm90SW5jbHVkZWQyICYmIGFsbEluY2x1ZGVkMSAmJiAhYWxsSW5jbHVkZWQyKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoIWFueU5vdEluY2x1ZGVkMSAmJiAhYW55Tm90SW5jbHVkZWQyICYmICFhbGxJbmNsdWRlZDEgJiYgYWxsSW5jbHVkZWQyKVxuICAgICAgICByZXR1cm4gMTtcblxuICAgICAgaWYgKCFhbnlOb3RJbmNsdWRlZDEgJiYgIWFueU5vdEluY2x1ZGVkMiAmJiBhbGxJbmNsdWRlZDEgJiYgIWFsbEluY2x1ZGVkMilcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCFhbnlOb3RJbmNsdWRlZDEgJiYgIWFueU5vdEluY2x1ZGVkMiAmJiAhYWxsSW5jbHVkZWQxICYmIGFsbEluY2x1ZGVkMilcbiAgICAgICAgcmV0dXJuIDE7XG5cbiAgICAgIGlmICghYW55Tm90SW5jbHVkZWQxICYmIGFueU5vdEluY2x1ZGVkMiAmJiAhYWxsSW5jbHVkZWQxICYmICFhbGxJbmNsdWRlZDIpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKFxuICAgICAgICAhYW55Tm90SW5jbHVkZWQxICYmXG4gICAgICAgICFhbnlOb3RJbmNsdWRlZDIgJiZcbiAgICAgICAgIWFsbEluY2x1ZGVkMSAmJlxuICAgICAgICAhYWxsSW5jbHVkZWQyXG4gICAgICApXG4gICAgICAgIHJldHVybiAtMTtcblxuICAgICAgY29uc3Qgc2l6ZTEgPSBwcmVjZWRlbmNlczEubGVuZ3RoO1xuICAgICAgY29uc3Qgc2l6ZTIgPSBwcmVjZWRlbmNlczIubGVuZ3RoO1xuICAgICAgY29uc3QgcmVzID0gc2l6ZTEgLSBzaXplMjtcbiAgICAgIGlmIChyZXMgPT09IDApIHtcbiAgICAgICAgaWYgKG1pZ3JhdGlvbjEucmVmZXJlbmNlID09PSBtaWdyYXRpb24yLnJlZmVyZW5jZSlcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGBVbmFibGUgdG8gc29ydCBtaWdyYXRpb24gcHJlY2VkZW5jZSBiZXR3ZWVuICR7bWlncmF0aW9uMS5yZWZlcmVuY2V9IGFuZCAke21pZ3JhdGlvbjIucmVmZXJlbmNlfS4gc2hvdWxkIG5vdCBiZSBwb3NzaWJsZWBcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gbWlncmF0aW9uMS5yZWZlcmVuY2UubG9jYWxlQ29tcGFyZShtaWdyYXRpb24yLnJlZmVyZW5jZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBtaWdyYXRlKFxuICAgIHFyPzogYW55LFxuICAgIGFkYXB0ZXI/OiBhbnksXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPENvbnRleHRPZjxhbnk+PlxuICApOiBQcm9taXNlPFI+IHtcbiAgICBjb25zdCB7IGN0eEFyZ3MsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgUGVyc2lzdGVuY2VLZXlzLk1JR1JBVElPTiwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLm1pZ3JhdGUpO1xuICAgIGxldCBtOiBNaWdyYXRpb248YW55LCBhbnk+O1xuXG4gICAgY29uc3QgdG9Cb290ID0gTWV0YWRhdGEubWlncmF0aW9ucygpO1xuICAgIGNvbnN0IG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbjxhbnksIGFueT5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW3JlZmVyZW5jZSwgbWlnXSBvZiB0b0Jvb3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZy5zaWxseShgbG9hZGluZyBtaWdyYXRpb24gJHtyZWZlcmVuY2V9Li4uYCk7XG4gICAgICAgIG0gPSBuZXcgbWlnKCk7XG4gICAgICAgIGxvZy52ZXJib3NlKGBtaWdyYXRpb24gJHttLnJlZmVyZW5jZX0gaW5zdGFudGlhdGVkYCwgMSk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBmYWlsZWQgdG8gY3JlYXRlIG1pZ3JhdGlvbiAke21pZy5uYW1lfTogJHtlfWApO1xuICAgICAgfVxuICAgICAgbWlncmF0aW9ucy5wdXNoKG0pO1xuICAgIH1cblxuICAgIGxldCBzb3J0ZWRNaWdyYXRpb25zOiBNaWdyYXRpb248YW55LCBhbnk+W107XG4gICAgdHJ5IHtcbiAgICAgIHNvcnRlZE1pZ3JhdGlvbnMgPSB0aGlzLnNvcnQobWlncmF0aW9ucyk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYEZhaWxlZCB0byBzb3J0IG1pZ3JhdGlvbnM6ICR7ZX1gKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHNvcnRlZCBtaWdyYXRpb24gYmVmb3JlIGV4ZWN1dGlvbjogJHtzb3J0ZWRNaWdyYXRpb25zLm1hcCgocykgPT4gcy5yZWZlcmVuY2UpfWBcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCBtIG9mIHNvcnRlZE1pZ3JhdGlvbnMpIHtcbiAgICAgIGxldCBhZGFwdGVyOiBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT47XG4gICAgICBsZXQgcXI6IGFueTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS5nZXQoXG4gICAgICAgICAgbS5jb25zdHJ1Y3RvciBhcyBhbnksXG4gICAgICAgICAgUGVyc2lzdGVuY2VLZXlzLk1JR1JBVElPTlxuICAgICAgICApO1xuICAgICAgICBjb25zdCBmbGF2b3VyID0gbWV0YT8uZmxhdm91ciB8fCBtLmZsYXZvdXI7XG4gICAgICAgIGFkYXB0ZXIgPSBBZGFwdGVyLmdldChmbGF2b3VyKSBhcyBhbnk7XG4gICAgICAgIGlmICghYWRhcHRlcilcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGBmYWlsZWQgdG8gY3JlYXRlIG1pZ3JhdGlvbiAke20ucmVmZXJlbmNlfS4gZGlkIHlvdSBjYWxsIFNlcnZpY2UuYm9vdCgpIG9yIHVzZSB0aGUgUGVyc2lzdGVuY2UgU2VydmljZT8/YFxuICAgICAgICAgICk7XG4gICAgICAgIHFyID0gYWRhcHRlci5jbGllbnQ7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gbG9hZCBhZGFwdGVyIHRvIG1pZ3JhdGUgJHttLnJlZmVyZW5jZX06ICR7ZX1gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG0udXAocXIsIGFkYXB0ZXIsIC4uLmN0eEFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICB0aHJvdyBuZXcgTWlncmF0aW9uRXJyb3IoXG4gICAgICAgICAgYGZhaWxlZCB0byBpbml0aWFsaXplIG1pZ3JhdGlvbiAke20ucmVmZXJlbmNlfTogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG0ubWlncmF0ZShxciwgYWRhcHRlciwgLi4uY3R4QXJncyk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIHRocm93IG5ldyBNaWdyYXRpb25FcnJvcihgZmFpbGVkIHRvIG1pZ3JhdGUgJHttLnJlZmVyZW5jZX06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IG0uZG93bihxciwgYWRhcHRlciwgLi4uY3R4QXJncyk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIHRocm93IG5ldyBNaWdyYXRpb25FcnJvcihcbiAgICAgICAgICBgZmFpbGVkIHRvIGNvbmNsdWRlIG1pZ3JhdGlvbiAke20ucmVmZXJlbmNlfTogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFI7XG4gIH1cblxuICBhc3luYyB1cChcbiAgICBxcjogYW55LFxuICAgIGFkYXB0ZXI6IGFueSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0T2Y8YW55Pj5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBsb2cgfSA9IHRoaXMubG9nQ3R4KGFyZ3MsIHRoaXMuZG93bik7XG4gICAgbG9nLnZlcmJvc2Uoc3R5bGUoXCJTZXR0aW5nIHVwIG1pZ3JhdGlvbiBwcm9jZXNzXCIpLnllbGxvdy5ib2xkKTtcbiAgfVxufVxuXG5jb25zdCBjdXJyZW50ID1cbiAgTWV0YWRhdGFbXCJpbm5lckdldFwiXShTeW1ib2wuZm9yKFBlcnNpc3RlbmNlS2V5cy5NSUdSQVRJT04pLCBEZWZhdWx0Rmxhdm91cikgfHxcbiAgW107XG5cbk1ldGFkYXRhLnNldChQZXJzaXN0ZW5jZUtleXMuTUlHUkFUSU9OLCBEZWZhdWx0Rmxhdm91ciwgW1xuICAuLi5jdXJyZW50LFxuICBNaWdyYXRpb25TZXJ2aWNlLFxuXSk7XG4iXX0=
|
|
@@ -59,4 +59,4 @@ MigrationTask = __decorate([
|
|
|
59
59
|
task("migration")
|
|
60
60
|
], MigrationTask);
|
|
61
61
|
export { MigrationTask };
|
|
62
|
-
//# sourceMappingURL=
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uVGFza3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0aW9ucy9NaWdyYXRpb25UYXNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLG9DQUErQjtBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLHNDQUFpQztBQUMzRCxPQUFPLEVBQUUsSUFBSSxFQUFFLGlDQUE0QjtBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGtDQUE2QjtBQUVuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBU3pDLElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWMsU0FBUSxXQUFxQztJQUN0RSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQXlCLEVBQUUsR0FBZ0I7UUFDbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQ3pDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQy9DLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUTtZQUNYLE1BQU0sSUFBSSxhQUFhLENBQ3JCLGFBQWEsS0FBSyxDQUFDLFNBQVMsNENBQTRDLENBQ3pFLENBQUM7UUFFSixNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxTQUE4QixDQUFDO1FBQ25DLElBQUksQ0FBQztZQUNILFNBQVMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFBQyxPQUFPLEdBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLG1DQUFtQyxLQUFLLENBQUMsU0FBUyxLQUFLLEdBQUcsRUFBRSxDQUM3RCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ3ZCLFNBQVMsQ0FBQyxXQUFrQixFQUM1QixlQUFlLENBQUMsU0FBUyxDQUMxQixDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU87WUFDVixNQUFNLElBQUksYUFBYSxDQUNyQiwyQ0FBMkMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUM3RCxDQUFDO1FBRUosTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUMxQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUU5QixJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztZQUNwQixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsS0FBSyxDQUFDLFNBQVMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7WUFDcEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEtBQUssQ0FBQyxTQUFTLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4RSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLENBQUMsU0FBUyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsT0FBTztRQUNULENBQUM7UUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDO0lBQzVELENBQUM7Q0FDRixDQUFBO0FBeERZLGFBQWE7SUFEekIsSUFBSSxDQUFDLFdBQVcsQ0FBQztHQUNMLGFBQWEsQ0F3RHpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB0YXNrIH0gZnJvbSBcIi4uL3Rhc2tzL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IFRhc2tIYW5kbGVyIH0gZnJvbSBcIi4uL3Rhc2tzL1Rhc2tIYW5kbGVyXCI7XG5pbXBvcnQgeyBUYXNrQ29udGV4dCB9IGZyb20gXCIuLi90YXNrcy9UYXNrQ29udGV4dFwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IE1pZ3JhdGlvbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uU3RlcElucHV0IHtcbiAgcmVmZXJlbmNlOiBzdHJpbmc7XG4gIGFyZ3M/OiBhbnlbXTtcbn1cblxuQHRhc2soXCJtaWdyYXRpb25cIilcbmV4cG9ydCBjbGFzcyBNaWdyYXRpb25UYXNrIGV4dGVuZHMgVGFza0hhbmRsZXI8TWlncmF0aW9uU3RlcElucHV0LCB2b2lkPiB7XG4gIGFzeW5jIHJ1bihpbnB1dDogTWlncmF0aW9uU3RlcElucHV0LCBjdHg6IFRhc2tDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY3R4LmxvZ2dlci5pbmZvKGBFeGVjdXRpbmcgbWlncmF0aW9uICR7aW5wdXQucmVmZXJlbmNlfWApO1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gTWV0YWRhdGEubWlncmF0aW9ucygpLmZpbmQoXG4gICAgICAoW3JlZmVyZW5jZV0pID0+IHJlZmVyZW5jZSA9PT0gaW5wdXQucmVmZXJlbmNlXG4gICAgKTtcbiAgICBpZiAoIW1hbmlmZXN0KVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBNaWdyYXRpb24gJHtpbnB1dC5yZWZlcmVuY2V9IGlzIG5vdCByZWdpc3RlcmVkIHdpdGggdGhlIG1ldGFkYXRhIGxheWVyYFxuICAgICAgKTtcblxuICAgIGNvbnN0IE1pZ3JhdGlvbkNsYXNzID0gbWFuaWZlc3RbMV07XG4gICAgbGV0IG1pZ3JhdGlvbjogTWlncmF0aW9uPGFueSwgYW55PjtcbiAgICB0cnkge1xuICAgICAgbWlncmF0aW9uID0gbmV3IE1pZ3JhdGlvbkNsYXNzKCk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBpbnN0YW50aWF0ZSBtaWdyYXRpb24gJHtpbnB1dC5yZWZlcmVuY2V9OiAke2Vycn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS5nZXQoXG4gICAgICBtaWdyYXRpb24uY29uc3RydWN0b3IgYXMgYW55LFxuICAgICAgUGVyc2lzdGVuY2VLZXlzLk1JR1JBVElPTlxuICAgICk7XG4gICAgY29uc3QgZmxhdm91ciA9IG1ldGE/LmZsYXZvdXIgfHwgbWlncmF0aW9uLmZsYXZvdXI7XG4gICAgY29uc3QgYWRhcHRlciA9IEFkYXB0ZXIuZ2V0KGZsYXZvdXIpO1xuICAgIGlmICghYWRhcHRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgVW5hYmxlIHRvIHJlc29sdmUgYWRhcHRlciBmb3IgbWlncmF0aW9uICR7aW5wdXQucmVmZXJlbmNlfWBcbiAgICAgICk7XG5cbiAgICBjb25zdCBxciA9IGFkYXB0ZXIuY2xpZW50O1xuICAgIGNvbnN0IGFyZ3MgPSBpbnB1dC5hcmdzID8/IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1pZ3JhdGlvbi51cChxciwgYWRhcHRlciwgLi4uYXJncywgY3R4KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBjdHgubG9nZ2VyLmVycm9yKGBVcCBwaGFzZSBmb3IgJHtpbnB1dC5yZWZlcmVuY2V9IGZhaWxlZDogJHtlfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBtaWdyYXRpb24ubWlncmF0ZShxciwgYWRhcHRlciwgLi4uYXJncywgY3R4KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBjdHgubG9nZ2VyLmVycm9yKGBtaWdyYXRpb24gcGhhc2UgZm9yICR7aW5wdXQucmVmZXJlbmNlfSBmYWlsZWQ6ICR7ZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1pZ3JhdGlvbi5kb3duKHFyLCBhZGFwdGVyLCAuLi5hcmdzLCBjdHgpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGN0eC5sb2dnZXIuZXJyb3IoYGRvd24gcGhhc2UgZm9yICR7aW5wdXQucmVmZXJlbmNlfSBmYWlsZWQ6ICR7ZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3R4LmxvZ2dlci5pbmZvKGBtaWdyYXRpb24gJHtpbnB1dC5yZWZlcmVuY2V9IGNvbXBsZXRlZGApO1xuICB9XG59XG4iXX0=
|
|
@@ -2,4 +2,4 @@ import { DefaultAdapterFlags } from "./../persistence/constants.js";
|
|
|
2
2
|
export const DefaultMigrationConfig = Object.assign({}, DefaultAdapterFlags, {
|
|
3
3
|
persistMigrationSteps: true,
|
|
4
4
|
});
|
|
5
|
-
//# sourceMappingURL=
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21pZ3JhdGlvbnMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQ0FBaUM7QUFHL0QsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQTBCLE1BQU0sQ0FBQyxNQUFNLENBQ3hFLEVBQUUsRUFDRixtQkFBbUIsRUFDbkI7SUFDRSxxQkFBcUIsRUFBRSxJQUFJO0NBQzVCLENBQ3VCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWZhdWx0QWRhcHRlckZsYWdzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTWlncmF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRNaWdyYXRpb25Db25maWc6IE1pZ3JhdGlvbkNvbmZpZzx0cnVlPiA9IE9iamVjdC5hc3NpZ24oXG4gIHt9LFxuICBEZWZhdWx0QWRhcHRlckZsYWdzLFxuICB7XG4gICAgcGVyc2lzdE1pZ3JhdGlvblN0ZXBzOiB0cnVlLFxuICB9XG4pIGFzIE1pZ3JhdGlvbkNvbmZpZzx0cnVlPjtcbiJdfQ==
|
|
@@ -46,4 +46,4 @@ export function migration(reference, precedence, flavour, rules) {
|
|
|
46
46
|
})
|
|
47
47
|
.apply();
|
|
48
48
|
}
|
|
49
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9taWdyYXRpb25zL2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUNSLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0NBQWlDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSw4QkFBMkI7QUF1QnRELE1BQU0sVUFBVSxTQUFTLENBQ3ZCLFNBQWlCLEVBQ2pCLFVBQTZELEVBQzdELE9BQWtDLEVBQ2xDLEtBQXVCO0lBRXZCLFNBQVMsY0FBYyxDQUNyQixVQUE2RCxFQUM3RCxPQUFrQyxFQUNsQyxLQUF1QjtRQUV2QixPQUFPLFVBQVUsUUFBZ0I7WUFDL0IsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUM7WUFDL0QsTUFBTSxxQkFBcUIsR0FDekIsQ0FBQyx1QkFBdUIsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLENBQUM7WUFFaEUsSUFBSSxnQkFBZ0IsR0FJSixVQUFVLENBQUM7WUFDM0IsSUFBSSxhQUFpQyxDQUFDO1lBQ3RDLElBQUksV0FBd0MsQ0FBQztZQUU3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLE9BQU8sQ0FBQztnQkFDeEIsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsYUFBYSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1lBQy9CLENBQUM7WUFFRCxJQUFJLGdCQUFnQixLQUFLLFNBQVMsSUFBSSxnQkFBZ0IsS0FBSyxJQUFJO2dCQUM3RCxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztZQUV0QyxNQUFNLGVBQWUsR0FDbkIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUF1QixDQUFDLElBQUksY0FBYyxDQUFDO1lBQ2hFLE1BQU0sc0JBQXNCLEdBQzFCLHFCQUFxQjtnQkFDckIsZ0JBQWdCLEtBQUssZ0JBQWdCO2dCQUNyQyxTQUFTO2dCQUNULFNBQVMsS0FBSyxhQUFhLENBQUM7WUFDOUIsTUFBTSxZQUFZLEdBQ2hCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksZUFBZSxDQUFDO1lBRTFFLE1BQU0sT0FBTyxHQUNYLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDbEIsTUFBTSxDQUFDLEdBQUcsQ0FDUixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FDOUQsRUFDRCxZQUFZLElBQUksY0FBYyxDQUMvQixJQUFJLEVBQUUsQ0FBQztZQUNWLFFBQVEsQ0FBQyxHQUFHLENBQ1YsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQzdELFlBQVksSUFBSSxjQUFjLEVBQzlCLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FDbEMsQ0FBQztZQUVGLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFN0QsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTtnQkFDekMsU0FBUyxFQUFFLFNBQVMsSUFBSyxRQUF3QixDQUFDLElBQUk7Z0JBQ3RELFVBQVUsRUFBRSxnQkFBZ0I7Z0JBQzVCLE9BQU8sRUFBRSxZQUFZLElBQUksY0FBYztnQkFDdkMsS0FBSyxFQUFFLFdBQVc7YUFDbkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1NBQzdDLE1BQU0sQ0FBQztRQUNOLFNBQVMsRUFBRSxjQUFjO1FBQ3pCLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDO0tBQ25DLENBQUM7U0FDRCxLQUFLLEVBQUUsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgRGVjb3JhdGlvbixcbiAgRGVmYXVsdEZsYXZvdXIsXG4gIG1ldGFkYXRhLFxuICBNZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBNaWdyYXRpb24sIE1pZ3JhdGlvblJ1bGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTWlncmF0aW9uU2VydmljZSB9IGZyb20gXCIuL01pZ3JhdGlvblNlcnZpY2VcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGlvbihyZWZlcmVuY2U6IHN0cmluZyk6ICh0YXJnZXQ6IG9iamVjdCkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGlvbihcbiAgcmVmZXJlbmNlOiBzdHJpbmcsXG4gIHByZWNlZGVuY2U6IENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxhbnksIGFueT4+IHwgbnVsbFxuKTogKHRhcmdldDogb2JqZWN0KSA9PiBhbnk7XG5leHBvcnQgZnVuY3Rpb24gbWlncmF0aW9uKFxuICByZWZlcmVuY2U6IHN0cmluZyxcbiAgZmxhdm91cjogc3RyaW5nLFxuICBydWxlcz86IE1pZ3JhdGlvblJ1bGVbXVxuKTogKHRhcmdldDogb2JqZWN0KSA9PiBhbnk7XG5leHBvcnQgZnVuY3Rpb24gbWlncmF0aW9uKFxuICByZWZlcmVuY2U6IHN0cmluZyxcbiAgcHJlY2VkZW5jZTogQ29uc3RydWN0b3I8TWlncmF0aW9uPGFueSwgYW55Pj4sXG4gIGZsYXZvdXI6IHN0cmluZ1xuKTogKHRhcmdldDogb2JqZWN0KSA9PiBhbnk7XG5leHBvcnQgZnVuY3Rpb24gbWlncmF0aW9uKFxuICByZWZlcmVuY2U6IHN0cmluZyxcbiAgcHJlY2VkZW5jZT86IENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxhbnksIGFueT4+IHwgc3RyaW5nIHwgbnVsbCxcbiAgZmxhdm91cj86IHN0cmluZyB8IE1pZ3JhdGlvblJ1bGVbXSxcbiAgcnVsZXM/OiBNaWdyYXRpb25SdWxlW11cbik6ICh0YXJnZXQ6IG9iamVjdCkgPT4gYW55O1xuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGlvbihcbiAgcmVmZXJlbmNlOiBzdHJpbmcsXG4gIHByZWNlZGVuY2U/OiBDb25zdHJ1Y3RvcjxNaWdyYXRpb248YW55LCBhbnk+PiB8IHN0cmluZyB8IG51bGwsXG4gIGZsYXZvdXI/OiBzdHJpbmcgfCBNaWdyYXRpb25SdWxlW10sXG4gIHJ1bGVzPzogTWlncmF0aW9uUnVsZVtdXG4pOiAodGFyZ2V0OiBvYmplY3QpID0+IGFueSB7XG4gIGZ1bmN0aW9uIGlubmVyTWlncmF0aW9uKFxuICAgIHByZWNlZGVuY2U/OiBDb25zdHJ1Y3RvcjxNaWdyYXRpb248YW55LCBhbnk+PiB8IHN0cmluZyB8IG51bGwsXG4gICAgZmxhdm91cj86IHN0cmluZyB8IE1pZ3JhdGlvblJ1bGVbXSxcbiAgICBydWxlcz86IE1pZ3JhdGlvblJ1bGVbXVxuICApOiAob3JpZ2luYWw6IG9iamVjdCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvcmlnaW5hbDogb2JqZWN0KSB7XG4gICAgICBjb25zdCB1c2VkUHJlY2VkZW5jZUFzRmxhdm91ciA9IHR5cGVvZiBwcmVjZWRlbmNlID09PSBcInN0cmluZ1wiO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRQcmVjZWRlbmNlID1cbiAgICAgICAgIXVzZWRQcmVjZWRlbmNlQXNGbGF2b3VyICYmIHR5cGVvZiBwcmVjZWRlbmNlICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gICAgICBsZXQgcGFyc2VkUHJlY2VkZW5jZTpcbiAgICAgICAgfCBDb25zdHJ1Y3RvcjxNaWdyYXRpb248YW55LCBhbnk+PlxuICAgICAgICB8IHN0cmluZ1xuICAgICAgICB8IG51bGxcbiAgICAgICAgfCB1bmRlZmluZWQgPSBwcmVjZWRlbmNlO1xuICAgICAgbGV0IHBhcnNlZEZsYXZvdXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGxldCBwYXJzZWRSdWxlczogTWlncmF0aW9uUnVsZVtdIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmbGF2b3VyKSkge1xuICAgICAgICBwYXJzZWRSdWxlcyA9IGZsYXZvdXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRGbGF2b3VyID0gZmxhdm91cjtcbiAgICAgICAgcGFyc2VkUnVsZXMgPSBydWxlcztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwcmVjZWRlbmNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHBhcnNlZEZsYXZvdXIgPSBwcmVjZWRlbmNlO1xuICAgICAgICBwYXJzZWRQcmVjZWRlbmNlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyc2VkUHJlY2VkZW5jZSA9PT0gdW5kZWZpbmVkICYmIHBhcnNlZFByZWNlZGVuY2UgIT09IG51bGwpXG4gICAgICAgIHBhcnNlZFByZWNlZGVuY2UgPSBNaWdyYXRpb25TZXJ2aWNlO1xuXG4gICAgICBjb25zdCBmYWxsYmFja0ZsYXZvdXIgPVxuICAgICAgICBNZXRhZGF0YS5mbGF2b3VyT2Yob3JpZ2luYWwgYXMgQ29uc3RydWN0b3IpIHx8IERlZmF1bHRGbGF2b3VyO1xuICAgICAgY29uc3QgcHJlZmVyUmVmZXJlbmNlRmxhdm91ciA9XG4gICAgICAgIGhhc0V4cGxpY2l0UHJlY2VkZW5jZSAmJlxuICAgICAgICBwYXJzZWRQcmVjZWRlbmNlID09PSBNaWdyYXRpb25TZXJ2aWNlICYmXG4gICAgICAgIHJlZmVyZW5jZSAmJlxuICAgICAgICByZWZlcmVuY2UgIT09IHBhcnNlZEZsYXZvdXI7XG4gICAgICBjb25zdCBmaW5hbEZsYXZvdXIgPVxuICAgICAgICAocHJlZmVyUmVmZXJlbmNlRmxhdm91ciA/IHJlZmVyZW5jZSA6IHBhcnNlZEZsYXZvdXIpIHx8IGZhbGxiYWNrRmxhdm91cjtcblxuICAgICAgY29uc3QgY3VycmVudCA9XG4gICAgICAgIE1ldGFkYXRhW1wiaW5uZXJHZXRcIl0oXG4gICAgICAgICAgU3ltYm9sLmZvcihcbiAgICAgICAgICAgIFtQZXJzaXN0ZW5jZUtleXMuTUlHUkFUSU9OLCBQZXJzaXN0ZW5jZUtleXMuQllfS0VZXS5qb2luKFwiLVwiKVxuICAgICAgICAgICksXG4gICAgICAgICAgZmluYWxGbGF2b3VyIHx8IERlZmF1bHRGbGF2b3VyXG4gICAgICAgICkgfHwgW107XG4gICAgICBNZXRhZGF0YS5zZXQoXG4gICAgICAgIFtQZXJzaXN0ZW5jZUtleXMuTUlHUkFUSU9OLCBQZXJzaXN0ZW5jZUtleXMuQllfS0VZXS5qb2luKFwiLVwiKSxcbiAgICAgICAgZmluYWxGbGF2b3VyIHx8IERlZmF1bHRGbGF2b3VyLFxuICAgICAgICBbLi4uY3VycmVudCwgeyBjbGFzczogb3JpZ2luYWwgfV1cbiAgICAgICk7XG5cbiAgICAgIE1ldGFkYXRhLnNldChQZXJzaXN0ZW5jZUtleXMuTUlHUkFUSU9OLCByZWZlcmVuY2UsIG9yaWdpbmFsKTtcblxuICAgICAgcmV0dXJuIG1ldGFkYXRhKFBlcnNpc3RlbmNlS2V5cy5NSUdSQVRJT04sIHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UgfHwgKG9yaWdpbmFsIGFzIENvbnN0cnVjdG9yKS5uYW1lLFxuICAgICAgICBwcmVjZWRlbmNlOiBwYXJzZWRQcmVjZWRlbmNlLFxuICAgICAgICBmbGF2b3VyOiBmaW5hbEZsYXZvdXIgfHwgRGVmYXVsdEZsYXZvdXIsXG4gICAgICAgIHJ1bGVzOiBwYXJzZWRSdWxlcyxcbiAgICAgIH0pKG9yaWdpbmFsKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKFBlcnNpc3RlbmNlS2V5cy5NSUdSQVRJT04pXG4gICAgLmRlZmluZSh7XG4gICAgICBkZWNvcmF0b3I6IGlubmVyTWlncmF0aW9uLFxuICAgICAgYXJnczogW3ByZWNlZGVuY2UsIGZsYXZvdXIsIHJ1bGVzXSxcbiAgICB9KVxuICAgIC5hcHBseSgpO1xufVxuIl19
|
|
@@ -9,4 +9,4 @@ export * from "./Migration.js";
|
|
|
9
9
|
export * from "./MigrationService.js";
|
|
10
10
|
export * from "./MigrationTasks.js";
|
|
11
11
|
export * from "./types.js";
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0aW9ucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsK0JBQTRCO0FBQzVCLGdDQUE2QjtBQUM3QiwrQkFBNEI7QUFDNUIsc0NBQW1DO0FBQ25DLG9DQUFpQztBQUNqQywyQkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBFeHBvcnRzIGZvciB0aGUgbWlncmF0aW9ucyBtb2R1bGUuXG4gKiBAc3VtbWFyeSBUaGlzIGZpbGUgZXhwb3J0cyBhbGwgdGhlIG5lY2Vzc2FyeSBjb21wb25lbnRzIGZvciB0aGUgbWlncmF0aW9ucyBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgY29uc3RhbnRzLCBkZWNvcmF0b3JzLCBhbmQgbW9yZS5cbiAqIEBtb2R1bGUgY29yZS9taWdyYXRpb25zXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vTWlncmF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9NaWdyYXRpb25TZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9NaWdyYXRpb25UYXNrc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0aW9ucy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5cbmltcG9ydCB7IEFkYXB0ZXJGbGFncywgQ29udGV4dE9mIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL3R5cGVzXCI7XG5pbXBvcnQgeyBDb250ZXh0dWFsQXJncyB9IGZyb20gXCIuLi91dGlscy9Db250ZXh0dWFsTG9nZ2VkQ2xhc3NcIjtcbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uPFxuICBRVUVSWVJVTk5FUixcbiAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PixcbiAgUiA9IHZvaWQsXG4+IHtcbiAgZmxhdm91cj86IHN0cmluZztcbiAgcHJlY2VkZW5jZTogTWlncmF0aW9uPGFueSwgYW55PiB8IE1pZ3JhdGlvbjxhbnksIGFueT5bXSB8IG51bGw7XG4gIHJlZmVyZW5jZTogc3RyaW5nO1xuICB0cmFuc2FjdGlvbjogYm9vbGVhbjtcbiAgdXAoXG4gICAgcXI6IFFVRVJZUlVOTkVSLFxuICAgIGFkYXB0ZXI6IEEsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8Q29udGV4dE9mPEE+PlxuICApOiBQcm9taXNlPHZvaWQ+O1xuICBtaWdyYXRlKFxuICAgIHFyOiBRVUVSWVJVTk5FUixcbiAgICBhZGFwdGVyOiBBLFxuICAgIC4uLmFyZ3M6IENvbnRleHR1YWxBcmdzPENvbnRleHRPZjxBPj5cbiAgKTogUHJvbWlzZTxSPjtcbiAgZG93bihcbiAgICBxcjogUVVFUllSVU5ORVIsXG4gICAgYWRhcHRlcjogQSxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxDb250ZXh0T2Y8QT4+XG4gICk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25Gb3JBZGFwdGVyPEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4+ID1cbiAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIGluZmVyIENPTk4sIGFueT4gPyBDT05OIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGlvblJ1bGU8XG4gIEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT4gPSBhbnksXG4gIFFVRVJZUlVOTkVSID0gQ29ubmVjdGlvbkZvckFkYXB0ZXI8QT4sXG4+ID0gKHFyOiBRVUVSWVJVTk5FUiwgYWRhcHRlcjogQSwgY3R4OiBDb250ZXh0T2Y8QT4pID0+IFByb21pc2U8Ym9vbGVhbj47XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbk1ldGFkYXRhID0ge1xuICBwcmVjZWRlbmNlPzogTWlncmF0aW9uPGFueSwgYW55PjtcbiAgZmxhdm91cjogc3RyaW5nO1xuICBydWxlcz86IE1pZ3JhdGlvblJ1bGVbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkNvbmZpZzxQRVJTSVNUIGV4dGVuZHMgYm9vbGVhbj4gPSBBZGFwdGVyRmxhZ3M8YW55PiAmIHtcbiAgcGVyc2lzdE1pZ3JhdGlvblN0ZXBzOiBQRVJTSVNUO1xuICBwZXJzaXN0ZW5jZUZsYXZvdXI/OiBzdHJpbmc7XG59O1xuIl19
|
|
@@ -45,4 +45,4 @@ __decorate([
|
|
|
45
45
|
updatedAt(),
|
|
46
46
|
__metadata("design:type", Date)
|
|
47
47
|
], BaseModel.prototype, "updatedAt", void 0);
|
|
48
|
-
//# sourceMappingURL=
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZU1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL0Jhc2VNb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQVksS0FBSyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsd0JBQXFCO0FBRXBEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxPQUFnQixTQUFVLFNBQVEsS0FBSztJQWUzQyxZQUFzQixHQUF5QjtRQUM3QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0Y7QUFaQztJQURDLFNBQVMsRUFBRTs4QkFDQSxJQUFJOzRDQUFDO0FBT2pCO0lBREMsU0FBUyxFQUFFOzhCQUNBLElBQUk7NENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbEFyZywgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBjcmVhdGVkQXQsIHVwZGF0ZWRBdCB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBtb2RlbCBjbGFzcyBmb3IgYWxsIGRvbWFpbiBtb2RlbHNcbiAqIEBzdW1tYXJ5IEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgdGhhdCBleHRlbmRzIHRoZSBNb2RlbCBjbGFzcyBmcm9tIGRlY29yYXRvci12YWxpZGF0aW9uIGFuZCBhZGRzIHRpbWVzdGFtcCBmdW5jdGlvbmFsaXR5LlxuICogQWxsIGRvbWFpbiBtb2RlbHMgaW4gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBleHRlbmQgdGhpcyBjbGFzcyB0byBpbmhlcml0IGNvbW1vbiBwcm9wZXJ0aWVzIGFuZCBiZWhhdmlvcnMuXG4gKiBAcGFyYW0ge01vZGVsQXJnPEJhc2VNb2RlbD59IGFyZyAtIE9wdGlvbmFsIGluaXRpYWxpemF0aW9uIGRhdGEgZm9yIHRoZSBtb2RlbFxuICogQGNsYXNzIEJhc2VNb2RlbFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICB1c2VybmFtZSE6IHN0cmluZztcbiAqXG4gKiAgIEBlbWFpbCgpXG4gKiAgIGVtYWlsITogc3RyaW5nO1xuICpcbiAqICAgY29uc3RydWN0b3IoZGF0YT86IE1vZGVsQXJnPFVzZXI+KSB7XG4gKiAgICAgc3VwZXIoZGF0YSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCB1c2VyID0gbmV3IFVzZXIoeyB1c2VybmFtZTogJ2pvaG4nLCBlbWFpbDogJ2pvaG5AZXhhbXBsZS5jb20nIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTW9kZWwgZXh0ZW5kcyBNb2RlbCB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRpb24gdGltZXN0YW1wIGZvciB0aGUgbW9kZWxcbiAgICogQHN1bW1hcnkgQXV0b21hdGljYWxseSBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBtb2RlbCBpcyBjcmVhdGVkXG4gICAqL1xuICBAY3JlYXRlZEF0KClcbiAgY3JlYXRlZEF0ITogRGF0ZTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExhc3QgdXBkYXRlIHRpbWVzdGFtcCBmb3IgdGhlIG1vZGVsXG4gICAqIEBzdW1tYXJ5IEF1dG9tYXRpY2FsbHkgdXBkYXRlZCB0byB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lIHdoZW5ldmVyIHRoZSBtb2RlbCBpcyBtb2RpZmllZFxuICAgKi9cbiAgQHVwZGF0ZWRBdCgpXG4gIHVwZGF0ZWRBdCE6IERhdGU7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPEJhc2VNb2RlbD4pIHtcbiAgICBzdXBlcihhcmcpO1xuICB9XG59XG4iXX0=
|
|
@@ -50,4 +50,4 @@ SequenceModel = __decorate([
|
|
|
50
50
|
__metadata("design:paramtypes", [Object])
|
|
51
51
|
], SequenceModel);
|
|
52
52
|
export { SequenceModel };
|
|
53
|
-
//# sourceMappingURL=
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbC9TZXF1ZW5jZU1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFakUsT0FBTyxFQUFFLFNBQVMsRUFBRSx1QkFBb0I7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSx3QkFBcUI7QUFDckMsT0FBTyxFQUFFLEVBQUUsRUFBRSxvQ0FBK0I7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBbUI7QUFDbkM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBR0ksSUFBTSxhQUFhLEdBQW5CLE1BQU0sYUFBYyxTQUFRLFNBQVM7SUFlMUMsWUFBWSxHQUE2QjtRQUN2QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixDQUFDO0NBQ0YsQ0FBQTtBQWJDO0lBREMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7O3lDQUMzQjtBQVFaO0lBRkMsUUFBUSxFQUFFO0lBQ1YsS0FBSyxFQUFFOzs4Q0FDa0I7QUFiZixhQUFhO0lBRnpCLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDbkIsS0FBSyxFQUFFOztHQUNLLGFBQWEsQ0FrQnpCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kZWwsIHJlcXVpcmVkIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNb2RlbEFyZyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IEJhc2VNb2RlbCB9IGZyb20gXCIuL0Jhc2VNb2RlbFwiO1xuaW1wb3J0IHsgdGFibGUgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBwayB9IGZyb20gXCIuLi9pZGVudGl0eS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBpbmRleCB9IGZyb20gXCIuL2luZGV4aW5nXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSQU0gc2VxdWVuY2UgbW9kZWwgZm9yIGF1dG8taW5jcmVtZW50aW5nIHZhbHVlc1xuICogQHN1bW1hcnkgQSBtb2RlbCBjbGFzcyB0aGF0IHJlcHJlc2VudHMgYSBzZXF1ZW5jZSBpbiB0aGUgUkFNIGFkYXB0ZXIuIEl0IHN0b3JlcyB0aGUgY3VycmVudCB2YWx1ZVxuICogb2YgYSBzZXF1ZW5jZSB0aGF0IGNhbiBiZSB1c2VkIGZvciBnZW5lcmF0aW5nIHNlcXVlbnRpYWwgaWRlbnRpZmllcnMgZm9yIGVudGl0aWVzLlxuICogVGhlIHNlcXVlbmNlIGlzIGlkZW50aWZpZWQgYnkgaXRzIElEIGFuZCBtYWludGFpbnMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gKiBAcGFyYW0ge01vZGVsQXJnPFNlcXVlbmNlPn0gc2VxIC0gSW5pdGlhbCBzZXF1ZW5jZSBkYXRhXG4gKiBAY2xhc3MgU2VxdWVuY2VcbiAqIEBjYXRlZ29yeSBSYW1cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUgYSBuZXcgc2VxdWVuY2VcbiAqIGNvbnN0IG9yZGVyU2VxdWVuY2UgPSBuZXcgU2VxdWVuY2UoeyBpZDogJ29yZGVyX3NlcScsIGN1cnJlbnQ6IDEgfSk7XG4gKlxuICogLy8gVXNlIHRoZSBzZXF1ZW5jZSB0byBnZXQgdGhlIG5leHQgdmFsdWVcbiAqIGNvbnN0IG5leHRPcmRlcklkID0gcGFyc2VJbnQob3JkZXJTZXF1ZW5jZS5jdXJyZW50LnRvU3RyaW5nKCkpICsgMTtcbiAqIG9yZGVyU2VxdWVuY2UuY3VycmVudCA9IG5leHRPcmRlcklkO1xuICogYGBgXG4gKi9cbkB0YWJsZShcIj8/c2VxdWVuY2VcIilcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VNb2RlbCBleHRlbmRzIEJhc2VNb2RlbCB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJpbWFyeSBrZXkgaWRlbnRpZmllciBmb3IgdGhlIHNlcXVlbmNlXG4gICAqL1xuICBAcGsoeyB0eXBlOiBTdHJpbmcsIGdlbmVyYXRlZDogZmFsc2UgfSlcbiAgaWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHZhbHVlIG9mIHRoZSBzZXF1ZW5jZVxuICAgKiBVc2VkIHRvIGdlbmVyYXRlIHRoZSBuZXh0IHNlcXVlbnRpYWwgdmFsdWVcbiAgICovXG4gIEByZXF1aXJlZCgpXG4gIEBpbmRleCgpXG4gIGN1cnJlbnQhOiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2VxPzogTW9kZWxBcmc8U2VxdWVuY2VNb2RlbD4pIHtcbiAgICBzdXBlcihzZXEpO1xuICB9XG59XG4iXX0=
|
|
@@ -346,7 +346,7 @@ export declare function manyToManyOnDelete<M extends Model, R extends Repo<M>>(t
|
|
|
346
346
|
* @function getPopulateKey
|
|
347
347
|
* @memberOf module:core
|
|
348
348
|
*/
|
|
349
|
-
export declare function getPopulateKey(tableName: string, fieldName: string, id: string | number): string;
|
|
349
|
+
export declare function getPopulateKey(tableName: string, fieldName: string | undefined, id: string | number): string;
|
|
350
350
|
export declare function getTagForDeleteKey(tableName: string, fieldName: string, id: string | number): string;
|
|
351
351
|
/**
|
|
352
352
|
* @description Caches a model for later population
|
|
@@ -916,7 +916,9 @@ export async function manyToManyOnDelete(context, data, key, model) {
|
|
|
916
916
|
* @memberOf module:core
|
|
917
917
|
*/
|
|
918
918
|
export function getPopulateKey(tableName, fieldName, id) {
|
|
919
|
-
|
|
919
|
+
if (fieldName)
|
|
920
|
+
return [PersistenceKeys.POPULATE, tableName, fieldName, id].join(".");
|
|
921
|
+
return [PersistenceKeys.POPULATE, tableName, id].join(".");
|
|
920
922
|
}
|
|
921
923
|
export function getTagForDeleteKey(tableName, fieldName, id) {
|
|
922
924
|
return [PersistenceKeys.TAG_FOR_DELETION, tableName, id].join(".");
|
|
@@ -937,8 +939,28 @@ export function getTagForDeleteKey(tableName, fieldName, id) {
|
|
|
937
939
|
*/
|
|
938
940
|
export async function cacheModelForPopulate(context, parentModel, propertyKey, pkValue, cacheValue) {
|
|
939
941
|
const cacheKey = getPopulateKey(parentModel.constructor.name, propertyKey, pkValue);
|
|
942
|
+
const log = context.logger.for(cacheModelForPopulate);
|
|
940
943
|
const cache = context.get("cacheForPopulate") || {};
|
|
941
|
-
cache[cacheKey]
|
|
944
|
+
let cached = cache[cacheKey];
|
|
945
|
+
let preferFromCache = context.getOrUndefined("preferFromCache");
|
|
946
|
+
if (!preferFromCache) {
|
|
947
|
+
try {
|
|
948
|
+
log.silly(`retrieving from children`);
|
|
949
|
+
preferFromCache = context.getFromChildren("preferFromCache") || false;
|
|
950
|
+
if (preferFromCache) {
|
|
951
|
+
cached = (context.getFromChildren("cacheForPopulate") || {})[cacheKey];
|
|
952
|
+
}
|
|
953
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
954
|
+
}
|
|
955
|
+
catch (e) {
|
|
956
|
+
preferFromCache = false;
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
if (preferFromCache) {
|
|
960
|
+
log.debug(`preferring previous cache: ${!!cache[cacheKey]}`);
|
|
961
|
+
}
|
|
962
|
+
cache[cacheKey] =
|
|
963
|
+
preferFromCache && cached ? cached : cacheValue;
|
|
942
964
|
return context.accumulate({ cacheForPopulate: cache });
|
|
943
965
|
}
|
|
944
966
|
/**
|
|
@@ -1150,4 +1172,4 @@ export function repositoryFromTypeMetadata(model, propertyKey, alias) {
|
|
|
1150
1172
|
throw new InternalError(`Invalid repository class for ${propertyKey}`);
|
|
1151
1173
|
return repo;
|
|
1152
1174
|
}
|
|
1153
|
-
//# sourceMappingURL=construction.js.map
|
|
1175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL2NvbnN0cnVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsS0FBSyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBR0wsUUFBUSxFQUNSLGNBQWMsR0FDZixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBUSxVQUFVLEVBQUUsc0NBQWlDO0FBRTVELE9BQU8sRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGFBQWEsRUFDYixxQkFBcUIsR0FDdEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLHNDQUFpQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLHFDQUFnQztBQUNsRCxPQUFPLEVBQWUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJN0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxvQ0FBK0I7QUFFNUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Q0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBUSxFQUNSLE9BQW1CLEVBQ25CLEtBQWEsRUFDYixVQUFvQixFQUNwQixTQUErQjtJQUUvQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXO1lBQ2QsTUFBTSxJQUFJLGFBQWEsQ0FBQyx3QkFBd0IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUM5QixX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QUVELE1BQU0sR0FBRyxZQUFZLEVBQUUsSUFBSSxDQUN6QixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3hELENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQVEsQ0FBQztJQUV2RCxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsS0FBSztRQUN2QixNQUFNLElBQUksYUFBYSxDQUNyQixnQ0FBZ0MsV0FBcUIsRUFBRSxDQUN4RCxDQUFDO0lBRUosT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgbW9kZWwsXG4gIGlzRXF1YWwsXG4gIE1vZGVsLFxuICB0eXBlIE1vZGVsQXJnLFxuICBNb2RlbENvbnN0cnVjdG9yLFxuICByZXF1aXJlZCxcbiAgVmFsaWRhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFJlcG8sIFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBSZWxhdGlvbnNNZXRhZGF0YSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxuICBPcGVyYXRpb25LZXlzLFxuICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VLZXlzIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ2FzY2FkZSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyRmxhZ3MsIENvbnRleHRPZiB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS90eXBlc1wiO1xuaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9Db250ZXh0XCI7XG5pbXBvcnQgeyBTZXF1ZW5jZSB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgcGsgfSBmcm9tIFwiLi4vaWRlbnRpdHkvZGVjb3JhdG9yc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG9yIHVwZGF0ZXMgYSBtb2RlbCBpbnN0YW5jZVxuICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNyZWF0ZSBhIG5ldyBtb2RlbCBvciB1cGRhdGUgYW4gZXhpc3Rpbmcgb25lIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBhIHByaW1hcnkga2V5XG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIGNyZWF0ZSBvciB1cGRhdGVcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1JlcG88TSwgRiwgQ29udGV4dDxGPj59IFtyZXBvc2l0b3J5XSAtIE9wdGlvbmFsIHJlcG9zaXRvcnkgdG8gdXNlIGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY3JlYXRlZCBvciB1cGRhdGVkIG1vZGVsXG4gKiBAZnVuY3Rpb24gY3JlYXRlT3JVcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgY3JlYXRlT3JVcGRhdGVcbiAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICpcbiAqICAgQ2FsbGVyLT4+Y3JlYXRlT3JVcGRhdGU6IG1vZGVsLCBjb250ZXh0LCByZXBvc2l0b3J5P1xuICogICBhbHQgcmVwb3NpdG9yeSBub3QgcHJvdmlkZWRcbiAqICAgICBjcmVhdGVPclVwZGF0ZS0+Pk1vZGVsOiBnZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSlcbiAqICAgICBNb2RlbC0tPj5jcmVhdGVPclVwZGF0ZTogY29uc3RydWN0b3JcbiAqICAgICBjcmVhdGVPclVwZGF0ZS0+PlJlcG9zaXRvcnk6IGZvck1vZGVsKGNvbnN0cnVjdG9yKVxuICogICAgIFJlcG9zaXRvcnktLT4+Y3JlYXRlT3JVcGRhdGU6IHJlcG9zaXRvcnlcbiAqICAgZW5kXG4gKlxuICogICBhbHQgcHJpbWFyeSBrZXkgdW5kZWZpbmVkXG4gKiAgICAgY3JlYXRlT3JVcGRhdGUtPj5SZXBvc2l0b3J5OiBjcmVhdGUobW9kZWwsIGNvbnRleHQpXG4gKiAgICAgUmVwb3NpdG9yeS0tPj5jcmVhdGVPclVwZGF0ZTogY3JlYXRlZCBtb2RlbFxuICogICBlbHNlIHByaW1hcnkga2V5IGRlZmluZWRcbiAqICAgICBjcmVhdGVPclVwZGF0ZS0+PlJlcG9zaXRvcnk6IHVwZGF0ZShtb2RlbCwgY29udGV4dClcbiAqICAgICBhbHQgdXBkYXRlIHN1Y2Nlc3NmdWxcbiAqICAgICAgIFJlcG9zaXRvcnktLT4+Y3JlYXRlT3JVcGRhdGU6IHVwZGF0ZWQgbW9kZWxcbiAqICAgICBlbHNlIE5vdEZvdW5kRXJyb3JcbiAqICAgICAgIGNyZWF0ZU9yVXBkYXRlLT4+UmVwb3NpdG9yeTogY3JlYXRlKG1vZGVsLCBjb250ZXh0KVxuICogICAgICAgUmVwb3NpdG9yeS0tPj5jcmVhdGVPclVwZGF0ZTogY3JlYXRlZCBtb2RlbFxuICogICAgIGVuZFxuICogICBlbmRcbiAqXG4gKiAgIGNyZWF0ZU9yVXBkYXRlLS0+PkNhbGxlcjogbW9kZWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU9yVXBkYXRlPE0gZXh0ZW5kcyBNb2RlbCwgRiBleHRlbmRzIEFkYXB0ZXJGbGFncz4oXG4gIG1vZGVsOiBNLFxuICBjb250ZXh0OiBDb250ZXh0PEY+LFxuICBhbGlhczogc3RyaW5nLFxuICByZXBvc2l0b3J5PzogUmVwbzxNPixcbiAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYW55PlxuKTogUHJvbWlzZTxNPiB7XG4gIGNvbnN0IGxvZyA9IGNvbnRleHQubG9nZ2VyLmZvcihjcmVhdGVPclVwZGF0ZSk7XG4gIGlmICghcmVwb3NpdG9yeSkge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgIGlmICghY29uc3RydWN0b3IpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ291bGQgbm90IGZpbmQgbW9kZWwgJHttb2RlbC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgIHJlcG9zaXRvcnkgPSBSZXBvc2l0b3J5LmZvck1vZGVsPE0sIFJlcG88TT4+KFxuICAgICAgY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBNb2RlbENvbnN0cnVjdG9yPE0+LFxuICAgICAgYWxpYXNcbiAgICApO1xuICAgIGxvZy5pbmZvKGBSZXRyaWV2ZWQgJHtyZXBvc2l0b3J5LnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICByZXBvc2l0b3J5ID0gb3ZlcnJpZGVzID8gcmVwb3NpdG9yeS5vdmVycmlkZShvdmVycmlkZXMpIDogcmVwb3NpdG9yeTtcblxuICBsZXQgcmVzdWx0OiBNO1xuXG4gIGlmICh0eXBlb2YgbW9kZWxbTW9kZWwucGsocmVwb3NpdG9yeS5jbGFzcyldID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbG9nLmluZm8oYE5vIHBrIGZvdW5kIGluICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfSAtIGNyZWF0aW5nYCk7XG4gICAgcmVzdWx0ID0gYXdhaXQgcmVwb3NpdG9yeS5jcmVhdGUobW9kZWwsIGNvbnRleHQpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5pbmZvKFxuICAgICAgYHBrIGZvdW5kIGluICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfSAtIGF0dGVtcHRpbmcgdXBkYXRlYFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHJlcG9zaXRvcnkudXBkYXRlKG1vZGVsLCBjb250ZXh0KTtcbiAgICAgIGxvZy5pbmZvKGBVcGRhdGVkICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfWApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYHVwZGF0ZSBGYWlsZWQgLSBjcmVhdGluZyBuZXcgJHtNb2RlbC50YWJsZU5hbWUocmVwb3NpdG9yeS5jbGFzcyl9YFxuICAgICAgKTtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHJlcG9zaXRvcnkuY3JlYXRlKG1vZGVsLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBsb2cuaW5mbyhgQWZ0ZXIgY3JlYXRlIHVwZGF0ZTogJHtyZXN1bHR9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vXG4vLyBleHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlT3JVcGRhdGVCdWxrPFxuLy8gICBNIGV4dGVuZHMgTW9kZWwsXG4vLyAgIEYgZXh0ZW5kcyBBZGFwdGVyRmxhZ3MsXG4vLyA+KFxuLy8gICBtb2RlbHM6IE1bXSxcbi8vICAgY29udGV4dDogQ29udGV4dDxGPixcbi8vICAgYWxpYXM6IHN0cmluZyxcbi8vICAgcmVwb3NpdG9yeT86IFJlcG88TT5cbi8vICk6IFByb21pc2U8TT4ge1xuLy8gICBjb25zdCBsb2cgPSBjb250ZXh0LmxvZ2dlci5mb3IoY3JlYXRlT3JVcGRhdGVCdWxrKTtcbi8vICAgaWYgKCFyZXBvc2l0b3J5KSB7XG4vLyAgICAgY29uc3QgY29uc3RydWN0b3IgPSBNb2RlbC5nZXQobW9kZWxzWzBdLmNvbnN0cnVjdG9yLm5hbWUpO1xuLy8gICAgIGlmICghY29uc3RydWN0b3IpXG4vLyAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbi8vICAgICAgICAgYENvdWxkIG5vdCBmaW5kIG1vZGVsICR7bW9kZWxzWzBdLmNvbnN0cnVjdG9yLm5hbWV9YFxuLy8gICAgICAgKTtcbi8vICAgICByZXBvc2l0b3J5ID0gUmVwb3NpdG9yeS5mb3JNb2RlbDxNLCBSZXBvPE0+Pihcbi8vICAgICAgIGNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgTW9kZWxDb25zdHJ1Y3RvcjxNPixcbi8vICAgICAgIGFsaWFzXG4vLyAgICAgKTtcbi8vICAgICBsb2cuaW5mbyhgUmV0cmlldmVkICR7cmVwb3NpdG9yeS50b1N0cmluZygpfWApO1xuLy8gICB9XG4vLyAgIGNvbnN0IHBrcyA9IG1vZGVscy5tYXAoKG0pID0+IG1bTW9kZWwucGsobSldKTtcbi8vXG4vLyAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHBrcy5tYXAoKHBrKSA9PiByZXBvc2l0b3J5LnJlYWQocGsgYXMgc3RyaW5nLCBjb250ZXh0KSkpO1xuLy9cbi8vICAgZXhpc3RpbmcuZm9yRWFjaCgoZXgsIGkpID0+IHtcbi8vICAgICBpZiAoZXguc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiKSB7XG4vL1xuLy8gICAgIH1cbi8vICAgfSlcbi8vXG4vLyAgIGZvciAobGV0IGV4IG9mIGV4aXN0aW5nKXtcbi8vICAgICBpZiAoZXguKVxuLy8gICB9XG4vLyAgIGxldCByZXN1bHQ6IE07XG4vL1xuLy8gICBpZiAodHlwZW9mIG1vZGVsW01vZGVsLnBrKHJlcG9zaXRvcnkuY2xhc3MpXSA9PT0gXCJ1bmRlZmluZWRcIikge1xuLy8gICAgIGxvZy5pbmZvKGBObyBwayBmb3VuZCBpbiAke01vZGVsLnRhYmxlTmFtZShyZXBvc2l0b3J5LmNsYXNzKX0gLSBjcmVhdGluZ2ApO1xuLy8gICAgIHJlc3VsdCA9IGF3YWl0IHJlcG9zaXRvcnkuY3JlYXRlKG1vZGVsLCBjb250ZXh0KTtcbi8vICAgfSBlbHNlIHtcbi8vICAgICBsb2cuaW5mbyhcbi8vICAgICAgIGBwayBmb3VuZCBpbiAke01vZGVsLnRhYmxlTmFtZShyZXBvc2l0b3J5LmNsYXNzKX0gLSBhdHRlbXB0aW5nIHVwZGF0ZWBcbi8vICAgICApO1xuLy8gICAgIHRyeSB7XG4vLyAgICAgICByZXN1bHQgPSBhd2FpdCByZXBvc2l0b3J5LnVwZGF0ZShtb2RlbCwgY29udGV4dCk7XG4vLyAgICAgICBsb2cuaW5mbyhgVXBkYXRlZCAke01vZGVsLnRhYmxlTmFtZShyZXBvc2l0b3J5LmNsYXNzKX1gKTtcbi8vICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbi8vICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBOb3RGb3VuZEVycm9yKSkge1xuLy8gICAgICAgICB0aHJvdyBlO1xuLy8gICAgICAgfVxuLy8gICAgICAgbG9nLmluZm8oXG4vLyAgICAgICAgIGB1cGRhdGUgRmFpbGVkIC0gY3JlYXRpbmcgbmV3ICR7TW9kZWwudGFibGVOYW1lKHJlcG9zaXRvcnkuY2xhc3MpfWBcbi8vICAgICAgICk7XG4vLyAgICAgICByZXN1bHQgPSBhd2FpdCByZXBvc2l0b3J5LmNyZWF0ZShtb2RlbCwgY29udGV4dCk7XG4vLyAgICAgfVxuLy9cbi8vICAgICBsb2cuaW5mbyhgQWZ0ZXIgY3JlYXRlIHVwZGF0ZTogJHtyZXN1bHR9YCk7XG4vLyAgIH1cbi8vICAgcmV0dXJuIHJlc3VsdDtcbi8vIH1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBvbmUtdG8tb25lIHJlbGF0aW9uc2hpcCBjcmVhdGlvblxuICogQHN1bW1hcnkgUHJvY2Vzc2VzIGEgb25lLXRvLW9uZSByZWxhdGlvbnNoaXAgd2hlbiBjcmVhdGluZyBhIG1vZGVsLCBlaXRoZXIgYnkgcmVmZXJlbmNpbmcgYW4gZXhpc3RpbmcgbW9kZWwgb3IgY3JlYXRpbmcgYSBuZXcgb25lXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGEgdHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICogQGZ1bmN0aW9uIG9uZVRvT25lT25DcmVhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9PbmVPbkNyZWF0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gKiAgIHBhcnRpY2lwYW50IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZVxuICpcbiAqICAgQ2FsbGVyLT4+b25lVG9PbmVPbkNyZWF0ZTogdGhpcywgY29udGV4dCwgZGF0YSwga2V5LCBtb2RlbFxuICogICBvbmVUb09uZU9uQ3JlYXRlLT4+b25lVG9PbmVPbkNyZWF0ZTogY2hlY2sgaWYgcHJvcGVydHlWYWx1ZSBleGlzdHNcbiAqXG4gKiAgIGFsdCBwcm9wZXJ0eVZhbHVlIGlzIG5vdCBhbiBvYmplY3RcbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IG1vZGVsLCBrZXlcbiAqICAgICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0tPj5vbmVUb09uZU9uQ3JlYXRlOiBpbm5lclJlcG9cbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+aW5uZXJSZXBvOiByZWFkKHByb3BlcnR5VmFsdWUpXG4gKiAgICAgaW5uZXJSZXBvLS0+Pm9uZVRvT25lT25DcmVhdGU6IHJlYWRcbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+Y2FjaGVNb2RlbEZvclBvcHVsYXRlOiBjb250ZXh0LCBtb2RlbCwga2V5LCBwcm9wZXJ0eVZhbHVlLCByZWFkXG4gKiAgICAgb25lVG9PbmVPbkNyZWF0ZS0+Pm9uZVRvT25lT25DcmVhdGU6IHNldCBtb2RlbFtrZXldID0gcHJvcGVydHlWYWx1ZVxuICogICBlbHNlIHByb3BlcnR5VmFsdWUgaXMgYW4gb2JqZWN0XG4gKiAgICAgb25lVG9PbmVPbkNyZWF0ZS0+Pk1vZGVsOiBnZXQoZGF0YS5jbGFzcylcbiAqICAgICBNb2RlbC0tPj5vbmVUb09uZU9uQ3JlYXRlOiBjb25zdHJ1Y3RvclxuICogICAgIG9uZVRvT25lT25DcmVhdGUtPj5SZXBvc2l0b3J5OiBmb3JNb2RlbChjb25zdHJ1Y3RvcilcbiAqICAgICBSZXBvc2l0b3J5LS0+Pm9uZVRvT25lT25DcmVhdGU6IHJlcG9cbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+cmVwbzogY3JlYXRlKHByb3BlcnR5VmFsdWUpXG4gKiAgICAgcmVwby0tPj5vbmVUb09uZU9uQ3JlYXRlOiBjcmVhdGVkXG4gKiAgICAgb25lVG9PbmVPbkNyZWF0ZS0+PmZpbmRQcmltYXJ5S2V5OiBjcmVhdGVkXG4gKiAgICAgZmluZFByaW1hcnlLZXktLT4+b25lVG9PbmVPbkNyZWF0ZTogcGtcbiAqICAgICBvbmVUb09uZU9uQ3JlYXRlLT4+Y2FjaGVNb2RlbEZvclBvcHVsYXRlOiBjb250ZXh0LCBtb2RlbCwga2V5LCBjcmVhdGVkW3BrXSwgY3JlYXRlZFxuICogICAgIG9uZVRvT25lT25DcmVhdGUtPj5vbmVUb09uZU9uQ3JlYXRlOiBzZXQgbW9kZWxba2V5XSA9IGNyZWF0ZWRbcGtdXG4gKiAgIGVuZFxuICpcbiAqICAgb25lVG9PbmVPbkNyZWF0ZS0tPj5DYWxsZXI6IHZvaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvT25lT25DcmVhdGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlOiBhbnkgPSBtb2RlbFtrZXldO1xuICBpZiAoIXByb3BlcnR5VmFsdWUpIHJldHVybjtcbiAgaWYgKCF2YWxpZEJpZGlyZWN0aW9uYWxSZWxhdGlvbihtb2RlbCwgZGF0YSkpIHJldHVybjtcbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgaW5uZXJSZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgICBtb2RlbCxcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuYWRhcHRlci5hbGlhc1xuICAgICk7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IGlubmVyUmVwb1xuICAgICAgLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcylcbiAgICAgIC5yZWFkKHByb3BlcnR5VmFsdWUsIGNvbnRleHQpO1xuICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShjb250ZXh0LCBtb2RlbCwga2V5LCBwcm9wZXJ0eVZhbHVlLCByZWFkKTtcbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gcHJvcGVydHlWYWx1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yID0gKFxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgIWRhdGEuY2xhc3MubmFtZVxuICAgICAgPyAoZGF0YS5jbGFzcyBhcyAoKSA9PiBDb25zdHJ1Y3RvcikoKVxuICAgICAgOiBkYXRhLmNsYXNzXG4gICkgYXMgQ29uc3RydWN0b3I7XG5cbiAgaWYgKCFjb25zdHJ1Y3RvcilcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ291bGQgbm90IGZpbmQgbW9kZWwgJHtkYXRhLmNsYXNzfWApO1xuICBjb25zdCByZXBvOiBSZXBvPGFueT4gPSBSZXBvc2l0b3J5LmZvck1vZGVsKGNvbnN0cnVjdG9yLCB0aGlzLmFkYXB0ZXIuYWxpYXMpO1xuICBjb25zdCBjcmVhdGVkID0gYXdhaXQgcmVwb1xuICAgIC5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpXG4gICAgLmNyZWF0ZShwcm9wZXJ0eVZhbHVlLCBjb250ZXh0KTtcbiAgY29uc3QgcGsgPSBNb2RlbC5wayhjcmVhdGVkKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsLCBrZXksIGNyZWF0ZWRbcGtdLCBjcmVhdGVkKTtcbiAgKG1vZGVsIGFzIGFueSlba2V5XSA9IGNyZWF0ZWRbcGtdO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIHVwZGF0ZXNcbiAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIHdoZW4gdXBkYXRpbmcgYSBtb2RlbCwgZWl0aGVyIGJ5IHJlZmVyZW5jaW5nIGFuIGV4aXN0aW5nIG1vZGVsIG9yIHVwZGF0aW5nIHRoZSByZWxhdGVkIG1vZGVsXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGEgdHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICogQGZ1bmN0aW9uIG9uZVRvT25lT25VcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9PbmVPblVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjcmVhdGVPclVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCBmaW5kUHJpbWFyeUtleVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvT25lT25VcGRhdGU6IHRoaXMsIGNvbnRleHQsIGRhdGEsIGtleSwgbW9kZWxcbiAqICAgb25lVG9PbmVPblVwZGF0ZS0+Pm9uZVRvT25lT25VcGRhdGU6IGNoZWNrIGlmIHByb3BlcnR5VmFsdWUgZXhpc3RzXG4gKiAgIG9uZVRvT25lT25VcGRhdGUtPj5vbmVUb09uZU9uVXBkYXRlOiBjaGVjayBpZiBjYXNjYWRlLnVwZGF0ZSBpcyBDQVNDQURFXG4gKlxuICogICBhbHQgcHJvcGVydHlWYWx1ZSBpcyBub3QgYW4gb2JqZWN0XG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBtb2RlbCwga2V5XG4gKiAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9PbmVPblVwZGF0ZTogaW5uZXJSZXBvXG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+PmlubmVyUmVwbzogcmVhZChwcm9wZXJ0eVZhbHVlKVxuICogICAgIGlubmVyUmVwby0tPj5vbmVUb09uZU9uVXBkYXRlOiByZWFkXG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+PmNhY2hlTW9kZWxGb3JQb3B1bGF0ZTogY29udGV4dCwgbW9kZWwsIGtleSwgcHJvcGVydHlWYWx1ZSwgcmVhZFxuICogICAgIG9uZVRvT25lT25VcGRhdGUtPj5vbmVUb09uZU9uVXBkYXRlOiBzZXQgbW9kZWxba2V5XSA9IHByb3BlcnR5VmFsdWVcbiAqICAgZWxzZSBwcm9wZXJ0eVZhbHVlIGlzIGFuIG9iamVjdFxuICogICAgIG9uZVRvT25lT25VcGRhdGUtPj5jcmVhdGVPclVwZGF0ZTogbW9kZWxba2V5XSwgY29udGV4dFxuICogICAgIGNyZWF0ZU9yVXBkYXRlLS0+Pm9uZVRvT25lT25VcGRhdGU6IHVwZGF0ZWRcbiAqICAgICBvbmVUb09uZU9uVXBkYXRlLT4+ZmluZFByaW1hcnlLZXk6IHVwZGF0ZWRcbiAqICAgICBmaW5kUHJpbWFyeUtleS0tPj5vbmVUb09uZU9uVXBkYXRlOiBwa1xuICogICAgIG9uZVRvT25lT25VcGRhdGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIHVwZGF0ZWRbcGtdLCB1cGRhdGVkXG4gKiAgICAgb25lVG9PbmVPblVwZGF0ZS0+Pm9uZVRvT25lT25VcGRhdGU6IHNldCBtb2RlbFtrZXldID0gdXBkYXRlZFtwa11cbiAqICAgZW5kXG4gKlxuICogICBvbmVUb09uZU9uVXBkYXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9PbmVPblVwZGF0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWU6IGFueSA9IG1vZGVsW2tleV07XG4gIGlmICghcHJvcGVydHlWYWx1ZSkgcmV0dXJuO1xuICBpZiAoZGF0YS5jYXNjYWRlLnVwZGF0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG5cbiAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgaW5uZXJSZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgICBtb2RlbCxcbiAgICAgIGtleSxcbiAgICAgIHRoaXMuYWRhcHRlci5hbGlhc1xuICAgICk7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IGlubmVyUmVwb1xuICAgICAgLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcylcbiAgICAgIC5yZWFkKHByb3BlcnR5VmFsdWUsIGNvbnRleHQpO1xuICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShjb250ZXh0LCBtb2RlbCwga2V5LCBwcm9wZXJ0eVZhbHVlLCByZWFkKTtcbiAgICAobW9kZWwgYXMgYW55KVtrZXldID0gcHJvcGVydHlWYWx1ZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB1cGRhdGVkID0gYXdhaXQgY3JlYXRlT3JVcGRhdGUoXG4gICAgbW9kZWxba2V5XSBhcyBNLFxuICAgIGNvbnRleHQsXG4gICAgdGhpcy5hZGFwdGVyLmFsaWFzLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0aGlzLl9vdmVycmlkZXNcbiAgKTtcbiAgY29uc3QgcGsgPSBNb2RlbC5wayh1cGRhdGVkKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIHVwZGF0ZWRbcGsgYXMga2V5b2YgTV0gYXMgc3RyaW5nLFxuICAgIHVwZGF0ZWRcbiAgKTtcbiAgbW9kZWxba2V5XSA9IHVwZGF0ZWRbcGsgYXMga2V5b2YgTV07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgb25lLXRvLW9uZSByZWxhdGlvbnNoaXAgZGVsZXRpb25cbiAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhIG9uZS10by1vbmUgcmVsYXRpb25zaGlwIHdoZW4gZGVsZXRpbmcgYSBtb2RlbCwgZGVsZXRpbmcgdGhlIHJlbGF0ZWQgbW9kZWwgaWYgY2FzY2FkZSBpcyBlbmFibGVkXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGEgdHlwZSBleHRlbmRpbmcgUmVsYXRpb25zTWV0YWRhdGFcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHRlbXBsYXRlIEMgLSBUaGUgY29udGV4dCB0eXBlIGV4dGVuZGluZyBDb250ZXh0PEY+XG4gKiBAcGFyYW0ge1J9IHRoaXMgLSBUaGUgcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7Vn0gZGF0YSAtIFRoZSByZWxhdGlvbnMgbWV0YWRhdGFcbiAqIEBwYXJhbSBrZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSByZWxhdGlvbnNoaXBcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBjb21wbGV0ZVxuICogQGZ1bmN0aW9uIG9uZVRvT25lT25EZWxldGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9PbmVPbkRlbGV0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvT25lT25EZWxldGU6IHRoaXMsIGNvbnRleHQsIGRhdGEsIGtleSwgbW9kZWxcbiAqICAgb25lVG9PbmVPbkRlbGV0ZS0+Pm9uZVRvT25lT25EZWxldGU6IGNoZWNrIGlmIHByb3BlcnR5VmFsdWUgZXhpc3RzXG4gKiAgIG9uZVRvT25lT25EZWxldGUtPj5vbmVUb09uZU9uRGVsZXRlOiBjaGVjayBpZiBjYXNjYWRlLmRlbGV0ZSBpcyBDQVNDQURFXG4gKlxuICogICBvbmVUb09uZU9uRGVsZXRlLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IG1vZGVsLCBrZXlcbiAqICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9PbmVPbkRlbGV0ZTogaW5uZXJSZXBvXG4gKlxuICogICBhbHQgcHJvcGVydHlWYWx1ZSBpcyBub3QgYSBNb2RlbCBpbnN0YW5jZVxuICogICAgIG9uZVRvT25lT25EZWxldGUtPj5pbm5lclJlcG86IGRlbGV0ZShtb2RlbFtrZXldLCBjb250ZXh0KVxuICogICAgIGlubmVyUmVwby0tPj5vbmVUb09uZU9uRGVsZXRlOiBkZWxldGVkXG4gKiAgIGVsc2UgcHJvcGVydHlWYWx1ZSBpcyBhIE1vZGVsIGluc3RhbmNlXG4gKiAgICAgb25lVG9PbmVPbkRlbGV0ZS0+PmlubmVyUmVwbzogZGVsZXRlKG1vZGVsW2tleV1baW5uZXJSZXBvLnBrXSwgY29udGV4dClcbiAqICAgICBpbm5lclJlcG8tLT4+b25lVG9PbmVPbkRlbGV0ZTogZGVsZXRlZFxuICogICBlbmRcbiAqXG4gKiAgIG9uZVRvT25lT25EZWxldGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIGRlbGV0ZWRbaW5uZXJSZXBvLnBrXSwgZGVsZXRlZFxuICogICBvbmVUb09uZU9uRGVsZXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9PbmVPbkRlbGV0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWU6IGFueSA9IG1vZGVsW2tleV07XG4gIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCBwcm9wZXJ0eVZhbHVlID09PSBudWxsKSByZXR1cm47XG4gIGlmIChkYXRhLmNhc2NhZGUuZGVsZXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgY29uc3QgaW5uZXJSZXBvOiBSZXBvPE0+ID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIHRoaXMuYWRhcHRlci5hbGlhc1xuICApO1xuICBsZXQgZGVsZXRlZDogTTtcbiAgaWYgKCEocHJvcGVydHlWYWx1ZSBpbnN0YW5jZW9mIE1vZGVsKSlcbiAgICBkZWxldGVkID0gYXdhaXQgaW5uZXJSZXBvLmRlbGV0ZShtb2RlbFtrZXldIGFzIHN0cmluZywgY29udGV4dCk7XG4gIGVsc2VcbiAgICBkZWxldGVkID0gYXdhaXQgaW5uZXJSZXBvLmRlbGV0ZShcbiAgICAgIChtb2RlbFtrZXldIGFzIE0pW2lubmVyUmVwby5wayBhcyBrZXlvZiBNXSBhcyBzdHJpbmcsXG4gICAgICBjb250ZXh0XG4gICAgKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIGRlbGV0ZWRbaW5uZXJSZXBvLnBrXSBhcyBzdHJpbmcsXG4gICAgZGVsZXRlZFxuICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCBjcmVhdGlvblxuICogQHN1bW1hcnkgUHJvY2Vzc2VzIGEgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwIHdoZW4gY3JlYXRpbmcgYSBtb2RlbCwgZWl0aGVyIGJ5IHJlZmVyZW5jaW5nIGV4aXN0aW5nIG1vZGVscyBvciBjcmVhdGluZyBuZXcgb25lc1xuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlcG9zaXRvcnkgdHlwZSBleHRlbmRpbmcgUmVwbzxNLCBGLCBDPlxuICogQHRlbXBsYXRlIFYgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhIHR5cGUgZXh0ZW5kaW5nIFJlbGF0aW9uc01ldGFkYXRhXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZSBleHRlbmRpbmcgQ29udGV4dDxGPlxuICogQHBhcmFtIHtSfSB0aGlzIC0gVGhlIHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1Z9IGRhdGEgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhXG4gKiBAcGFyYW0ga2V5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgcmVsYXRpb25zaGlwXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAqIEBmdW5jdGlvbiBvbmVUb01hbnlPbkNyZWF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBvbmVUb01hbnlPbkNyZWF0ZVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjcmVhdGVPclVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCBmaW5kUHJpbWFyeUtleVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvTWFueU9uQ3JlYXRlOiB0aGlzLCBjb250ZXh0LCBkYXRhLCBrZXksIG1vZGVsXG4gKiAgIG9uZVRvTWFueU9uQ3JlYXRlLT4+b25lVG9NYW55T25DcmVhdGU6IGNoZWNrIGlmIHByb3BlcnR5VmFsdWVzIGV4aXN0cyBhbmQgaGFzIGxlbmd0aFxuICogICBvbmVUb01hbnlPbkNyZWF0ZS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiBjaGVjayBpZiBhbGwgZWxlbWVudHMgaGF2ZSBzYW1lIHR5cGVcbiAqICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogY3JlYXRlIHVuaXF1ZVZhbHVlcyBzZXRcbiAqXG4gKiAgIGFsdCBhcnJheVR5cGUgaXMgbm90IFwib2JqZWN0XCJcbiAqICAgICBvbmVUb01hbnlPbkNyZWF0ZS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBtb2RlbCwga2V5XG4gKiAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9NYW55T25DcmVhdGU6IHJlcG9cbiAqICAgICBsb29wIGZvciBlYWNoIGlkIGluIHVuaXF1ZVZhbHVlc1xuICogICAgICAgb25lVG9NYW55T25DcmVhdGUtPj5yZXBvOiByZWFkKGlkKVxuICogICAgICAgcmVwby0tPj5vbmVUb01hbnlPbkNyZWF0ZTogcmVhZFxuICogICAgICAgb25lVG9NYW55T25DcmVhdGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIGlkLCByZWFkXG4gKiAgICAgZW5kXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogc2V0IG1vZGVsW2tleV0gPSBbLi4udW5pcXVlVmFsdWVzXVxuICogICBlbHNlIGFycmF5VHlwZSBpcyBcIm9iamVjdFwiXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5maW5kUHJpbWFyeUtleTogcHJvcGVydHlWYWx1ZXNbMF1cbiAqICAgICBmaW5kUHJpbWFyeUtleS0tPj5vbmVUb01hbnlPbkNyZWF0ZTogcGtOYW1lXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogY3JlYXRlIHJlc3VsdCBzZXRcbiAqICAgICBsb29wIGZvciBlYWNoIG0gaW4gcHJvcGVydHlWYWx1ZXNcbiAqICAgICAgIG9uZVRvTWFueU9uQ3JlYXRlLT4+Y3JlYXRlT3JVcGRhdGU6IG0sIGNvbnRleHRcbiAqICAgICAgIGNyZWF0ZU9yVXBkYXRlLS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiByZWNvcmRcbiAqICAgICAgIG9uZVRvTWFueU9uQ3JlYXRlLT4+Y2FjaGVNb2RlbEZvclBvcHVsYXRlOiBjb250ZXh0LCBtb2RlbCwga2V5LCByZWNvcmRbcGtOYW1lXSwgcmVjb3JkXG4gKiAgICAgICBvbmVUb01hbnlPbkNyZWF0ZS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiBhZGQgcmVjb3JkW3BrTmFtZV0gdG8gcmVzdWx0XG4gKiAgICAgZW5kXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtPj5vbmVUb01hbnlPbkNyZWF0ZTogc2V0IG1vZGVsW2tleV0gPSBbLi4ucmVzdWx0XVxuICogICBlbmRcbiAqXG4gKiAgIG9uZVRvTWFueU9uQ3JlYXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25lVG9NYW55T25DcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG88TT4sXG4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIG9sZE1vZGVsPzogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzOiBhbnkgPSBtb2RlbFtrZXldO1xuICBpZiAoIXByb3BlcnR5VmFsdWVzIHx8ICFwcm9wZXJ0eVZhbHVlcy5sZW5ndGgpIHJldHVybjtcblxuICBpZiAoIXZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uKG1vZGVsLCBkYXRhKSkgcmV0dXJuO1xuXG4gIGNvbnN0IGxvZyA9IGNvbnRleHQubG9nZ2VyLmZvcihvbmVUb01hbnlPbkNyZWF0ZVVwZGF0ZSk7XG5cbiAgY29uc3QgcmVwbyA9IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG4gIGNvbnN0IHBrTmFtZSA9IE1vZGVsLnBrKFxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgIWRhdGEuY2xhc3MubmFtZVxuICAgICAgPyAoZGF0YS5jbGFzcyBhcyBhbnkpKClcbiAgICAgIDogZGF0YS5jbGFzc1xuICApO1xuICBjb25zdCByZXN1bHQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydHlWYWx1ZXMpIHtcbiAgICBsZXQgbTogTTtcbiAgICBpZiAodHlwZW9mIHByb3BlcnR5ICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICBtID0gYXdhaXQgcmVwby5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpLnJlYWQocHJvcGVydHksIGNvbnRleHQpO1xuICAgICAgbG9nLmRlYnVnKGByZWFkOiAke21bcGtOYW1lIGFzIGtleW9mIHR5cGVvZiBtXX1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGBDcmVhdGluZyBvciB1cGRhdGluZyBvbmUtdG8tbWFueSBtb2RlbDogJHtwcm9wZXJ0eVtwa05hbWUgYXMga2V5b2YgdHlwZW9mIHByb3BlcnR5XX1gXG4gICAgICApO1xuICAgICAgbSA9IGF3YWl0IGNyZWF0ZU9yVXBkYXRlKFxuICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgdGhpcy5hZGFwdGVyLmFsaWFzLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHRoaXMuX292ZXJyaWRlc1xuICAgICAgKTtcbiAgICB9XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYGNhY2hpbmcgZm9yIHBvcHVsYXRlOiAke0pTT04uc3RyaW5naWZ5KG0pfSB1bmRlciAke21bcGtOYW1lIGFzIGtleW9mIHR5cGVvZiBtXX1gXG4gICAgKTtcbiAgICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoXG4gICAgICBjb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBrZXksXG4gICAgICBtW3BrTmFtZSBhcyBrZXlvZiB0eXBlb2YgbV0gYXMgc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgbVxuICAgICk7XG4gICAgcmVzdWx0LmFkZChtW3BrTmFtZSBhcyBrZXlvZiB0eXBlb2YgbV0gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8vIGNvbnN0IGFycmF5VHlwZSA9IHR5cGVvZiBwcm9wZXJ0eVZhbHVlc1swXTtcbiAgLy8gaWYgKCFwcm9wZXJ0eVZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0eXBlb2YgaXRlbSA9PT0gYXJyYXlUeXBlKSlcbiAgLy8gICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgLy8gICAgIGBJbnZhbGlkIG9wZXJhdGlvbi4gQWxsIGVsZW1lbnRzIG9mIHByb3BlcnR5ICR7a2V5IGFzIHN0cmluZ30gbXVzdCBtYXRjaCB0aGUgc2FtZSB0eXBlLmBcbiAgLy8gICApO1xuICAvLyBjb25zdCBsb2cgPSBjb250ZXh0LmxvZ2dlci5mb3Iob25lVG9NYW55T25DcmVhdGVVcGRhdGUpO1xuICAvLyBjb25zdCB1bmlxdWVWYWx1ZXMgPSBuZXcgU2V0KFsuLi5wcm9wZXJ0eVZhbHVlc10pO1xuICAvLyBpZiAoYXJyYXlUeXBlICE9PSBcIm9iamVjdFwiKSB7XG4gIC8vICAgY29uc3QgcmVwbyA9IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG4gIC8vICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlcG9cbiAgLy8gICAgIC5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpXG4gIC8vICAgICAucmVhZEFsbChbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXSwgY29udGV4dCk7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWFkLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBjb25zdCBtb2RlbCA9IHJlYWRbaV07XG4gIC8vICAgICBsb2cuaW5mbyhgRk9VTkQgT05FIFRPIE1BTlkgVkFMVUU6ICR7SlNPTi5zdHJpbmdpZnkobW9kZWwpfWApO1xuICAvLyAgICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAvLyAgICAgICBjb250ZXh0LFxuICAvLyAgICAgICBtb2RlbCxcbiAgLy8gICAgICAga2V5LFxuICAvLyAgICAgICBbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXVtpXSxcbiAgLy8gICAgICAgcmVhZFxuICAvLyAgICAgKTtcbiAgLy8gICB9XG4gIC8vICAgLy8gZm9yIChjb25zdCBtb2RlbCBvZiByZWFkKSB7XG4gIC8vICAgLy8gICAvLyBjb25zdCByZWFkID0gYXdhaXQgcmVwby5yZWFkKGlkLCBjb250ZXh0KTtcbiAgLy8gICAvL1xuICAvLyAgIC8vIH1cbiAgLy8gICAobW9kZWwgYXMgYW55KVtrZXldID0gWy4uLnVuaXF1ZVZhbHVlc107XG4gIC8vICAgbG9nLmluZm8oYFNFVCBPTkUgVE8gTUFOWSBJRFM6ICR7KG1vZGVsIGFzIGFueSlba2V5XX1gKTtcbiAgLy8gICByZXR1cm47XG4gIC8vIH1cbiAgLy9cbiAgLy8gY29uc3QgcGtOYW1lID0gTW9kZWwucGsocHJvcGVydHlWYWx1ZXNbMF0uY29uc3RydWN0b3IpO1xuICAvL1xuICAvLyBjb25zdCByZXN1bHQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICAvL1xuICAvLyBmb3IgKGNvbnN0IG0gb2YgcHJvcGVydHlWYWx1ZXMpIHtcbiAgLy8gICBsb2cuaW5mbyhgQ3JlYXRpbmcgb3IgdXBkYXRpbmcgb25lLXRvLW1hbnkgbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkobSl9YCk7XG4gIC8vICAgY29uc3QgcmVjb3JkID0gYXdhaXQgY3JlYXRlT3JVcGRhdGUoXG4gIC8vICAgICBtLFxuICAvLyAgICAgY29udGV4dCxcbiAgLy8gICAgIHRoaXMuYWRhcHRlci5hbGlhcyxcbiAgLy8gICAgIHVuZGVmaW5lZCxcbiAgLy8gICAgIHRoaXMuX292ZXJyaWRlc1xuICAvLyAgICk7XG4gIC8vICAgbG9nLmluZm8oYGNhY2hpbmc6ICR7SlNPTi5zdHJpbmdpZnkocmVjb3JkKX0gdW5kZXIgJHtyZWNvcmRbcGtOYW1lXX1gKTtcbiAgLy9cbiAgLy8gICBpZiAoIXJlY29yZFtwa05hbWVdKSB7XG4gIC8vICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHBrIGZvciByZWxhdGlvbiAke1N0cmluZyhrZXkpfTpgLCB7XG4gIC8vICAgICAgIHBrTmFtZSxcbiAgLy8gICAgICAgcmVjb3JkLFxuICAvLyAgICAgICBwa1ZhbHVlOiByZWNvcmRbcGtOYW1lXSxcbiAgLy8gICAgICAgcGtDb21wdXRlZDogTW9kZWwucGsocmVjb3JkLCB0cnVlKSxcbiAgLy8gICAgIH0pO1xuICAvLyAgIH1cbiAgLy8gICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgcmVjb3JkW3BrTmFtZV0sIHJlY29yZCk7XG4gIC8vIGxvZy5pbmZvKGBDcmVhdGluZyBvciB1cGRhdGluZyBvbmUtdG8tbWFueSBtb2RlbDogJHtKU09OLnN0cmluZ2lmeShtKX1gKTtcbiAgLy8gcmVzdWx0LmFkZChyZWNvcmRbcGtOYW1lXSk7XG4gIC8vIH1cblxuICAobW9kZWwgYXMgYW55KVtrZXldID0gWy4uLnJlc3VsdF07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwIHVwZGF0ZXNcbiAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCB3aGVuIHVwZGF0aW5nIGEgbW9kZWwsIGRlbGVnYXRpbmcgdG8gb25lVG9NYW55T25DcmVhdGUgaWYgY2FzY2FkZSB1cGRhdGUgaXMgZW5hYmxlZFxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlcG9zaXRvcnkgdHlwZSBleHRlbmRpbmcgUmVwbzxNLCBGLCBDPlxuICogQHRlbXBsYXRlIFYgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhIHR5cGUgZXh0ZW5kaW5nIFJlbGF0aW9uc01ldGFkYXRhXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZSBleHRlbmRpbmcgQ29udGV4dDxGPlxuICogQHBhcmFtIHtSfSB0aGlzIC0gVGhlIHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1Z9IGRhdGEgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhXG4gKiBAcGFyYW0ga2V5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgcmVsYXRpb25zaGlwXG4gKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVcbiAqIEBmdW5jdGlvbiBvbmVUb01hbnlPblVwZGF0ZVxuICogQG1lbWJlck9mIG1vZHVsZTpjb3JlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBvbmVUb01hbnlPblVwZGF0ZVxuICogICBwYXJ0aWNpcGFudCBvbmVUb01hbnlPbkNyZWF0ZVxuICpcbiAqICAgQ2FsbGVyLT4+b25lVG9NYW55T25VcGRhdGU6IHRoaXMsIGNvbnRleHQsIGRhdGEsIGtleSwgbW9kZWxcbiAqICAgb25lVG9NYW55T25VcGRhdGUtPj5vbmVUb01hbnlPblVwZGF0ZTogY2hlY2sgaWYgY2FzY2FkZS51cGRhdGUgaXMgQ0FTQ0FERVxuICpcbiAqICAgYWx0IGNhc2NhZGUudXBkYXRlIGlzIENBU0NBREVcbiAqICAgICBvbmVUb01hbnlPblVwZGF0ZS0+Pm9uZVRvTWFueU9uQ3JlYXRlOiBhcHBseSh0aGlzLCBbY29udGV4dCwgZGF0YSwga2V5LCBtb2RlbF0pXG4gKiAgICAgb25lVG9NYW55T25DcmVhdGUtLT4+b25lVG9NYW55T25VcGRhdGU6IHZvaWRcbiAqICAgZW5kXG4gKlxuICogICBvbmVUb01hbnlPblVwZGF0ZS0tPj5DYWxsZXI6IHZvaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvTWFueU9uVXBkYXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNLFxuICBvbGRNb2RlbD86IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGNhc2NhZGUgfSA9IGRhdGE7XG4gIGlmIChjYXNjYWRlLnVwZGF0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG4gIHJldHVybiBvbmVUb01hbnlPbkNyZWF0ZVVwZGF0ZS5hcHBseSh0aGlzIGFzIGFueSwgW1xuICAgIGNvbnRleHQsXG4gICAgZGF0YSxcbiAgICBrZXkgYXMga2V5b2YgTW9kZWwsXG4gICAgbW9kZWwsXG4gICAgb2xkTW9kZWwsXG4gIF0pO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCBkZWxldGlvblxuICogQHN1bW1hcnkgUHJvY2Vzc2VzIGEgb25lLXRvLW1hbnkgcmVsYXRpb25zaGlwIHdoZW4gZGVsZXRpbmcgYSBtb2RlbCwgZGVsZXRpbmcgYWxsIHJlbGF0ZWQgbW9kZWxzIGlmIGNhc2NhZGUgZGVsZXRlIGlzIGVuYWJsZWRcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXBvc2l0b3J5IHR5cGUgZXh0ZW5kaW5nIFJlcG88TSwgRiwgQz5cbiAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YSB0eXBlIGV4dGVuZGluZyBSZWxhdGlvbnNNZXRhZGF0YVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZXh0ZW5kaW5nIENvbnRleHQ8Rj5cbiAqIEBwYXJhbSB7Un0gdGhpcyAtIFRoZSByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiBAcGFyYW0ge0NvbnRleHQ8Rj59IGNvbnRleHQgLSBUaGUgY29udGV4dCBmb3IgdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtWfSBkYXRhIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YVxuICogQHBhcmFtIGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIHJlbGF0aW9uc2hpcFxuICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gKiBAZnVuY3Rpb24gb25lVG9NYW55T25EZWxldGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgb25lVG9NYW55T25EZWxldGVcbiAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YVxuICogICBwYXJ0aWNpcGFudCBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqXG4gKiAgIENhbGxlci0+Pm9uZVRvTWFueU9uRGVsZXRlOiB0aGlzLCBjb250ZXh0LCBkYXRhLCBrZXksIG1vZGVsXG4gKiAgIG9uZVRvTWFueU9uRGVsZXRlLT4+b25lVG9NYW55T25EZWxldGU6IGNoZWNrIGlmIGNhc2NhZGUuZGVsZXRlIGlzIENBU0NBREVcbiAqICAgb25lVG9NYW55T25EZWxldGUtPj5vbmVUb01hbnlPbkRlbGV0ZTogY2hlY2sgaWYgdmFsdWVzIGV4aXN0cyBhbmQgaGFzIGxlbmd0aFxuICogICBvbmVUb01hbnlPbkRlbGV0ZS0+Pm9uZVRvTWFueU9uRGVsZXRlOiBjaGVjayBpZiBhbGwgZWxlbWVudHMgaGF2ZSBzYW1lIHR5cGVcbiAqXG4gKiAgIGFsdCBpc0luc3RhbnRpYXRlZCAoYXJyYXlUeXBlIGlzIFwib2JqZWN0XCIpXG4gKiAgICAgb25lVG9NYW55T25EZWxldGUtPj5SZXBvc2l0b3J5OiBmb3JNb2RlbCh2YWx1ZXNbMF0pXG4gKiAgICAgUmVwb3NpdG9yeS0tPj5vbmVUb01hbnlPbkRlbGV0ZTogcmVwb1xuICogICBlbHNlIG5vdCBpbnN0YW50aWF0ZWRcbiAqICAgICBvbmVUb01hbnlPbkRlbGV0ZS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBtb2RlbCwga2V5XG4gKiAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+b25lVG9NYW55T25EZWxldGU6IHJlcG9cbiAqICAgZW5kXG4gKlxuICogICBvbmVUb01hbnlPbkRlbGV0ZS0+Pm9uZVRvTWFueU9uRGVsZXRlOiBjcmVhdGUgdW5pcXVlVmFsdWVzIHNldFxuICpcbiAqICAgbG9vcCBmb3IgZWFjaCBpZCBpbiB1bmlxdWVWYWx1ZXNcbiAqICAgICBvbmVUb01hbnlPbkRlbGV0ZS0+PnJlcG86IGRlbGV0ZShpZCwgY29udGV4dClcbiAqICAgICByZXBvLS0+Pm9uZVRvTWFueU9uRGVsZXRlOiBkZWxldGVkXG4gKiAgICAgb25lVG9NYW55T25EZWxldGUtPj5jYWNoZU1vZGVsRm9yUG9wdWxhdGU6IGNvbnRleHQsIG1vZGVsLCBrZXksIGlkLCBkZWxldGVkXG4gKiAgIGVuZFxuICpcbiAqICAgb25lVG9NYW55T25EZWxldGUtPj5vbmVUb01hbnlPbkRlbGV0ZTogc2V0IG1vZGVsW2tleV0gPSBbLi4udW5pcXVlVmFsdWVzXVxuICogICBvbmVUb01hbnlPbkRlbGV0ZS0tPj5DYWxsZXI6IHZvaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uZVRvTWFueU9uRGVsZXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGRhdGEuY2FzY2FkZS5kZWxldGUgIT09IENhc2NhZGUuQ0FTQ0FERSkgcmV0dXJuO1xuICBjb25zdCB2YWx1ZXMgPSBtb2RlbFtrZXldIGFzIGFueTtcbiAgaWYgKCF2YWx1ZXMpIHJldHVybjtcbiAgY29uc3QgYXJyYXlUeXBlID0gdHlwZW9mIHZhbHVlc1swXTtcbiAgY29uc3QgYXJlQWxsU2FtZVR5cGUgPSB2YWx1ZXMuZXZlcnkoKGl0ZW06IGFueSkgPT4gdHlwZW9mIGl0ZW0gPT09IGFycmF5VHlwZSk7XG4gIGlmICghYXJlQWxsU2FtZVR5cGUpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgSW52YWxpZCBvcGVyYXRpb24uIEFsbCBlbGVtZW50cyBvZiBwcm9wZXJ0eSAke2tleSBhcyBzdHJpbmd9IG11c3QgbWF0Y2ggdGhlIHNhbWUgdHlwZS5gXG4gICAgKTtcbiAgY29uc3QgY2xhenogPVxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgIWRhdGEuY2xhc3MubmFtZVxuICAgICAgPyAoZGF0YS5jbGFzcyBhcyBhbnkpKClcbiAgICAgIDogZGF0YS5jbGFzcztcblxuICBjb25zdCBpc0luc3RhbnRpYXRlZCA9IGFycmF5VHlwZSA9PT0gXCJvYmplY3RcIjtcbiAgY29uc3QgcmVwbyA9IGlzSW5zdGFudGlhdGVkXG4gICAgPyBSZXBvc2l0b3J5LmZvck1vZGVsKGNsYXp6LCB0aGlzLmFkYXB0ZXIuYWxpYXMpXG4gICAgOiByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YShtb2RlbCwga2V5LCB0aGlzLmFkYXB0ZXIuYWxpYXMpO1xuXG4gIGNvbnN0IHVuaXF1ZVZhbHVlcyA9IG5ldyBTZXQoW1xuICAgIC4uLihpc0luc3RhbnRpYXRlZFxuICAgICAgPyB2YWx1ZXMubWFwKCh2OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2W3JlcG9bXCJwa1wiXSBhcyBzdHJpbmddKVxuICAgICAgOiB2YWx1ZXMpLFxuICBdKTtcblxuICBjb25zdCBpZHMgPSBbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXTtcbiAgbGV0IGRlbGV0ZWQ6IE1vZGVsW107XG4gIHRyeSB7XG4gICAgZGVsZXRlZCA9IGF3YWl0IHJlcG8ub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKS5kZWxldGVBbGwoaWRzLCBjb250ZXh0KTtcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlIGFsbCByZWNvcmRzYCwgZSk7XG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIGxldCBkZWw6IGFueTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxldGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgZGVsID0gZGVsZXRlZFtpXTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsLCBrZXksIGlkc1tpXSwgZGVsKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBjb250ZXh0LmxvZ2dlci5lcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjYWNoZSByZWNvcmQgJHtpZHNbaV19IHdpdGgga2V5ICR7a2V5IGFzIHN0cmluZ30gYW5kIG1vZGVsICR7SlNPTi5zdHJpbmdpZnkobW9kZWwsIHVuZGVmaW5lZCwgMil9IGAsXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuICAobW9kZWwgYXMgYW55KVtrZXldID0gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvT25lT25DcmVhdGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlOiBhbnkgPSBtb2RlbFtrZXldO1xuICBpZiAoIXByb3BlcnR5VmFsdWUpIHJldHVybjtcblxuICBpZiAoIXZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uKG1vZGVsLCBkYXRhKSkgcmV0dXJuO1xuICBjb25zdCBsb2cgPSBjb250ZXh0LmxvZ2dlci5mb3IobWFueVRvT25lT25DcmVhdGUpO1xuICAvLyBJZiBpdCdzIGEgcHJpbWl0aXZlIHZhbHVlIChJRCksIHJlYWQgdGhlIGV4aXN0aW5nIHJlY29yZFxuICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBpbm5lclJlcG8gPSByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YShcbiAgICAgIG1vZGVsLFxuICAgICAga2V5LFxuICAgICAgdGhpcy5hZGFwdGVyLmFsaWFzXG4gICAgKTtcbiAgICBjb25zdCByZWFkID0gYXdhaXQgaW5uZXJSZXBvXG4gICAgICAub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLnJlYWQocHJvcGVydHlWYWx1ZSwgY29udGV4dCk7XG4gICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsLCBrZXksIHByb3BlcnR5VmFsdWUsIHJlYWQpO1xuICAgIChtb2RlbCBhcyBhbnkpW2tleV0gPSBwcm9wZXJ0eVZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbnN0cnVjdG9yID1cbiAgICBkYXRhLmNsYXNzIGluc3RhbmNlb2YgTW9kZWwgPyBkYXRhLmNsYXNzLmNvbnN0cnVjdG9yIDogKGRhdGEuY2xhc3MgYXMgYW55KTtcbiAgaWYgKCFjb25zdHJ1Y3RvcilcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgQ291bGQgbm90IGZpbmQgbW9kZWwgJHtkYXRhLmNsYXNzfWApO1xuICBsb2cuaW5mbyhcbiAgICBgQ3JlYXRpbmcgb3IgdXBkYXRpbmcgbWFueS10by1vbmUgbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSl9YFxuICApO1xuICBjb25zdCByZWNvcmQgPSBhd2FpdCBjcmVhdGVPclVwZGF0ZShcbiAgICBwcm9wZXJ0eVZhbHVlLFxuICAgIGNvbnRleHQsXG4gICAgdGhpcy5hZGFwdGVyLmFsaWFzLFxuICAgIHVuZGVmaW5lZCxcbiAgICB0aGlzLl9vdmVycmlkZXNcbiAgKTtcbiAgY29uc3QgcGsgPSBNb2RlbC5wayhyZWNvcmQpO1xuXG4gIGxvZy5pbmZvKGBjYWNoaW5nOiAke0pTT04uc3RyaW5naWZ5KHJlY29yZCl9IHVuZGVyICR7cmVjb3JkW3BrXX1gKTtcbiAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5LFxuICAgIHJlY29yZFtwa10gYXMgc3RyaW5nLFxuICAgIHJlY29yZFxuICApO1xuICAobW9kZWwgYXMgYW55KVtrZXldID0gcmVjb3JkW3BrXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNLFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YVxuKTogYm9vbGVhbiB7XG4gIGxldCBtZXRhUmV2ZXJzZVJlbGF0aW9uOiBhbnk7XG4gIGNvbnN0IHJlbGF0aW9uQ29uc3RydWN0b3IgPVxuICAgIHR5cGVvZiBkYXRhLmNsYXNzID09PSBcImZ1bmN0aW9uXCIgJiYgZGF0YS5jbGFzcy5uYW1lXG4gICAgICA/IGRhdGEuY2xhc3NcbiAgICAgIDogKGRhdGEuY2xhc3MgYXMgYW55KSgpO1xuXG4gIC8vIGdldCB0aGUgaW52ZXJzZSByZWxhdGlvbiBtZXRhZGF0YVxuICBjb25zdCBtZXRhUmV2ZXJzZVJlbGF0aW9uTWV0YSA9IE1ldGFkYXRhLmdldChcbiAgICByZWxhdGlvbkNvbnN0cnVjdG9yLFxuICAgIFBlcnNpc3RlbmNlS2V5cy5SRUxBVElPTlNcbiAgKTtcblxuICBpZiAobWV0YVJldmVyc2VSZWxhdGlvbk1ldGEpXG4gICAgbWV0YVJldmVyc2VSZWxhdGlvbiA9IE9iamVjdC52YWx1ZXMobWV0YVJldmVyc2VSZWxhdGlvbk1ldGEpPy5maW5kKFxuICAgICAgKHJlbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uQ29uc3RydWN0b3IgPVxuICAgICAgICAgIHR5cGVvZiByZWwuY2xhc3MgPT09IFwiZnVuY3Rpb25cIiAmJiByZWwuY2xhc3MubmFtZVxuICAgICAgICAgICAgPyByZWwuY2xhc3NcbiAgICAgICAgICAgIDogKHJlbC5jbGFzcyBhcyBhbnkpKCk7XG4gICAgICAgIHJldHVybiBtb2RlbCBpbnN0YW5jZW9mIHJlbGF0aW9uQ29uc3RydWN0b3I7XG4gICAgICB9XG4gICAgKTtcblxuICAvLyBJZiBwb3B1bGF0ZSBpcyBzZXQgdG8gdHJ1ZSBvbiBib3RoIHNpZGVzLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXJyb3IuXG4gIGlmIChtZXRhUmV2ZXJzZVJlbGF0aW9uPy5wb3B1bGF0ZSA9PT0gdHJ1ZSAmJiBkYXRhPy5wb3B1bGF0ZSA9PT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgXCJCaWRpcmVjdGlvbmFsIHBvcHVsYXRlIGlzIG5vdCBhbGxvd2VkLiBQbGVhc2Ugc2V0IHBvcHVsYXRlIHRvIGZhbHNlIG9uIG9uZSBzaWRlIG9mIHRoZSByZWxhdGlvbi5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYW55VG9PbmVPblVwZGF0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgY2FzY2FkZSB9ID0gZGF0YTtcbiAgaWYgKGNhc2NhZGUudXBkYXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgcmV0dXJuIG1hbnlUb09uZU9uQ3JlYXRlLmFwcGx5KHRoaXMgYXMgYW55LCBbXG4gICAgY29udGV4dCxcbiAgICBkYXRhLFxuICAgIGtleSBhcyBrZXlvZiBNb2RlbCxcbiAgICBtb2RlbCxcbiAgXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYW55VG9PbmVPbkRlbGV0ZTxNIGV4dGVuZHMgTW9kZWwsIFIgZXh0ZW5kcyBSZXBvPE0+PihcbiAgdGhpczogUixcbiAgY29udGV4dDogQ29udGV4dE9mPFI+LFxuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChkYXRhLmNhc2NhZGUuZGVsZXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldIGFzIGFueTtcbiAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICBjb25zdCBpc0luc3RhbnRpYXRlZCA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbiAgY29uc3QgcmVwbyA9IGlzSW5zdGFudGlhdGVkXG4gICAgPyBSZXBvc2l0b3J5LmZvck1vZGVsKHZhbHVlLCB0aGlzLmFkYXB0ZXIuYWxpYXMpXG4gICAgOiByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YShtb2RlbCwga2V5LCB0aGlzLmFkYXB0ZXIuYWxpYXMpO1xuXG4gIGNvbnN0IHJlcG9JZCA9IGlzSW5zdGFudGlhdGVkID8gdmFsdWVbcmVwb1tcInBrXCJdIGFzIHN0cmluZ10gOiB2YWx1ZTtcblxuICBjb25zdCBkZWxldGVkID0gYXdhaXQgcmVwby5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpLmRlbGV0ZShyZXBvSWQpO1xuICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgcmVwb0lkLCBkZWxldGVkKTtcblxuICAobW9kZWwgYXMgYW55KVtrZXldID0gcmVwb0lkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvTWFueU9uQ3JlYXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsQTogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUud2FybihcIkRFQ09SQVRPUiBtYW55VG9NYW55IFVOREVSIERFVkVMT1BNRU5UXCIpO1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlczogYW55ID0gbW9kZWxBW2tleV07XG4gIGlmICghcHJvcGVydHlWYWx1ZXMgfHwgIXByb3BlcnR5VmFsdWVzLmxlbmd0aCkgcmV0dXJuO1xuICBpZiAoIXZhbGlkQmlkaXJlY3Rpb25hbFJlbGF0aW9uKG1vZGVsQSwgZGF0YSkpIHJldHVybjtcblxuICBjb25zdCBhcnJheVR5cGUgPSB0eXBlb2YgcHJvcGVydHlWYWx1ZXNbMF07XG4gIGlmICghcHJvcGVydHlWYWx1ZXMuZXZlcnkoKGl0ZW06IGFueSkgPT4gdHlwZW9mIGl0ZW0gPT09IGFycmF5VHlwZSkpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICBgSW52YWxpZCBvcGVyYXRpb24uIEFsbCBlbGVtZW50cyBvZiBwcm9wZXJ0eSAke2tleSBhcyBzdHJpbmd9IG11c3QgbWF0Y2ggdGhlIHNhbWUgdHlwZS5gXG4gICAgKTtcbiAgY29uc3QgbG9nID0gY29udGV4dC5sb2dnZXIuZm9yKG1hbnlUb01hbnlPbkNyZWF0ZSk7XG4gIGNvbnN0IHVuaXF1ZVZhbHVlcyA9IG5ldyBTZXQoWy4uLnByb3BlcnR5VmFsdWVzXSk7XG4gIC8vIElmIGl0J3MgYSBwcmltaXRpdmUgdmFsdWUgKElEKSwgcmVhZCB0aGUgZXhpc3RpbmcgcmVjb3JkXG4gIGlmIChhcnJheVR5cGUgIT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEobW9kZWxBLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG4gICAgY29uc3QgcmVhZCA9IGF3YWl0IHJlcG9cbiAgICAgIC5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpXG4gICAgICAucmVhZEFsbChbLi4udW5pcXVlVmFsdWVzLnZhbHVlcygpXSwgY29udGV4dCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWFkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtb2RlbCA9IHJlYWRbaV07XG4gICAgICBsb2cuaW5mbyhgRk9VTkQgTUFOWSBUTyBNQU5ZIFZBTFVFOiAke0pTT04uc3RyaW5naWZ5KG1vZGVsKX1gKTtcbiAgICAgIGF3YWl0IGNhY2hlTW9kZWxGb3JQb3B1bGF0ZShcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIGtleSxcbiAgICAgICAgWy4uLnVuaXF1ZVZhbHVlcy52YWx1ZXMoKV1baV0sXG4gICAgICAgIHJlYWRcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBqdW5jdGlvbiB0YWJsZSBlbnRyaWVzXG4gICAgYXdhaXQgZ2V0T3JDcmVhdGVKdW5jdGlvbk1vZGVsLmFwcGx5KHRoaXMgYXMgUmVwbzxNb2RlbD4sIFtcbiAgICAgIG1vZGVsQSxcbiAgICAgIFsuLi5wcm9wZXJ0eVZhbHVlc10gYXMgYW55W10sXG4gICAgICBsb2csXG4gICAgICBjb250ZXh0LFxuICAgICAgZGF0YSxcbiAgICBdKTtcblxuICAgIChtb2RlbEEgYXMgYW55KVtrZXldID0gWy4uLnVuaXF1ZVZhbHVlc107XG4gICAgbG9nLmluZm8oYFNFVCBNQU5ZIFRPIE1BTlkgSURTOiAkeyhtb2RlbEEgYXMgYW55KVtrZXldfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBrTmFtZSA9IE1vZGVsLnBrKHByb3BlcnR5VmFsdWVzWzBdLmNvbnN0cnVjdG9yKTtcbiAgY29uc3QgcmVzdWx0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTtcbiAgZm9yIChjb25zdCBwcm9wZXJ0eVZhbHVlIG9mIHByb3BlcnR5VmFsdWVzKSB7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQ3JlYXRpbmcgb3IgdXBkYXRpbmcgbWFueS10by1tYW55IG1vZGVsOiAke0pTT04uc3RyaW5naWZ5KHByb3BlcnR5VmFsdWUpfWBcbiAgICApO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IGNyZWF0ZU9yVXBkYXRlKFxuICAgICAgcHJvcGVydHlWYWx1ZSxcbiAgICAgIGNvbnRleHQsXG4gICAgICB0aGlzLmFkYXB0ZXIuYWxpYXMsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLl9vdmVycmlkZXNcbiAgICApO1xuICAgIGxvZy5pbmZvKGBjYWNoaW5nOiAke0pTT04uc3RyaW5naWZ5KHJlY29yZCl9IHVuZGVyICR7cmVjb3JkW3BrTmFtZV19YCk7XG4gICAgYXdhaXQgY2FjaGVNb2RlbEZvclBvcHVsYXRlKGNvbnRleHQsIG1vZGVsQSwga2V5LCByZWNvcmRbcGtOYW1lXSwgcmVjb3JkKTtcbiAgICBsb2cuaW5mbyhcbiAgICAgIGBDcmVhdGluZyBvciB1cGRhdGluZyBtYW55LXRvLW1hbnkgbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSl9YFxuICAgICk7XG4gICAgcHJvcGVydHlWYWx1ZS5pZCA9IHJlY29yZC5pZDtcbiAgICByZXN1bHQuYWRkKHJlY29yZFtwa05hbWVdKTtcbiAgfVxuXG4gIC8vIEdldCBvciBnZW5lcmF0ZSB0aGUgSUQgZm9yIG1vZGVsQSBiZWZvcmUgcGVyc2lzdGluZyBqdW5jdGlvbiByZWNvcmRzXG4gIGNvbnN0IG1vZGVsUGtOYW1lID0gTW9kZWwucGsobW9kZWxBLmNvbnN0cnVjdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8TT4pO1xuICBpZiAodHlwZW9mIG1vZGVsQVttb2RlbFBrTmFtZV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjb25zdCBuZXh0SWQgPSBhd2FpdCBnZXROZXh0SWQodGhpcywgbW9kZWxBLCBjb250ZXh0KTtcbiAgICAobW9kZWxBIGFzIGFueSlbbW9kZWxQa05hbWVdID0gbmV4dElkO1xuICB9XG5cbiAgLy8gQ3JlYXRlIGp1bmN0aW9uIHRhYmxlIGVudHJpZXNcbiAgY29uc3QgSnVuY3Rpb25Nb2RlbCA9IGF3YWl0IGdldE9yQ3JlYXRlSnVuY3Rpb25Nb2RlbC5hcHBseShcbiAgICB0aGlzIGFzIFJlcG88TW9kZWw+LFxuICAgIFttb2RlbEEsIHByb3BlcnR5VmFsdWVzIGFzIE1vZGVsW10sIGxvZywgY29udGV4dCwgZGF0YV1cbiAgKTtcblxuICAvLyBUaGlzIHdpbGwgcmVxdWlyZSBjcmVhdGluZyBqdW5jdGlvbiByZXBvc2l0b3J5IGFuZCBzdG9yaW5nIHRoZSByZWxhdGlvbnNoaXBzXG4gIGxvZy5pbmZvKGBKdW5jdGlvbiBtb2RlbCBjcmVhdGVkOiAke0p1bmN0aW9uTW9kZWwubmFtZX1gKTtcblxuICAobW9kZWxBIGFzIGFueSlba2V5XSA9IFsuLi5yZXN1bHRdO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXROZXh0SWQ8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHJlcG86IFIsXG4gIG1vZGVsQTogTSxcbiAgY29udGV4dDogQ29udGV4dE9mPFI+XG4pOiBQcm9taXNlPHN0cmluZyB8IG51bWJlciB8IGJpZ2ludD4ge1xuICAvLyBHZXQgdGhlIG5leHQgaWQgZm9yIHRoZSBtb2RlbCBiZWZvcmUgaXQgaXMgcGVyc2lzdGVkIHNvIHdlIGNhbiBwdXQgaXQgaW4gdGhlIGp1bmN0aW9uIHRhYmxlXG4gIGNvbnN0IG1vZGVsUGtOYW1lID0gTW9kZWwucGsobW9kZWxBLmNvbnN0cnVjdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8TT4pO1xuXG4gIGNvbnN0IG1vZGVsQUlkOiBhbnkgPSBtb2RlbEFbbW9kZWxQa05hbWVdO1xuICBpZiAobW9kZWxBSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBtb2RlbEFJZDtcbiAgfVxuXG4gIGNvbnN0IHBrUHJvcHMgPSBNb2RlbC5zZXF1ZW5jZUZvcihtb2RlbEEuY29uc3RydWN0b3IgYXMgTW9kZWxDb25zdHJ1Y3RvcjxNPik7XG4gIGlmICghcGtQcm9wcz8ubmFtZSkge1xuICAgIHBrUHJvcHMubmFtZSA9IE1vZGVsLnNlcXVlbmNlTmFtZShtb2RlbEEsIFwicGtcIik7XG4gIH1cbiAgbGV0IHNlcXVlbmNlOiBTZXF1ZW5jZTtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3MgYWRhcHRlciB0aHJvdWdoIHRoZSBwdWJsaWMgcHJvcGVydHkgJ2RiJyBvciB1c2UgdHlwZSBhc3NlcnRpb25cbiAgICBzZXF1ZW5jZSA9IGF3YWl0IChyZXBvIGFzIGFueSkuYWRhcHRlci5TZXF1ZW5jZShcbiAgICAgIHBrUHJvcHMsXG4gICAgICByZXBvW1wiX292ZXJyaWRlc1wiXVxuICAgICk7XG4gICAgcmV0dXJuIGF3YWl0IHNlcXVlbmNlLm5leHQoY29udGV4dCk7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBpbnN0YW50aWF0ZSBTZXF1ZW5jZSAke3BrUHJvcHMubmFtZX06ICR7ZX1gXG4gICAgKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRPckNyZWF0ZUp1bmN0aW9uTW9kZWw8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIG1vZGVsQTogTW9kZWwsXG4gIG1vZGVsc0I6IE1vZGVsW10gfCBhbnlbXSxcbiAgbG9nOiBhbnksXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgbWV0YWRhdGE/OiBSZWxhdGlvbnNNZXRhZGF0YVxuKTogUHJvbWlzZTxDb25zdHJ1Y3RvcjxNb2RlbDxmYWxzZT4+PiB7XG4gIGNvbnN0IHsgSnVuY3Rpb25Nb2RlbCwgZmtBLCBma0IgfSA9IGdldEFuZENvbnN0cnVjdEp1bmN0aW9uVGFibGUoXG4gICAgbW9kZWxBLFxuICAgIG1vZGVsc0JbMF0sXG4gICAgbWV0YWRhdGFcbiAgKTtcblxuICBjb25zdCByZWNvcmRJZHM6IGFueVtdID0gW107XG4gIGZvciAoY29uc3QgbW9kZWxCIG9mIG1vZGVsc0IpIHtcbiAgICBsb2cuaW5mbyhcbiAgICAgIGBDcmVhdGluZyBvciB1cGRhdGluZyBtYW55LXRvLW1hbnkganVuY3Rpb24gbW9kZWw6ICR7SlNPTi5zdHJpbmdpZnkobW9kZWxCKX1gXG4gICAgKTtcbiAgICAvLyBJZiBpdCBpcyBhIG1vZGVsLCBmaW5kIGFuZCBzdG9yZSBmayBjb250ZW50LCBlbHNlIGl0IGlzIGZrIHZhbHVlIGRpcmVjdGx5XG4gICAgY29uc3QganVuY3Rpb25SZWdpc3RlciA9IHtcbiAgICAgIFtma0FdOlxuICAgICAgICBtb2RlbEEgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICAgID8gbW9kZWxBW1xuICAgICAgICAgICAgICBNb2RlbC5wayhtb2RlbEEuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IpIGFzIGtleW9mIHR5cGVvZiBtb2RlbEFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IG1vZGVsQSxcbiAgICAgIFtma0JdOlxuICAgICAgICBtb2RlbEIgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICAgID8gbW9kZWxCW1xuICAgICAgICAgICAgICBNb2RlbC5wayhtb2RlbEIuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IpIGFzIGtleW9mIHR5cGVvZiBtb2RlbEJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IG1vZGVsQixcbiAgICB9O1xuICAgIGNvbnN0IHJlY29yZDogYW55ID0gYXdhaXQgY3JlYXRlT3JVcGRhdGUoXG4gICAgICBuZXcgSnVuY3Rpb25Nb2RlbChqdW5jdGlvblJlZ2lzdGVyKSxcbiAgICAgIGNvbnRleHQsXG4gICAgICB0aGlzLmFkYXB0ZXIuYWxpYXMsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0aGlzLl9vdmVycmlkZXNcbiAgICApO1xuICAgIGlmIChyZWNvcmQ/LmlkKSByZWNvcmRJZHMucHVzaChyZWNvcmQuaWQpO1xuICB9XG5cbiAgaWYgKHJlY29yZElkcy5sZW5ndGggPT09IG1vZGVsc0I/Lmxlbmd0aCkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEFsbCBqdW5jdGlvbiByZWNvcmRzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IGZvciB0YWJsZSAke0p1bmN0aW9uTW9kZWw/Lm5hbWV9YFxuICAgICk7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IFJlcG9zaXRvcnkuZm9yTW9kZWw8TSwgUmVwbzxNPj4oXG4gICAgICBKdW5jdGlvbk1vZGVsIGFzIHVua25vd24gYXMgTW9kZWxDb25zdHJ1Y3RvcjxNPlxuICAgICk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHJlcG9zaXRvcnlcbiAgICAgID8ub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLnJlYWRBbGwocmVjb3JkSWRzKTtcbiAgICBjb25zb2xlLmxvZyhcInJlc3VsdHM6XCIsIHJlc3VsdHMpO1xuICB9IGVsc2VcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYFNvbWUganVuY3Rpb24gcmVjb3JkcyBmYWlsZWQgdG8gYmUgY3JlYXRlZCBmb3IgdGFibGUgJHtKdW5jdGlvbk1vZGVsPy5uYW1lfWBcbiAgICApO1xuXG4gIHJldHVybiBKdW5jdGlvbk1vZGVsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QW5kQ29uc3RydWN0SnVuY3Rpb25UYWJsZShcbiAgbW9kZWxBOiBNb2RlbCxcbiAgbW9kZWxCOiBNb2RlbCB8IGFueSxcbiAgbWV0YWRhdGE/OiBSZWxhdGlvbnNNZXRhZGF0YVxuKTogeyBma0E6IHN0cmluZzsgZmtCOiBzdHJpbmc7IEp1bmN0aW9uTW9kZWw6IENvbnN0cnVjdG9yPE1vZGVsPGZhbHNlPj4gfSB7XG4gIC8vIEdldCB0aGUgbmFtZSBvZiB0aGUgdGFibGUgYW5kIGZrc1xuICBjb25zdCBtb2RlbEFOYW1lID0gTW9kZWwudGFibGVOYW1lKG1vZGVsQSk7XG4gIGxldCBtb2RlbEJOYW1lO1xuICBpZiAobW9kZWxCIGluc3RhbmNlb2YgTW9kZWwpIG1vZGVsQk5hbWUgPSBNb2RlbC50YWJsZU5hbWUobW9kZWxCKTtcbiAgZWxzZSBpZiAoXG4gICAgTW9kZWwuaXNNb2RlbChtb2RlbEIgYXMgUmVjb3JkPHN0cmluZywgYW55PikgJiZcbiAgICB0eXBlb2YgbW9kZWxCID09PSBcImZ1bmN0aW9uXCJcbiAgKSB7XG4gICAgbW9kZWxCTmFtZSA9IG1vZGVsQi5uYW1lID8gbW9kZWxCLm5hbWUgOiAobW9kZWxCIGFzIGFueSkoKT8ubmFtZTtcbiAgfSBlbHNlIGlmIChtZXRhZGF0YT8uY2xhc3MpIHtcbiAgICBjb25zdCBjbGF6eiA9XG4gICAgICB0eXBlb2YgbWV0YWRhdGEuY2xhc3MgPT09IFwiZnVuY3Rpb25cIiAmJiAhbWV0YWRhdGEuY2xhc3MubmFtZVxuICAgICAgICA/IChtZXRhZGF0YS5jbGFzcyBhcyBhbnkpKClcbiAgICAgICAgOiBtZXRhZGF0YS5jbGFzcztcbiAgICBtb2RlbEJOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgfVxuICBpZiAoIW1vZGVsQU5hbWUgfHwgIW1vZGVsQk5hbWUpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJNaXNzaW5nIHRhYmxlbmFtZXMgdG8gY3JlYXRlIGp1bmN0aW9uIHRhYmxlXCIpO1xuXG4gIGNvbnN0IGp1bmN0aW9uVGFibGVOYW1lID0gbWV0YWRhdGE/LmpvaW5UYWJsZT8ubmFtZVxuICAgID8gbWV0YWRhdGE/LmpvaW5UYWJsZT8ubmFtZVxuICAgIDogYCR7bW9kZWxBTmFtZX1fJHttb2RlbEJOYW1lfWA7XG4gIGNvbnN0IGZrQSA9IGAke21vZGVsQU5hbWU/LnRvTG93ZXJDYXNlKCl9X2ZrYDtcbiAgY29uc3QgZmtCID0gYCR7bW9kZWxCTmFtZT8udG9Mb3dlckNhc2UoKX1fZmtgO1xuXG4gIC8vIEFub255bW91cyBjbGFzcyB0byBiZSBhYmxlIHRvIGNoYW5nZSBuYW1lXG4gIGNvbnN0IER5bmFtaWNKdW5jdGlvbk1vZGVsID0gY2xhc3MgZXh0ZW5kcyBNb2RlbCB7XG4gICAgaWQhOiBudW1iZXI7XG4gICAgW2ZrQV0hOiBudW1iZXI7XG4gICAgW2ZrQl0hOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoYXJnPzogTW9kZWxBcmc8YW55Pikge1xuICAgICAgc3VwZXIoYXJnKTtcbiAgICB9XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KER5bmFtaWNKdW5jdGlvbk1vZGVsLCBcIm5hbWVcIiwge1xuICAgIHZhbHVlOiBqdW5jdGlvblRhYmxlTmFtZSxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gIH0pO1xuXG4gIC8vIEFwcGx5IHRoZSBkZWNvcmF0b3JzXG4gIHBrKHsgdHlwZTogTnVtYmVyIH0pKER5bmFtaWNKdW5jdGlvbk1vZGVsLnByb3RvdHlwZSwgXCJpZFwiKTtcbiAgcmVxdWlyZWQoKShEeW5hbWljSnVuY3Rpb25Nb2RlbC5wcm90b3R5cGUsIGZrQSBhcyBhbnkpO1xuICByZXF1aXJlZCgpKER5bmFtaWNKdW5jdGlvbk1vZGVsLnByb3RvdHlwZSwgZmtCIGFzIGFueSk7XG5cbiAgLy8gQXBwbHkgQG1vZGVsKCkgZGVjb3JhdG9yIHRvIHRoZSBjbGFzc1xuICBjb25zdCBEZWNvcmF0ZWRNb2RlbCA9IG1vZGVsKCkoRHluYW1pY0p1bmN0aW9uTW9kZWwpO1xuXG4gIE1ldGFkYXRhLnNldChEeW5hbWljSnVuY3Rpb25Nb2RlbCwgUGVyc2lzdGVuY2VLZXlzLlRBQkxFLCBqdW5jdGlvblRhYmxlTmFtZSk7XG4gIHJldHVybiB7XG4gICAgZmtBLFxuICAgIGZrQixcbiAgICBKdW5jdGlvbk1vZGVsOiBEZWNvcmF0ZWRNb2RlbCBhcyBDb25zdHJ1Y3RvcjxNb2RlbDxmYWxzZT4+LFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvTWFueU9uVXBkYXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS53YXJuKFwibWV0aG9kIG5vdCB5ZXQgaW1wbGVtZW50ZWRcIik7XG4gIGNvbnN0IHsgY2FzY2FkZSB9ID0gZGF0YTtcbiAgaWYgKGNhc2NhZGUudXBkYXRlICE9PSBDYXNjYWRlLkNBU0NBREUpIHJldHVybjtcbiAgcmV0dXJuIG1hbnlUb01hbnlPbkNyZWF0ZS5hcHBseSh0aGlzIGFzIGFueSwgW1xuICAgIGNvbnRleHQsXG4gICAgZGF0YSxcbiAgICBrZXkgYXMga2V5b2YgTW9kZWwsXG4gICAgbW9kZWwsXG4gIF0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFueVRvTWFueU9uRGVsZXRlPE0gZXh0ZW5kcyBNb2RlbCwgUiBleHRlbmRzIFJlcG88TT4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBDb250ZXh0T2Y8Uj4sXG4gIGRhdGE6IFJlbGF0aW9uc01ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc29sZS53YXJuKFwiTWV0aG9kIHVuZGVyIGRldmVsb3BtZW50XCIpO1xuICBpZiAoZGF0YS5jYXNjYWRlLmRlbGV0ZSAhPT0gQ2FzY2FkZS5DQVNDQURFKSByZXR1cm47XG4gIGNvbnN0IHZhbHVlcyA9IG1vZGVsW2tleV0gYXMgYW55O1xuICBpZiAoIXZhbHVlcyB8fCAhdmFsdWVzLmxlbmd0aCkgcmV0dXJuO1xuICBjb25zdCBhcnJheVR5cGUgPSB0eXBlb2YgdmFsdWVzWzBdO1xuICBjb25zdCBhcmVBbGxTYW1lVHlwZSA9IHZhbHVlcy5ldmVyeSgoaXRlbTogYW55KSA9PiB0eXBlb2YgaXRlbSA9PT0gYXJyYXlUeXBlKTtcbiAgaWYgKCFhcmVBbGxTYW1lVHlwZSlcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBJbnZhbGlkIG9wZXJhdGlvbi4gQWxsIGVsZW1lbnRzIG9mIHByb3BlcnR5ICR7a2V5IGFzIHN0cmluZ30gbXVzdCBtYXRjaCB0aGUgc2FtZSB0eXBlLmBcbiAgICApO1xuXG4gIC8vIERlbGV0ZSB0aGUgdmFsdWVzIGFuZCB0aGUganVuY3Rpb24gdGFibGUgZW50cmllc1xuICBjb25zdCBjbGF6eiA9XG4gICAgdHlwZW9mIGRhdGEuY2xhc3MgPT09IFwiZnVuY3Rpb25cIiAmJiAhZGF0YS5jbGFzcy5uYW1lXG4gICAgICA/IChkYXRhLmNsYXNzIGFzIGFueSkoKVxuICAgICAgOiBkYXRhLmNsYXNzO1xuXG4gIGNvbnN0IGlzSW5zdGFudGlhdGVkID0gYXJyYXlUeXBlID09PSBcIm9iamVjdFwiO1xuICBjb25zdCByZXBvID0gaXNJbnN0YW50aWF0ZWRcbiAgICA/IFJlcG9zaXRvcnkuZm9yTW9kZWwoY2xhenosIHRoaXMuYWRhcHRlci5hbGlhcylcbiAgICA6IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhKG1vZGVsLCBrZXksIHRoaXMuYWRhcHRlci5hbGlhcyk7XG5cbiAgY29uc3QgdW5pcXVlVmFsdWVzID0gbmV3IFNldChbXG4gICAgLi4uKGlzSW5zdGFudGlhdGVkXG4gICAgICA/IHZhbHVlcy5tYXAoKHY6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZbcmVwb1tcInBrXCJdIGFzIHN0cmluZ10pXG4gICAgICA6IHZhbHVlcyksXG4gIF0pO1xuXG4gIGNvbnN0IGlkcyA9IFsuLi51bmlxdWVWYWx1ZXMudmFsdWVzKCldO1xuICBsZXQgZGVsZXRlZDogTW9kZWxbXTtcbiAgdHJ5IHtcbiAgICBkZWxldGVkID0gYXdhaXQgcmVwby5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpLmRlbGV0ZUFsbChpZHMsIGNvbnRleHQpO1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgY29udGV4dC5sb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgYWxsIHJlY29yZHNgLCBlKTtcbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgbGV0IGRlbDogYW55O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlbGV0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBkZWwgPSBkZWxldGVkW2ldO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjYWNoZU1vZGVsRm9yUG9wdWxhdGUoY29udGV4dCwgbW9kZWwsIGtleSwgaWRzW2ldLCBkZWwpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGNvbnRleHQubG9nZ2VyLmVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGNhY2hlIHJlY29yZCAke2lkc1tpXX0gd2l0aCBrZXkgJHtrZXkgYXMgc3RyaW5nfSBhbmQgbW9kZWwgJHtKU09OLnN0cmluZ2lmeShtb2RlbCwgdW5kZWZpbmVkLCAyKX0gYCxcbiAgICAgICAgZVxuICAgICAgKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBpZHM7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGtleSBmb3IgY2FjaGluZyBwb3B1bGF0ZWQgbW9kZWwgcmVsYXRpb25zaGlwc1xuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHVuaXF1ZSBrZXkgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgcG9wdWxhdGVkIG1vZGVsIHJlbGF0aW9uc2hpcHMgaW4gdGhlIGNhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFibGVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHRhYmxlIG9yIG1vZGVsXG4gKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGZpZWxkIG9yIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHJlbGF0ZWQgbW9kZWxcbiAqIEByZXR1cm4ge3N0cmluZ30gQSBkb3Qtc2VwYXJhdGVkIHN0cmluZyB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIHJlbGF0aW9uc2hpcFxuICogQGZ1bmN0aW9uIGdldFBvcHVsYXRlS2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcHVsYXRlS2V5KFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgZmllbGROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbikge1xuICBpZiAoZmllbGROYW1lKVxuICAgIHJldHVybiBbUGVyc2lzdGVuY2VLZXlzLlBPUFVMQVRFLCB0YWJsZU5hbWUsIGZpZWxkTmFtZSwgaWRdLmpvaW4oXCIuXCIpO1xuICByZXR1cm4gW1BlcnNpc3RlbmNlS2V5cy5QT1BVTEFURSwgdGFibGVOYW1lLCBpZF0uam9pbihcIi5cIik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFnRm9yRGVsZXRlS2V5KFxuICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgZmllbGROYW1lOiBzdHJpbmcsXG4gIGlkOiBzdHJpbmcgfCBudW1iZXJcbikge1xuICByZXR1cm4gW1BlcnNpc3RlbmNlS2V5cy5UQUdfRk9SX0RFTEVUSU9OLCB0YWJsZU5hbWUsIGlkXS5qb2luKFwiLlwiKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ2FjaGVzIGEgbW9kZWwgZm9yIGxhdGVyIHBvcHVsYXRpb25cbiAqIEBzdW1tYXJ5IFN0b3JlcyBhIG1vZGVsIGluIHRoZSBjb250ZXh0IGNhY2hlIGZvciBlZmZpY2llbnQgcmV0cmlldmFsIGR1cmluZyByZWxhdGlvbnNoaXAgcG9wdWxhdGlvblxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZVxuICogQHBhcmFtIHtDb250ZXh0PEY+fSBjb250ZXh0IC0gVGhlIGNvbnRleHQgZm9yIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSB7TX0gcGFyZW50TW9kZWwgLSBUaGUgcGFyZW50IG1vZGVsIHRoYXQgY29udGFpbnMgdGhlIHJlbGF0aW9uc2hpcFxuICogQHBhcmFtIHByb3BlcnR5S2V5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgcmVsYXRpb25zaGlwXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gcGtWYWx1ZSAtIFRoZSBwcmltYXJ5IGtleSB2YWx1ZSBvZiB0aGUgcmVsYXRlZCBtb2RlbFxuICogQHBhcmFtIHthbnl9IGNhY2hlVmFsdWUgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gY2FjaGVcbiAqIEByZXR1cm4ge1Byb21pc2U8YW55Pn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBjYWNoZSBvcGVyYXRpb25cbiAqIEBmdW5jdGlvbiBjYWNoZU1vZGVsRm9yUG9wdWxhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FjaGVNb2RlbEZvclBvcHVsYXRlPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIEYgZXh0ZW5kcyBBZGFwdGVyRmxhZ3MsXG4+KFxuICBjb250ZXh0OiBDb250ZXh0PEY+LFxuICBwYXJlbnRNb2RlbDogTSxcbiAgcHJvcGVydHlLZXk6IGtleW9mIE0gfCBzdHJpbmcsXG4gIHBrVmFsdWU6IHN0cmluZyB8IG51bWJlcixcbiAgY2FjaGVWYWx1ZTogYW55XG4pIHtcbiAgY29uc3QgY2FjaGVLZXkgPSBnZXRQb3B1bGF0ZUtleShcbiAgICBwYXJlbnRNb2RlbC5jb25zdHJ1Y3Rvci5uYW1lLFxuICAgIHByb3BlcnR5S2V5IGFzIHN0cmluZyxcbiAgICBwa1ZhbHVlXG4gICk7XG4gIGNvbnN0IGxvZyA9IGNvbnRleHQubG9nZ2VyLmZvcihjYWNoZU1vZGVsRm9yUG9wdWxhdGUpO1xuICBjb25zdCBjYWNoZSA9IGNvbnRleHQuZ2V0KFwiY2FjaGVGb3JQb3B1bGF0ZVwiKSB8fCB7fTtcbiAgbGV0IGNhY2hlZDogYW55ID0gY2FjaGVbY2FjaGVLZXldO1xuICBsZXQgcHJlZmVyRnJvbUNhY2hlID0gY29udGV4dC5nZXRPclVuZGVmaW5lZChcInByZWZlckZyb21DYWNoZVwiKTtcbiAgaWYgKCFwcmVmZXJGcm9tQ2FjaGUpIHtcbiAgICB0cnkge1xuICAgICAgbG9nLnNpbGx5KGByZXRyaWV2aW5nIGZyb20gY2hpbGRyZW5gKTtcbiAgICAgIHByZWZlckZyb21DYWNoZSA9IGNvbnRleHQuZ2V0RnJvbUNoaWxkcmVuKFwicHJlZmVyRnJvbUNhY2hlXCIpIHx8IGZhbHNlO1xuICAgICAgaWYgKHByZWZlckZyb21DYWNoZSkge1xuICAgICAgICBjYWNoZWQgPSAoKGNvbnRleHQuZ2V0RnJvbUNoaWxkcmVuKFwiY2FjaGVGb3JQb3B1bGF0ZVwiKSB8fCB7fSkgYXMgYW55KVtcbiAgICAgICAgICBjYWNoZUtleVxuICAgICAgICBdO1xuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHByZWZlckZyb21DYWNoZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmVmZXJGcm9tQ2FjaGUpIHtcbiAgICBsb2cuZGVidWcoYHByZWZlcnJpbmcgcHJldmlvdXMgY2FjaGU6ICR7ISFjYWNoZVtjYWNoZUtleV19YCk7XG4gIH1cbiAgKGNhY2hlW2NhY2hlS2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9XG4gICAgcHJlZmVyRnJvbUNhY2hlICYmIGNhY2hlZCA/IGNhY2hlZCA6IGNhY2hlVmFsdWU7XG4gIHJldHVybiBjb250ZXh0LmFjY3VtdWxhdGUoeyBjYWNoZUZvclBvcHVsYXRlOiBjYWNoZSB9IGFzIGFueSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBvcHVsYXRlcyBhIG1vZGVsJ3MgcmVsYXRpb25zaGlwXG4gKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYW5kIGF0dGFjaGVzIHJlbGF0ZWQgbW9kZWxzIHRvIGEgbW9kZWwncyByZWxhdGlvbnNoaXAgcHJvcGVydHlcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXBvc2l0b3J5IHR5cGUgZXh0ZW5kaW5nIFJlcG88TSwgRiwgQz5cbiAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YSB0eXBlIGV4dGVuZGluZyBSZWxhdGlvbnNNZXRhZGF0YVxuICogQHRlbXBsYXRlIEYgLSBUaGUgcmVwb3NpdG9yeSBmbGFncyB0eXBlXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZXh0ZW5kaW5nIENvbnRleHQ8Rj5cbiAqIEBwYXJhbSB7Un0gdGhpcyAtIFRoZSByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiBAcGFyYW0ge0NvbnRleHQ8Rj59IGNvbnRleHQgLSBUaGUgY29udGV4dCBmb3IgdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHtWfSBkYXRhIC0gVGhlIHJlbGF0aW9ucyBtZXRhZGF0YVxuICogQHBhcmFtIGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIHJlbGF0aW9uc2hpcFxuICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZVxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlXG4gKiBAZnVuY3Rpb24gcG9wdWxhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgcG9wdWxhdGVcbiAqICAgcGFydGljaXBhbnQgZmV0Y2hQb3B1bGF0ZVZhbHVlc1xuICogICBwYXJ0aWNpcGFudCBnZXRQb3B1bGF0ZUtleVxuICogICBwYXJ0aWNpcGFudCBDb250ZXh0XG4gKiAgIHBhcnRpY2lwYW50IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhXG4gKlxuICogICBDYWxsZXItPj5wb3B1bGF0ZTogdGhpcywgY29udGV4dCwgZGF0YSwga2V5LCBtb2RlbFxuICogICBwb3B1bGF0ZS0+PnBvcHVsYXRlOiBjaGVjayBpZiBkYXRhLnBvcHVsYXRlIGlzIHRydWVcbiAqICAgcG9wdWxhdGUtPj5wb3B1bGF0ZTogZ2V0IG5lc3RlZCB2YWx1ZSBhbmQgY2hlY2sgaWYgaXQgZXhpc3RzXG4gKlxuICogICBwb3B1bGF0ZS0+PmZldGNoUG9wdWxhdGVWYWx1ZXM6IGNvbnRleHQsIG1vZGVsLCBrZXksIGlzQXJyID8gbmVzdGVkIDogW25lc3RlZF1cbiAqXG4gKiAgIGZldGNoUG9wdWxhdGVWYWx1ZXMtPj5mZXRjaFBvcHVsYXRlVmFsdWVzOiBpbml0aWFsaXplIHZhcmlhYmxlc1xuICpcbiAqICAgbG9vcCBmb3IgZWFjaCBwcm9LZXlWYWx1ZSBpbiBwcm9wS2V5VmFsdWVzXG4gKiAgICAgZmV0Y2hQb3B1bGF0ZVZhbHVlcy0+PmdldFBvcHVsYXRlS2V5OiBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lLCBwcm9wTmFtZSwgcHJvS2V5VmFsdWVcbiAqICAgICBnZXRQb3B1bGF0ZUtleS0tPj5mZXRjaFBvcHVsYXRlVmFsdWVzOiBjYWNoZUtleVxuICpcbiAqICAgICBhbHQgdHJ5IHRvIGdldCBmcm9tIGNhY2hlXG4gKiAgICAgICBmZXRjaFBvcHVsYXRlVmFsdWVzLT4+Q29udGV4dDogZ2V0KGNhY2hlS2V5KVxuICogICAgICAgQ29udGV4dC0tPj5mZXRjaFBvcHVsYXRlVmFsdWVzOiB2YWxcbiAqICAgICBlbHNlIGNhdGNoIGVycm9yXG4gKiAgICAgICBmZXRjaFBvcHVsYXRlVmFsdWVzLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IG1vZGVsLCBwcm9wTmFtZVxuICogICAgICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtLT4+ZmV0Y2hQb3B1bGF0ZVZhbHVlczogcmVwb1xuICogICAgICAgZmV0Y2hQb3B1bGF0ZVZhbHVlcy0+PnJlcG86IHJlYWQocHJvS2V5VmFsdWUpXG4gKiAgICAgICByZXBvLS0+PmZldGNoUG9wdWxhdGVWYWx1ZXM6IHZhbFxuICogICAgIGVuZFxuICpcbiAqICAgICBmZXRjaFBvcHVsYXRlVmFsdWVzLT4+ZmV0Y2hQb3B1bGF0ZVZhbHVlczogYWRkIHZhbCB0byByZXN1bHRzXG4gKiAgIGVuZFxuICpcbiAqICAgZmV0Y2hQb3B1bGF0ZVZhbHVlcy0tPj5wb3B1bGF0ZTogcmVzdWx0c1xuICogICBwb3B1bGF0ZS0+PnBvcHVsYXRlOiBzZXQgbW9kZWxba2V5XSA9IGlzQXJyID8gcmVzIDogcmVzWzBdXG4gKiAgIHBvcHVsYXRlLS0+PkNhbGxlcjogdm9pZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWRhdGEucG9wdWxhdGUpIHJldHVybjtcbiAgY29uc3QgbmVzdGVkOiBhbnkgPSBtb2RlbFtrZXldO1xuICBjb25zdCBpc0FyciA9IEFycmF5LmlzQXJyYXkobmVzdGVkKTtcbiAgaWYgKHR5cGVvZiBuZXN0ZWQgPT09IFwidW5kZWZpbmVkXCIgfHwgKGlzQXJyICYmIG5lc3RlZC5sZW5ndGggPT09IDApKSByZXR1cm47XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoUG9wdWxhdGVWYWx1ZXMoXG4gICAgYzogQ29udGV4dE9mPFI+LFxuICAgIG1vZGVsOiBNLFxuICAgIHByb3BOYW1lOiBzdHJpbmcsXG4gICAgcHJvcEtleVZhbHVlczogYW55W11cbiAgKSB7XG4gICAgbGV0IGNhY2hlS2V5OiBzdHJpbmc7XG4gICAgbGV0IHZhbDogYW55O1xuICAgIGNvbnN0IHJlc3VsdHM6IE1bXSA9IFtdO1xuICAgIGxldCBvcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgb3BlcmF0aW9uID0gYy5nZXQoXCJvcGVyYXRpb25cIiBhcyBhbnkpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgb3BlcmF0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBpc1JlYWQgPVxuICAgICAgb3BlcmF0aW9uID09PSBPcGVyYXRpb25LZXlzLlJFQUQgfHxcbiAgICAgIG9wZXJhdGlvbiA9PT0gQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMO1xuICAgIGNvbnN0IGNhY2hlID0gaXNSZWFkID8ge30gOiBjLmdldChcImNhY2hlRm9yUG9wdWxhdGVcIikgfHwge307XG4gICAgZm9yIChjb25zdCBwcm9LZXlWYWx1ZSBvZiBwcm9wS2V5VmFsdWVzKSB7XG4gICAgICBjYWNoZUtleSA9IGdldFBvcHVsYXRlS2V5KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUsIHByb3BOYW1lLCBwcm9LZXlWYWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICB2YWwgPSBjYWNoZVtjYWNoZUtleV07XG4gICAgICAgIGlmICghdmFsKSB0aHJvdyBuZXcgRXJyb3IoXCJOb3QgZm91bmQgaW4gY2FjaGVcIik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgICAgICAgbW9kZWwsXG4gICAgICAgICAgcHJvcE5hbWUgYXMga2V5b2YgTSxcbiAgICAgICAgICAoc2VsZiBhcyBhbnkpLmFkYXB0ZXIuYWxpYXNcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZXBvKSB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIkNvdWxkIG5vdCBmaW5kIHJlcG9cIik7XG4gICAgICAgIHZhbCA9IGF3YWl0IHJlcG9cbiAgICAgICAgICAub3ZlcnJpZGUoKHNlbGYgYXMgYW55KS5fb3ZlcnJpZGVzKVxuICAgICAgICAgIC5yZWFkKHByb0tleVZhbHVlLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdHMucHVzaCh2YWwpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaFBvcHVsYXRlVmFsdWVzKFxuICAgIGNvbnRleHQsXG4gICAgbW9kZWwsXG4gICAga2V5IGFzIHN0cmluZyxcbiAgICBpc0FyciA/IG5lc3RlZCA6IFtuZXN0ZWRdXG4gICk7XG4gIChtb2RlbCBhcyBhbnkpW2tleV0gPSBpc0FyciA/IHJlcyA6IHJlc1swXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhc2NhZGVEZWxldGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogUmVsYXRpb25zTWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE0sXG4gIG9sZE1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGRhdGEuY2FzY2FkZS51cGRhdGUgIT09IENhc2NhZGUuQ0FTQ0FERSkgcmV0dXJuO1xuICBpZiAoIW9sZE1vZGVsKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgXCJObyB3YXkgdG8gY29tcGFyZSBvbGQgbW9kZWwuIGRvIHlvdSBoYXZlIHVwZGF0ZVZhbGlkYXRpb24gYW5kIG1lcmdlTW9kZWxzIGVuYWJsZWQ/XCJcbiAgICApO1xuXG4gIGZ1bmN0aW9uIHJlZHVjZVRvUGsob2JqOiBhbnkpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubWFwKHJlZHVjZVRvUGspO1xuICAgIHJldHVybiB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiID8gb2JqIDogb2JqW01vZGVsLnBrKG9iaildO1xuICB9XG5cbiAgY29uc3QgbmV3VmFsID0gcmVkdWNlVG9Qayhtb2RlbFtrZXldKTtcbiAgY29uc3Qgb2xkVmFsID0gcmVkdWNlVG9QayhvbGRNb2RlbFtrZXldKTtcbiAgaWYgKHR5cGVvZiBvbGRWYWwgPT09IFwidW5kZWZpbmVkXCIgfHwgaXNFcXVhbChuZXdWYWwsIG9sZFZhbCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobmV3VmFsKSAhPT0gQXJyYXkuaXNBcnJheShvbGRWYWwpKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDYW5ub3QgY2FzY2FkZSB1cGRhdGUgZm9yIGRpZmZlcmVudCBhcnJheSB0eXBlc2ApO1xuICBjb25zdCBuZXdUb0NvbXBhcmUgPSAoQXJyYXkuaXNBcnJheShuZXdWYWwpID8gbmV3VmFsIDogW25ld1ZhbF0pLmZpbHRlcihcbiAgICBCb29sZWFuXG4gICkgYXMgYW55W107XG4gIGNvbnN0IG9sZFRvQ29tcGFyZSA9IChBcnJheS5pc0FycmF5KG9sZFZhbCkgPyBvbGRWYWwgOiBbb2xkVmFsXSkuZmlsdGVyKFxuICAgIEJvb2xlYW5cbiAgKSBhcyBhbnlbXTtcbiAgY29uc3QgdG9EZWxldGUgPSAob2xkVG9Db21wYXJlIGFzIGFueVtdKS5maWx0ZXIoXG4gICAgKHYpID0+ICEobmV3VG9Db21wYXJlIGFzIGFueVtdKS5pbmNsdWRlcyh2KVxuICApO1xuICBjb25zdCByZXBvID0gcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEoXG4gICAgbW9kZWwsXG4gICAga2V5IGFzIGtleW9mIE0sXG4gICAgdGhpcy5hZGFwdGVyLmFsaWFzXG4gICk7XG4gIGlmICghcmVwbykgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJDb3VsZCBub3QgZmluZCByZXBvXCIpO1xuICB0cnkge1xuICAgIGNvbnN0IGRlbGV0ZWQgPSBhd2FpdCByZXBvXG4gICAgICAub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKVxuICAgICAgLmRlbGV0ZUFsbCh0b0RlbGV0ZSwgY29udGV4dCk7XG4gICAgY29udGV4dC5sb2dnZXIuZGVidWcoXG4gICAgICBgRGVsZXRlZCAke2RlbGV0ZWQubGVuZ3RofSBlbnRyaWVzIGZyb20gdGFibGUgJHtNb2RlbC50YWJsZU5hbWUocmVwby5jbGFzcyl9IGR1ZSB0byBjYXNjYWRlIHJ1bGVzIHdpdGggYFxuICAgICk7XG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgRXJyb3IgZGVsZXRpbmcgY2FzY2FkZSBlbnRyaWVzOiAke2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTGlzdCBvZiBjb21tb24gSmF2YVNjcmlwdCB0eXBlc1xuICogQHN1bW1hcnkgQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgY29tbW9uIEphdmFTY3JpcHQgdHlwZXMgdGhhdCBhcmUgbm90IGN1c3RvbSBtb2RlbCB0eXBlc1xuICogQGNvbnN0IGNvbW1vbVR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuY29uc3QgY29tbW9tVHlwZXMgPSBbXG4gIFwiYXJyYXlcIixcbiAgXCJzdHJpbmdcIixcbiAgXCJudW1iZXJcIixcbiAgXCJib29sZWFuXCIsXG4gIFwic3ltYm9sXCIsXG4gIFwiZnVuY3Rpb25cIixcbiAgXCJvYmplY3RcIixcbiAgXCJ1bmRlZmluZWRcIixcbiAgXCJudWxsXCIsXG4gIFwiYmlnaW50XCIsXG5dO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsIHByb3BlcnR5IGJhc2VkIG9uIGl0cyB0eXBlIG1ldGFkYXRhXG4gKiBAc3VtbWFyeSBFeGFtaW5lcyBhIG1vZGVsIHByb3BlcnR5J3MgdHlwZSBtZXRhZGF0YSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHJlcG9zaXRvcnkgZm9yIHJlbGF0ZWQgbW9kZWxzXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHBhcmFtIHthbnl9IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcGVydHlLZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIGV4YW1pbmVcbiAqIEByZXR1cm4ge1JlcG88TT59IEEgcmVwb3NpdG9yeSBmb3IgdGhlIG1vZGVsIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhXG4gKiAgIHBhcnRpY2lwYW50IFJlZmxlY3RcbiAqICAgcGFydGljaXBhbnQgVmFsaWRhdGlvblxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gKlxuICogICBDYWxsZXItPj5yZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YTogbW9kZWwsIHByb3BlcnR5S2V5XG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBHZXQgYWxsb3dlZFR5cGVzIGFycmF5XG4gKiAgIHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhLT4+cmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGE6IGZpbmQgY29uc3RydWN0b3JOYW1lIG5vdCBpbiBjb21tb21UeXBlc1xuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiBjaGVjayBpZiBjb25zdHJ1Y3Rvck5hbWUgZXhpc3RzXG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+Pk1vZGVsOiBnZXQoY29uc3RydWN0b3JOYW1lKVxuICogICBNb2RlbC0tPj5yZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YTogY29uc3RydWN0b3JcbiAqICAgcmVwb3NpdG9yeUZyb21UeXBlTWV0YWRhdGEtPj5yZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YTogY2hlY2sgaWYgY29uc3RydWN0b3IgZXhpc3RzXG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0+PlJlcG9zaXRvcnk6IGZvck1vZGVsKGNvbnN0cnVjdG9yKVxuICogICBSZXBvc2l0b3J5LS0+PnJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhOiByZXBvXG4gKlxuICogICByZXBvc2l0b3J5RnJvbVR5cGVNZXRhZGF0YS0tPj5DYWxsZXI6IHJlcG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnlGcm9tVHlwZU1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNLFxuICBwcm9wZXJ0eUtleToga2V5b2YgTSxcbiAgYWxpYXM/OiBzdHJpbmdcbik6IFJlcG88TT4ge1xuICBpZiAoIW1vZGVsKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBtb2RlbCB3YXMgcHJvdmlkZWQgdG8gZ2V0IHJlcG9zaXRvcnlcIik7XG4gIGxldCBhbGxvd2VkVHlwZXM7XG5cbiAgbGV0IGNvbnN0ciA9IG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbC5jb25zdHJ1Y3RvciA6IChtb2RlbCBhcyBhbnkpO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW3Byb3BlcnR5S2V5XSkgfHwgbW9kZWxbcHJvcGVydHlLZXldIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgY29uc3QgY3VzdG9tVHlwZXMgPSBNZXRhZGF0YS5nZXQoXG4gICAgICBjb25zdHIsXG4gICAgICBNZXRhZGF0YS5rZXkoXG4gICAgICAgIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QsXG4gICAgICAgIHByb3BlcnR5S2V5IGFzIHN0cmluZyxcbiAgICAgICAgVmFsaWRhdGlvbktleXMuTElTVFxuICAgICAgKVxuICAgICk/LmNsYXp6O1xuXG4gICAgaWYgKCFjdXN0b21UeXBlcylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIGZpbmQgdHlwZXMgZGVjb3JhdG9ycyBmb3IgcHJvcGVydHkgJHtwcm9wZXJ0eUtleSBhcyBzdHJpbmd9YFxuICAgICAgKTtcblxuICAgIGFsbG93ZWRUeXBlcyA9IChcbiAgICAgIEFycmF5LmlzQXJyYXkoY3VzdG9tVHlwZXMpID8gWy4uLmN1c3RvbVR5cGVzXSA6IFtjdXN0b21UeXBlc11cbiAgICApLm1hcCgodCkgPT4gKHR5cGVvZiB0ID09PSBcImZ1bmN0aW9uXCIgJiYgISh0IGFzIGFueSkubmFtZSA/IHQoKSA6IHQpKTtcbiAgfSBlbHNlIGlmIChNb2RlbC5yZWxhdGlvbnMoY29uc3RyKS5pbmNsdWRlcyhwcm9wZXJ0eUtleSBhcyBzdHJpbmcpKSB7XG4gICAgLy8gb25lVG9PbmVcbiAgICBhbGxvd2VkVHlwZXMgPSBNZXRhZGF0YS5hbGxvd2VkVHlwZXMoY29uc3RyLCBwcm9wZXJ0eUtleSBhcyBzdHJpbmcpO1xuICB9IGVsc2Uge1xuICAgIGFsbG93ZWRUeXBlcyA9IE1ldGFkYXRhLmdldFByb3BEZXNpZ25UeXBlcyhcbiAgICAgIG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbC5jb25zdHJ1Y3RvciA6IChtb2RlbCBhcyBhbnkpLFxuICAgICAgcHJvcGVydHlLZXkgYXMgc3RyaW5nXG4gICAgKT8uZGVzaWduVHlwZXM7XG4gIH1cblxuICBjb25zdHIgPSBhbGxvd2VkVHlwZXM/LmZpbmQoXG4gICAgKHQpID0+ICFjb21tb21UeXBlcy5pbmNsdWRlcyhgJHt0Lm5hbWV9YC50b0xvd2VyQ2FzZSgpKVxuICApO1xuXG4gIGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKGNvbnN0ciwgYWxpYXMpIGFzIGFueTtcblxuICBpZiAoY29uc3RyICE9PSByZXBvLmNsYXNzKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgYEludmFsaWQgcmVwb3NpdG9yeSBjbGFzcyBmb3IgJHtwcm9wZXJ0eUtleSBhcyBzdHJpbmd9YFxuICAgICk7XG5cbiAgcmV0dXJuIHJlcG87XG59XG4iXX0=
|
|
@@ -470,4 +470,4 @@ export function relation(relationKey, meta) {
|
|
|
470
470
|
})
|
|
471
471
|
.apply();
|
|
472
472
|
}
|
|
473
|
-
//# sourceMappingURL=decorators.js.map
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbC9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLFFBQVEsRUFDUixjQUFjLEVBQ2QsUUFBUSxFQUNSLFFBQVEsRUFDUixTQUFTLEVBQ1QsYUFBYSxFQUNiLFNBQVMsR0FDVixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxLQUFLLElBQUksUUFBUSxFQUNqQixRQUFRLEVBQ1IsUUFBUSxJQUFJLFdBQVcsRUFDdkIsVUFBVSxFQUNWLFlBQVksRUFFWixJQUFJLEVBQ0osUUFBUSxFQUNSLEtBQUssR0FDTixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsc0NBQWlDO0FBRTNELE9BQU8sRUFBRSxjQUFjLEVBQUUscUNBQWdDO0FBQ3pELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGdDQUEyQjtBQU8vQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixRQUFRLElBQUksR0FBRyxHQUNoQiwwQkFBdUI7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLDZCQUF3QjtBQUdyRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBZ0IsSUFBVztJQUM5QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztTQUN6QyxNQUFNLENBQUM7UUFDTixTQUFTLEVBQUUs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QUFVLHdCQUF3QjtJQUN0QyxPQUFPLFlBQVksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxXQUFtQixFQUFFLElBQXVCO0lBQ25FLFNBQVMsUUFBUSxDQUFDLFdBQW1CLEVBQUUsSUFBdUI7UUFDNUQsT0FBTyxTQUFTLFFBQVEsQ0FBQyxHQUFRLEVBQUUsSUFBUztZQUMxQyxZQUFZLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzQyxPQUFPLFlBQVksQ0FDakIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUU7Z0JBQ3RCLEdBQUcsRUFBRSxXQUFXO2FBQ2pCLENBQUMsQ0FDSCxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQztTQUM3QyxNQUFNLENBQUM7UUFDTixTQUFTLEVBQUUsUUFBUTtRQUNuQixJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO0tBQzFCLENBQUM7U0FDRCxLQUFLLEVBQUUsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhZnRlckFueSxcbiAgQ29uZmxpY3RFcnJvcixcbiAgb25DcmVhdGUsXG4gIG9uQ3JlYXRlVXBkYXRlLFxuICBvbkRlbGV0ZSxcbiAgb25VcGRhdGUsXG4gIGdlbmVyYXRlZCxcbiAgT3BlcmF0aW9uS2V5cyxcbiAgdGltZXN0YW1wLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIGFwcGx5IGFzIG5ld0FwcGx5LFxuICBNZXRhZGF0YSxcbiAgbWV0YWRhdGEgYXMgbmV3TWV0YWRhdGEsXG4gIERlY29yYXRpb24sXG4gIHByb3BNZXRhZGF0YSxcbiAgQ29uc3RydWN0b3IsXG4gIHByb3AsXG4gIG1ldGFkYXRhLFxuICBhcHBseSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBDYXNjYWRlTWV0YWRhdGEgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS90eXBlc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENhc2NhZGUgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9jb25zdGFudHNcIjtcbmltcG9ydCB7IGFzeW5jLCBsaXN0LCBNb2RlbCwgdHlwZSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUmVwbyB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IENvbmRpdGlvbiB9IGZyb20gXCIuLi9xdWVyeS9Db25kaXRpb25cIjtcbmltcG9ydCB7XG4gIEpvaW5Db2x1bW5PcHRpb25zLFxuICBKb2luVGFibGVNdWx0aXBsZUNvbHVtbnNPcHRpb25zLFxuICBKb2luVGFibGVPcHRpb25zLFxuICBSZWxhdGlvbnNNZXRhZGF0YSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIG1hbnlUb01hbnlPbkNyZWF0ZSxcbiAgbWFueVRvT25lT25DcmVhdGUsXG4gIG1hbnlUb09uZU9uRGVsZXRlLFxuICBtYW55VG9PbmVPblVwZGF0ZSxcbiAgY2FzY2FkZURlbGV0ZSxcbiAgb25lVG9NYW55T25DcmVhdGVVcGRhdGUsXG4gIG9uZVRvTWFueU9uRGVsZXRlLFxuICBvbmVUb01hbnlPblVwZGF0ZSxcbiAgb25lVG9PbmVPbkNyZWF0ZSxcbiAgb25lVG9PbmVPbkRlbGV0ZSxcbiAgb25lVG9PbmVPblVwZGF0ZSxcbiAgcG9wdWxhdGUgYXMgcG9wLFxufSBmcm9tIFwiLi9jb25zdHJ1Y3Rpb25cIjtcbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciB9IGZyb20gXCIuLi91dGlscy9lcnJvcnNcIjtcbmltcG9ydCB7IENvbnRleHRPZiB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS90eXBlc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTcGVjaWZpZXMgdGhlIGRhdGFiYXNlIHRhYmxlIG5hbWUgZm9yIGEgbW9kZWxcbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IHNldHMgdGhlIHRhYmxlIG5hbWUgZm9yIGEgbW9kZWwgY2xhc3MgaW4gdGhlIGRhdGFiYXNlXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cyAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSBpbiB0aGUgZGF0YWJhc2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3NcbiAqIEBmdW5jdGlvbiB0YWJsZVxuICogQGNhdGVnb3J5IENsYXNzIERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlPE9QVFMgPSBzdHJpbmc+KG9wdHM/OiBPUFRTKSB7XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihQZXJzaXN0ZW5jZUtleXMuVEFCTEUpXG4gICAgLmRlZmluZSh7XG4gICAgICBkZWNvcmF0b3I6IGZ1bmN0aW9uIHRhYmxlKG9wdHM6IE9QVFMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRhYmxlKHRhcmdldDogYW55KSB7XG4gICAgICAgICAgTWV0YWRhdGEuc2V0KFxuICAgICAgICAgICAgUGVyc2lzdGVuY2VLZXlzLlRBQkxFLFxuICAgICAgICAgICAgb3B0cyB8fCB0YXJnZXQubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgdGFyZ2V0XG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbWV0YWRhdGEoXG4gICAgICAgICAgICBQZXJzaXN0ZW5jZUtleXMuVEFCTEUsXG4gICAgICAgICAgICBvcHRzIHx8IHRhcmdldC5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICApKHRhcmdldCk7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgYXJnczogW29wdHNdLFxuICAgIH0pXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNwZWNpZmllcyB0aGUgZGF0YWJhc2UgY29sdW1uIG5hbWUgZm9yIGEgbW9kZWwgcHJvcGVydHlcbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IG1hcHMgYSBtb2RlbCBwcm9wZXJ0eSB0byBhIHNwZWNpZmljIGNvbHVtbiBuYW1lIGluIHRoZSBkYXRhYmFzZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbk5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY29sdW1uIGluIHRoZSBkYXRhYmFzZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzcyBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIGNvbHVtblxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtbjxPUFRTID0gc3RyaW5nPihjb2x1bW5OYW1lPzogT1BUUykge1xuICByZXR1cm4gRGVjb3JhdGlvbi5mb3IoUGVyc2lzdGVuY2VLZXlzLkNPTFVNTilcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogZnVuY3Rpb24gY29sdW1uKGMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbHVtbihvYmo6IGFueSwgYXR0cjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BNZXRhZGF0YShcbiAgICAgICAgICAgIE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuQ09MVU1OLCBhdHRyKSxcbiAgICAgICAgICAgIGMgfHwgYXR0clxuICAgICAgICAgICkob2JqLCBhdHRyKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBhcmdzOiBbY29sdW1uTmFtZV0sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW5mb3JjZXMgdW5pcXVlbmVzcyBjb25zdHJhaW50IGR1cmluZyBtb2RlbCBjcmVhdGlvbiBhbmQgdXBkYXRlXG4gKiBAc3VtbWFyeSBJbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGJ5IHRoZSB1bmlxdWUgZGVjb3JhdG9yIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgdmFsdWUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGRhdGFiYXNlXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIGV4dGVuZGluZyBSZXBvPE0sIEYsIEM+XG4gKiBAdGVtcGxhdGUgViAtIFRoZSBtZXRhZGF0YSB0eXBlXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZSBleHRlbmRpbmcgQ29udGV4dDxGPlxuICogQHBhcmFtIHtSfSB0aGlzIC0gVGhlIHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1Z9IGRhdGEgLSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gY2hlY2sgZm9yIHVuaXF1ZW5lc3NcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgYmVpbmcgY3JlYXRlZCBvciB1cGRhdGVkXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjaGVjayBpcyBjb21wbGV0ZSBvciByZWplY3RzIHdpdGggYSBDb25mbGljdEVycm9yXG4gKiBAZnVuY3Rpb24gdW5pcXVlT25DcmVhdGVVcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5pcXVlT25DcmVhdGVVcGRhdGU8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgZGF0YTogb2JqZWN0LFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCEobW9kZWwgYXMgYW55KVtrZXldKSByZXR1cm47XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy5zZWxlY3QoKVxuICAgIC53aGVyZShDb25kaXRpb24uYXR0cmlidXRlKGtleSkuZXEobW9kZWxba2V5XSkpXG4gICAgLmV4ZWN1dGUoKTtcbiAgaWYgKGV4aXN0aW5nLmxlbmd0aClcbiAgICB0aHJvdyBuZXcgQ29uZmxpY3RFcnJvcihcbiAgICAgIGBtb2RlbCBhbHJlYWR5IGV4aXN0cyB3aXRoIHByb3BlcnR5ICR7a2V5IGFzIHN0cmluZ30gZXF1YWwgdG8gJHtKU09OLnN0cmluZ2lmeSgobW9kZWwgYXMgYW55KVtrZXldLCB1bmRlZmluZWQsIDIpfWBcbiAgICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUYWdzIGEgcHJvcGVydHkgYXMgdW5pcXVlXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBlbnN1cmVzIGEgcHJvcGVydHkgdmFsdWUgaXMgdW5pcXVlIGFjcm9zcyBhbGwgaW5zdGFuY2VzIG9mIGEgbW9kZWwgaW4gdGhlIGRhdGFiYXNlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhIGNsYXNzIHByb3BlcnR5XG4gKiBAZnVuY3Rpb24gdW5pcXVlXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAdW5pcXVlKClcbiAqICAgQHJlcXVpcmVkKClcbiAqICAgdXNlcm5hbWUhOiBzdHJpbmc7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZSgpIHtcbiAgY29uc3Qga2V5ID0gUGVyc2lzdGVuY2VLZXlzLlVOSVFVRTtcbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKFxuICAgICAgYXN5bmMoKSxcbiAgICAgIG9uQ3JlYXRlVXBkYXRlKHVuaXF1ZU9uQ3JlYXRlVXBkYXRlKSxcbiAgICAgIHByb3BNZXRhZGF0YShrZXksIHt9KVxuICAgIClcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSGFuZGxlcyB1c2VyIGlkZW50aWZpY2F0aW9uIGZvciBvd25lcnNoaXAgdHJhY2tpbmdcbiAqIEBzdW1tYXJ5IEludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIGNyZWF0ZWRCeSBhbmQgdXBkYXRlZEJ5IGRlY29yYXRvcnMgdG8gc2V0IG93bmVyc2hpcCBpbmZvcm1hdGlvblxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJlcG9zaXRvcnkgdHlwZSBleHRlbmRpbmcgUmVwbzxNLCBGLCBDPlxuICogQHRlbXBsYXRlIFYgLSBUaGUgcmVsYXRpb25zIG1ldGFkYXRhIHR5cGUgZXh0ZW5kaW5nIFJlbGF0aW9uc01ldGFkYXRhXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGVcbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZSBleHRlbmRpbmcgQ29udGV4dDxGPlxuICogQHBhcmFtIHtSfSB0aGlzIC0gVGhlIHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqIEBwYXJhbSB7Q29udGV4dDxGPn0gY29udGV4dCAtIFRoZSBjb250ZXh0IGZvciB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0ge1Z9IGRhdGEgLSBUaGUgbWV0YWRhdGEgZm9yIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gc3RvcmUgdGhlIHVzZXIgaWRlbnRpZmllclxuICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBiZWluZyBjcmVhdGVkIG9yIHVwZGF0ZWRcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlamVjdHMgd2l0aCBhbiBBdXRob3JpemF0aW9uRXJyb3IgaWYgdXNlciBpZGVudGlmaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkXG4gKiBAZnVuY3Rpb24gY3JlYXRlZEJ5T25DcmVhdGVVcGRhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlZEJ5T25DcmVhdGVVcGRhdGU8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG88TT4sXG4+KFxuICB0aGlzOiBSLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGNvbnRleHQ6IENvbnRleHRPZjxSPixcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBrZXk6IGtleW9mIE0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFxuICAgIFwiVGhpcyBhZGFwdGVyIGRvZXMgbm90IHN1cHBvcnQgdXNlciBpZGVudGlmaWNhdGlvblwiXG4gICk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRyYWNrcyB0aGUgY3JlYXRvciBvZiBhIG1vZGVsIGluc3RhbmNlXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIHByb3BlcnR5IHRvIHN0b3JlIHRoZSBpZGVudGlmaWVyIG9mIHRoZSB1c2VyIHdobyBjcmVhdGVkIHRoZSBtb2RlbCBpbnN0YW5jZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzcyBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIGNyZWF0ZWRCeVxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBEb2N1bWVudCBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEBjcmVhdGVkQnkoKVxuICogICBjcmVhdG9yITogc3RyaW5nO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVkQnkoKSB7XG4gIGZ1bmN0aW9uIGNyZWF0ZWRCeSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlZEJ5KHRhcmdldDogb2JqZWN0LCBwcm9wPzogYW55KSB7XG4gICAgICByZXR1cm4gYXBwbHkoXG4gICAgICAgIG9uQ3JlYXRlKGNyZWF0ZWRCeU9uQ3JlYXRlVXBkYXRlKSxcbiAgICAgICAgcHJvcE1ldGFkYXRhKFBlcnNpc3RlbmNlS2V5cy5DUkVBVEVEX0JZLCBwcm9wKSxcbiAgICAgICAgZ2VuZXJhdGVkKFBlcnNpc3RlbmNlS2V5cy5DUkVBVEVEX0JZKVxuICAgICAgKSh0YXJnZXQsIHByb3ApO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gRGVjb3JhdGlvbi5mb3IoUGVyc2lzdGVuY2VLZXlzLkNSRUFURURfQlkpXG4gICAgLmRlZmluZSh7XG4gICAgICBkZWNvcmF0b3I6IGNyZWF0ZWRCeSxcbiAgICAgIGFyZ3M6IFtdLFxuICAgIH0pXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRyYWNrcyB0aGUgbGFzdCB1cGRhdGVyIG9mIGEgbW9kZWwgaW5zdGFuY2VcbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IG1hcmtzIGEgcHJvcGVydHkgdG8gc3RvcmUgdGhlIGlkZW50aWZpZXIgb2YgdGhlIHVzZXIgd2hvIGxhc3QgdXBkYXRlZCB0aGUgbW9kZWwgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgcHJvcGVydHlcbiAqIEBmdW5jdGlvbiB1cGRhdGVkQnlcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgRG9jdW1lbnQgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAdXBkYXRlZEJ5KClcbiAqICAgbGFzdEVkaXRvciE6IHN0cmluZztcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlZEJ5KCkge1xuICBmdW5jdGlvbiB1cGRhdGVkQnkoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZWRCeSh0YXJnZXQ6IG9iamVjdCwgcHJvcD86IGFueSkge1xuICAgICAgcmV0dXJuIGFwcGx5KFxuICAgICAgICBvblVwZGF0ZShjcmVhdGVkQnlPbkNyZWF0ZVVwZGF0ZSksXG4gICAgICAgIHByb3BNZXRhZGF0YShQZXJzaXN0ZW5jZUtleXMuVVBEQVRFRF9CWSwgcHJvcCksXG4gICAgICAgIGdlbmVyYXRlZChQZXJzaXN0ZW5jZUtleXMuVVBEQVRFRF9CWSlcbiAgICAgICkodGFyZ2V0LCBwcm9wKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihQZXJzaXN0ZW5jZUtleXMuVVBEQVRFRF9CWSlcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogdXBkYXRlZEJ5LFxuICAgICAgYXJnczogW10sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZWRBdCgpIHtcbiAgcmV0dXJuIHRpbWVzdGFtcChbT3BlcmF0aW9uS2V5cy5DUkVBVEVdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZWRBdCgpIHtcbiAgcmV0dXJuIHRpbWVzdGFtcCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGtUeXBlcyhtb2RlbDogQ29uc3RydWN0b3IgfCAoKCkgPT4gQ29uc3RydWN0b3IpKSB7XG4gIHJldHVybiBbXG4gICAgLy8gdGhpcyBuZWVkcyB0byByZXR1cm4gYSBmdW5jdGlvbiB0byBrZWVwIGNyb3NzIHJlZmVyZW5jZXMgcG9zc2libGUgZXZlbiBpZiBjdXJyZW50bHkgd2Ugb25seSBoYXZlIGFjY2VzcyB0byBmaXJzdCBkZWZpbmVkIHR5cGVcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlZENsYXp6ID1cbiAgICAgICAgdHlwZW9mIG1vZGVsID09PSBcImZ1bmN0aW9uXCIgJiYgbW9kZWwubmFtZVxuICAgICAgICAgID8gKG1vZGVsIGFzIENvbnN0cnVjdG9yKVxuICAgICAgICAgIDogKG1vZGVsIGFzICgpID0+IENvbnN0cnVjdG9yKSgpO1xuICAgICAgY29uc3QgcGsgPSBNb2RlbC5wayhyZXNvbHZlZENsYXp6IGFzIENvbnN0cnVjdG9yKTtcbiAgICAgIHJldHVybiAoTWV0YWRhdGEuYWxsb3dlZFR5cGVzKFxuICAgICAgICByZXNvbHZlZENsYXp6IGFzIENvbnN0cnVjdG9yLFxuICAgICAgICBwayBhcyBzdHJpbmdcbiAgICAgICkgfHwgW10pWzBdO1xuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgYSBvbmUtdG8tb25lIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG1vZGVsc1xuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgZXN0YWJsaXNoZXMgYSBvbmUtdG8tb25lIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjdXJyZW50IG1vZGVsIGFuZCBhbm90aGVyIG1vZGVsXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSByZWxhdGVkIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBjbGF6eiAtIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgcmVsYXRlZCBtb2RlbCBjbGFzc1xuICogQHBhcmFtIHtDYXNjYWRlTWV0YWRhdGF9IFtjYXNjYWRlT3B0aW9ucz1EZWZhdWx0Q2FzY2FkZV0gLSBPcHRpb25zIGZvciBjYXNjYWRpbmcgb3BlcmF0aW9ucyAoY3JlYXRlLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BvcHVsYXRlPXRydWVdIC0gSWYgdHJ1ZSwgYXV0b21hdGljYWxseSBwb3B1bGF0ZXMgdGhlIHJlbGF0aW9uc2hpcCB3aGVuIHRoZSBtb2RlbCBpcyByZXRyaWV2ZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgcHJvcGVydHlcbiAqIEBmdW5jdGlvbiBvbmVUb09uZVxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBVc2VyIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAqICAgQG9uZVRvT25lKFByb2ZpbGUpXG4gKiAgIHByb2ZpbGUhOiBzdHJpbmcgfCBQcm9maWxlO1xuICogfVxuICpcbiAqIGNsYXNzIFByb2ZpbGUgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICBiaW8hOiBzdHJpbmc7XG4gKiB9XG4gKiBgYGBcbiAqIEBzZWUgb25lVG9NYW55XG4gKiBAc2VlIG1hbnlUb09uZVxuICovXG5leHBvcnQgZnVuY3Rpb24gb25lVG9PbmU8TSBleHRlbmRzIE1vZGVsPihcbiAgY2xheno6IENvbnN0cnVjdG9yPE0+IHwgKCgpID0+IENvbnN0cnVjdG9yPE0+KSxcbiAgY2FzY2FkZU9wdGlvbnM6IENhc2NhZGVNZXRhZGF0YSA9IERlZmF1bHRDYXNjYWRlLFxuICBwb3B1bGF0ZTogYm9vbGVhbiA9IHRydWUsXG4gIGpvaW5Db2x1bW5PcHRzPzogSm9pbkNvbHVtbk9wdGlvbnMsXG4gIGZrPzogc3RyaW5nXG4pIHtcbiAgY29uc3Qga2V5ID0gUGVyc2lzdGVuY2VLZXlzLk9ORV9UT19PTkU7XG4gIGZ1bmN0aW9uIG9uZVRvT25lRGVjKFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPiB8ICgoKSA9PiBDb25zdHJ1Y3RvcjxNPiksXG4gICAgY2FzY2FkZTogQ2FzY2FkZU1ldGFkYXRhLFxuICAgIHBvcHVsYXRlOiBib29sZWFuLFxuICAgIGpvaW5Db2x1bW5PcHRzPzogSm9pbkNvbHVtbk9wdGlvbnMsXG4gICAgZms/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgbWV0YTogUmVsYXRpb25zTWV0YWRhdGEgPSB7XG4gICAgICBjbGFzczogY2xhenosXG4gICAgICBjYXNjYWRlOiBjYXNjYWRlLFxuICAgICAgcG9wdWxhdGU6IHBvcHVsYXRlLFxuICAgIH07XG4gICAgaWYgKGpvaW5Db2x1bW5PcHRzKSBtZXRhLmpvaW5UYWJsZSA9IGpvaW5Db2x1bW5PcHRzO1xuICAgIGlmIChmaykgbWV0YS5uYW1lID0gZms7XG4gICAgY29uc3QgcGtUeXBlcyA9IGdldFBrVHlwZXMoY2xhenopO1xuICAgIGNvbnN0IGRlY3MgPSBbXG4gICAgICBwcm9wKCksXG4gICAgICByZWxhdGlvbihrZXksIG1ldGEpLFxuICAgICAgdHlwZShbY2xhenosIC4uLnBrVHlwZXNdKSxcbiAgICAgIG9uQ3JlYXRlKG9uZVRvT25lT25DcmVhdGUsIG1ldGEsIHsgcHJpb3JpdHk6IDcwIH0pLFxuICAgICAgb25VcGRhdGUob25lVG9PbmVPblVwZGF0ZSwgbWV0YSwgeyBwcmlvcml0eTogNzAgfSksXG4gICAgICBvbkRlbGV0ZShvbmVUb09uZU9uRGVsZXRlLCBtZXRhLCB7IHByaW9yaXR5OiA3MCB9KSxcbiAgICAgIG9uVXBkYXRlKGNhc2NhZGVEZWxldGUsIG1ldGEsIHsgcHJpb3JpdHk6IDgwIH0pLFxuICAgICAgYWZ0ZXJBbnkocG9wLCBtZXRhLCB7IHByaW9yaXR5OiA3MCB9KSxcbiAgICBdO1xuICAgIHJldHVybiBhcHBseSguLi5kZWNzKTtcbiAgfVxuXG4gIHJldHVybiBEZWNvcmF0aW9uLmZvcihrZXkpXG4gICAgLmRlZmluZSh7XG4gICAgICBkZWNvcmF0b3I6IG9uZVRvT25lRGVjLFxuICAgICAgYXJnczogW2NsYXp6LCBjYXNjYWRlT3B0aW9ucywgcG9wdWxhdGUsIGpvaW5Db2x1bW5PcHRzLCBma10sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIG9uZS10by1tYW55IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG1vZGVsc1xuICogQHN1bW1hcnkgRGVjb3JhdG9yIHRoYXQgZXN0YWJsaXNoZXMgYSBvbmUtdG8tbWFueSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY3VycmVudCBtb2RlbCBhbmQgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIGFub3RoZXIgbW9kZWxcbiAqIEB0ZW1wbGF0ZSBNIC0gVGhlIHJlbGF0ZWQgbW9kZWwgdHlwZSBleHRlbmRpbmcgTW9kZWxcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IGNsYXp6IC0gVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSByZWxhdGVkIG1vZGVsIGNsYXNzXG4gKiBAcGFyYW0ge0Nhc2NhZGVNZXRhZGF0YX0gW2Nhc2NhZGVPcHRpb25zPURlZmF1bHRDYXNjYWRlXSAtIE9wdGlvbnMgZm9yIGNhc2NhZGluZyBvcGVyYXRpb25zIChjcmVhdGUsIHVwZGF0ZSwgZGVsZXRlKVxuICogQHBhcmFtIHtib29sZWFufSBbcG9wdWxhdGU9dHJ1ZV0gLSBJZiB0cnVlLCBhdXRvbWF0aWNhbGx5IHBvcHVsYXRlcyB0aGUgcmVsYXRpb25zaGlwIHdoZW4gdGhlIG1vZGVsIGlzIHJldHJpZXZlZFxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzcyBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIG9uZVRvTWFueVxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBBdXRob3IgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICBuYW1lITogc3RyaW5nO1xuICpcbiAqICAgQG9uZVRvTWFueShCb29rKVxuICogICBib29rcyE6IHN0cmluZ1tdIHwgQm9va1tdO1xuICogfVxuICpcbiAqIGNsYXNzIEJvb2sgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICB0aXRsZSE6IHN0cmluZztcbiAqIH1cbiAqIGBgYFxuICogQHNlZSBvbmVUb09uZVxuICogQHNlZSBtYW55VG9PbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uZVRvTWFueTxNIGV4dGVuZHMgTW9kZWw+KFxuICBjbGF6ejogQ29uc3RydWN0b3I8TT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8TT4pLFxuICBjYXNjYWRlT3B0aW9uczogQ2FzY2FkZU1ldGFkYXRhID0gRGVmYXVsdENhc2NhZGUsXG4gIHBvcHVsYXRlOiBib29sZWFuID0gdHJ1ZSxcbiAgam9pblRhYmxlT3B0cz86IEpvaW5UYWJsZU9wdGlvbnMgfCBKb2luVGFibGVNdWx0aXBsZUNvbHVtbnNPcHRpb25zLFxuICBmaz86IHN0cmluZ1xuKSB7XG4gIGNvbnN0IGtleSA9IFBlcnNpc3RlbmNlS2V5cy5PTkVfVE9fTUFOWTtcblxuICBmdW5jdGlvbiBvbmVUb01hbnlEZWMoXG4gICAgY2xheno6IENvbnN0cnVjdG9yPE0+IHwgKCgpID0+IENvbnN0cnVjdG9yPE0+KSxcbiAgICBjYXNjYWRlOiBDYXNjYWRlTWV0YWRhdGEsXG4gICAgcG9wdWxhdGU6IGJvb2xlYW4sXG4gICAgam9pblRhYmxlT3B0cz86IEpvaW5UYWJsZU9wdGlvbnMgfCBKb2luVGFibGVNdWx0aXBsZUNvbHVtbnNPcHRpb25zLFxuICAgIGZrPzogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBSZWxhdGlvbnNNZXRhZGF0YSA9IHtcbiAgICAgIGNsYXNzOiBjbGF6eixcbiAgICAgIGNhc2NhZGU6IGNhc2NhZGUsXG4gICAgICBwb3B1bGF0ZTogcG9wdWxhdGUsXG4gICAgfTtcbiAgICBpZiAoam9pblRhYmxlT3B0cykgbWV0YWRhdGEuam9pblRhYmxlID0gam9pblRhYmxlT3B0cztcbiAgICBpZiAoZmspIG1ldGFkYXRhLm5hbWUgPSBmaztcbiAgICBjb25zdCBwa1R5cGVzID0gZ2V0UGtUeXBlcyhjbGF6eik7XG4gICAgY29uc3QgZGVjcyA9IFtcbiAgICAgIHByb3AoKSxcbiAgICAgIHJlbGF0aW9uKGtleSwgbWV0YWRhdGEpLFxuICAgICAgbGlzdChbY2xhenosIC4uLnBrVHlwZXNdKSxcbiAgICAgIG9uQ3JlYXRlKG9uZVRvTWFueU9uQ3JlYXRlVXBkYXRlLCBtZXRhZGF0YSwgeyBwcmlvcml0eTogNzAgfSksXG4gICAgICBvblVwZGF0ZShvbmVUb01hbnlPblVwZGF0ZSwgbWV0YWRhdGEsIHsgcHJpb3JpdHk6IDcwIH0pLFxuICAgICAgb25EZWxldGUob25lVG9NYW55T25EZWxldGUsIG1ldGFkYXRhLCB7IHByaW9yaXR5OiA3MCB9KSxcbiAgICAgIG9uVXBkYXRlKGNhc2NhZGVEZWxldGUsIG1ldGFkYXRhLCB7IHByaW9yaXR5OiA4MCB9KSxcbiAgICAgIGFmdGVyQW55KHBvcCwgbWV0YWRhdGEsIHsgcHJpb3JpdHk6IDcwIH0pLFxuICAgIF07XG4gICAgcmV0dXJuIGFwcGx5KC4uLmRlY3MpO1xuICB9XG5cbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogb25lVG9NYW55RGVjLFxuICAgICAgYXJnczogW2NsYXp6LCBjYXNjYWRlT3B0aW9ucywgcG9wdWxhdGUsIGpvaW5UYWJsZU9wdHMsIGZrXSxcbiAgICB9KVxuICAgIC5hcHBseSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgbWFueS10by1vbmUgcmVsYXRpb25zaGlwIGJldHdlZW4gbW9kZWxzXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBlc3RhYmxpc2hlcyBhIG1hbnktdG8tb25lIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgY3VycmVudCBtb2RlbCBhbmQgYW5vdGhlciBtb2RlbFxuICogQHRlbXBsYXRlIE0gLSBUaGUgcmVsYXRlZCBtb2RlbCB0eXBlIGV4dGVuZGluZyBNb2RlbFxuICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gY2xhenogLSBUaGUgY29uc3RydWN0b3Igb2YgdGhlIHJlbGF0ZWQgbW9kZWwgY2xhc3NcbiAqIEBwYXJhbSB7Q2FzY2FkZU1ldGFkYXRhfSBbY2FzY2FkZU9wdGlvbnM9RGVmYXVsdENhc2NhZGVdIC0gT3B0aW9ucyBmb3IgY2FzY2FkaW5nIG9wZXJhdGlvbnMgKGNyZWF0ZSwgdXBkYXRlLCBkZWxldGUpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwb3B1bGF0ZT10cnVlXSAtIElmIHRydWUsIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGVzIHRoZSByZWxhdGlvbnNoaXAgd2hlbiB0aGUgbW9kZWwgaXMgcmV0cmlldmVkXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhIGNsYXNzIHByb3BlcnR5XG4gKiBAZnVuY3Rpb24gbWFueVRvT25lXG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIEJvb2sgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICB0aXRsZSE6IHN0cmluZztcbiAqXG4gKiAgIEBtYW55VG9PbmUoQXV0aG9yKVxuICogICBhdXRob3IhOiBzdHJpbmcgfCBBdXRob3I7XG4gKiB9XG4gKlxuICogY2xhc3MgQXV0aG9yIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAqICAgQHJlcXVpcmVkKClcbiAqICAgbmFtZSE6IHN0cmluZztcbiAqIH1cbiAqIGBgYFxuICogQHNlZSBvbmVUb01hbnlcbiAqIEBzZWUgb25lVG9PbmVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hbnlUb09uZTxNIGV4dGVuZHMgTW9kZWw+KFxuICBjbGF6ejogQ29uc3RydWN0b3I8TT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8TT4pLFxuICBjYXNjYWRlT3B0aW9uczogQ2FzY2FkZU1ldGFkYXRhID0gRGVmYXVsdENhc2NhZGUsXG4gIHBvcHVsYXRlID0gdHJ1ZSxcbiAgam9pblRhYmxlT3B0cz86IEpvaW5UYWJsZU9wdGlvbnMgfCBKb2luVGFibGVNdWx0aXBsZUNvbHVtbnNPcHRpb25zLFxuICBmaz86IHN0cmluZ1xuKSB7XG4gIC8vIE1vZGVsLnJlZ2lzdGVyKGNsYXp6IGFzIENvbnN0cnVjdG9yPE0+KTtcbiAgY29uc3Qga2V5ID0gUGVyc2lzdGVuY2VLZXlzLk1BTllfVE9fT05FO1xuXG4gIGZ1bmN0aW9uIG1hbnlUb09uZURlYyhcbiAgICBjbGF6ejogQ29uc3RydWN0b3I8TT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8TT4pLFxuICAgIGNhc2NhZGU6IENhc2NhZGVNZXRhZGF0YSxcbiAgICBwb3B1bGF0ZTogYm9vbGVhbixcbiAgICBqb2luVGFibGVPcHRzPzogSm9pblRhYmxlT3B0aW9ucyB8IEpvaW5UYWJsZU11bHRpcGxlQ29sdW1uc09wdGlvbnMsXG4gICAgZms/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFJlbGF0aW9uc01ldGFkYXRhID0ge1xuICAgICAgY2xhc3M6IGNsYXp6LFxuICAgICAgY2FzY2FkZTogY2FzY2FkZSxcbiAgICAgIHBvcHVsYXRlOiBwb3B1bGF0ZSxcbiAgICB9O1xuICAgIGlmIChqb2luVGFibGVPcHRzKSBtZXRhZGF0YS5qb2luVGFibGUgPSBqb2luVGFibGVPcHRzO1xuICAgIGlmIChmaykgbWV0YWRhdGEubmFtZSA9IGZrO1xuICAgIGNvbnN0IHBrVHlwZXMgPSBnZXRQa1R5cGVzKGNsYXp6KTtcbiAgICBjb25zdCBkZWNzID0gW1xuICAgICAgcHJvcCgpLFxuICAgICAgcmVsYXRpb24oa2V5LCBtZXRhZGF0YSksXG4gICAgICB0eXBlKFtjbGF6eiwgLi4ucGtUeXBlc10pLFxuICAgICAgb25DcmVhdGUobWFueVRvT25lT25DcmVhdGUsIG1ldGFkYXRhKSxcbiAgICAgIG9uVXBkYXRlKG1hbnlUb09uZU9uVXBkYXRlLCBtZXRhZGF0YSksXG4gICAgICBvbkRlbGV0ZShtYW55VG9PbmVPbkRlbGV0ZSwgbWV0YWRhdGEpLFxuICAgICAgYWZ0ZXJBbnkocG9wLCBtZXRhZGF0YSksXG4gICAgXTtcbiAgICByZXR1cm4gYXBwbHkoLi4uZGVjcyk7XG4gIH1cblxuICByZXR1cm4gRGVjb3JhdGlvbi5mb3Ioa2V5KVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiBtYW55VG9PbmVEZWMsXG4gICAgICBhcmdzOiBbY2xhenosIGNhc2NhZGVPcHRpb25zLCBwb3B1bGF0ZSwgam9pblRhYmxlT3B0cywgZmtdLFxuICAgIH0pXG4gICAgLmFwcGx5KCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmluZXMgYSBtYW55LXRvLW9uZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBtb2RlbHNcbiAqIEBzdW1tYXJ5IERlY29yYXRvciB0aGF0IGVzdGFibGlzaGVzIGEgbWFueS10by1vbmUgcmVsYXRpb25zaGlwIGJldHdlZW4gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBjdXJyZW50IG1vZGVsIGFuZCBhbm90aGVyIG1vZGVsXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSByZWxhdGVkIG1vZGVsIHR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBjbGF6eiAtIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgcmVsYXRlZCBtb2RlbCBjbGFzc1xuICogQHBhcmFtIHtDYXNjYWRlTWV0YWRhdGF9IFtjYXNjYWRlT3B0aW9ucz1EZWZhdWx0Q2FzY2FkZV0gLSBPcHRpb25zIGZvciBjYXNjYWRpbmcgb3BlcmF0aW9ucyAoY3JlYXRlLCB1cGRhdGUsIGRlbGV0ZSlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BvcHVsYXRlPXRydWVdIC0gSWYgdHJ1ZSwgYXV0b21hdGljYWxseSBwb3B1bGF0ZXMgdGhlIHJlbGF0aW9uc2hpcCB3aGVuIHRoZSBtb2RlbCBpcyByZXRyaWV2ZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGRlY29yYXRvciBmdW5jdGlvbiB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgcHJvcGVydHlcbiAqIEBmdW5jdGlvbiBtYW55VG9PbmVcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgQm9vayBleHRlbmRzIEJhc2VNb2RlbCB7XG4gKiAgIEByZXF1aXJlZCgpXG4gKiAgIHRpdGxlITogc3RyaW5nO1xuICpcbiAqICAgQG1hbnlUb09uZShBdXRob3IpXG4gKiAgIGF1dGhvciE6IHN0cmluZyB8IEF1dGhvcjtcbiAqIH1cbiAqXG4gKiBjbGFzcyBBdXRob3IgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICogICBAcmVxdWlyZWQoKVxuICogICBuYW1lITogc3RyaW5nO1xuICogfVxuICogYGBgXG4gKiBAc2VlIG9uZVRvTWFueVxuICogQHNlZSBvbmVUb09uZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFueVRvTWFueTxNIGV4dGVuZHMgTW9kZWw+KFxuICBjbGF6ejogQ29uc3RydWN0b3I8TT4gfCAoKCkgPT4gQ29uc3RydWN0b3I8TT4pLFxuICBjYXNjYWRlT3B0aW9uczogQ2FzY2FkZU1ldGFkYXRhID0gRGVmYXVsdENhc2NhZGUsXG4gIHBvcHVsYXRlID0gdHJ1ZSxcbiAgam9pblRhYmxlT3B0cz86IEpvaW5UYWJsZU9wdGlvbnMgfCBKb2luVGFibGVNdWx0aXBsZUNvbHVtbnNPcHRpb25zLFxuICBmaz86IHN0cmluZ1xuKSB7XG4gIC8vIE1vZGVsLnJlZ2lzdGVyKGNsYXp6IGFzIENvbnN0cnVjdG9yPE0+KTtcbiAgY29uc3Qga2V5ID0gUGVyc2lzdGVuY2VLZXlzLk1BTllfVE9fTUFOWTtcblxuICBmdW5jdGlvbiBtYW55VG9NYW55RGVjKFxuICAgIGNsYXp6OiBDb25zdHJ1Y3RvcjxNPiB8ICgoKSA9PiBDb25zdHJ1Y3RvcjxNPiksXG4gICAgY2FzY2FkZTogQ2FzY2FkZU1ldGFkYXRhLFxuICAgIHBvcHVsYXRlOiBib29sZWFuLFxuICAgIGpvaW5UYWJsZU9wdHM/OiBKb2luVGFibGVPcHRpb25zIHwgSm9pblRhYmxlTXVsdGlwbGVDb2x1bW5zT3B0aW9ucyxcbiAgICBmaz86IHN0cmluZ1xuICApIHtcbiAgICBjb25zdCBtZXRhZGF0YTogUmVsYXRpb25zTWV0YWRhdGEgPSB7XG4gICAgICBjbGFzczogY2xhenosXG4gICAgICBjYXNjYWRlOiBjYXNjYWRlLFxuICAgICAgcG9wdWxhdGU6IHBvcHVsYXRlLFxuICAgIH07XG4gICAgaWYgKGpvaW5UYWJsZU9wdHMpIG1ldGFkYXRhLmpvaW5UYWJsZSA9IGpvaW5UYWJsZU9wdHM7XG4gICAgaWYgKGZrKSBtZXRhZGF0YS5uYW1lID0gZms7XG4gICAgY29uc3QgcGtUeXBlcyA9IGdldFBrVHlwZXMoY2xhenopO1xuICAgIGNvbnN0IGRlY3MgPSBbXG4gICAgICBwcm9wKCksXG4gICAgICByZWxhdGlvbihrZXksIG1ldGFkYXRhKSxcbiAgICAgIGxpc3QoW2NsYXp6LCAuLi5wa1R5cGVzXSksXG4gICAgICBvbkNyZWF0ZShtYW55VG9NYW55T25DcmVhdGUsIG1ldGFkYXRhKSxcbiAgICAgIG9uVXBkYXRlKG9uZVRvTWFueU9uVXBkYXRlLCBtZXRhZGF0YSksXG4gICAgICAvLyBvbkRlbGV0ZShvbmVUb01hbnlPbkRlbGV0ZSwgbWV0YWRhdGEpLFxuICAgICAgYWZ0ZXJBbnkocG9wLCBtZXRhZGF0YSksXG4gICAgXTtcbiAgICByZXR1cm4gYXBwbHkoLi4uZGVjcyk7XG4gIH1cbiAgcmV0dXJuIERlY29yYXRpb24uZm9yKGtleSlcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogbWFueVRvTWFueURlYyxcbiAgICAgIGFyZ3M6IFtjbGF6eiwgY2FzY2FkZU9wdGlvbnMsIHBvcHVsYXRlLCBqb2luVGFibGVPcHRzLCBma10sXG4gICAgfSlcbiAgICAuYXBwbHkoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vVmFsaWRhdGVPbiguLi5vcHM6IE9wZXJhdGlvbktleXNbXSkge1xuICByZXR1cm4gZnVuY3Rpb24gbm9WYWxpZGF0ZU9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleT86IGFueSkge1xuICAgIGNvbnN0IGN1cnJlbnRNZXRhID1cbiAgICAgIE1ldGFkYXRhLmdldChcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBNZXRhZGF0YS5rZXkoUGVyc2lzdGVuY2VLZXlzLk5PX1ZBTElEQVRFLCBwcm9wZXJ0eUtleSlcbiAgICAgICkgfHwgW107XG4gICAgY29uc3QgbmV3TWV0YSA9IFsuLi5uZXcgU2V0KFsuLi5jdXJyZW50TWV0YSwgLi4ub3BzXSldO1xuICAgIHJldHVybiBuZXdBcHBseShcbiAgICAgIG5ld01ldGFkYXRhKFxuICAgICAgICBNZXRhZGF0YS5rZXkoUGVyc2lzdGVuY2VLZXlzLk5PX1ZBTElEQVRFLCBwcm9wZXJ0eUtleSksXG4gICAgICAgIG5ld01ldGFcbiAgICAgIClcbiAgICApKHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9WYWxpZGF0ZU9uQ3JlYXRlKCkge1xuICByZXR1cm4gbm9WYWxpZGF0ZU9uKE9wZXJhdGlvbktleXMuQ1JFQVRFKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vVmFsaWRhdGVPblVwZGF0ZSgpIHtcbiAgcmV0dXJuIG5vVmFsaWRhdGVPbihPcGVyYXRpb25LZXlzLlVQREFURSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub1ZhbGlkYXRlT25DcmVhdGVVcGRhdGUoKSB7XG4gIHJldHVybiBub1ZhbGlkYXRlT24oT3BlcmF0aW9uS2V5cy5VUERBVEUsIE9wZXJhdGlvbktleXMuQ1JFQVRFKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3BlY2lmaWVzIHRoZSBtb2RlbCBwcm9wZXJ0eSBhcyBhIHJlbGF0aW9uXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBzcGVjaWZpZXMgdGhlIG1vZGVsIHByb3BlcnR5IGFzIGEgcmVsYXRpb24gaW4gdGhlIGRhdGFiYXNlXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBkZWNvcmF0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhIGNsYXNzIHByb3BlcnR5XG4gKiBAZnVuY3Rpb24gcmVsYXRpb25cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbihyZWxhdGlvbktleTogc3RyaW5nLCBtZXRhOiBSZWxhdGlvbnNNZXRhZGF0YSkge1xuICBmdW5jdGlvbiByZWxhdGlvbihyZWxhdGlvbktleTogc3RyaW5nLCBtZXRhOiBSZWxhdGlvbnNNZXRhZGF0YSkge1xuICAgIHJldHVybiBmdW5jdGlvbiByZWxhdGlvbihvYmo6IGFueSwgYXR0cjogYW55KSB7XG4gICAgICBwcm9wTWV0YWRhdGEocmVsYXRpb25LZXksIG1ldGEpKG9iaiwgYXR0cik7XG4gICAgICByZXR1cm4gcHJvcE1ldGFkYXRhKFxuICAgICAgICBNZXRhZGF0YS5rZXkoUGVyc2lzdGVuY2VLZXlzLlJFTEFUSU9OUywgYXR0ciksXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIG1ldGEsIHtcbiAgICAgICAgICBrZXk6IHJlbGF0aW9uS2V5LFxuICAgICAgICB9KVxuICAgICAgKShvYmosIGF0dHIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gRGVjb3JhdGlvbi5mb3IoUGVyc2lzdGVuY2VLZXlzLlJFTEFUSU9OUylcbiAgICAuZGVmaW5lKHtcbiAgICAgIGRlY29yYXRvcjogcmVsYXRpb24sXG4gICAgICBhcmdzOiBbcmVsYXRpb25LZXksIG1ldGFdLFxuICAgIH0pXG4gICAgLmFwcGx5KCk7XG59XG4iXX0=
|
package/lib/esm/model/index.js
CHANGED
|
@@ -9,4 +9,4 @@ export * from "./decorators.js";
|
|
|
9
9
|
export * from "./indexing.js";
|
|
10
10
|
export * from "./SequenceModel.js";
|
|
11
11
|
export * from "./types.js";
|
|
12
|
-
//# sourceMappingURL=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILCtCQUE0QjtBQUM1QixrQ0FBK0I7QUFDL0IsZ0NBQTZCO0FBQzdCLDhCQUEyQjtBQUMzQixtQ0FBZ0M7QUFDaEMsMkJBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gRXhwb3J0cyBmb3IgdGhlIG1vZGVsIG1vZHVsZS5cbiAqIEBzdW1tYXJ5IFRoaXMgZmlsZSBleHBvcnRzIGFsbCB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgZm9yIHRoZSBtb2RlbCBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgdGhlIEJhc2VNb2RlbCwgY29uc3RydWN0aW9uIHV0aWxpdGllcywgZGVjb3JhdG9ycywgYW5kIG1vcmUuXG4gKiBAbW9kdWxlIGNvcmUvbW9kZWxcbiAqL1xuZXhwb3J0ICogZnJvbSBcIi4vQmFzZU1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdHJ1Y3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luZGV4aW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9TZXF1ZW5jZU1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuIl19
|
|
@@ -34,4 +34,4 @@ export function index(directions, compositions, name) {
|
|
|
34
34
|
})
|
|
35
35
|
.apply();
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXhpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvaW5kZXhpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxxQ0FBZ0M7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxzQ0FBaUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFxQ2hELE1BQU0sVUFBVSxLQUFLLENBQ25CLFVBQW1FLEVBQ25FLFlBQXlDLEVBQ3pDLElBQWE7SUFFYixTQUFTLEtBQUssQ0FDWixVQUFpRCxFQUNqRCxZQUFnQyxFQUNoQyxJQUFhO1FBRWIsT0FBTyxTQUFTLEtBQUssQ0FBQyxHQUFRLEVBQUUsSUFBUztZQUN2QyxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLEdBQUcsVUFBVSxDQUFDO2dCQUNsQixVQUFVLEdBQUcsU0FBUyxDQUFDO2dCQUN2QixZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLEdBQUcsWUFBWSxDQUFDO2dCQUNwQixZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUNFLFVBQVUsQ0FBQyxJQUFJLENBQ2IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBUSxDQUFDLENBQ3BFLEVBQ0QsQ0FBQztvQkFDRCxZQUFZLEdBQUcsVUFBc0IsQ0FBQztvQkFDdEMsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDekIsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLFlBQVksQ0FDakIsUUFBUSxDQUFDLEdBQUcsQ0FDVixHQUFHLGVBQWUsQ0FBQyxLQUFLLEdBQUcsWUFBWSxJQUFJLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFDckcsSUFBSSxDQUNMLEVBQ0Q7Z0JBQ0UsVUFBVSxFQUFFLFVBQVU7Z0JBQ3RCLFlBQVksRUFBRSxZQUFZO2dCQUMxQixJQUFJLEVBQUUsSUFBSTthQUNNLENBQ25CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO1NBQ3pDLE1BQU0sQ0FBQztRQUNOLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDO0tBQ3ZDLENBQUM7U0FDRCxLQUFLLEVBQUUsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmRleE1ldGFkYXRhIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvdHlwZXNcIjtcbmltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIi4uL3JlcG9zaXRvcnkvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBEZWNvcmF0aW9uLCBwcm9wTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IE1ldGFkYXRhIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIGluZGV4IG9uIGEgbW9kZWwgcHJvcGVydHkgZm9yIGltcHJvdmVkIHF1ZXJ5IHBlcmZvcm1hbmNlXG4gKiBAc3VtbWFyeSBEZWNvcmF0b3IgdGhhdCBtYXJrcyBhIHByb3BlcnR5IHRvIGJlIGluZGV4ZWQgaW4gdGhlIGRhdGFiYXNlLCBvcHRpb25hbGx5IHdpdGggc3BlY2lmaWMgZGlyZWN0aW9ucyBhbmQgY29tcG9zaXRpb25zXG4gKiBAcGFyYW0ge09yZGVyRGlyZWN0aW9uW119IFtkaXJlY3Rpb25zXSAtIE9wdGlvbmFsIGFycmF5IG9mIHNvcnQgZGlyZWN0aW9ucyBmb3IgdGhlIGluZGV4XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbY29tcG9zaXRpb25zXSAtIE9wdGlvbmFsIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIHRvIGNyZWF0ZSBhIGNvbXBvc2l0ZSBpbmRleFxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZGVjb3JhdG9yIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYSBjbGFzcyBwcm9wZXJ0eVxuICogQGZ1bmN0aW9uIGluZGV4XG4gKiBAY2F0ZWdvcnkgUHJvcGVydHkgRGVjb3JhdG9yc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXgoKTogUmV0dXJuVHlwZTx0eXBlb2YgcHJvcE1ldGFkYXRhPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmRleChuYW1lOiBzdHJpbmcpOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9wTWV0YWRhdGE+O1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KFxuICBkaXJlY3Rpb25zOiBPcmRlckRpcmVjdGlvbltdXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9wTWV0YWRhdGE+O1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KFxuICBkaXJlY3Rpb25zOiBPcmRlckRpcmVjdGlvbltdLFxuICBuYW1lOiBzdHJpbmdcbik6IFJldHVyblR5cGU8dHlwZW9mIHByb3BNZXRhZGF0YT47XG5leHBvcnQgZnVuY3Rpb24gaW5kZXgoXG4gIGRpcmVjdGlvbnM6IE9yZGVyRGlyZWN0aW9uW10sXG4gIGNvbXBvc2l0aW9uczogc3RyaW5nW11cbik6IFJldHVyblR5cGU8dHlwZW9mIHByb3BNZXRhZGF0YT47XG5leHBvcnQgZnVuY3Rpb24gaW5kZXgoXG4gIGRpcmVjdGlvbnM6IHJlYWRvbmx5IE9yZGVyRGlyZWN0aW9uW10sXG4gIGNvbXBvc2l0aW9uczogcmVhZG9ubHkgc3RyaW5nW11cbik6IFJldHVyblR5cGU8dHlwZW9mIHByb3BNZXRhZGF0YT47XG5leHBvcnQgZnVuY3Rpb24gaW5kZXgoXG4gIGRpcmVjdGlvbnM6IHJlYWRvbmx5IE9yZGVyRGlyZWN0aW9uW10sXG4gIGNvbXBvc2l0aW9uczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIG5hbWU6IHN0cmluZ1xuKTogUmV0dXJuVHlwZTx0eXBlb2YgcHJvcE1ldGFkYXRhPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmRleChjb21wb3NpdGlvbnM6IHN0cmluZ1tdKTogUmV0dXJuVHlwZTx0eXBlb2YgcHJvcE1ldGFkYXRhPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmRleChcbiAgY29tcG9zaXRpb25zOiBzdHJpbmdbXSxcbiAgbmFtZTogc3RyaW5nXG4pOiBSZXR1cm5UeXBlPHR5cGVvZiBwcm9wTWV0YWRhdGE+O1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4KFxuICBkaXJlY3Rpb25zPzogcmVhZG9ubHkgT3JkZXJEaXJlY3Rpb25bXSB8IHJlYWRvbmx5IHN0cmluZ1tdIHwgc3RyaW5nLFxuICBjb21wb3NpdGlvbnM/OiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZyxcbiAgbmFtZT86IHN0cmluZ1xuKSB7XG4gIGZ1bmN0aW9uIGluZGV4KFxuICAgIGRpcmVjdGlvbnM/OiBPcmRlckRpcmVjdGlvbltdIHwgc3RyaW5nW10gfCBzdHJpbmcsXG4gICAgY29tcG9zaXRpb25zPzogc3RyaW5nW10gfCBzdHJpbmcsXG4gICAgbmFtZT86IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaW5kZXgob2JqOiBhbnksIGF0dHI6IGFueSkge1xuICAgICAgaWYgKHR5cGVvZiBkaXJlY3Rpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIG5hbWUgPSBkaXJlY3Rpb25zO1xuICAgICAgICBkaXJlY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgICAgICBjb21wb3NpdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbXBvc2l0aW9ucyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBuYW1lID0gY29tcG9zaXRpb25zO1xuICAgICAgICBjb21wb3NpdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoIWNvbXBvc2l0aW9ucyAmJiBkaXJlY3Rpb25zKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkaXJlY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAoZCkgPT4gIVtPcmRlckRpcmVjdGlvbi5BU0MsIE9yZGVyRGlyZWN0aW9uLkRTQ10uaW5jbHVkZXMoZCBhcyBhbnkpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb21wb3NpdGlvbnMgPSBkaXJlY3Rpb25zIGFzIHN0cmluZ1tdO1xuICAgICAgICAgIGRpcmVjdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BNZXRhZGF0YShcbiAgICAgICAgTWV0YWRhdGEua2V5KFxuICAgICAgICAgIGAke1BlcnNpc3RlbmNlS2V5cy5JTkRFWH0ke2NvbXBvc2l0aW9ucyAmJiBjb21wb3NpdGlvbnM/Lmxlbmd0aCA/IGAuJHtjb21wb3NpdGlvbnMuam9pbihcIi5cIil9YCA6IFwiXCJ9YCxcbiAgICAgICAgICBhdHRyXG4gICAgICAgICksXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3Rpb25zOiBkaXJlY3Rpb25zLFxuICAgICAgICAgIGNvbXBvc2l0aW9uczogY29tcG9zaXRpb25zLFxuICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIH0gYXMgSW5kZXhNZXRhZGF0YVxuICAgICAgKShvYmosIGF0dHIpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gRGVjb3JhdGlvbi5mb3IoUGVyc2lzdGVuY2VLZXlzLklOREVYKVxuICAgIC5kZWZpbmUoe1xuICAgICAgZGVjb3JhdG9yOiBpbmRleCxcbiAgICAgIGFyZ3M6IFtkaXJlY3Rpb25zLCBjb21wb3NpdGlvbnMsIG5hbWVdLFxuICAgIH0pXG4gICAgLmFwcGx5KCk7XG59XG4iXX0=
|