@decaf-ts/integrations 0.3.3 → 0.3.5
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/dist/integrations.cjs +48 -2
- package/dist/integrations.js +49 -2
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/azure/index.cjs +2 -2
- package/lib/cjs/blob/core/BlobErrors.cjs +2 -2
- package/lib/cjs/blob/core/BlobKey.cjs +2 -2
- package/lib/cjs/blob/core/BlobStoreFactory.cjs +2 -2
- package/lib/cjs/blob/core/BlobStoreService.cjs +2 -2
- package/lib/cjs/blob/core/BlobTypes.cjs +2 -2
- package/lib/cjs/blob/core/BlobValue.cjs +2 -2
- package/lib/cjs/blob/core/index.cjs +2 -2
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/gcp/index.cjs +2 -2
- package/lib/cjs/blob/index.cjs +2 -2
- package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs +2 -2
- package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs +2 -2
- package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs +2 -2
- package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs +2 -2
- package/lib/cjs/blob/ipfs/index.cjs +2 -2
- package/lib/cjs/blob/local/LocalBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/local/index.cjs +2 -2
- package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/memory/index.cjs +2 -2
- package/lib/cjs/blob/s3/MinioBlobStoreService.cjs +2 -2
- package/lib/cjs/blob/s3/R2BlobStoreService.cjs +2 -2
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs +2 -2
- package/lib/cjs/blob/s3/index.cjs +2 -2
- package/lib/cjs/docker/DockerComposeService.cjs +2 -2
- package/lib/cjs/docker/index.cjs +2 -2
- package/lib/cjs/graph/constants.cjs +2 -2
- package/lib/cjs/graph/decorators.cjs +2 -2
- package/lib/cjs/graph/errors/GraphCycleError.cjs +2 -2
- package/lib/cjs/graph/errors/GraphExecutionError.cjs +2 -2
- package/lib/cjs/graph/errors/GraphInputError.cjs +2 -2
- package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +2 -2
- package/lib/cjs/graph/errors/GraphPinningError.cjs +2 -2
- package/lib/cjs/graph/errors/GraphPortError.cjs +2 -2
- package/lib/cjs/graph/errors/GraphStoreError.cjs +2 -2
- package/lib/cjs/graph/errors/GraphTopologyError.cjs +2 -2
- package/lib/cjs/graph/errors/index.cjs +2 -2
- package/lib/cjs/graph/events/GraphExecutionEvent.cjs +2 -2
- package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +2 -2
- package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +2 -2
- package/lib/cjs/graph/events/GraphExecutionObserver.cjs +2 -2
- package/lib/cjs/graph/events/index.cjs +2 -2
- package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +4 -0
- package/lib/cjs/graph/execution/GraphExecutionContext.cjs +2 -2
- package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +4 -2
- package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +2 -2
- package/lib/cjs/graph/execution/GraphExecutionResult.cjs +2 -2
- package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +2 -2
- package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +95 -0
- package/lib/cjs/graph/execution/index.cjs +4 -2
- package/lib/cjs/graph/index.cjs +7 -2
- package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +87 -0
- package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +2 -2
- package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +25 -3
- package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +2 -2
- package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +2 -2
- package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +2 -2
- package/lib/cjs/graph/loops/index.cjs +3 -2
- package/lib/cjs/graph/nodes/agent.cjs +110 -0
- package/lib/cjs/graph/nodes/category-styles.cjs +38 -0
- package/lib/cjs/graph/nodes/flow-control.cjs +436 -0
- package/lib/cjs/graph/nodes/index.cjs +34 -0
- package/lib/cjs/graph/nodes/triggers.cjs +250 -0
- package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +2 -2
- package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +2 -2
- package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +2 -2
- package/lib/cjs/graph/pinning/GraphPinningService.cjs +2 -2
- package/lib/cjs/graph/pinning/index.cjs +2 -2
- package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +2 -2
- package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +2 -2
- package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +2 -2
- package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +2 -2
- package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +2 -2
- package/lib/cjs/graph/planning/GraphRelationResolver.cjs +2 -2
- package/lib/cjs/graph/planning/GraphTopology.cjs +2 -2
- package/lib/cjs/graph/planning/index.cjs +2 -2
- package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +2 -2
- package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +2 -2
- package/lib/cjs/graph/registry/index.cjs +2 -2
- package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +2 -2
- package/lib/cjs/graph/snapshots/index.cjs +2 -2
- package/lib/cjs/graph/store/GraphCachedValue.cjs +2 -2
- package/lib/cjs/graph/store/GraphValueKey.cjs +2 -2
- package/lib/cjs/graph/store/GraphValueStore.cjs +2 -2
- package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +2 -2
- package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +2 -2
- package/lib/cjs/graph/store/index.cjs +2 -2
- package/lib/cjs/graph/types.cjs +2 -2
- package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +2 -2
- package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +2 -2
- package/lib/cjs/graph/validation/GraphValueValidator.cjs +2 -2
- package/lib/cjs/graph/validation/index.cjs +2 -2
- package/lib/cjs/index.cjs +5 -5
- package/lib/cjs/keycloak/index.cjs +2 -2
- package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +5 -4
- package/lib/cjs/keycloak/services/KeycloakClientService.cjs +5 -4
- package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +5 -4
- package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +8 -7
- package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +5 -4
- package/lib/cjs/keycloak/services/KeycloakService.cjs +16 -13
- package/lib/cjs/keycloak/services/KeycloakUserService.cjs +5 -4
- package/lib/cjs/keycloak/services/index.cjs +2 -2
- package/lib/cjs/keycloak/services/runtime.cjs +20 -0
- package/lib/cjs/keycloak/types.cjs +2 -2
- package/lib/cjs/kibana/helpers.cjs +2 -2
- package/lib/cjs/kibana/index.cjs +2 -2
- package/lib/cjs/kibana/services/KibanaAuthService.cjs +6 -5
- package/lib/cjs/kibana/services/KibanaDashboardService.cjs +9 -8
- package/lib/cjs/kibana/services/KibanaDataViewService.cjs +7 -6
- package/lib/cjs/kibana/services/KibanaRoleService.cjs +5 -4
- package/lib/cjs/kibana/services/KibanaService.cjs +13 -10
- package/lib/cjs/kibana/services/KibanaSpaceService.cjs +5 -4
- package/lib/cjs/kibana/services/KibanaUserService.cjs +5 -4
- package/lib/cjs/kibana/services/index.cjs +2 -2
- package/lib/cjs/kibana/services/runtime.cjs +20 -0
- package/lib/cjs/kibana/types.cjs +2 -2
- package/lib/cjs/nest/authService.cjs +2 -2
- package/lib/cjs/nest/index.cjs +2 -2
- package/lib/cjs/nest/keycloakAuthHandler.cjs +2 -2
- package/lib/cjs/nest/keycloakModule.cjs +2 -2
- package/lib/cjs/nest/logging.cjs +2 -2
- package/lib/cjs/nest/types.cjs +2 -2
- package/lib/cjs/nest/utils.cjs +2 -2
- package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -2
- package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/aws/index.cjs +2 -2
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -2
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/azure/index.cjs +2 -2
- package/lib/cjs/secrets/core/SecretErrors.cjs +2 -2
- package/lib/cjs/secrets/core/SecretName.cjs +2 -2
- package/lib/cjs/secrets/core/SecretReference.cjs +2 -2
- package/lib/cjs/secrets/core/SecretSerialization.cjs +2 -2
- package/lib/cjs/secrets/core/SecretService.cjs +2 -2
- package/lib/cjs/secrets/core/SecretTypes.cjs +2 -2
- package/lib/cjs/secrets/core/index.cjs +2 -2
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -2
- package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/gcp/index.cjs +2 -2
- package/lib/cjs/secrets/index.cjs +2 -2
- package/lib/cjs/secrets/model/ModelSecretCrypto.cjs +2 -2
- package/lib/cjs/secrets/model/ModelSecretService.cjs +2 -2
- package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/model/Secret.cjs +2 -2
- package/lib/cjs/secrets/model/index.cjs +2 -2
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -2
- package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/onepassword/index.cjs +2 -2
- package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -2
- package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs +2 -2
- package/lib/cjs/secrets/vault/index.cjs +2 -2
- package/lib/cjs/shared/runtime.cjs +2 -2
- package/lib/cjs/utils.cjs +2 -2
- package/lib/esm/blob/azure/AzureBlobStoreService.js +1 -1
- package/lib/esm/blob/azure/index.js +1 -1
- package/lib/esm/blob/core/BlobErrors.js +1 -1
- package/lib/esm/blob/core/BlobKey.js +1 -1
- package/lib/esm/blob/core/BlobStoreFactory.js +1 -1
- package/lib/esm/blob/core/BlobStoreService.js +1 -1
- package/lib/esm/blob/core/BlobTypes.js +1 -1
- package/lib/esm/blob/core/BlobValue.js +1 -1
- package/lib/esm/blob/core/index.js +1 -1
- package/lib/esm/blob/gcp/GcsBlobStoreService.js +1 -1
- package/lib/esm/blob/gcp/index.js +1 -1
- package/lib/esm/blob/index.js +1 -1
- package/lib/esm/blob/ipfs/IpfsBlobStoreService.js +1 -1
- package/lib/esm/blob/ipfs/IpfsKeyIndex.js +1 -1
- package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js +1 -1
- package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js +1 -1
- package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js +1 -1
- package/lib/esm/blob/ipfs/index.js +1 -1
- package/lib/esm/blob/local/LocalBlobStoreService.js +1 -1
- package/lib/esm/blob/local/index.js +1 -1
- package/lib/esm/blob/memory/MemoryBlobStoreService.js +1 -1
- package/lib/esm/blob/memory/index.js +1 -1
- package/lib/esm/blob/s3/MinioBlobStoreService.js +1 -1
- package/lib/esm/blob/s3/R2BlobStoreService.js +1 -1
- package/lib/esm/blob/s3/S3BlobStoreService.js +1 -1
- package/lib/esm/blob/s3/index.js +1 -1
- package/lib/esm/docker/DockerComposeService.js +1 -1
- package/lib/esm/docker/index.js +1 -1
- package/lib/esm/graph/constants.js +1 -1
- package/lib/esm/graph/decorators.js +1 -1
- package/lib/esm/graph/errors/GraphCycleError.js +1 -1
- package/lib/esm/graph/errors/GraphExecutionError.js +1 -1
- package/lib/esm/graph/errors/GraphInputError.js +1 -1
- package/lib/esm/graph/errors/GraphLoopLimitError.js +1 -1
- package/lib/esm/graph/errors/GraphPinningError.js +1 -1
- package/lib/esm/graph/errors/GraphPortError.js +1 -1
- package/lib/esm/graph/errors/GraphStoreError.js +1 -1
- package/lib/esm/graph/errors/GraphTopologyError.js +1 -1
- package/lib/esm/graph/errors/index.js +1 -1
- package/lib/esm/graph/events/GraphExecutionEvent.js +1 -1
- package/lib/esm/graph/events/GraphExecutionEventEmitter.js +1 -1
- package/lib/esm/graph/events/GraphExecutionEventFactory.js +1 -1
- package/lib/esm/graph/events/GraphExecutionObserver.js +1 -1
- package/lib/esm/graph/events/index.js +1 -1
- package/lib/esm/graph/execution/CodeSandboxEvaluator.js +18 -0
- package/lib/esm/graph/execution/GraphExecutionContext.js +1 -1
- package/lib/esm/graph/execution/GraphExecutionEngine.js +3 -1
- package/lib/esm/graph/execution/GraphExecutionFrame.js +1 -1
- package/lib/esm/graph/execution/GraphExecutionResult.js +1 -1
- package/lib/esm/graph/execution/GraphNodeExecutor.js +1 -1
- package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +90 -0
- package/lib/esm/graph/execution/index.js +3 -1
- package/lib/esm/graph/index.js +6 -1
- package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +82 -0
- package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +1 -1
- package/lib/esm/graph/loops/GraphConditionEvaluator.js +24 -2
- package/lib/esm/graph/loops/GraphLoopExecutionContext.js +1 -1
- package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +1 -1
- package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +1 -1
- package/lib/esm/graph/loops/index.js +2 -1
- package/lib/esm/graph/nodes/agent.js +101 -0
- package/lib/esm/graph/nodes/category-styles.js +34 -0
- package/lib/esm/graph/nodes/flow-control.js +427 -0
- package/lib/esm/graph/nodes/index.js +17 -0
- package/lib/esm/graph/nodes/triggers.js +241 -0
- package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +1 -1
- package/lib/esm/graph/pinning/GraphPinningMetadata.js +1 -1
- package/lib/esm/graph/pinning/GraphPinningPolicy.js +1 -1
- package/lib/esm/graph/pinning/GraphPinningService.js +1 -1
- package/lib/esm/graph/pinning/index.js +1 -1
- package/lib/esm/graph/planning/GraphExecutionPlan.js +1 -1
- package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +1 -1
- package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +1 -1
- package/lib/esm/graph/planning/GraphExecutionPlanNode.js +1 -1
- package/lib/esm/graph/planning/GraphExecutionPlanner.js +1 -1
- package/lib/esm/graph/planning/GraphRelationResolver.js +1 -1
- package/lib/esm/graph/planning/GraphTopology.js +1 -1
- package/lib/esm/graph/planning/index.js +1 -1
- package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +1 -1
- package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +1 -1
- package/lib/esm/graph/registry/index.js +1 -1
- package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +1 -1
- package/lib/esm/graph/snapshots/index.js +1 -1
- package/lib/esm/graph/store/GraphCachedValue.js +1 -1
- package/lib/esm/graph/store/GraphValueKey.js +1 -1
- package/lib/esm/graph/store/GraphValueStore.js +1 -1
- package/lib/esm/graph/store/GraphValueStoreAdapter.js +1 -1
- package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +1 -1
- package/lib/esm/graph/store/index.js +1 -1
- package/lib/esm/graph/types.js +1 -1
- package/lib/esm/graph/validation/GraphDefinitionValidator.js +1 -1
- package/lib/esm/graph/validation/GraphPortSchemaResolver.js +1 -1
- package/lib/esm/graph/validation/GraphValueValidator.js +1 -1
- package/lib/esm/graph/validation/index.js +1 -1
- package/lib/esm/index.js +4 -4
- package/lib/esm/keycloak/index.js +1 -1
- package/lib/esm/keycloak/services/KeycloakAuthService.js +4 -3
- package/lib/esm/keycloak/services/KeycloakClientService.js +4 -3
- package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +4 -3
- package/lib/esm/keycloak/services/KeycloakRealmService.js +4 -3
- package/lib/esm/keycloak/services/KeycloakRoleService.js +4 -3
- package/lib/esm/keycloak/services/KeycloakService.js +15 -12
- package/lib/esm/keycloak/services/KeycloakUserService.js +4 -3
- package/lib/esm/keycloak/services/index.js +1 -1
- package/lib/esm/keycloak/services/runtime.js +15 -0
- package/lib/esm/keycloak/types.js +1 -1
- package/lib/esm/kibana/helpers.js +1 -1
- package/lib/esm/kibana/index.js +1 -1
- package/lib/esm/kibana/services/KibanaAuthService.js +5 -4
- package/lib/esm/kibana/services/KibanaDashboardService.js +5 -4
- package/lib/esm/kibana/services/KibanaDataViewService.js +4 -3
- package/lib/esm/kibana/services/KibanaRoleService.js +4 -3
- package/lib/esm/kibana/services/KibanaService.js +12 -9
- package/lib/esm/kibana/services/KibanaSpaceService.js +4 -3
- package/lib/esm/kibana/services/KibanaUserService.js +4 -3
- package/lib/esm/kibana/services/index.js +1 -1
- package/lib/esm/kibana/services/runtime.js +15 -0
- package/lib/esm/kibana/types.js +1 -1
- package/lib/esm/nest/authService.js +1 -1
- package/lib/esm/nest/index.js +1 -1
- package/lib/esm/nest/keycloakAuthHandler.js +1 -1
- package/lib/esm/nest/keycloakModule.js +1 -1
- package/lib/esm/nest/logging.js +1 -1
- package/lib/esm/nest/types.js +1 -1
- package/lib/esm/nest/utils.js +1 -1
- package/lib/esm/secrets/aws/AwsSecretService.js +1 -1
- package/lib/esm/secrets/aws/AwsSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/aws/index.js +1 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +1 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/azure/index.js +1 -1
- package/lib/esm/secrets/core/SecretErrors.js +1 -1
- package/lib/esm/secrets/core/SecretName.js +1 -1
- package/lib/esm/secrets/core/SecretReference.js +1 -1
- package/lib/esm/secrets/core/SecretSerialization.js +1 -1
- package/lib/esm/secrets/core/SecretService.js +1 -1
- package/lib/esm/secrets/core/SecretTypes.js +1 -1
- package/lib/esm/secrets/core/index.js +1 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js +1 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js +1 -1
- package/lib/esm/secrets/gcp/index.js +1 -1
- package/lib/esm/secrets/index.js +1 -1
- package/lib/esm/secrets/model/ModelSecretCrypto.js +1 -1
- package/lib/esm/secrets/model/ModelSecretService.js +1 -1
- package/lib/esm/secrets/model/ModelSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/model/Secret.js +1 -1
- package/lib/esm/secrets/model/index.js +1 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +1 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/onepassword/index.js +1 -1
- package/lib/esm/secrets/vault/VaultSecretService.js +1 -1
- package/lib/esm/secrets/vault/VaultSecretServiceConfig.js +1 -1
- package/lib/esm/secrets/vault/index.js +1 -1
- package/lib/esm/shared/runtime.js +1 -1
- package/lib/esm/utils.js +1 -1
- package/lib/types/graph/execution/CodeSandboxEvaluator.d.cts +53 -0
- package/lib/types/graph/execution/CodeSandboxEvaluator.d.mts +53 -0
- package/lib/types/graph/execution/GraphExecutionEngine.d.cts +17 -0
- package/lib/types/graph/execution/GraphExecutionEngine.d.mts +17 -0
- package/lib/types/graph/execution/SwitchGraphNodeExecutor.d.cts +42 -0
- package/lib/types/graph/execution/SwitchGraphNodeExecutor.d.mts +42 -0
- package/lib/types/graph/execution/index.d.cts +2 -0
- package/lib/types/graph/execution/index.d.mts +2 -0
- package/lib/types/graph/index.d.cts +4 -0
- package/lib/types/graph/index.d.mts +4 -0
- package/lib/types/graph/loops/ConditionExpressionEvaluator.d.cts +36 -0
- package/lib/types/graph/loops/ConditionExpressionEvaluator.d.mts +36 -0
- package/lib/types/graph/loops/GraphConditionEvaluator.d.cts +20 -4
- package/lib/types/graph/loops/GraphConditionEvaluator.d.mts +20 -4
- package/lib/types/graph/loops/index.d.cts +1 -0
- package/lib/types/graph/loops/index.d.mts +1 -0
- package/lib/types/graph/nodes/agent.d.cts +44 -0
- package/lib/types/graph/nodes/agent.d.mts +44 -0
- package/lib/types/graph/nodes/category-styles.d.cts +8 -0
- package/lib/types/graph/nodes/category-styles.d.mts +8 -0
- package/lib/types/graph/nodes/flow-control.d.cts +104 -0
- package/lib/types/graph/nodes/flow-control.d.mts +104 -0
- package/lib/types/graph/nodes/index.d.cts +16 -0
- package/lib/types/graph/nodes/index.d.mts +16 -0
- package/lib/types/graph/nodes/triggers.d.cts +53 -0
- package/lib/types/graph/nodes/triggers.d.mts +53 -0
- package/lib/types/graph/types.d.cts +102 -0
- package/lib/types/graph/types.d.mts +102 -0
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/keycloak/services/KeycloakService.d.cts +1 -1
- package/lib/types/keycloak/services/KeycloakService.d.mts +1 -1
- package/lib/types/keycloak/services/runtime.d.cts +6 -0
- package/lib/types/keycloak/services/runtime.d.mts +6 -0
- package/lib/types/kibana/services/KibanaService.d.cts +1 -1
- package/lib/types/kibana/services/KibanaService.d.mts +1 -1
- package/lib/types/kibana/services/runtime.d.cts +6 -0
- package/lib/types/kibana/services/runtime.d.mts +6 -0
- package/package.json +1 -1
- package/dist/integrations.cjs.map +0 -1
- package/dist/integrations.js.map +0 -1
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/azure/index.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobErrors.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobKey.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobStoreFactory.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobTypes.cjs.map +0 -1
- package/lib/cjs/blob/core/BlobValue.cjs.map +0 -1
- package/lib/cjs/blob/core/index.cjs.map +0 -1
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/gcp/index.cjs.map +0 -1
- package/lib/cjs/blob/index.cjs.map +0 -1
- package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs.map +0 -1
- package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs.map +0 -1
- package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs.map +0 -1
- package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs.map +0 -1
- package/lib/cjs/blob/ipfs/index.cjs.map +0 -1
- package/lib/cjs/blob/local/LocalBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/local/index.cjs.map +0 -1
- package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/memory/index.cjs.map +0 -1
- package/lib/cjs/blob/s3/MinioBlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/s3/R2BlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +0 -1
- package/lib/cjs/blob/s3/index.cjs.map +0 -1
- package/lib/cjs/docker/DockerComposeService.cjs.map +0 -1
- package/lib/cjs/docker/index.cjs.map +0 -1
- package/lib/cjs/graph/constants.cjs.map +0 -1
- package/lib/cjs/graph/decorators.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphCycleError.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphExecutionError.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphInputError.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphLoopLimitError.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphPinningError.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphPortError.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphStoreError.cjs.map +0 -1
- package/lib/cjs/graph/errors/GraphTopologyError.cjs.map +0 -1
- package/lib/cjs/graph/errors/index.cjs.map +0 -1
- package/lib/cjs/graph/events/GraphExecutionEvent.cjs.map +0 -1
- package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs.map +0 -1
- package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs.map +0 -1
- package/lib/cjs/graph/events/GraphExecutionObserver.cjs.map +0 -1
- package/lib/cjs/graph/events/index.cjs.map +0 -1
- package/lib/cjs/graph/execution/GraphExecutionContext.cjs.map +0 -1
- package/lib/cjs/graph/execution/GraphExecutionEngine.cjs.map +0 -1
- package/lib/cjs/graph/execution/GraphExecutionFrame.cjs.map +0 -1
- package/lib/cjs/graph/execution/GraphExecutionResult.cjs.map +0 -1
- package/lib/cjs/graph/execution/GraphNodeExecutor.cjs.map +0 -1
- package/lib/cjs/graph/execution/index.cjs.map +0 -1
- package/lib/cjs/graph/index.cjs.map +0 -1
- package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs.map +0 -1
- package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs.map +0 -1
- package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs.map +0 -1
- package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs.map +0 -1
- package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs.map +0 -1
- package/lib/cjs/graph/loops/index.cjs.map +0 -1
- package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs.map +0 -1
- package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs.map +0 -1
- package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs.map +0 -1
- package/lib/cjs/graph/pinning/GraphPinningService.cjs.map +0 -1
- package/lib/cjs/graph/pinning/index.cjs.map +0 -1
- package/lib/cjs/graph/planning/GraphExecutionPlan.cjs.map +0 -1
- package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs.map +0 -1
- package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs.map +0 -1
- package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs.map +0 -1
- package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs.map +0 -1
- package/lib/cjs/graph/planning/GraphRelationResolver.cjs.map +0 -1
- package/lib/cjs/graph/planning/GraphTopology.cjs.map +0 -1
- package/lib/cjs/graph/planning/index.cjs.map +0 -1
- package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs.map +0 -1
- package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs.map +0 -1
- package/lib/cjs/graph/registry/index.cjs.map +0 -1
- package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs.map +0 -1
- package/lib/cjs/graph/snapshots/index.cjs.map +0 -1
- package/lib/cjs/graph/store/GraphCachedValue.cjs.map +0 -1
- package/lib/cjs/graph/store/GraphValueKey.cjs.map +0 -1
- package/lib/cjs/graph/store/GraphValueStore.cjs.map +0 -1
- package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs.map +0 -1
- package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs.map +0 -1
- package/lib/cjs/graph/store/index.cjs.map +0 -1
- package/lib/cjs/graph/types.cjs.map +0 -1
- package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs.map +0 -1
- package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs.map +0 -1
- package/lib/cjs/graph/validation/GraphValueValidator.cjs.map +0 -1
- package/lib/cjs/graph/validation/index.cjs.map +0 -1
- package/lib/cjs/index.cjs.map +0 -1
- package/lib/cjs/keycloak/index.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +0 -1
- package/lib/cjs/keycloak/services/index.cjs.map +0 -1
- package/lib/cjs/keycloak/types.cjs.map +0 -1
- package/lib/cjs/kibana/helpers.cjs.map +0 -1
- package/lib/cjs/kibana/index.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +0 -1
- package/lib/cjs/kibana/services/KibanaUserService.cjs.map +0 -1
- package/lib/cjs/kibana/services/index.cjs.map +0 -1
- package/lib/cjs/kibana/types.cjs.map +0 -1
- package/lib/cjs/nest/authService.cjs.map +0 -1
- package/lib/cjs/nest/index.cjs.map +0 -1
- package/lib/cjs/nest/keycloakAuthHandler.cjs.map +0 -1
- package/lib/cjs/nest/keycloakModule.cjs.map +0 -1
- package/lib/cjs/nest/logging.cjs.map +0 -1
- package/lib/cjs/nest/types.cjs.map +0 -1
- package/lib/cjs/nest/utils.cjs.map +0 -1
- package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/aws/index.cjs.map +0 -1
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/azure/index.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretErrors.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretName.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretReference.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretSerialization.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretService.cjs.map +0 -1
- package/lib/cjs/secrets/core/SecretTypes.cjs.map +0 -1
- package/lib/cjs/secrets/core/index.cjs.map +0 -1
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +0 -1
- package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/gcp/index.cjs.map +0 -1
- package/lib/cjs/secrets/index.cjs.map +0 -1
- package/lib/cjs/secrets/model/ModelSecretCrypto.cjs.map +0 -1
- package/lib/cjs/secrets/model/ModelSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/model/Secret.cjs.map +0 -1
- package/lib/cjs/secrets/model/index.cjs.map +0 -1
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/onepassword/index.cjs.map +0 -1
- package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +0 -1
- package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs.map +0 -1
- package/lib/cjs/secrets/vault/index.cjs.map +0 -1
- package/lib/cjs/shared/runtime.cjs.map +0 -1
- package/lib/cjs/utils.cjs.map +0 -1
- package/lib/esm/blob/azure/AzureBlobStoreService.js.map +0 -1
- package/lib/esm/blob/azure/index.js.map +0 -1
- package/lib/esm/blob/core/BlobErrors.js.map +0 -1
- package/lib/esm/blob/core/BlobKey.js.map +0 -1
- package/lib/esm/blob/core/BlobStoreFactory.js.map +0 -1
- package/lib/esm/blob/core/BlobStoreService.js.map +0 -1
- package/lib/esm/blob/core/BlobTypes.js.map +0 -1
- package/lib/esm/blob/core/BlobValue.js.map +0 -1
- package/lib/esm/blob/core/index.js.map +0 -1
- package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +0 -1
- package/lib/esm/blob/gcp/index.js.map +0 -1
- package/lib/esm/blob/index.js.map +0 -1
- package/lib/esm/blob/ipfs/IpfsBlobStoreService.js.map +0 -1
- package/lib/esm/blob/ipfs/IpfsKeyIndex.js.map +0 -1
- package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js.map +0 -1
- package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js.map +0 -1
- package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js.map +0 -1
- package/lib/esm/blob/ipfs/index.js.map +0 -1
- package/lib/esm/blob/local/LocalBlobStoreService.js.map +0 -1
- package/lib/esm/blob/local/index.js.map +0 -1
- package/lib/esm/blob/memory/MemoryBlobStoreService.js.map +0 -1
- package/lib/esm/blob/memory/index.js.map +0 -1
- package/lib/esm/blob/s3/MinioBlobStoreService.js.map +0 -1
- package/lib/esm/blob/s3/R2BlobStoreService.js.map +0 -1
- package/lib/esm/blob/s3/S3BlobStoreService.js.map +0 -1
- package/lib/esm/blob/s3/index.js.map +0 -1
- package/lib/esm/docker/DockerComposeService.js.map +0 -1
- package/lib/esm/docker/index.js.map +0 -1
- package/lib/esm/graph/constants.js.map +0 -1
- package/lib/esm/graph/decorators.js.map +0 -1
- package/lib/esm/graph/errors/GraphCycleError.js.map +0 -1
- package/lib/esm/graph/errors/GraphExecutionError.js.map +0 -1
- package/lib/esm/graph/errors/GraphInputError.js.map +0 -1
- package/lib/esm/graph/errors/GraphLoopLimitError.js.map +0 -1
- package/lib/esm/graph/errors/GraphPinningError.js.map +0 -1
- package/lib/esm/graph/errors/GraphPortError.js.map +0 -1
- package/lib/esm/graph/errors/GraphStoreError.js.map +0 -1
- package/lib/esm/graph/errors/GraphTopologyError.js.map +0 -1
- package/lib/esm/graph/errors/index.js.map +0 -1
- package/lib/esm/graph/events/GraphExecutionEvent.js.map +0 -1
- package/lib/esm/graph/events/GraphExecutionEventEmitter.js.map +0 -1
- package/lib/esm/graph/events/GraphExecutionEventFactory.js.map +0 -1
- package/lib/esm/graph/events/GraphExecutionObserver.js.map +0 -1
- package/lib/esm/graph/events/index.js.map +0 -1
- package/lib/esm/graph/execution/GraphExecutionContext.js.map +0 -1
- package/lib/esm/graph/execution/GraphExecutionEngine.js.map +0 -1
- package/lib/esm/graph/execution/GraphExecutionFrame.js.map +0 -1
- package/lib/esm/graph/execution/GraphExecutionResult.js.map +0 -1
- package/lib/esm/graph/execution/GraphNodeExecutor.js.map +0 -1
- package/lib/esm/graph/execution/index.js.map +0 -1
- package/lib/esm/graph/index.js.map +0 -1
- package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js.map +0 -1
- package/lib/esm/graph/loops/GraphConditionEvaluator.js.map +0 -1
- package/lib/esm/graph/loops/GraphLoopExecutionContext.js.map +0 -1
- package/lib/esm/graph/loops/UntilGraphNodeExecutor.js.map +0 -1
- package/lib/esm/graph/loops/WhileGraphNodeExecutor.js.map +0 -1
- package/lib/esm/graph/loops/index.js.map +0 -1
- package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js.map +0 -1
- package/lib/esm/graph/pinning/GraphPinningMetadata.js.map +0 -1
- package/lib/esm/graph/pinning/GraphPinningPolicy.js.map +0 -1
- package/lib/esm/graph/pinning/GraphPinningService.js.map +0 -1
- package/lib/esm/graph/pinning/index.js.map +0 -1
- package/lib/esm/graph/planning/GraphExecutionPlan.js.map +0 -1
- package/lib/esm/graph/planning/GraphExecutionPlanEdge.js.map +0 -1
- package/lib/esm/graph/planning/GraphExecutionPlanLayer.js.map +0 -1
- package/lib/esm/graph/planning/GraphExecutionPlanNode.js.map +0 -1
- package/lib/esm/graph/planning/GraphExecutionPlanner.js.map +0 -1
- package/lib/esm/graph/planning/GraphRelationResolver.js.map +0 -1
- package/lib/esm/graph/planning/GraphTopology.js.map +0 -1
- package/lib/esm/graph/planning/index.js.map +0 -1
- package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js.map +0 -1
- package/lib/esm/graph/registry/GraphNodeExecutorResolver.js.map +0 -1
- package/lib/esm/graph/registry/index.js.map +0 -1
- package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js.map +0 -1
- package/lib/esm/graph/snapshots/index.js.map +0 -1
- package/lib/esm/graph/store/GraphCachedValue.js.map +0 -1
- package/lib/esm/graph/store/GraphValueKey.js.map +0 -1
- package/lib/esm/graph/store/GraphValueStore.js.map +0 -1
- package/lib/esm/graph/store/GraphValueStoreAdapter.js.map +0 -1
- package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js.map +0 -1
- package/lib/esm/graph/store/index.js.map +0 -1
- package/lib/esm/graph/types.js.map +0 -1
- package/lib/esm/graph/validation/GraphDefinitionValidator.js.map +0 -1
- package/lib/esm/graph/validation/GraphPortSchemaResolver.js.map +0 -1
- package/lib/esm/graph/validation/GraphValueValidator.js.map +0 -1
- package/lib/esm/graph/validation/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/keycloak/index.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakAuthService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakClientService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakRealmService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakRoleService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakService.js.map +0 -1
- package/lib/esm/keycloak/services/KeycloakUserService.js.map +0 -1
- package/lib/esm/keycloak/services/index.js.map +0 -1
- package/lib/esm/keycloak/types.js.map +0 -1
- package/lib/esm/kibana/helpers.js.map +0 -1
- package/lib/esm/kibana/index.js.map +0 -1
- package/lib/esm/kibana/services/KibanaAuthService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaDashboardService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaDataViewService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaRoleService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaSpaceService.js.map +0 -1
- package/lib/esm/kibana/services/KibanaUserService.js.map +0 -1
- package/lib/esm/kibana/services/index.js.map +0 -1
- package/lib/esm/kibana/types.js.map +0 -1
- package/lib/esm/nest/authService.js.map +0 -1
- package/lib/esm/nest/index.js.map +0 -1
- package/lib/esm/nest/keycloakAuthHandler.js.map +0 -1
- package/lib/esm/nest/keycloakModule.js.map +0 -1
- package/lib/esm/nest/logging.js.map +0 -1
- package/lib/esm/nest/types.js.map +0 -1
- package/lib/esm/nest/utils.js.map +0 -1
- package/lib/esm/secrets/aws/AwsSecretService.js.map +0 -1
- package/lib/esm/secrets/aws/AwsSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/aws/index.js.map +0 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +0 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/azure/index.js.map +0 -1
- package/lib/esm/secrets/core/SecretErrors.js.map +0 -1
- package/lib/esm/secrets/core/SecretName.js.map +0 -1
- package/lib/esm/secrets/core/SecretReference.js.map +0 -1
- package/lib/esm/secrets/core/SecretSerialization.js.map +0 -1
- package/lib/esm/secrets/core/SecretService.js.map +0 -1
- package/lib/esm/secrets/core/SecretTypes.js.map +0 -1
- package/lib/esm/secrets/core/index.js.map +0 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +0 -1
- package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js.map +0 -1
- package/lib/esm/secrets/gcp/index.js.map +0 -1
- package/lib/esm/secrets/index.js.map +0 -1
- package/lib/esm/secrets/model/ModelSecretCrypto.js.map +0 -1
- package/lib/esm/secrets/model/ModelSecretService.js.map +0 -1
- package/lib/esm/secrets/model/ModelSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/model/Secret.js.map +0 -1
- package/lib/esm/secrets/model/index.js.map +0 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +0 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/onepassword/index.js.map +0 -1
- package/lib/esm/secrets/vault/VaultSecretService.js.map +0 -1
- package/lib/esm/secrets/vault/VaultSecretServiceConfig.js.map +0 -1
- package/lib/esm/secrets/vault/index.js.map +0 -1
- package/lib/esm/shared/runtime.js.map +0 -1
- package/lib/esm/utils.js.map +0 -1
|
@@ -0,0 +1,436 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GRAPH_FLOW_CONTROL_NODES = exports.CodeFlowNode = exports.ReturnFlowNode = exports.HumanApprovalFlowNode = exports.ErrorBoundaryFlowNode = exports.DelayFlowNode = exports.MapFlowNode = exports.MergeFlowNode = exports.ParallelFlowNode = exports.SwitchFlowNode = exports.IfFlowNode = void 0;
|
|
4
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
7
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
8
|
+
else
|
|
9
|
+
for (var i = decorators.length - 1; i >= 0; i--)
|
|
10
|
+
if (d = decorators[i])
|
|
11
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
+
};
|
|
14
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
16
|
+
return Reflect.metadata(k, v);
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @module integrations/graph/nodes/flow-control
|
|
20
|
+
* @summary Production flow-control node kind declarations (DECAF-32 §22.2.2).
|
|
21
|
+
* @description Canonical `@node`-decorated classes for the ten ALFRED-5
|
|
22
|
+
* flow-control kinds. These are graph-level macros: the engine's planner
|
|
23
|
+
* recognises them as ordinary executable nodes (§5.7) but they have no
|
|
24
|
+
* built-in executors — downstream projects (e.g. ALFRED) register custom
|
|
25
|
+
* executors or compile them into Mastra composition APIs (§22.2.2).
|
|
26
|
+
*
|
|
27
|
+
* The three loop kinds (`core.loop.foreach/while/until`) already have built-in
|
|
28
|
+
* executors (§5.9) and are NOT redeclared here.
|
|
29
|
+
*/
|
|
30
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
31
|
+
const ui_decorators_1 = require("@decaf-ts/ui-decorators");
|
|
32
|
+
const graph_1 = require("@decaf-ts/ui-decorators/graph");
|
|
33
|
+
/**
|
|
34
|
+
* If — conditional branch. Evaluates a `ConditionExpression` (§22.3) and
|
|
35
|
+
* routes the input to the `then` or `else` output.
|
|
36
|
+
*/
|
|
37
|
+
let IfFlowNode = class IfFlowNode extends decorator_validation_1.Model {
|
|
38
|
+
};
|
|
39
|
+
exports.IfFlowNode = IfFlowNode;
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, decorator_validation_1.required)(),
|
|
42
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to evaluate" }),
|
|
43
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
44
|
+
__metadata("design:type", Object)
|
|
45
|
+
], IfFlowNode.prototype, "value", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, decorator_validation_1.required)(),
|
|
48
|
+
(0, ui_decorators_1.uielement)("input", { label: "Then", placeholder: "Output when condition is true" }),
|
|
49
|
+
(0, graph_1.output)({ handle: "then" }),
|
|
50
|
+
__metadata("design:type", Object)
|
|
51
|
+
], IfFlowNode.prototype, "then", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, decorator_validation_1.required)(),
|
|
54
|
+
(0, ui_decorators_1.uielement)("input", { label: "Else", placeholder: "Output when condition is false" }),
|
|
55
|
+
(0, graph_1.output)({ handle: "else" }),
|
|
56
|
+
__metadata("design:type", Object)
|
|
57
|
+
], IfFlowNode.prototype, "else", void 0);
|
|
58
|
+
exports.IfFlowNode = IfFlowNode = __decorate([
|
|
59
|
+
(0, graph_1.node)("core.flow.if", {
|
|
60
|
+
kind: "core.flow.if",
|
|
61
|
+
category: "Flow Control",
|
|
62
|
+
color: "#f59e0b",
|
|
63
|
+
icon: "ti-arrows-split-2",
|
|
64
|
+
width: 96,
|
|
65
|
+
height: 96,
|
|
66
|
+
labels: ["flow", "conditional", "branch"],
|
|
67
|
+
metadata: {
|
|
68
|
+
title: "If",
|
|
69
|
+
description: "Conditional branch. Evaluates the configured condition and routes the input to the matching output.",
|
|
70
|
+
condition: { op: "eq", left: { const: true }, right: { const: true } },
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
(0, decorator_validation_1.model)()
|
|
74
|
+
], IfFlowNode);
|
|
75
|
+
/**
|
|
76
|
+
* Switch — multi-branch. Routes the input to one of the case output ports
|
|
77
|
+
* or `default` based on matching conditions. Each case defines a
|
|
78
|
+
* {@link SwitchCaseCondition} (graphical or code mode) and a dedicated
|
|
79
|
+
* output port. Cases are stored in `metadata.switch.cases` and the
|
|
80
|
+
* renderer creates dynamic output ports from them (DECAF-32 §22.2.2).
|
|
81
|
+
*
|
|
82
|
+
* The node grows in height as cases are added. Each case gets its own
|
|
83
|
+
* output port on the right side, labeled with the case label.
|
|
84
|
+
*/
|
|
85
|
+
let SwitchFlowNode = class SwitchFlowNode extends decorator_validation_1.Model {
|
|
86
|
+
};
|
|
87
|
+
exports.SwitchFlowNode = SwitchFlowNode;
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, decorator_validation_1.required)(),
|
|
90
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to switch on" }),
|
|
91
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
92
|
+
__metadata("design:type", Object)
|
|
93
|
+
], SwitchFlowNode.prototype, "value", void 0);
|
|
94
|
+
__decorate([
|
|
95
|
+
(0, decorator_validation_1.required)(),
|
|
96
|
+
(0, ui_decorators_1.uielement)("input", { label: "Default", placeholder: "Default output when no case matches" }),
|
|
97
|
+
(0, graph_1.output)({ handle: "default" }),
|
|
98
|
+
__metadata("design:type", Object)
|
|
99
|
+
], SwitchFlowNode.prototype, "default", void 0);
|
|
100
|
+
exports.SwitchFlowNode = SwitchFlowNode = __decorate([
|
|
101
|
+
(0, graph_1.node)("core.flow.switch", {
|
|
102
|
+
kind: "core.flow.switch",
|
|
103
|
+
category: "Flow Control",
|
|
104
|
+
color: "#f97316",
|
|
105
|
+
icon: "ti-arrows-shuffle",
|
|
106
|
+
width: 120,
|
|
107
|
+
height: 140,
|
|
108
|
+
labels: ["flow", "switch", "multi-branch"],
|
|
109
|
+
metadata: {
|
|
110
|
+
title: "Switch",
|
|
111
|
+
description: "Multi-branch switch. Routes the input to the first matching case output, or the default output.",
|
|
112
|
+
switch: {
|
|
113
|
+
cases: [],
|
|
114
|
+
defaultPort: "default",
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
}),
|
|
118
|
+
(0, decorator_validation_1.model)()
|
|
119
|
+
], SwitchFlowNode);
|
|
120
|
+
/**
|
|
121
|
+
* Parallel — splits execution into concurrent branches.
|
|
122
|
+
*/
|
|
123
|
+
let ParallelFlowNode = class ParallelFlowNode extends decorator_validation_1.Model {
|
|
124
|
+
};
|
|
125
|
+
exports.ParallelFlowNode = ParallelFlowNode;
|
|
126
|
+
__decorate([
|
|
127
|
+
(0, decorator_validation_1.required)(),
|
|
128
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to fan out" }),
|
|
129
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
130
|
+
__metadata("design:type", Object)
|
|
131
|
+
], ParallelFlowNode.prototype, "value", void 0);
|
|
132
|
+
__decorate([
|
|
133
|
+
(0, decorator_validation_1.required)(),
|
|
134
|
+
(0, ui_decorators_1.uielement)("input", { label: "Branches", placeholder: "Collected branch outputs" }),
|
|
135
|
+
(0, graph_1.output)({ handle: "branches" }),
|
|
136
|
+
__metadata("design:type", Array)
|
|
137
|
+
], ParallelFlowNode.prototype, "branches", void 0);
|
|
138
|
+
exports.ParallelFlowNode = ParallelFlowNode = __decorate([
|
|
139
|
+
(0, graph_1.node)("core.flow.parallel", {
|
|
140
|
+
kind: "core.flow.parallel",
|
|
141
|
+
category: "Flow Control",
|
|
142
|
+
color: "#06b6d4",
|
|
143
|
+
icon: "ti-arrows-vertical",
|
|
144
|
+
width: 96,
|
|
145
|
+
height: 96,
|
|
146
|
+
labels: ["flow", "parallel", "concurrent"],
|
|
147
|
+
metadata: {
|
|
148
|
+
title: "Parallel",
|
|
149
|
+
description: "Splits execution into concurrent branches. All branches run in parallel and outputs are collected.",
|
|
150
|
+
branchCount: 2,
|
|
151
|
+
},
|
|
152
|
+
}),
|
|
153
|
+
(0, decorator_validation_1.model)()
|
|
154
|
+
], ParallelFlowNode);
|
|
155
|
+
/**
|
|
156
|
+
* Merge — normalises branch/parallel outputs into a single output.
|
|
157
|
+
*/
|
|
158
|
+
let MergeFlowNode = class MergeFlowNode extends decorator_validation_1.Model {
|
|
159
|
+
};
|
|
160
|
+
exports.MergeFlowNode = MergeFlowNode;
|
|
161
|
+
__decorate([
|
|
162
|
+
(0, decorator_validation_1.required)(),
|
|
163
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Branch outputs", placeholder: "Outputs to merge" }),
|
|
164
|
+
(0, graph_1.input)({ handle: "values" }),
|
|
165
|
+
__metadata("design:type", Array)
|
|
166
|
+
], MergeFlowNode.prototype, "values", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
(0, decorator_validation_1.required)(),
|
|
169
|
+
(0, ui_decorators_1.uielement)("input", { label: "Merged output", placeholder: "Merged result" }),
|
|
170
|
+
(0, graph_1.output)({ handle: "merged" }),
|
|
171
|
+
__metadata("design:type", Object)
|
|
172
|
+
], MergeFlowNode.prototype, "merged", void 0);
|
|
173
|
+
exports.MergeFlowNode = MergeFlowNode = __decorate([
|
|
174
|
+
(0, graph_1.node)("core.flow.merge", {
|
|
175
|
+
kind: "core.flow.merge",
|
|
176
|
+
category: "Utility",
|
|
177
|
+
color: "#0d9488",
|
|
178
|
+
icon: "ti-arrows-merge",
|
|
179
|
+
width: 96,
|
|
180
|
+
height: 96,
|
|
181
|
+
labels: ["flow", "merge", "join"],
|
|
182
|
+
metadata: {
|
|
183
|
+
title: "Merge",
|
|
184
|
+
description: "Merges multiple branch outputs into a single normalised output object.",
|
|
185
|
+
strategy: "concat",
|
|
186
|
+
},
|
|
187
|
+
}),
|
|
188
|
+
(0, decorator_validation_1.model)()
|
|
189
|
+
], MergeFlowNode);
|
|
190
|
+
/**
|
|
191
|
+
* Map — transforms the current input into a new output object.
|
|
192
|
+
*/
|
|
193
|
+
let MapFlowNode = class MapFlowNode extends decorator_validation_1.Model {
|
|
194
|
+
};
|
|
195
|
+
exports.MapFlowNode = MapFlowNode;
|
|
196
|
+
__decorate([
|
|
197
|
+
(0, decorator_validation_1.required)(),
|
|
198
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to transform" }),
|
|
199
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
200
|
+
__metadata("design:type", Object)
|
|
201
|
+
], MapFlowNode.prototype, "value", void 0);
|
|
202
|
+
__decorate([
|
|
203
|
+
(0, decorator_validation_1.required)(),
|
|
204
|
+
(0, ui_decorators_1.uielement)("input", { label: "Transformed output", placeholder: "Mapped result" }),
|
|
205
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
206
|
+
__metadata("design:type", Object)
|
|
207
|
+
], MapFlowNode.prototype, "result", void 0);
|
|
208
|
+
exports.MapFlowNode = MapFlowNode = __decorate([
|
|
209
|
+
(0, graph_1.node)("core.flow.map", {
|
|
210
|
+
kind: "core.flow.map",
|
|
211
|
+
category: "Utility",
|
|
212
|
+
color: "#84cc16",
|
|
213
|
+
icon: "ti-arrows-right-left",
|
|
214
|
+
width: 96,
|
|
215
|
+
height: 96,
|
|
216
|
+
labels: ["flow", "map", "transform"],
|
|
217
|
+
metadata: {
|
|
218
|
+
title: "Map",
|
|
219
|
+
description: "Transforms the current input into a new output object using the configured mapper.",
|
|
220
|
+
mapper: {},
|
|
221
|
+
},
|
|
222
|
+
}),
|
|
223
|
+
(0, decorator_validation_1.model)()
|
|
224
|
+
], MapFlowNode);
|
|
225
|
+
/**
|
|
226
|
+
* Delay — pauses execution for a configured duration.
|
|
227
|
+
*/
|
|
228
|
+
let DelayFlowNode = class DelayFlowNode extends decorator_validation_1.Model {
|
|
229
|
+
};
|
|
230
|
+
exports.DelayFlowNode = DelayFlowNode;
|
|
231
|
+
__decorate([
|
|
232
|
+
(0, decorator_validation_1.required)(),
|
|
233
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to forward after delay" }),
|
|
234
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
235
|
+
__metadata("design:type", Object)
|
|
236
|
+
], DelayFlowNode.prototype, "value", void 0);
|
|
237
|
+
__decorate([
|
|
238
|
+
(0, decorator_validation_1.required)(),
|
|
239
|
+
(0, ui_decorators_1.uielement)("input", { label: "Output value", placeholder: "Forwarded value" }),
|
|
240
|
+
(0, graph_1.output)({ handle: "value" }),
|
|
241
|
+
__metadata("design:type", Object)
|
|
242
|
+
], DelayFlowNode.prototype, "valueOut", void 0);
|
|
243
|
+
exports.DelayFlowNode = DelayFlowNode = __decorate([
|
|
244
|
+
(0, graph_1.node)("core.flow.delay", {
|
|
245
|
+
kind: "core.flow.delay",
|
|
246
|
+
category: "Utility",
|
|
247
|
+
color: "#a3a3a3",
|
|
248
|
+
icon: "ti-clock-hour-4",
|
|
249
|
+
width: 96,
|
|
250
|
+
height: 96,
|
|
251
|
+
labels: ["flow", "delay", "wait"],
|
|
252
|
+
metadata: {
|
|
253
|
+
title: "Delay",
|
|
254
|
+
description: "Pauses execution for the configured duration (in milliseconds), then forwards the input unchanged.",
|
|
255
|
+
durationMs: 1000,
|
|
256
|
+
},
|
|
257
|
+
}),
|
|
258
|
+
(0, decorator_validation_1.model)()
|
|
259
|
+
], DelayFlowNode);
|
|
260
|
+
/**
|
|
261
|
+
* Error boundary — try/catch/finally workflow behaviour.
|
|
262
|
+
*/
|
|
263
|
+
let ErrorBoundaryFlowNode = class ErrorBoundaryFlowNode extends decorator_validation_1.Model {
|
|
264
|
+
};
|
|
265
|
+
exports.ErrorBoundaryFlowNode = ErrorBoundaryFlowNode;
|
|
266
|
+
__decorate([
|
|
267
|
+
(0, decorator_validation_1.required)(),
|
|
268
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to guard" }),
|
|
269
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
270
|
+
__metadata("design:type", Object)
|
|
271
|
+
], ErrorBoundaryFlowNode.prototype, "value", void 0);
|
|
272
|
+
__decorate([
|
|
273
|
+
(0, decorator_validation_1.required)(),
|
|
274
|
+
(0, ui_decorators_1.uielement)("input", { label: "Result", placeholder: "Output on success" }),
|
|
275
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
276
|
+
__metadata("design:type", Object)
|
|
277
|
+
], ErrorBoundaryFlowNode.prototype, "result", void 0);
|
|
278
|
+
__decorate([
|
|
279
|
+
(0, decorator_validation_1.required)(),
|
|
280
|
+
(0, ui_decorators_1.uielement)("input", { label: "Error", placeholder: "Output on failure" }),
|
|
281
|
+
(0, graph_1.output)({ handle: "error" }),
|
|
282
|
+
__metadata("design:type", Object)
|
|
283
|
+
], ErrorBoundaryFlowNode.prototype, "error", void 0);
|
|
284
|
+
exports.ErrorBoundaryFlowNode = ErrorBoundaryFlowNode = __decorate([
|
|
285
|
+
(0, graph_1.node)("core.flow.errorBoundary", {
|
|
286
|
+
kind: "core.flow.errorBoundary",
|
|
287
|
+
category: "Flow Control",
|
|
288
|
+
color: "#ef4444",
|
|
289
|
+
icon: "ti-shield-check",
|
|
290
|
+
width: 96,
|
|
291
|
+
height: 96,
|
|
292
|
+
labels: ["flow", "error", "try-catch"],
|
|
293
|
+
metadata: {
|
|
294
|
+
title: "Error boundary",
|
|
295
|
+
description: "Wraps the input in a try/catch/finally. Emits the result on success, or the error on failure.",
|
|
296
|
+
finally: false,
|
|
297
|
+
},
|
|
298
|
+
}),
|
|
299
|
+
(0, decorator_validation_1.model)()
|
|
300
|
+
], ErrorBoundaryFlowNode);
|
|
301
|
+
/**
|
|
302
|
+
* Human approval — suspends execution until a human approves or rejects.
|
|
303
|
+
*/
|
|
304
|
+
let HumanApprovalFlowNode = class HumanApprovalFlowNode extends decorator_validation_1.Model {
|
|
305
|
+
};
|
|
306
|
+
exports.HumanApprovalFlowNode = HumanApprovalFlowNode;
|
|
307
|
+
__decorate([
|
|
308
|
+
(0, decorator_validation_1.required)(),
|
|
309
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value pending approval" }),
|
|
310
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
311
|
+
__metadata("design:type", Object)
|
|
312
|
+
], HumanApprovalFlowNode.prototype, "value", void 0);
|
|
313
|
+
__decorate([
|
|
314
|
+
(0, decorator_validation_1.required)(),
|
|
315
|
+
(0, ui_decorators_1.uielement)("input", { label: "Approved", placeholder: "Output when approved" }),
|
|
316
|
+
(0, graph_1.output)({ handle: "approved" }),
|
|
317
|
+
__metadata("design:type", Object)
|
|
318
|
+
], HumanApprovalFlowNode.prototype, "approved", void 0);
|
|
319
|
+
__decorate([
|
|
320
|
+
(0, decorator_validation_1.required)(),
|
|
321
|
+
(0, ui_decorators_1.uielement)("input", { label: "Rejected", placeholder: "Output when rejected" }),
|
|
322
|
+
(0, graph_1.output)({ handle: "rejected" }),
|
|
323
|
+
__metadata("design:type", Object)
|
|
324
|
+
], HumanApprovalFlowNode.prototype, "rejected", void 0);
|
|
325
|
+
exports.HumanApprovalFlowNode = HumanApprovalFlowNode = __decorate([
|
|
326
|
+
(0, graph_1.node)("core.flow.humanApproval", {
|
|
327
|
+
kind: "core.flow.humanApproval",
|
|
328
|
+
category: "Flow Control",
|
|
329
|
+
color: "#d946ef",
|
|
330
|
+
icon: "ti-user-check",
|
|
331
|
+
width: 96,
|
|
332
|
+
height: 96,
|
|
333
|
+
labels: ["flow", "approval", "suspend"],
|
|
334
|
+
metadata: {
|
|
335
|
+
title: "Human approval",
|
|
336
|
+
description: "Suspends execution until a human approves or rejects. Emits the approved value or a rejection.",
|
|
337
|
+
approvers: [],
|
|
338
|
+
timeoutMs: 86400000,
|
|
339
|
+
},
|
|
340
|
+
}),
|
|
341
|
+
(0, decorator_validation_1.model)()
|
|
342
|
+
], HumanApprovalFlowNode);
|
|
343
|
+
/**
|
|
344
|
+
* Return — defines and normalises the final workflow output.
|
|
345
|
+
*/
|
|
346
|
+
let ReturnFlowNode = class ReturnFlowNode extends decorator_validation_1.Model {
|
|
347
|
+
};
|
|
348
|
+
exports.ReturnFlowNode = ReturnFlowNode;
|
|
349
|
+
__decorate([
|
|
350
|
+
(0, decorator_validation_1.required)(),
|
|
351
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to normalise" }),
|
|
352
|
+
(0, graph_1.input)({ handle: "value" }),
|
|
353
|
+
__metadata("design:type", Object)
|
|
354
|
+
], ReturnFlowNode.prototype, "value", void 0);
|
|
355
|
+
__decorate([
|
|
356
|
+
(0, decorator_validation_1.required)(),
|
|
357
|
+
(0, ui_decorators_1.uielement)("input", { label: "Returned output", placeholder: "Normalised output" }),
|
|
358
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
359
|
+
__metadata("design:type", Object)
|
|
360
|
+
], ReturnFlowNode.prototype, "result", void 0);
|
|
361
|
+
exports.ReturnFlowNode = ReturnFlowNode = __decorate([
|
|
362
|
+
(0, graph_1.node)("core.flow.return", {
|
|
363
|
+
kind: "core.flow.return",
|
|
364
|
+
category: "Utility",
|
|
365
|
+
color: "#22c55e",
|
|
366
|
+
icon: "ti-arrow-back-up",
|
|
367
|
+
width: 96,
|
|
368
|
+
height: 96,
|
|
369
|
+
labels: ["flow", "return", "output"],
|
|
370
|
+
metadata: {
|
|
371
|
+
title: "Return",
|
|
372
|
+
description: "Normalises the input into the final workflow output object.",
|
|
373
|
+
outputSchema: {},
|
|
374
|
+
},
|
|
375
|
+
}),
|
|
376
|
+
(0, decorator_validation_1.model)()
|
|
377
|
+
], ReturnFlowNode);
|
|
378
|
+
/**
|
|
379
|
+
* Code — sandboxed JS/TS code execution (ALFRED-5 §7).
|
|
380
|
+
*
|
|
381
|
+
* The engine does not implement the sandbox directly (§22.4). A future
|
|
382
|
+
* executor may wrap the `CodeSandbox` contract (ALFRED-5 §7.17) as a
|
|
383
|
+
* pluggable executor. The placeholder syntax (`{{ $input }}`, `{{ $item }}`,
|
|
384
|
+
* `{{ $index }}`, `{{ $vars }}`, `{{ $node["Name"].output }}`) is Mastra-
|
|
385
|
+
* agnostic and lives in the downstream project's `modules/core` (ALFRED-6).
|
|
386
|
+
*/
|
|
387
|
+
let CodeFlowNode = class CodeFlowNode extends decorator_validation_1.Model {
|
|
388
|
+
};
|
|
389
|
+
exports.CodeFlowNode = CodeFlowNode;
|
|
390
|
+
__decorate([
|
|
391
|
+
(0, decorator_validation_1.required)(),
|
|
392
|
+
(0, ui_decorators_1.uielement)("textarea", { label: "Input", placeholder: "Input object (accessible as $input)" }),
|
|
393
|
+
(0, graph_1.input)({ handle: "input" }),
|
|
394
|
+
__metadata("design:type", Object)
|
|
395
|
+
], CodeFlowNode.prototype, "input", void 0);
|
|
396
|
+
__decorate([
|
|
397
|
+
(0, decorator_validation_1.required)(),
|
|
398
|
+
(0, ui_decorators_1.uielement)("input", { label: "Result", placeholder: "Code execution result" }),
|
|
399
|
+
(0, graph_1.output)({ handle: "result" }),
|
|
400
|
+
__metadata("design:type", Object)
|
|
401
|
+
], CodeFlowNode.prototype, "result", void 0);
|
|
402
|
+
exports.CodeFlowNode = CodeFlowNode = __decorate([
|
|
403
|
+
(0, graph_1.node)("core.flow.code", {
|
|
404
|
+
kind: "core.flow.code",
|
|
405
|
+
category: "Utility",
|
|
406
|
+
color: "#7c3aed",
|
|
407
|
+
icon: "ti-code",
|
|
408
|
+
width: 96,
|
|
409
|
+
height: 96,
|
|
410
|
+
labels: ["flow", "code", "sandbox", "transform"],
|
|
411
|
+
metadata: {
|
|
412
|
+
title: "Code",
|
|
413
|
+
description: "Runs user-authored JS/TS in a restricted VM sandbox. Supports placeholder syntax for workflow data references.",
|
|
414
|
+
code: "",
|
|
415
|
+
language: "javascript",
|
|
416
|
+
},
|
|
417
|
+
}),
|
|
418
|
+
(0, decorator_validation_1.model)()
|
|
419
|
+
], CodeFlowNode);
|
|
420
|
+
/**
|
|
421
|
+
* All built-in flow-control node constructors.
|
|
422
|
+
*/
|
|
423
|
+
exports.GRAPH_FLOW_CONTROL_NODES = [
|
|
424
|
+
IfFlowNode,
|
|
425
|
+
SwitchFlowNode,
|
|
426
|
+
ParallelFlowNode,
|
|
427
|
+
MergeFlowNode,
|
|
428
|
+
MapFlowNode,
|
|
429
|
+
DelayFlowNode,
|
|
430
|
+
ErrorBoundaryFlowNode,
|
|
431
|
+
HumanApprovalFlowNode,
|
|
432
|
+
ReturnFlowNode,
|
|
433
|
+
CodeFlowNode,
|
|
434
|
+
];
|
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dyYXBoL25vZGVzL2Zsb3ctY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVwRTs7O0dBR0c7QUFnQkksSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVyxTQUFRLEtBQUs7Q0FlcEMsQ0FBQTtBQVhDO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDakYsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOzt5Q0FDWDtBQUtoQjtJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSwrQkFBK0IsRUFBRSxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQzs7d0NBQ1o7QUFLZjtJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDO0lBQ3BGLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQzs7d0NBQ1o7QUFkSixVQUFVO0lBZnRCLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDcEIsSUFBSSxFQUFF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O0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxVQUFVO0lBQ1YsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsV0FBVztJQUNYLGFBQWE7SUFDYixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGNBQWM7SUFDZCxZQUFZO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvbm9kZXMvZmxvdy1jb250cm9sXG4gKiBAc3VtbWFyeSBQcm9kdWN0aW9uIGZsb3ctY29udHJvbCBub2RlIGtpbmQgZGVjbGFyYXRpb25zIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKiBAZGVzY3JpcHRpb24gQ2Fub25pY2FsIGBAbm9kZWAtZGVjb3JhdGVkIGNsYXNzZXMgZm9yIHRoZSB0ZW4gQUxGUkVELTVcbiAqIGZsb3ctY29udHJvbCBraW5kcy4gVGhlc2UgYXJlIGdyYXBoLWxldmVsIG1hY3JvczogdGhlIGVuZ2luZSdzIHBsYW5uZXJcbiAqIHJlY29nbmlzZXMgdGhlbSBhcyBvcmRpbmFyeSBleGVjdXRhYmxlIG5vZGVzICjCpzUuNykgYnV0IHRoZXkgaGF2ZSBub1xuICogYnVpbHQtaW4gZXhlY3V0b3JzIOKAlCBkb3duc3RyZWFtIHByb2plY3RzIChlLmcuIEFMRlJFRCkgcmVnaXN0ZXIgY3VzdG9tXG4gKiBleGVjdXRvcnMgb3IgY29tcGlsZSB0aGVtIGludG8gTWFzdHJhIGNvbXBvc2l0aW9uIEFQSXMgKMKnMjIuMi4yKS5cbiAqXG4gKiBUaGUgdGhyZWUgbG9vcCBraW5kcyAoYGNvcmUubG9vcC5mb3JlYWNoL3doaWxlL3VudGlsYCkgYWxyZWFkeSBoYXZlIGJ1aWx0LWluXG4gKiBleGVjdXRvcnMgKMKnNS45KSBhbmQgYXJlIE5PVCByZWRlY2xhcmVkIGhlcmUuXG4gKi9cbmltcG9ydCB7IE1vZGVsLCBtb2RlbCwgcmVxdWlyZWQgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB1aWVsZW1lbnQgfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IGlucHV0LCBub2RlLCBvdXRwdXQgfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuLyoqXG4gKiBJZiDigJQgY29uZGl0aW9uYWwgYnJhbmNoLiBFdmFsdWF0ZXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKMKnMjIuMykgYW5kXG4gKiByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBgdGhlbmAgb3IgYGVsc2VgIG91dHB1dC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuaWZcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5pZlwiLFxuICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgY29sb3I6IFwiI2Y1OWUwYlwiLFxuICBpY29uOiBcInRpLWFycm93cy1zcGxpdC0yXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiY29uZGl0aW9uYWxcIiwgXCJicmFuY2hcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiSWZcIixcbiAgICBkZXNjcmlwdGlvbjogXCJDb25kaXRpb25hbCBicmFuY2guIEV2YWx1YXRlcyB0aGUgY29uZmlndXJlZCBjb25kaXRpb24gYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlIG1hdGNoaW5nIG91dHB1dC5cIixcbiAgICBjb25kaXRpb246IHsgb3A6IFwiZXFcIiwgbGVmdDogeyBjb25zdDogdHJ1ZSB9LCByaWdodDogeyBjb25zdDogdHJ1ZSB9IH0sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBJZkZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBldmFsdWF0ZVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJUaGVuXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCB3aGVuIGNvbmRpdGlvbiBpcyB0cnVlXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJ0aGVuXCIgfSlcbiAgdGhlbiE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRWxzZVwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBjb25kaXRpb24gaXMgZmFsc2VcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImVsc2VcIiB9KVxuICBlbHNlITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTd2l0Y2gg4oCUIG11bHRpLWJyYW5jaC4gUm91dGVzIHRoZSBpbnB1dCB0byBvbmUgb2YgdGhlIGNhc2Ugb3V0cHV0IHBvcnRzXG4gKiBvciBgZGVmYXVsdGAgYmFzZWQgb24gbWF0Y2hpbmcgY29uZGl0aW9ucy4gRWFjaCBjYXNlIGRlZmluZXMgYVxuICoge0BsaW5rIFN3aXRjaENhc2VDb25kaXRpb259IChncmFwaGljYWwgb3IgY29kZSBtb2RlKSBhbmQgYSBkZWRpY2F0ZWRcbiAqIG91dHB1dCBwb3J0LiBDYXNlcyBhcmUgc3RvcmVkIGluIGBtZXRhZGF0YS5zd2l0Y2guY2FzZXNgIGFuZCB0aGVcbiAqIHJlbmRlcmVyIGNyZWF0ZXMgZHluYW1pYyBvdXRwdXQgcG9ydHMgZnJvbSB0aGVtIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKlxuICogVGhlIG5vZGUgZ3Jvd3MgaW4gaGVpZ2h0IGFzIGNhc2VzIGFyZSBhZGRlZC4gRWFjaCBjYXNlIGdldHMgaXRzIG93blxuICogb3V0cHV0IHBvcnQgb24gdGhlIHJpZ2h0IHNpZGUsIGxhYmVsZWQgd2l0aCB0aGUgY2FzZSBsYWJlbC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuc3dpdGNoXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuc3dpdGNoXCIsXG4gIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICBjb2xvcjogXCIjZjk3MzE2XCIsXG4gIGljb246IFwidGktYXJyb3dzLXNodWZmbGVcIixcbiAgd2lkdGg6IDEyMCxcbiAgaGVpZ2h0OiAxNDAsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcInN3aXRjaFwiLCBcIm11bHRpLWJyYW5jaFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJTd2l0Y2hcIixcbiAgICBkZXNjcmlwdGlvbjogXCJNdWx0aS1icmFuY2ggc3dpdGNoLiBSb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBmaXJzdCBtYXRjaGluZyBjYXNlIG91dHB1dCwgb3IgdGhlIGRlZmF1bHQgb3V0cHV0LlwiLFxuICAgIHN3aXRjaDoge1xuICAgICAgY2FzZXM6IFtdLFxuICAgICAgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLFxuICAgIH0sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBTd2l0Y2hGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gc3dpdGNoIG9uXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiRGVmYXVsdCBvdXRwdXQgd2hlbiBubyBjYXNlIG1hdGNoZXNcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImRlZmF1bHRcIiB9KVxuICBkZWZhdWx0ITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBQYXJhbGxlbCDigJQgc3BsaXRzIGV4ZWN1dGlvbiBpbnRvIGNvbmN1cnJlbnQgYnJhbmNoZXMuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LnBhcmFsbGVsXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cucGFyYWxsZWxcIixcbiAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gIGNvbG9yOiBcIiMwNmI2ZDRcIixcbiAgaWNvbjogXCJ0aS1hcnJvd3MtdmVydGljYWxcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJwYXJhbGxlbFwiLCBcImNvbmN1cnJlbnRcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiUGFyYWxsZWxcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTcGxpdHMgZXhlY3V0aW9uIGludG8gY29uY3VycmVudCBicmFuY2hlcy4gQWxsIGJyYW5jaGVzIHJ1biBpbiBwYXJhbGxlbCBhbmQgb3V0cHV0cyBhcmUgY29sbGVjdGVkLlwiLFxuICAgIGJyYW5jaENvdW50OiAyLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgUGFyYWxsZWxGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZmFuIG91dFwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJCcmFuY2hlc1wiLCBwbGFjZWhvbGRlcjogXCJDb2xsZWN0ZWQgYnJhbmNoIG91dHB1dHNcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImJyYW5jaGVzXCIgfSlcbiAgYnJhbmNoZXMhOiB1bmtub3duW107XG59XG5cbi8qKlxuICogTWVyZ2Ug4oCUIG5vcm1hbGlzZXMgYnJhbmNoL3BhcmFsbGVsIG91dHB1dHMgaW50byBhIHNpbmdsZSBvdXRwdXQuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93Lm1lcmdlXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cubWVyZ2VcIixcbiAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICBjb2xvcjogXCIjMGQ5NDg4XCIsXG4gIGljb246IFwidGktYXJyb3dzLW1lcmdlXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwibWVyZ2VcIiwgXCJqb2luXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIk1lcmdlXCIsXG4gICAgZGVzY3JpcHRpb246IFwiTWVyZ2VzIG11bHRpcGxlIGJyYW5jaCBvdXRwdXRzIGludG8gYSBzaW5nbGUgbm9ybWFsaXNlZCBvdXRwdXQgb2JqZWN0LlwiLFxuICAgIHN0cmF0ZWd5OiBcImNvbmNhdFwiLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgTWVyZ2VGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiQnJhbmNoIG91dHB1dHNcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0cyB0byBtZXJnZVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZXNcIiB9KVxuICB2YWx1ZXMhOiB1bmtub3duW107XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiTWVyZ2VkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJNZXJnZWQgcmVzdWx0XCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJtZXJnZWRcIiB9KVxuICBtZXJnZWQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIE1hcCDigJQgdHJhbnNmb3JtcyB0aGUgY3VycmVudCBpbnB1dCBpbnRvIGEgbmV3IG91dHB1dCBvYmplY3QuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93Lm1hcFwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93Lm1hcFwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiM4NGNjMTZcIixcbiAgaWNvbjogXCJ0aS1hcnJvd3MtcmlnaHQtbGVmdFwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcIm1hcFwiLCBcInRyYW5zZm9ybVwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJNYXBcIixcbiAgICBkZXNjcmlwdGlvbjogXCJUcmFuc2Zvcm1zIHRoZSBjdXJyZW50IGlucHV0IGludG8gYSBuZXcgb3V0cHV0IG9iamVjdCB1c2luZyB0aGUgY29uZmlndXJlZCBtYXBwZXIuXCIsXG4gICAgbWFwcGVyOiB7fSxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIE1hcEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byB0cmFuc2Zvcm1cIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiVHJhbnNmb3JtZWQgb3V0cHV0XCIsIHBsYWNlaG9sZGVyOiBcIk1hcHBlZCByZXN1bHRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pXG4gIHJlc3VsdCE6IHVua25vd247XG59XG5cbi8qKlxuICogRGVsYXkg4oCUIHBhdXNlcyBleGVjdXRpb24gZm9yIGEgY29uZmlndXJlZCBkdXJhdGlvbi5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuZGVsYXlcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5kZWxheVwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiNhM2EzYTNcIixcbiAgaWNvbjogXCJ0aS1jbG9jay1ob3VyLTRcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJkZWxheVwiLCBcIndhaXRcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiRGVsYXlcIixcbiAgICBkZXNjcmlwdGlvbjogXCJQYXVzZXMgZXhlY3V0aW9uIGZvciB0aGUgY29uZmlndXJlZCBkdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSwgdGhlbiBmb3J3YXJkcyB0aGUgaW5wdXQgdW5jaGFuZ2VkLlwiLFxuICAgIGR1cmF0aW9uTXM6IDEwMDAsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBEZWxheUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBmb3J3YXJkIGFmdGVyIGRlbGF5XCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIk91dHB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJGb3J3YXJkZWQgdmFsdWVcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWVPdXQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEVycm9yIGJvdW5kYXJ5IOKAlCB0cnkvY2F0Y2gvZmluYWxseSB3b3JrZmxvdyBiZWhhdmlvdXIuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LmVycm9yQm91bmRhcnlcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5lcnJvckJvdW5kYXJ5XCIsXG4gIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICBjb2xvcjogXCIjZWY0NDQ0XCIsXG4gIGljb246IFwidGktc2hpZWxkLWNoZWNrXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiZXJyb3JcIiwgXCJ0cnktY2F0Y2hcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiRXJyb3IgYm91bmRhcnlcIixcbiAgICBkZXNjcmlwdGlvbjogXCJXcmFwcyB0aGUgaW5wdXQgaW4gYSB0cnkvY2F0Y2gvZmluYWxseS4gRW1pdHMgdGhlIHJlc3VsdCBvbiBzdWNjZXNzLCBvciB0aGUgZXJyb3Igb24gZmFpbHVyZS5cIixcbiAgICBmaW5hbGx5OiBmYWxzZSxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIEVycm9yQm91bmRhcnlGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZ3VhcmRcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVzdWx0XCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCBvbiBzdWNjZXNzXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KVxuICByZXN1bHQhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkVycm9yXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCBvbiBmYWlsdXJlXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJlcnJvclwiIH0pXG4gIGVycm9yITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBIdW1hbiBhcHByb3ZhbCDigJQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuaHVtYW5BcHByb3ZhbFwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93Lmh1bWFuQXBwcm92YWxcIixcbiAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gIGNvbG9yOiBcIiNkOTQ2ZWZcIixcbiAgaWNvbjogXCJ0aS11c2VyLWNoZWNrXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiYXBwcm92YWxcIiwgXCJzdXNwZW5kXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIkh1bWFuIGFwcHJvdmFsXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy4gRW1pdHMgdGhlIGFwcHJvdmVkIHZhbHVlIG9yIGEgcmVqZWN0aW9uLlwiLFxuICAgIGFwcHJvdmVyczogW10sXG4gICAgdGltZW91dE1zOiA4NjQwMDAwMCxcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIEh1bWFuQXBwcm92YWxGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgcGVuZGluZyBhcHByb3ZhbFwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJBcHByb3ZlZFwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBhcHByb3ZlZFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwiYXBwcm92ZWRcIiB9KVxuICBhcHByb3ZlZCE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVqZWN0ZWRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gcmVqZWN0ZWRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlamVjdGVkXCIgfSlcbiAgcmVqZWN0ZWQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFJldHVybiDigJQgZGVmaW5lcyBhbmQgbm9ybWFsaXNlcyB0aGUgZmluYWwgd29ya2Zsb3cgb3V0cHV0LlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5yZXR1cm5cIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5yZXR1cm5cIixcbiAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICBjb2xvcjogXCIjMjJjNTVlXCIsXG4gIGljb246IFwidGktYXJyb3ctYmFjay11cFwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcInJldHVyblwiLCBcIm91dHB1dFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJSZXR1cm5cIixcbiAgICBkZXNjcmlwdGlvbjogXCJOb3JtYWxpc2VzIHRoZSBpbnB1dCBpbnRvIHRoZSBmaW5hbCB3b3JrZmxvdyBvdXRwdXQgb2JqZWN0LlwiLFxuICAgIG91dHB1dFNjaGVtYToge30sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBSZXR1cm5GbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gbm9ybWFsaXNlXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJldHVybmVkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJOb3JtYWxpc2VkIG91dHB1dFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSlcbiAgcmVzdWx0ITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBDb2RlIOKAlCBzYW5kYm94ZWQgSlMvVFMgY29kZSBleGVjdXRpb24gKEFMRlJFRC01IMKnNykuXG4gKlxuICogVGhlIGVuZ2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHNhbmRib3ggZGlyZWN0bHkgKMKnMjIuNCkuIEEgZnV0dXJlXG4gKiBleGVjdXRvciBtYXkgd3JhcCB0aGUgYENvZGVTYW5kYm94YCBjb250cmFjdCAoQUxGUkVELTUgwqc3LjE3KSBhcyBhXG4gKiBwbHVnZ2FibGUgZXhlY3V0b3IuIFRoZSBwbGFjZWhvbGRlciBzeW50YXggKGB7eyAkaW5wdXQgfX1gLCBge3sgJGl0ZW0gfX1gLFxuICogYHt7ICRpbmRleCB9fWAsIGB7eyAkdmFycyB9fWAsIGB7eyAkbm9kZVtcIk5hbWVcIl0ub3V0cHV0IH19YCkgaXMgTWFzdHJhLVxuICogYWdub3N0aWMgYW5kIGxpdmVzIGluIHRoZSBkb3duc3RyZWFtIHByb2plY3QncyBgbW9kdWxlcy9jb3JlYCAoQUxGUkVELTYpLlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5jb2RlXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuY29kZVwiLFxuICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gIGNvbG9yOiBcIiM3YzNhZWRcIixcbiAgaWNvbjogXCJ0aS1jb2RlXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiY29kZVwiLCBcInNhbmRib3hcIiwgXCJ0cmFuc2Zvcm1cIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiQ29kZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlJ1bnMgdXNlci1hdXRob3JlZCBKUy9UUyBpbiBhIHJlc3RyaWN0ZWQgVk0gc2FuZGJveC4gU3VwcG9ydHMgcGxhY2Vob2xkZXIgc3ludGF4IGZvciB3b3JrZmxvdyBkYXRhIHJlZmVyZW5jZXMuXCIsXG4gICAgY29kZTogXCJcIixcbiAgICBsYW5ndWFnZTogXCJqYXZhc2NyaXB0XCIsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBDb2RlRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0XCIsIHBsYWNlaG9sZGVyOiBcIklucHV0IG9iamVjdCAoYWNjZXNzaWJsZSBhcyAkaW5wdXQpXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcImlucHV0XCIgfSlcbiAgaW5wdXQhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJlc3VsdFwiLCBwbGFjZWhvbGRlcjogXCJDb2RlIGV4ZWN1dGlvbiByZXN1bHRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pXG4gIHJlc3VsdCE6IHVua25vd247XG59XG5cbi8qKlxuICogQWxsIGJ1aWx0LWluIGZsb3ctY29udHJvbCBub2RlIGNvbnN0cnVjdG9ycy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdSQVBIX0ZMT1dfQ09OVFJPTF9OT0RFUyA9IFtcbiAgSWZGbG93Tm9kZSxcbiAgU3dpdGNoRmxvd05vZGUsXG4gIFBhcmFsbGVsRmxvd05vZGUsXG4gIE1lcmdlRmxvd05vZGUsXG4gIE1hcEZsb3dOb2RlLFxuICBEZWxheUZsb3dOb2RlLFxuICBFcnJvckJvdW5kYXJ5Rmxvd05vZGUsXG4gIEh1bWFuQXBwcm92YWxGbG93Tm9kZSxcbiAgUmV0dXJuRmxvd05vZGUsXG4gIENvZGVGbG93Tm9kZSxcbl0gYXMgY29uc3Q7XG4iXX0=
|
|
436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmxvdy1jb250cm9sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDakYsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVTtRQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztRQUMxSCxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xKLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFDRixJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztJQUN4RCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVTtRQUFFLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0csQ0FBQyxDQUFDO0FBQ0Y7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCx5RUFBd0U7QUFDeEUsMkRBQW9EO0FBQ3BELHlEQUFvRTtBQUNwRTs7O0dBR0c7QUFDSCxJQUFJLFVBQVUsR0FBRyxNQUFNLFVBQVcsU0FBUSw0QkFBSztDQUM5QyxDQUFDO0FBb0NPLGdDQUFVO0FBbkNuQixVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUNqRixJQUFBLGFBQUssRUFBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxQixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUMsVUFBVSxDQUFDO0lBQ1AsSUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSx5QkFBUyxFQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLCtCQUErQixFQUFFLENBQUM7SUFDbkYsSUFBQSxjQUFNLEVBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDMUIsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLFVBQVUsQ0FBQztJQUNQLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEseUJBQVMsRUFBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDO0lBQ3BGLElBQUEsY0FBTSxFQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzFCLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3BDLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN6QyxxQkFBQSxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQ3BCLElBQUEsWUFBSSxFQUFDLGNBQWMsRUFBRTtRQUNqQixJQUFJLEVBQUUsY0FBYztRQUNwQixRQUFRLEVBQUUsY0FBYztRQUN4QixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQztRQUN6QyxRQUFRLEVBQUU7WUFDTixLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxxR0FBcUc7WUFDbEgsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1NBQ3pFO0tBQ0osQ0FBQztJQUNGLElBQUEsNEJBQUssR0FBRTtDQUNWLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFZjs7Ozs7Ozs7O0dBU0c7QUFDSCxJQUFJLGNBQWMsR0FBRyxNQUFNLGNBQWUsU0FBUSw0QkFBSztDQUN0RCxDQUFDO0FBaUNPLHdDQUFjO0FBaEN2QixVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRixJQUFBLGFBQUssRUFBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxQixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLGNBQWMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUMsVUFBVSxDQUFDO0lBQ1AsSUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSx5QkFBUyxFQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLHFDQUFxQyxFQUFFLENBQUM7SUFDNUYsSUFBQSxjQUFNLEVBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDN0IsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hELHlCQUFBLGNBQWMsR0FBRyxVQUFVLENBQUM7SUFDeEIsSUFBQSxZQUFJLEVBQUMsa0JBQWtCLEVBQUU7UUFDckIsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixRQUFRLEVBQUUsY0FBYztRQUN4QixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsbUJBQW1CO1FBQ3pCLEtBQUssRUFBRSxHQUFHO1FBQ1YsTUFBTSxFQUFFLEdBQUc7UUFDWCxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQztRQUMxQyxRQUFRLEVBQUU7WUFDTixLQUFLLEVBQUUsUUFBUTtZQUNmLFdBQVcsRUFBRSxpR0FBaUc7WUFDOUcsTUFBTSxFQUFFO2dCQUNKLEtBQUssRUFBRSxFQUFFO2dCQUNULFdBQVcsRUFBRSxTQUFTO2FBQ3pCO1NBQ0o7S0FDSixDQUFDO0lBQ0YsSUFBQSw0QkFBSyxHQUFFO0NBQ1YsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVuQjs7R0FFRztBQUNILElBQUksZ0JBQWdCLEdBQUcsTUFBTSxnQkFBaUIsU0FBUSw0QkFBSztDQUMxRCxDQUFDO0FBOEJPLDRDQUFnQjtBQTdCekIsVUFBVSxDQUFDO0lBQ1AsSUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSx5QkFBUyxFQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUM7SUFDaEYsSUFBQSxhQUFLLEVBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUIsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEQsVUFBVSxDQUFDO0lBQ1AsSUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSx5QkFBUyxFQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLDBCQUEwQixFQUFFLENBQUM7SUFDbEYsSUFBQSxjQUFNLEVBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDOUIsVUFBVSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7Q0FDbkMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbkQsMkJBQUEsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO0lBQzFCLElBQUEsWUFBSSxFQUFDLG9CQUFvQixFQUFFO1FBQ3ZCLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsUUFBUSxFQUFFLGNBQWM7UUFDeEIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUM7UUFDMUMsUUFBUSxFQUFFO1lBQ04sS0FBSyxFQUFFLFVBQVU7WUFDakIsV0FBVyxFQUFFLG9HQUFvRztZQUNqSCxXQUFXLEVBQUUsQ0FBQztTQUNqQjtLQUNKLENBQUM7SUFDRixJQUFBLDRCQUFLLEdBQUU7Q0FDVixFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFFckI7O0dBRUc7QUFDSCxJQUFJLGFBQWEsR0FBRyxNQUFNLGFBQWMsU0FBUSw0QkFBSztDQUNwRCxDQUFDO0FBOEJPLHNDQUFhO0FBN0J0QixVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQ25GLElBQUEsYUFBSyxFQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzNCLFVBQVUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDO0NBQ25DLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM5QyxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDNUUsSUFBQSxjQUFNLEVBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUIsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlDLHdCQUFBLGFBQWEsR0FBRyxVQUFVLENBQUM7SUFDdkIsSUFBQSxZQUFJLEVBQUMsaUJBQWlCLEVBQUU7UUFDcEIsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixRQUFRLEVBQUUsU0FBUztRQUNuQixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUNqQyxRQUFRLEVBQUU7WUFDTixLQUFLLEVBQUUsT0FBTztZQUNkLFdBQVcsRUFBRSx3RUFBd0U7WUFDckYsUUFBUSxFQUFFLFFBQVE7U0FDckI7S0FDSixDQUFDO0lBQ0YsSUFBQSw0QkFBSyxHQUFFO0NBQ1YsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUVsQjs7R0FFRztBQUNILElBQUksV0FBVyxHQUFHLE1BQU0sV0FBWSxTQUFRLDRCQUFLO0NBQ2hELENBQUM7QUE4Qk8sa0NBQVc7QUE3QnBCLFVBQVUsQ0FBQztJQUNQLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEseUJBQVMsRUFBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxDQUFDO0lBQ2xGLElBQUEsYUFBSyxFQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFCLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3BDLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMzQyxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUNqRixJQUFBLGNBQU0sRUFBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUM1QixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUMsc0JBQUEsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNyQixJQUFBLFlBQUksRUFBQyxlQUFlLEVBQUU7UUFDbEIsSUFBSSxFQUFFLGVBQWU7UUFDckIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUM7UUFDcEMsUUFBUSxFQUFFO1lBQ04sS0FBSyxFQUFFLEtBQUs7WUFDWixXQUFXLEVBQUUsb0ZBQW9GO1lBQ2pHLE1BQU0sRUFBRSxFQUFFO1NBQ2I7S0FDSixDQUFDO0lBQ0YsSUFBQSw0QkFBSyxHQUFFO0NBQ1YsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUVoQjs7R0FFRztBQUNILElBQUksYUFBYSxHQUFHLE1BQU0sYUFBYyxTQUFRLDRCQUFLO0NBQ3BELENBQUM7QUE4Qk8sc0NBQWE7QUE3QnRCLFVBQVUsQ0FBQztJQUNQLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEseUJBQVMsRUFBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSw4QkFBOEIsRUFBRSxDQUFDO0lBQzVGLElBQUEsYUFBSyxFQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFCLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3BDLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3QyxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztJQUM3RSxJQUFBLGNBQU0sRUFBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEQsd0JBQUEsYUFBYSxHQUFHLFVBQVUsQ0FBQztJQUN2QixJQUFBLFlBQUksRUFBQyxpQkFBaUIsRUFBRTtRQUNwQixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ2pDLFFBQVEsRUFBRTtZQUNOLEtBQUssRUFBRSxPQUFPO1lBQ2QsV0FBVyxFQUFFLG9HQUFvRztZQUNqSCxVQUFVLEVBQUUsSUFBSTtTQUNuQjtLQUNKLENBQUM7SUFDRixJQUFBLDRCQUFLLEdBQUU7Q0FDVixFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRWxCOztHQUVHO0FBQ0gsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLHFCQUFzQixTQUFRLDRCQUFLO0NBQ3BFLENBQUM7QUFvQ08sc0RBQXFCO0FBbkM5QixVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztJQUM5RSxJQUFBLGFBQUssRUFBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxQixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyRCxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUN6RSxJQUFBLGNBQU0sRUFBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUM1QixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RCxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUN4RSxJQUFBLGNBQU0sRUFBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyRCxnQ0FBQSxxQkFBcUIsR0FBRyxVQUFVLENBQUM7SUFDL0IsSUFBQSxZQUFJLEVBQUMseUJBQXlCLEVBQUU7UUFDNUIsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixRQUFRLEVBQUUsY0FBYztRQUN4QixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQztRQUN0QyxRQUFRLEVBQUU7WUFDTixLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLFdBQVcsRUFBRSwrRkFBK0Y7WUFDNUcsT0FBTyxFQUFFLEtBQUs7U0FDakI7S0FDSixDQUFDO0lBQ0YsSUFBQSw0QkFBSyxHQUFFO0NBQ1YsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRTFCOztHQUVHO0FBQ0gsSUFBSSxxQkFBcUIsR0FBRyxNQUFNLHFCQUFzQixTQUFRLDRCQUFLO0NBQ3BFLENBQUM7QUFxQ08sc0RBQXFCO0FBcEM5QixVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztJQUN0RixJQUFBLGFBQUssRUFBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxQixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyRCxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztJQUM5RSxJQUFBLGNBQU0sRUFBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUM5QixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RCxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztJQUM5RSxJQUFBLGNBQU0sRUFBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUM5QixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RCxnQ0FBQSxxQkFBcUIsR0FBRyxVQUFVLENBQUM7SUFDL0IsSUFBQSxZQUFJLEVBQUMseUJBQXlCLEVBQUU7UUFDNUIsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixRQUFRLEVBQUUsY0FBYztRQUN4QixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsZUFBZTtRQUNyQixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUM7UUFDdkMsUUFBUSxFQUFFO1lBQ04sS0FBSyxFQUFFLGdCQUFnQjtZQUN2QixXQUFXLEVBQUUsZ0dBQWdHO1lBQzdHLFNBQVMsRUFBRSxFQUFFO1lBQ2IsU0FBUyxFQUFFLFFBQVE7U0FDdEI7S0FDSixDQUFDO0lBQ0YsSUFBQSw0QkFBSyxHQUFFO0NBQ1YsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBRTFCOztHQUVHO0FBQ0gsSUFBSSxjQUFjLEdBQUcsTUFBTSxjQUFlLFNBQVEsNEJBQUs7Q0FDdEQsQ0FBQztBQThCTyx3Q0FBYztBQTdCdkIsVUFBVSxDQUFDO0lBQ1AsSUFBQSwrQkFBUSxHQUFFO0lBQ1YsSUFBQSx5QkFBUyxFQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUM7SUFDbEYsSUFBQSxhQUFLLEVBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDMUIsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFVBQVUsQ0FBQztJQUNQLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEseUJBQVMsRUFBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDbEYsSUFBQSxjQUFNLEVBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDNUIsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQy9DLHlCQUFBLGNBQWMsR0FBRyxVQUFVLENBQUM7SUFDeEIsSUFBQSxZQUFJLEVBQUMsa0JBQWtCLEVBQUU7UUFDckIsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixRQUFRLEVBQUUsU0FBUztRQUNuQixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUNwQyxRQUFRLEVBQUU7WUFDTixLQUFLLEVBQUUsUUFBUTtZQUNmLFdBQVcsRUFBRSw2REFBNkQ7WUFDMUUsWUFBWSxFQUFFLEVBQUU7U0FDbkI7S0FDSixDQUFDO0lBQ0YsSUFBQSw0QkFBSyxHQUFFO0NBQ1YsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVuQjs7Ozs7Ozs7R0FRRztBQUNILElBQUksWUFBWSxHQUFHLE1BQU0sWUFBYSxTQUFRLDRCQUFLO0NBQ2xELENBQUM7QUErQk8sb0NBQVk7QUE5QnJCLFVBQVUsQ0FBQztJQUNQLElBQUEsK0JBQVEsR0FBRTtJQUNWLElBQUEseUJBQVMsRUFBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQ0FBcUMsRUFBRSxDQUFDO0lBQzdGLElBQUEsYUFBSyxFQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFCLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3BDLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QyxVQUFVLENBQUM7SUFDUCxJQUFBLCtCQUFRLEdBQUU7SUFDVixJQUFBLHlCQUFTLEVBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztJQUM3RSxJQUFBLGNBQU0sRUFBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUM1QixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0MsdUJBQUEsWUFBWSxHQUFHLFVBQVUsQ0FBQztJQUN0QixJQUFBLFlBQUksRUFBQyxnQkFBZ0IsRUFBRTtRQUNuQixJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxTQUFTO1FBQ2YsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQztRQUNoRCxRQUFRLEVBQUU7WUFDTixLQUFLLEVBQUUsTUFBTTtZQUNiLFdBQVcsRUFBRSxnSEFBZ0g7WUFDN0gsSUFBSSxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUUsWUFBWTtTQUN6QjtLQUNKLENBQUM7SUFDRixJQUFBLDRCQUFLLEdBQUU7Q0FDVixFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRWpCOztHQUVHO0FBQ1UsUUFBQSx3QkFBd0IsR0FBRztJQUNwQyxVQUFVO0lBQ1YsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsV0FBVztJQUNYLGFBQWE7SUFDYixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGNBQWM7SUFDZCxZQUFZO0NBQ2YsQ0FBQztBQUNGLDh0ekJBQTh0ekIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xuLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9ub2Rlcy9mbG93LWNvbnRyb2xcbiAqIEBzdW1tYXJ5IFByb2R1Y3Rpb24gZmxvdy1jb250cm9sIG5vZGUga2luZCBkZWNsYXJhdGlvbnMgKERFQ0FGLTMyIMKnMjIuMi4yKS5cbiAqIEBkZXNjcmlwdGlvbiBDYW5vbmljYWwgYEBub2RlYC1kZWNvcmF0ZWQgY2xhc3NlcyBmb3IgdGhlIHRlbiBBTEZSRUQtNVxuICogZmxvdy1jb250cm9sIGtpbmRzLiBUaGVzZSBhcmUgZ3JhcGgtbGV2ZWwgbWFjcm9zOiB0aGUgZW5naW5lJ3MgcGxhbm5lclxuICogcmVjb2duaXNlcyB0aGVtIGFzIG9yZGluYXJ5IGV4ZWN1dGFibGUgbm9kZXMgKMKnNS43KSBidXQgdGhleSBoYXZlIG5vXG4gKiBidWlsdC1pbiBleGVjdXRvcnMg4oCUIGRvd25zdHJlYW0gcHJvamVjdHMgKGUuZy4gQUxGUkVEKSByZWdpc3RlciBjdXN0b21cbiAqIGV4ZWN1dG9ycyBvciBjb21waWxlIHRoZW0gaW50byBNYXN0cmEgY29tcG9zaXRpb24gQVBJcyAowqcyMi4yLjIpLlxuICpcbiAqIFRoZSB0aHJlZSBsb29wIGtpbmRzIChgY29yZS5sb29wLmZvcmVhY2gvd2hpbGUvdW50aWxgKSBhbHJlYWR5IGhhdmUgYnVpbHQtaW5cbiAqIGV4ZWN1dG9ycyAowqc1LjkpIGFuZCBhcmUgTk9UIHJlZGVjbGFyZWQgaGVyZS5cbiAqL1xuaW1wb3J0IHsgTW9kZWwsIG1vZGVsLCByZXF1aXJlZCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHVpZWxlbWVudCB9IGZyb20gXCJAZGVjYWYtdHMvdWktZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgaW5wdXQsIG5vZGUsIG91dHB1dCB9IGZyb20gXCJAZGVjYWYtdHMvdWktZGVjb3JhdG9ycy9ncmFwaFwiO1xuLyoqXG4gKiBJZiDigJQgY29uZGl0aW9uYWwgYnJhbmNoLiBFdmFsdWF0ZXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKMKnMjIuMykgYW5kXG4gKiByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBgdGhlbmAgb3IgYGVsc2VgIG91dHB1dC5cbiAqL1xubGV0IElmRmxvd05vZGUgPSBjbGFzcyBJZkZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBldmFsdWF0ZVwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIElmRmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiVGhlblwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZVwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJ0aGVuXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIElmRmxvd05vZGUucHJvdG90eXBlLCBcInRoZW5cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJFbHNlXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCB3aGVuIGNvbmRpdGlvbiBpcyBmYWxzZVwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJlbHNlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIElmRmxvd05vZGUucHJvdG90eXBlLCBcImVsc2VcIiwgdm9pZCAwKTtcbklmRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93LmlmXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuaWZcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gICAgICAgIGNvbG9yOiBcIiNmNTllMGJcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvd3Mtc3BsaXQtMlwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcImNvbmRpdGlvbmFsXCIsIFwiYnJhbmNoXCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiSWZcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmRpdGlvbmFsIGJyYW5jaC4gRXZhbHVhdGVzIHRoZSBjb25maWd1cmVkIGNvbmRpdGlvbiBhbmQgcm91dGVzIHRoZSBpbnB1dCB0byB0aGUgbWF0Y2hpbmcgb3V0cHV0LlwiLFxuICAgICAgICAgICAgY29uZGl0aW9uOiB7IG9wOiBcImVxXCIsIGxlZnQ6IHsgY29uc3Q6IHRydWUgfSwgcmlnaHQ6IHsgY29uc3Q6IHRydWUgfSB9LFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIElmRmxvd05vZGUpO1xuZXhwb3J0IHsgSWZGbG93Tm9kZSB9O1xuLyoqXG4gKiBTd2l0Y2gg4oCUIG11bHRpLWJyYW5jaC4gUm91dGVzIHRoZSBpbnB1dCB0byBvbmUgb2YgdGhlIGNhc2Ugb3V0cHV0IHBvcnRzXG4gKiBvciBgZGVmYXVsdGAgYmFzZWQgb24gbWF0Y2hpbmcgY29uZGl0aW9ucy4gRWFjaCBjYXNlIGRlZmluZXMgYVxuICoge0BsaW5rIFN3aXRjaENhc2VDb25kaXRpb259IChncmFwaGljYWwgb3IgY29kZSBtb2RlKSBhbmQgYSBkZWRpY2F0ZWRcbiAqIG91dHB1dCBwb3J0LiBDYXNlcyBhcmUgc3RvcmVkIGluIGBtZXRhZGF0YS5zd2l0Y2guY2FzZXNgIGFuZCB0aGVcbiAqIHJlbmRlcmVyIGNyZWF0ZXMgZHluYW1pYyBvdXRwdXQgcG9ydHMgZnJvbSB0aGVtIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKlxuICogVGhlIG5vZGUgZ3Jvd3MgaW4gaGVpZ2h0IGFzIGNhc2VzIGFyZSBhZGRlZC4gRWFjaCBjYXNlIGdldHMgaXRzIG93blxuICogb3V0cHV0IHBvcnQgb24gdGhlIHJpZ2h0IHNpZGUsIGxhYmVsZWQgd2l0aCB0aGUgY2FzZSBsYWJlbC5cbiAqL1xubGV0IFN3aXRjaEZsb3dOb2RlID0gY2xhc3MgU3dpdGNoRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIHN3aXRjaCBvblwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFN3aXRjaEZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkRlZmF1bHRcIiwgcGxhY2Vob2xkZXI6IFwiRGVmYXVsdCBvdXRwdXQgd2hlbiBubyBjYXNlIG1hdGNoZXNcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiZGVmYXVsdFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBTd2l0Y2hGbG93Tm9kZS5wcm90b3R5cGUsIFwiZGVmYXVsdFwiLCB2b2lkIDApO1xuU3dpdGNoRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93LnN3aXRjaFwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LnN3aXRjaFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgICAgICAgY29sb3I6IFwiI2Y5NzMxNlwiLFxuICAgICAgICBpY29uOiBcInRpLWFycm93cy1zaHVmZmxlXCIsXG4gICAgICAgIHdpZHRoOiAxMjAsXG4gICAgICAgIGhlaWdodDogMTQwLFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJzd2l0Y2hcIiwgXCJtdWx0aS1icmFuY2hcIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJTd2l0Y2hcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk11bHRpLWJyYW5jaCBzd2l0Y2guIFJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIGNhc2Ugb3V0cHV0LCBvciB0aGUgZGVmYXVsdCBvdXRwdXQuXCIsXG4gICAgICAgICAgICBzd2l0Y2g6IHtcbiAgICAgICAgICAgICAgICBjYXNlczogW10sXG4gICAgICAgICAgICAgICAgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBTd2l0Y2hGbG93Tm9kZSk7XG5leHBvcnQgeyBTd2l0Y2hGbG93Tm9kZSB9O1xuLyoqXG4gKiBQYXJhbGxlbCDigJQgc3BsaXRzIGV4ZWN1dGlvbiBpbnRvIGNvbmN1cnJlbnQgYnJhbmNoZXMuXG4gKi9cbmxldCBQYXJhbGxlbEZsb3dOb2RlID0gY2xhc3MgUGFyYWxsZWxGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZmFuIG91dFwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFBhcmFsbGVsRmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiQnJhbmNoZXNcIiwgcGxhY2Vob2xkZXI6IFwiQ29sbGVjdGVkIGJyYW5jaCBvdXRwdXRzXCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcImJyYW5jaGVzXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KVxuXSwgUGFyYWxsZWxGbG93Tm9kZS5wcm90b3R5cGUsIFwiYnJhbmNoZXNcIiwgdm9pZCAwKTtcblBhcmFsbGVsRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93LnBhcmFsbGVsXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cucGFyYWxsZWxcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gICAgICAgIGNvbG9yOiBcIiMwNmI2ZDRcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvd3MtdmVydGljYWxcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJwYXJhbGxlbFwiLCBcImNvbmN1cnJlbnRcIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJQYXJhbGxlbFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU3BsaXRzIGV4ZWN1dGlvbiBpbnRvIGNvbmN1cnJlbnQgYnJhbmNoZXMuIEFsbCBicmFuY2hlcyBydW4gaW4gcGFyYWxsZWwgYW5kIG91dHB1dHMgYXJlIGNvbGxlY3RlZC5cIixcbiAgICAgICAgICAgIGJyYW5jaENvdW50OiAyLFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIFBhcmFsbGVsRmxvd05vZGUpO1xuZXhwb3J0IHsgUGFyYWxsZWxGbG93Tm9kZSB9O1xuLyoqXG4gKiBNZXJnZSDigJQgbm9ybWFsaXNlcyBicmFuY2gvcGFyYWxsZWwgb3V0cHV0cyBpbnRvIGEgc2luZ2xlIG91dHB1dC5cbiAqL1xubGV0IE1lcmdlRmxvd05vZGUgPSBjbGFzcyBNZXJnZUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJCcmFuY2ggb3V0cHV0c1wiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXRzIHRvIG1lcmdlXCIgfSksXG4gICAgaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVzXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEFycmF5KVxuXSwgTWVyZ2VGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiTWVyZ2VkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJNZXJnZWQgcmVzdWx0XCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcIm1lcmdlZFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBNZXJnZUZsb3dOb2RlLnByb3RvdHlwZSwgXCJtZXJnZWRcIiwgdm9pZCAwKTtcbk1lcmdlRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93Lm1lcmdlXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cubWVyZ2VcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICAgICAgICBjb2xvcjogXCIjMGQ5NDg4XCIsXG4gICAgICAgIGljb246IFwidGktYXJyb3dzLW1lcmdlXCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwibWVyZ2VcIiwgXCJqb2luXCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiTWVyZ2VcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk1lcmdlcyBtdWx0aXBsZSBicmFuY2ggb3V0cHV0cyBpbnRvIGEgc2luZ2xlIG5vcm1hbGlzZWQgb3V0cHV0IG9iamVjdC5cIixcbiAgICAgICAgICAgIHN0cmF0ZWd5OiBcImNvbmNhdFwiLFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIE1lcmdlRmxvd05vZGUpO1xuZXhwb3J0IHsgTWVyZ2VGbG93Tm9kZSB9O1xuLyoqXG4gKiBNYXAg4oCUIHRyYW5zZm9ybXMgdGhlIGN1cnJlbnQgaW5wdXQgaW50byBhIG5ldyBvdXRwdXQgb2JqZWN0LlxuICovXG5sZXQgTWFwRmxvd05vZGUgPSBjbGFzcyBNYXBGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gdHJhbnNmb3JtXCIgfSksXG4gICAgaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgTWFwRmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiVHJhbnNmb3JtZWQgb3V0cHV0XCIsIHBsYWNlaG9sZGVyOiBcIk1hcHBlZCByZXN1bHRcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIE1hcEZsb3dOb2RlLnByb3RvdHlwZSwgXCJyZXN1bHRcIiwgdm9pZCAwKTtcbk1hcEZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5tYXBcIiwge1xuICAgICAgICBraW5kOiBcImNvcmUuZmxvdy5tYXBcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICAgICAgICBjb2xvcjogXCIjODRjYzE2XCIsXG4gICAgICAgIGljb246IFwidGktYXJyb3dzLXJpZ2h0LWxlZnRcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJtYXBcIiwgXCJ0cmFuc2Zvcm1cIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJNYXBcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRyYW5zZm9ybXMgdGhlIGN1cnJlbnQgaW5wdXQgaW50byBhIG5ldyBvdXRwdXQgb2JqZWN0IHVzaW5nIHRoZSBjb25maWd1cmVkIG1hcHBlci5cIixcbiAgICAgICAgICAgIG1hcHBlcjoge30sXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgTWFwRmxvd05vZGUpO1xuZXhwb3J0IHsgTWFwRmxvd05vZGUgfTtcbi8qKlxuICogRGVsYXkg4oCUIHBhdXNlcyBleGVjdXRpb24gZm9yIGEgY29uZmlndXJlZCBkdXJhdGlvbi5cbiAqL1xubGV0IERlbGF5Rmxvd05vZGUgPSBjbGFzcyBEZWxheUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBmb3J3YXJkIGFmdGVyIGRlbGF5XCIgfSksXG4gICAgaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgRGVsYXlGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJPdXRwdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiRm9yd2FyZGVkIHZhbHVlXCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIERlbGF5Rmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlT3V0XCIsIHZvaWQgMCk7XG5EZWxheUZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5kZWxheVwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LmRlbGF5XCIsXG4gICAgICAgIGNhdGVnb3J5OiBcIlV0aWxpdHlcIixcbiAgICAgICAgY29sb3I6IFwiI2EzYTNhM1wiLFxuICAgICAgICBpY29uOiBcInRpLWNsb2NrLWhvdXItNFwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcImRlbGF5XCIsIFwid2FpdFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIkRlbGF5XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJQYXVzZXMgZXhlY3V0aW9uIGZvciB0aGUgY29uZmlndXJlZCBkdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSwgdGhlbiBmb3J3YXJkcyB0aGUgaW5wdXQgdW5jaGFuZ2VkLlwiLFxuICAgICAgICAgICAgZHVyYXRpb25NczogMTAwMCxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBEZWxheUZsb3dOb2RlKTtcbmV4cG9ydCB7IERlbGF5Rmxvd05vZGUgfTtcbi8qKlxuICogRXJyb3IgYm91bmRhcnkg4oCUIHRyeS9jYXRjaC9maW5hbGx5IHdvcmtmbG93IGJlaGF2aW91ci5cbiAqL1xubGV0IEVycm9yQm91bmRhcnlGbG93Tm9kZSA9IGNsYXNzIEVycm9yQm91bmRhcnlGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZ3VhcmRcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBFcnJvckJvdW5kYXJ5Rmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVzdWx0XCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCBvbiBzdWNjZXNzXCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBFcnJvckJvdW5kYXJ5Rmxvd05vZGUucHJvdG90eXBlLCBcInJlc3VsdFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIkVycm9yXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCBvbiBmYWlsdXJlXCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcImVycm9yXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEVycm9yQm91bmRhcnlGbG93Tm9kZS5wcm90b3R5cGUsIFwiZXJyb3JcIiwgdm9pZCAwKTtcbkVycm9yQm91bmRhcnlGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cuZXJyb3JCb3VuZGFyeVwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LmVycm9yQm91bmRhcnlcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gICAgICAgIGNvbG9yOiBcIiNlZjQ0NDRcIixcbiAgICAgICAgaWNvbjogXCJ0aS1zaGllbGQtY2hlY2tcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJlcnJvclwiLCBcInRyeS1jYXRjaFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIkVycm9yIGJvdW5kYXJ5XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJXcmFwcyB0aGUgaW5wdXQgaW4gYSB0cnkvY2F0Y2gvZmluYWxseS4gRW1pdHMgdGhlIHJlc3VsdCBvbiBzdWNjZXNzLCBvciB0aGUgZXJyb3Igb24gZmFpbHVyZS5cIixcbiAgICAgICAgICAgIGZpbmFsbHk6IGZhbHNlLFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIEVycm9yQm91bmRhcnlGbG93Tm9kZSk7XG5leHBvcnQgeyBFcnJvckJvdW5kYXJ5Rmxvd05vZGUgfTtcbi8qKlxuICogSHVtYW4gYXBwcm92YWwg4oCUIHN1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBhIGh1bWFuIGFwcHJvdmVzIG9yIHJlamVjdHMuXG4gKi9cbmxldCBIdW1hbkFwcHJvdmFsRmxvd05vZGUgPSBjbGFzcyBIdW1hbkFwcHJvdmFsRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHBlbmRpbmcgYXBwcm92YWxcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBIdW1hbkFwcHJvdmFsRmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiQXBwcm92ZWRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gYXBwcm92ZWRcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiYXBwcm92ZWRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgSHVtYW5BcHByb3ZhbEZsb3dOb2RlLnByb3RvdHlwZSwgXCJhcHByb3ZlZFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJlamVjdGVkXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCB3aGVuIHJlamVjdGVkXCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcInJlamVjdGVkXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEh1bWFuQXBwcm92YWxGbG93Tm9kZS5wcm90b3R5cGUsIFwicmVqZWN0ZWRcIiwgdm9pZCAwKTtcbkh1bWFuQXBwcm92YWxGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cuaHVtYW5BcHByb3ZhbFwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93Lmh1bWFuQXBwcm92YWxcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiRmxvdyBDb250cm9sXCIsXG4gICAgICAgIGNvbG9yOiBcIiNkOTQ2ZWZcIixcbiAgICAgICAgaWNvbjogXCJ0aS11c2VyLWNoZWNrXCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwiYXBwcm92YWxcIiwgXCJzdXNwZW5kXCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiSHVtYW4gYXBwcm92YWxcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlN1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBhIGh1bWFuIGFwcHJvdmVzIG9yIHJlamVjdHMuIEVtaXRzIHRoZSBhcHByb3ZlZCB2YWx1ZSBvciBhIHJlamVjdGlvbi5cIixcbiAgICAgICAgICAgIGFwcHJvdmVyczogW10sXG4gICAgICAgICAgICB0aW1lb3V0TXM6IDg2NDAwMDAwLFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIEh1bWFuQXBwcm92YWxGbG93Tm9kZSk7XG5leHBvcnQgeyBIdW1hbkFwcHJvdmFsRmxvd05vZGUgfTtcbi8qKlxuICogUmV0dXJuIOKAlCBkZWZpbmVzIGFuZCBub3JtYWxpc2VzIHRoZSBmaW5hbCB3b3JrZmxvdyBvdXRwdXQuXG4gKi9cbmxldCBSZXR1cm5GbG93Tm9kZSA9IGNsYXNzIFJldHVybkZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBub3JtYWxpc2VcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBSZXR1cm5GbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXR1cm5lZCBvdXRwdXRcIiwgcGxhY2Vob2xkZXI6IFwiTm9ybWFsaXNlZCBvdXRwdXRcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFJldHVybkZsb3dOb2RlLnByb3RvdHlwZSwgXCJyZXN1bHRcIiwgdm9pZCAwKTtcblJldHVybkZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5yZXR1cm5cIiwge1xuICAgICAgICBraW5kOiBcImNvcmUuZmxvdy5yZXR1cm5cIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICAgICAgICBjb2xvcjogXCIjMjJjNTVlXCIsXG4gICAgICAgIGljb246IFwidGktYXJyb3ctYmFjay11cFwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcInJldHVyblwiLCBcIm91dHB1dFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIlJldHVyblwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTm9ybWFsaXNlcyB0aGUgaW5wdXQgaW50byB0aGUgZmluYWwgd29ya2Zsb3cgb3V0cHV0IG9iamVjdC5cIixcbiAgICAgICAgICAgIG91dHB1dFNjaGVtYToge30sXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgUmV0dXJuRmxvd05vZGUpO1xuZXhwb3J0IHsgUmV0dXJuRmxvd05vZGUgfTtcbi8qKlxuICogQ29kZSDigJQgc2FuZGJveGVkIEpTL1RTIGNvZGUgZXhlY3V0aW9uIChBTEZSRUQtNSDCpzcpLlxuICpcbiAqIFRoZSBlbmdpbmUgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBzYW5kYm94IGRpcmVjdGx5ICjCpzIyLjQpLiBBIGZ1dHVyZVxuICogZXhlY3V0b3IgbWF5IHdyYXAgdGhlIGBDb2RlU2FuZGJveGAgY29udHJhY3QgKEFMRlJFRC01IMKnNy4xNykgYXMgYVxuICogcGx1Z2dhYmxlIGV4ZWN1dG9yLiBUaGUgcGxhY2Vob2xkZXIgc3ludGF4IChge3sgJGlucHV0IH19YCwgYHt7ICRpdGVtIH19YCxcbiAqIGB7eyAkaW5kZXggfX1gLCBge3sgJHZhcnMgfX1gLCBge3sgJG5vZGVbXCJOYW1lXCJdLm91dHB1dCB9fWApIGlzIE1hc3RyYS1cbiAqIGFnbm9zdGljIGFuZCBsaXZlcyBpbiB0aGUgZG93bnN0cmVhbSBwcm9qZWN0J3MgYG1vZHVsZXMvY29yZWAgKEFMRlJFRC02KS5cbiAqL1xubGV0IENvZGVGbG93Tm9kZSA9IGNsYXNzIENvZGVGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXRcIiwgcGxhY2Vob2xkZXI6IFwiSW5wdXQgb2JqZWN0IChhY2Nlc3NpYmxlIGFzICRpbnB1dClcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJpbnB1dFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBDb2RlRmxvd05vZGUucHJvdG90eXBlLCBcImlucHV0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVzdWx0XCIsIHBsYWNlaG9sZGVyOiBcIkNvZGUgZXhlY3V0aW9uIHJlc3VsdFwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgQ29kZUZsb3dOb2RlLnByb3RvdHlwZSwgXCJyZXN1bHRcIiwgdm9pZCAwKTtcbkNvZGVGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cuY29kZVwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LmNvZGVcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICAgICAgICBjb2xvcjogXCIjN2MzYWVkXCIsXG4gICAgICAgIGljb246IFwidGktY29kZVwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcImNvZGVcIiwgXCJzYW5kYm94XCIsIFwidHJhbnNmb3JtXCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiQ29kZVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiUnVucyB1c2VyLWF1dGhvcmVkIEpTL1RTIGluIGEgcmVzdHJpY3RlZCBWTSBzYW5kYm94LiBTdXBwb3J0cyBwbGFjZWhvbGRlciBzeW50YXggZm9yIHdvcmtmbG93IGRhdGEgcmVmZXJlbmNlcy5cIixcbiAgICAgICAgICAgIGNvZGU6IFwiXCIsXG4gICAgICAgICAgICBsYW5ndWFnZTogXCJqYXZhc2NyaXB0XCIsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgQ29kZUZsb3dOb2RlKTtcbmV4cG9ydCB7IENvZGVGbG93Tm9kZSB9O1xuLyoqXG4gKiBBbGwgYnVpbHQtaW4gZmxvdy1jb250cm9sIG5vZGUgY29uc3RydWN0b3JzLlxuICovXG5leHBvcnQgY29uc3QgR1JBUEhfRkxPV19DT05UUk9MX05PREVTID0gW1xuICAgIElmRmxvd05vZGUsXG4gICAgU3dpdGNoRmxvd05vZGUsXG4gICAgUGFyYWxsZWxGbG93Tm9kZSxcbiAgICBNZXJnZUZsb3dOb2RlLFxuICAgIE1hcEZsb3dOb2RlLFxuICAgIERlbGF5Rmxvd05vZGUsXG4gICAgRXJyb3JCb3VuZGFyeUZsb3dOb2RlLFxuICAgIEh1bWFuQXBwcm92YWxGbG93Tm9kZSxcbiAgICBSZXR1cm5GbG93Tm9kZSxcbiAgICBDb2RlRmxvd05vZGUsXG5dO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWm14dmR5MWpiMjUwY205c0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpTGk0dkxpNHZMaTR2TGk0dmMzSmpMMmR5WVhCb0wyNXZaR1Z6TDJac2IzY3RZMjl1ZEhKdmJDNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3T3pzN096czdRVUZCUVRzN096czdPenM3T3pzN1IwRlhSenRCUVVOSUxFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFVVXNTMEZCU3l4RlFVRkZMRkZCUVZFc1JVRkJSU3hOUVVGTkxHZERRVUZuUXl4RFFVRkRPMEZCUTNoRkxFOUJRVThzUlVGQlJTeFRRVUZUTEVWQlFVVXNUVUZCVFN4NVFrRkJlVUlzUTBGQlF6dEJRVU53UkN4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN3clFrRkJLMElzUTBGQlF6dEJRVVZ3UlRzN08wZEJSMGM3UVVGblFra3NTVUZCVFN4VlFVRlZMRWRCUVdoQ0xFMUJRVTBzVlVGQlZ5eFRRVUZSTEV0QlFVczdRMEZsY0VNc1EwRkJRVHRCUVZoRE8wbEJTRU1zVVVGQlVTeEZRVUZGTzBsQlExWXNVMEZCVXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeGhRVUZoTEVWQlFVVXNWMEZCVnl4RlFVRkZMRzFDUVVGdFFpeEZRVUZGTEVOQlFVTTdTVUZEYWtZc1MwRkJTeXhEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4RFFVRkRPenQ1UTBGRFdEdEJRVXRvUWp0SlFVaERMRkZCUVZFc1JVRkJSVHRKUVVOV0xGTkJRVk1zUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1RVRkJUU3hGUVVGRkxGZEJRVmNzUlVGQlJTd3JRa0ZCSzBJc1JVRkJSU3hEUVVGRE8wbEJRMjVHTEUxQlFVMHNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hOUVVGTkxFVkJRVVVzUTBGQlF6czdkME5CUTFvN1FVRkxaanRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzVFVGQlRTeEZRVUZGTEZkQlFWY3NSVUZCUlN4blEwRkJaME1zUlVGQlJTeERRVUZETzBsQlEzQkdMRTFCUVUwc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNRMEZCUXpzN2QwTkJRMW83UVVGa1NpeFZRVUZWTzBsQlpuUkNMRWxCUVVrc1EwRkJReXhqUVVGakxFVkJRVVU3VVVGRGNFSXNTVUZCU1N4RlFVRkZMR05CUVdNN1VVRkRjRUlzVVVGQlVTeEZRVUZGTEdOQlFXTTdVVUZEZUVJc1MwRkJTeXhGUVVGRkxGTkJRVk03VVVGRGFFSXNTVUZCU1N4RlFVRkZMRzFDUVVGdFFqdFJRVU42UWl4TFFVRkxMRVZCUVVVc1JVRkJSVHRSUVVOVUxFMUJRVTBzUlVGQlJTeEZRVUZGTzFGQlExWXNUVUZCVFN4RlFVRkZMRU5CUVVNc1RVRkJUU3hGUVVGRkxHRkJRV0VzUlVGQlJTeFJRVUZSTEVOQlFVTTdVVUZEZWtNc1VVRkJVU3hGUVVGRk8xbEJRMUlzUzBGQlN5eEZRVUZGTEVsQlFVazdXVUZEV0N4WFFVRlhMRVZCUVVVc2NVZEJRWEZITzFsQlEyeElMRk5CUVZNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hKUVVGSkxFVkJRVVVzUlVGQlJUdFRRVU4yUlR0TFFVTkdMRU5CUVVNN1NVRkRSQ3hMUVVGTExFVkJRVVU3UjBGRFN5eFZRVUZWTEVOQlpYUkNPenRCUVVWRU96czdPenM3T3pzN1IwRlRSenRCUVcxQ1NTeEpRVUZOTEdOQlFXTXNSMEZCY0VJc1RVRkJUU3hqUVVGbExGTkJRVkVzUzBGQlN6dERRVlY0UXl4RFFVRkJPMEZCVGtNN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxHRkJRV0VzUlVGQlJTeFhRVUZYTEVWQlFVVXNiMEpCUVc5Q0xFVkJRVVVzUTBGQlF6dEpRVU5zUml4TFFVRkxMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPelpEUVVOWU8wRkJTMmhDTzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1YwRkJWeXhGUVVGRkxIRkRRVUZ4UXl4RlFVRkZMRU5CUVVNN1NVRkROVVlzVFVGQlRTeERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRk5CUVZNc1JVRkJSU3hEUVVGRE96c3JRMEZEV2p0QlFWUlFMR05CUVdNN1NVRnNRakZDTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUlVGQlJUdFJRVU40UWl4SlFVRkpMRVZCUVVVc2EwSkJRV3RDTzFGQlEzaENMRkZCUVZFc1JVRkJSU3hqUVVGak8xRkJRM2hDTEV0QlFVc3NSVUZCUlN4VFFVRlRPMUZCUTJoQ0xFbEJRVWtzUlVGQlJTeHRRa0ZCYlVJN1VVRkRla0lzUzBGQlN5eEZRVUZGTEVkQlFVYzdVVUZEVml4TlFVRk5MRVZCUVVVc1IwRkJSenRSUVVOWUxFMUJRVTBzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4UlFVRlJMRVZCUVVVc1kwRkJZeXhEUVVGRE8xRkJRekZETEZGQlFWRXNSVUZCUlR0WlFVTlNMRXRCUVVzc1JVRkJSU3hSUVVGUk8xbEJRMllzVjBGQlZ5eEZRVUZGTEdsSFFVRnBSenRaUVVNNVJ5eE5RVUZOTEVWQlFVVTdaMEpCUTA0c1MwRkJTeXhGUVVGRkxFVkJRVVU3WjBKQlExUXNWMEZCVnl4RlFVRkZMRk5CUVZNN1lVRkRka0k3VTBGRFJqdExRVU5HTEVOQlFVTTdTVUZEUkN4TFFVRkxMRVZCUVVVN1IwRkRTeXhqUVVGakxFTkJWVEZDT3p0QlFVVkVPenRIUVVWSE8wRkJaMEpKTEVsQlFVMHNaMEpCUVdkQ0xFZEJRWFJDTEUxQlFVMHNaMEpCUVdsQ0xGTkJRVkVzUzBGQlN6dERRVlV4UXl4RFFVRkJPMEZCVGtNN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxHRkJRV0VzUlVGQlJTeFhRVUZYTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVVzUTBGQlF6dEpRVU5vUml4TFFVRkxMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPeXREUVVOWU8wRkJTMmhDTzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4VlFVRlZMRVZCUVVVc1YwRkJWeXhGUVVGRkxEQkNRVUV3UWl4RlFVRkZMRU5CUVVNN1NVRkRiRVlzVFVGQlRTeERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRlZCUVZVc1JVRkJSU3hEUVVGRE96dHJSRUZEVmp0QlFWUldMR2RDUVVGblFqdEpRV1kxUWl4SlFVRkpMRU5CUVVNc2IwSkJRVzlDTEVWQlFVVTdVVUZETVVJc1NVRkJTU3hGUVVGRkxHOUNRVUZ2UWp0UlFVTXhRaXhSUVVGUkxFVkJRVVVzWTBGQll6dFJRVU40UWl4TFFVRkxMRVZCUVVVc1UwRkJVenRSUVVOb1FpeEpRVUZKTEVWQlFVVXNiMEpCUVc5Q08xRkJRekZDTEV0QlFVc3NSVUZCUlN4RlFVRkZPMUZCUTFRc1RVRkJUU3hGUVVGRkxFVkJRVVU3VVVGRFZpeE5RVUZOTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1ZVRkJWU3hGUVVGRkxGbEJRVmtzUTBGQlF6dFJRVU14UXl4UlFVRlJMRVZCUVVVN1dVRkRVaXhMUVVGTExFVkJRVVVzVlVGQlZUdFpRVU5xUWl4WFFVRlhMRVZCUVVVc2IwZEJRVzlITzFsQlEycElMRmRCUVZjc1JVRkJSU3hEUVVGRE8xTkJRMlk3UzBGRFJpeERRVUZETzBsQlEwUXNTMEZCU3l4RlFVRkZPMGRCUTBzc1owSkJRV2RDTEVOQlZUVkNPenRCUVVWRU96dEhRVVZITzBGQlowSkpMRWxCUVUwc1lVRkJZU3hIUVVGdVFpeE5RVUZOTEdGQlFXTXNVMEZCVVN4TFFVRkxPME5CVlhaRExFTkJRVUU3UVVGT1F6dEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVVVzVjBGQlZ5eEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxFTkJRVU03U1VGRGJrWXNTMEZCU3l4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxGRkJRVkVzUlVGQlJTeERRVUZET3pzMlEwRkRWRHRCUVV0dVFqdEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNaVUZCWlN4RlFVRkZMRmRCUVZjc1JVRkJSU3hsUVVGbExFVkJRVVVzUTBGQlF6dEpRVU0xUlN4TlFVRk5MRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVOQlFVTTdPelpEUVVOYU8wRkJWRTRzWVVGQllUdEpRV1o2UWl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVTdVVUZEZGtJc1NVRkJTU3hGUVVGRkxHbENRVUZwUWp0UlFVTjJRaXhSUVVGUkxFVkJRVVVzVTBGQlV6dFJRVU51UWl4TFFVRkxMRVZCUVVVc1UwRkJVenRSUVVOb1FpeEpRVUZKTEVWQlFVVXNhVUpCUVdsQ08xRkJRM1pDTEV0QlFVc3NSVUZCUlN4RlFVRkZPMUZCUTFRc1RVRkJUU3hGUVVGRkxFVkJRVVU3VVVGRFZpeE5RVUZOTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF6dFJRVU5xUXl4UlFVRlJMRVZCUVVVN1dVRkRVaXhMUVVGTExFVkJRVVVzVDBGQlR6dFpRVU5rTEZkQlFWY3NSVUZCUlN4M1JVRkJkMFU3V1VGRGNrWXNVVUZCVVN4RlFVRkZMRkZCUVZFN1UwRkRia0k3UzBGRFJpeERRVUZETzBsQlEwUXNTMEZCU3l4RlFVRkZPMGRCUTBzc1lVRkJZU3hEUVZWNlFqczdRVUZGUkRzN1IwRkZSenRCUVdkQ1NTeEpRVUZOTEZkQlFWY3NSMEZCYWtJc1RVRkJUU3hYUVVGWkxGTkJRVkVzUzBGQlN6dERRVlZ5UXl4RFFVRkJPMEZCVGtNN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxHRkJRV0VzUlVGQlJTeFhRVUZYTEVWQlFVVXNiMEpCUVc5Q0xFVkJRVVVzUTBGQlF6dEpRVU5zUml4TFFVRkxMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPekJEUVVOWU8wRkJTMmhDTzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4dlFrRkJiMElzUlVGQlJTeFhRVUZYTEVWQlFVVXNaVUZCWlN4RlFVRkZMRU5CUVVNN1NVRkRha1lzVFVGQlRTeERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRkZCUVZFc1JVRkJSU3hEUVVGRE96c3lRMEZEV2p0QlFWUk9MRmRCUVZjN1NVRm1ka0lzU1VGQlNTeERRVUZETEdWQlFXVXNSVUZCUlR0UlFVTnlRaXhKUVVGSkxFVkJRVVVzWlVGQlpUdFJRVU55UWl4UlFVRlJMRVZCUVVVc1UwRkJVenRSUVVOdVFpeExRVUZMTEVWQlFVVXNVMEZCVXp0UlFVTm9RaXhKUVVGSkxFVkJRVVVzYzBKQlFYTkNPMUZCUXpWQ0xFdEJRVXNzUlVGQlJTeEZRVUZGTzFGQlExUXNUVUZCVFN4RlFVRkZMRVZCUVVVN1VVRkRWaXhOUVVGTkxFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RlFVRkZMRmRCUVZjc1EwRkJRenRSUVVOd1F5eFJRVUZSTEVWQlFVVTdXVUZEVWl4TFFVRkxMRVZCUVVVc1MwRkJTenRaUVVOYUxGZEJRVmNzUlVGQlJTeHZSa0ZCYjBZN1dVRkRha2NzVFVGQlRTeEZRVUZGTEVWQlFVVTdVMEZEV0R0TFFVTkdMRU5CUVVNN1NVRkRSQ3hMUVVGTExFVkJRVVU3UjBGRFN5eFhRVUZYTEVOQlZYWkNPenRCUVVWRU96dEhRVVZITzBGQlowSkpMRWxCUVUwc1lVRkJZU3hIUVVGdVFpeE5RVUZOTEdGQlFXTXNVMEZCVVN4TFFVRkxPME5CVlhaRExFTkJRVUU3UVVGT1F6dEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNZVUZCWVN4RlFVRkZMRmRCUVZjc1JVRkJSU3c0UWtGQk9FSXNSVUZCUlN4RFFVRkRPMGxCUXpWR0xFdEJRVXNzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4UFFVRlBMRVZCUVVVc1EwRkJRenM3TkVOQlExZzdRVUZMYUVJN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNUMEZCVHl4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxHTkJRV01zUlVGQlJTeFhRVUZYTEVWQlFVVXNhVUpCUVdsQ0xFVkJRVVVzUTBGQlF6dEpRVU0zUlN4TlFVRk5MRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPeXREUVVOVU8wRkJWRklzWVVGQllUdEpRV1o2UWl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVWQlFVVTdVVUZEZGtJc1NVRkJTU3hGUVVGRkxHbENRVUZwUWp0UlFVTjJRaXhSUVVGUkxFVkJRVVVzVTBGQlV6dFJRVU51UWl4TFFVRkxMRVZCUVVVc1UwRkJVenRSUVVOb1FpeEpRVUZKTEVWQlFVVXNhVUpCUVdsQ08xRkJRM1pDTEV0QlFVc3NSVUZCUlN4RlFVRkZPMUZCUTFRc1RVRkJUU3hGUVVGRkxFVkJRVVU3VVVGRFZpeE5RVUZOTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF6dFJRVU5xUXl4UlFVRlJMRVZCUVVVN1dVRkRVaXhMUVVGTExFVkJRVVVzVDBGQlR6dFpRVU5rTEZkQlFWY3NSVUZCUlN4dlIwRkJiMGM3V1VGRGFrZ3NWVUZCVlN4RlFVRkZMRWxCUVVrN1UwRkRha0k3UzBGRFJpeERRVUZETzBsQlEwUXNTMEZCU3l4RlFVRkZPMGRCUTBzc1lVRkJZU3hEUVZWNlFqczdRVUZGUkRzN1IwRkZSenRCUVdkQ1NTeEpRVUZOTEhGQ1FVRnhRaXhIUVVFelFpeE5RVUZOTEhGQ1FVRnpRaXhUUVVGUkxFdEJRVXM3UTBGbEwwTXNRMEZCUVR0QlFWaERPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hoUVVGaExFVkJRVVVzVjBGQlZ5eEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxFTkJRVU03U1VGRE9VVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZET3p0dlJFRkRXRHRCUVV0b1FqdEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNVVUZCVVN4RlFVRkZMRmRCUVZjc1JVRkJSU3h0UWtGQmJVSXNSVUZCUlN4RFFVRkRPMGxCUTNwRkxFMUJRVTBzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4UlFVRlJMRVZCUVVVc1EwRkJRenM3Y1VSQlExbzdRVUZMYWtJN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNUMEZCVHl4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeFhRVUZYTEVWQlFVVXNiVUpCUVcxQ0xFVkJRVVVzUTBGQlF6dEpRVU40UlN4TlFVRk5MRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPMjlFUVVOYU8wRkJaRXdzY1VKQlFYRkNPMGxCWm1wRExFbEJRVWtzUTBGQlF5eDVRa0ZCZVVJc1JVRkJSVHRSUVVNdlFpeEpRVUZKTEVWQlFVVXNlVUpCUVhsQ08xRkJReTlDTEZGQlFWRXNSVUZCUlN4alFVRmpPMUZCUTNoQ0xFdEJRVXNzUlVGQlJTeFRRVUZUTzFGQlEyaENMRWxCUVVrc1JVRkJSU3hwUWtGQmFVSTdVVUZEZGtJc1MwRkJTeXhGUVVGRkxFVkJRVVU3VVVGRFZDeE5RVUZOTEVWQlFVVXNSVUZCUlR0UlFVTldMRTFCUVUwc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNWMEZCVnl4RFFVRkRPMUZCUTNSRExGRkJRVkVzUlVGQlJUdFpRVU5TTEV0QlFVc3NSVUZCUlN4blFrRkJaMEk3V1VGRGRrSXNWMEZCVnl4RlFVRkZMQ3RHUVVFclJqdFpRVU0xUnl4UFFVRlBMRVZCUVVVc1MwRkJTenRUUVVObU8wdEJRMFlzUTBGQlF6dEpRVU5FTEV0QlFVc3NSVUZCUlR0SFFVTkxMSEZDUVVGeFFpeERRV1ZxUXpzN1FVRkZSRHM3UjBGRlJ6dEJRV2xDU1N4SlFVRk5MSEZDUVVGeFFpeEhRVUV6UWl4TlFVRk5MSEZDUVVGelFpeFRRVUZSTEV0QlFVczdRMEZsTDBNc1EwRkJRVHRCUVZoRE8wbEJTRU1zVVVGQlVTeEZRVUZGTzBsQlExWXNVMEZCVXl4RFFVRkRMRlZCUVZVc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeGhRVUZoTEVWQlFVVXNWMEZCVnl4RlFVRkZMSGRDUVVGM1FpeEZRVUZGTEVOQlFVTTdTVUZEZEVZc1MwRkJTeXhEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4RFFVRkRPenR2UkVGRFdEdEJRVXRvUWp0SlFVaERMRkZCUVZFc1JVRkJSVHRKUVVOV0xGTkJRVk1zUTBGQlF5eFBRVUZQTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1ZVRkJWU3hGUVVGRkxGZEJRVmNzUlVGQlJTeHpRa0ZCYzBJc1JVRkJSU3hEUVVGRE8wbEJRemxGTEUxQlFVMHNRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hWUVVGVkxFVkJRVVVzUTBGQlF6czdkVVJCUTFvN1FVRkxia0k3U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEZWQlFWVXNSVUZCUlN4WFFVRlhMRVZCUVVVc2MwSkJRWE5DTEVWQlFVVXNRMEZCUXp0SlFVTTVSU3hOUVVGTkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNWVUZCVlN4RlFVRkZMRU5CUVVNN08zVkVRVU5hTzBGQlpGSXNjVUpCUVhGQ08wbEJhRUpxUXl4SlFVRkpMRU5CUVVNc2VVSkJRWGxDTEVWQlFVVTdVVUZETDBJc1NVRkJTU3hGUVVGRkxIbENRVUY1UWp0UlFVTXZRaXhSUVVGUkxFVkJRVVVzWTBGQll6dFJRVU40UWl4TFFVRkxMRVZCUVVVc1UwRkJVenRSUVVOb1FpeEpRVUZKTEVWQlFVVXNaVUZCWlR0UlFVTnlRaXhMUVVGTExFVkJRVVVzUlVGQlJUdFJRVU5VTEUxQlFVMHNSVUZCUlN4RlFVRkZPMUZCUTFZc1RVRkJUU3hGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWVXNSVUZCUlN4VFFVRlRMRU5CUVVNN1VVRkRka01zVVVGQlVTeEZRVUZGTzFsQlExSXNTMEZCU3l4RlFVRkZMR2RDUVVGblFqdFpRVU4yUWl4WFFVRlhMRVZCUVVVc1owZEJRV2RITzFsQlF6ZEhMRk5CUVZNc1JVRkJSU3hGUVVGRk8xbEJRMklzVTBGQlV5eEZRVUZGTEZGQlFWRTdVMEZEY0VJN1MwRkRSaXhEUVVGRE8wbEJRMFFzUzBGQlN5eEZRVUZGTzBkQlEwc3NjVUpCUVhGQ0xFTkJaV3BET3p0QlFVVkVPenRIUVVWSE8wRkJaMEpKTEVsQlFVMHNZMEZCWXl4SFFVRndRaXhOUVVGTkxHTkJRV1VzVTBGQlVTeExRVUZMTzBOQlZYaERMRU5CUVVFN1FVRk9RenRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzWVVGQllTeEZRVUZGTEZkQlFWY3NSVUZCUlN4dlFrRkJiMElzUlVGQlJTeERRVUZETzBsQlEyeEdMRXRCUVVzc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXpzN05rTkJRMWc3UVVGTGFFSTdTVUZJUXl4UlFVRlJMRVZCUVVVN1NVRkRWaXhUUVVGVExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMR2xDUVVGcFFpeEZRVUZGTEZkQlFWY3NSVUZCUlN4dFFrRkJiVUlzUlVGQlJTeERRVUZETzBsQlEyeEdMRTFCUVUwc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFJRVUZSTEVWQlFVVXNRMEZCUXpzN09FTkJRMW83UVVGVVRpeGpRVUZqTzBsQlpqRkNMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNSVUZCUlR0UlFVTjRRaXhKUVVGSkxFVkJRVVVzYTBKQlFXdENPMUZCUTNoQ0xGRkJRVkVzUlVGQlJTeFRRVUZUTzFGQlEyNUNMRXRCUVVzc1JVRkJSU3hUUVVGVE8xRkJRMmhDTEVsQlFVa3NSVUZCUlN4clFrRkJhMEk3VVVGRGVFSXNTMEZCU3l4RlFVRkZMRVZCUVVVN1VVRkRWQ3hOUVVGTkxFVkJRVVVzUlVGQlJUdFJRVU5XTEUxQlFVMHNSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hSUVVGUkxFVkJRVVVzVVVGQlVTeERRVUZETzFGQlEzQkRMRkZCUVZFc1JVRkJSVHRaUVVOU0xFdEJRVXNzUlVGQlJTeFJRVUZSTzFsQlEyWXNWMEZCVnl4RlFVRkZMRFpFUVVFMlJEdFpRVU14UlN4WlFVRlpMRVZCUVVVc1JVRkJSVHRUUVVOcVFqdExRVU5HTEVOQlFVTTdTVUZEUkN4TFFVRkxMRVZCUVVVN1IwRkRTeXhqUVVGakxFTkJWVEZDT3p0QlFVVkVPenM3T3pzN096dEhRVkZITzBGQmFVSkpMRWxCUVUwc1dVRkJXU3hIUVVGc1FpeE5RVUZOTEZsQlFXRXNVMEZCVVN4TFFVRkxPME5CVlhSRExFTkJRVUU3UVVGT1F6dEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZMRmRCUVZjc1JVRkJSU3h4UTBGQmNVTXNSVUZCUlN4RFFVRkRPMGxCUXpkR0xFdEJRVXNzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4UFFVRlBMRVZCUVVVc1EwRkJRenM3TWtOQlExZzdRVUZMYUVJN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNUMEZCVHl4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxGRkJRVkVzUlVGQlJTeFhRVUZYTEVWQlFVVXNkVUpCUVhWQ0xFVkJRVVVzUTBGQlF6dEpRVU0zUlN4TlFVRk5MRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVOQlFVTTdPelJEUVVOYU8wRkJWRTRzV1VGQldUdEpRV2hDZUVJc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZPMUZCUTNSQ0xFbEJRVWtzUlVGQlJTeG5Ra0ZCWjBJN1VVRkRkRUlzVVVGQlVTeEZRVUZGTEZOQlFWTTdVVUZEYmtJc1MwRkJTeXhGUVVGRkxGTkJRVk03VVVGRGFFSXNTVUZCU1N4RlFVRkZMRk5CUVZNN1VVRkRaaXhMUVVGTExFVkJRVVVzUlVGQlJUdFJRVU5VTEUxQlFVMHNSVUZCUlN4RlFVRkZPMUZCUTFZc1RVRkJUU3hGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1YwRkJWeXhEUVVGRE8xRkJRMmhFTEZGQlFWRXNSVUZCUlR0WlFVTlNMRXRCUVVzc1JVRkJSU3hOUVVGTk8xbEJRMklzVjBGQlZ5eEZRVUZGTEdkSVFVRm5TRHRaUVVNM1NDeEpRVUZKTEVWQlFVVXNSVUZCUlR0WlFVTlNMRkZCUVZFc1JVRkJSU3haUVVGWk8xTkJRM1pDTzB0QlEwWXNRMEZCUXp0SlFVTkVMRXRCUVVzc1JVRkJSVHRIUVVOTExGbEJRVmtzUTBGVmVFSTdPMEZCUlVRN08wZEJSVWM3UVVGRFNDeE5RVUZOTEVOQlFVTXNUVUZCVFN4M1FrRkJkMElzUjBGQlJ6dEpRVU4wUXl4VlFVRlZPMGxCUTFZc1kwRkJZenRKUVVOa0xHZENRVUZuUWp0SlFVTm9RaXhoUVVGaE8wbEJRMklzVjBGQlZ6dEpRVU5ZTEdGQlFXRTdTVUZEWWl4eFFrRkJjVUk3U1VGRGNrSXNjVUpCUVhGQ08wbEJRM0pDTEdOQlFXTTdTVUZEWkN4WlFVRlpPME5CUTBvc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWk4cUtseHVJQ29nUUcxdlpIVnNaU0JwYm5SbFozSmhkR2x2Ym5NdlozSmhjR2d2Ym05a1pYTXZabXh2ZHkxamIyNTBjbTlzWEc0Z0tpQkFjM1Z0YldGeWVTQlFjbTlrZFdOMGFXOXVJR1pzYjNjdFkyOXVkSEp2YkNCdWIyUmxJR3RwYm1RZ1pHVmpiR0Z5WVhScGIyNXpJQ2hFUlVOQlJpMHpNaURDcHpJeUxqSXVNaWt1WEc0Z0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTJGdWIyNXBZMkZzSUdCQWJtOWtaV0F0WkdWamIzSmhkR1ZrSUdOc1lYTnpaWE1nWm05eUlIUm9aU0IwWlc0Z1FVeEdVa1ZFTFRWY2JpQXFJR1pzYjNjdFkyOXVkSEp2YkNCcmFXNWtjeTRnVkdobGMyVWdZWEpsSUdkeVlYQm9MV3hsZG1Wc0lHMWhZM0p2Y3pvZ2RHaGxJR1Z1WjJsdVpTZHpJSEJzWVc1dVpYSmNiaUFxSUhKbFkyOW5ibWx6WlhNZ2RHaGxiU0JoY3lCdmNtUnBibUZ5ZVNCbGVHVmpkWFJoWW14bElHNXZaR1Z6SUNqQ3B6VXVOeWtnWW5WMElIUm9aWGtnYUdGMlpTQnViMXh1SUNvZ1luVnBiSFF0YVc0Z1pYaGxZM1YwYjNKeklPS0FsQ0JrYjNkdWMzUnlaV0Z0SUhCeWIycGxZM1J6SUNobExtY3VJRUZNUmxKRlJDa2djbVZuYVhOMFpYSWdZM1Z6ZEc5dFhHNGdLaUJsZUdWamRYUnZjbk1nYjNJZ1kyOXRjR2xzWlNCMGFHVnRJR2x1ZEc4Z1RXRnpkSEpoSUdOdmJYQnZjMmwwYVc5dUlFRlFTWE1nS01Lbk1qSXVNaTR5S1M1Y2JpQXFYRzRnS2lCVWFHVWdkR2h5WldVZ2JHOXZjQ0JyYVc1a2N5QW9ZR052Y21VdWJHOXZjQzVtYjNKbFlXTm9MM2RvYVd4bEwzVnVkR2xzWUNrZ1lXeHlaV0ZrZVNCb1lYWmxJR0oxYVd4MExXbHVYRzRnS2lCbGVHVmpkWFJ2Y25NZ0tNS25OUzQ1S1NCaGJtUWdZWEpsSUU1UFZDQnlaV1JsWTJ4aGNtVmtJR2hsY21VdVhHNGdLaTljYm1sdGNHOXlkQ0I3SUUxdlpHVnNMQ0J0YjJSbGJDd2djbVZ4ZFdseVpXUWdmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMlJsWTI5eVlYUnZjaTEyWVd4cFpHRjBhVzl1WENJN1hHNXBiWEJ2Y25RZ2V5QjFhV1ZzWlcxbGJuUWdmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMM1ZwTFdSbFkyOXlZWFJ2Y25OY0lqdGNibWx0Y0c5eWRDQjdJR2x1Y0hWMExDQnViMlJsTENCdmRYUndkWFFnZlNCbWNtOXRJRndpUUdSbFkyRm1MWFJ6TDNWcExXUmxZMjl5WVhSdmNuTXZaM0poY0doY0lqdGNibHh1THlvcVhHNGdLaUJKWmlEaWdKUWdZMjl1WkdsMGFXOXVZV3dnWW5KaGJtTm9MaUJGZG1Gc2RXRjBaWE1nWVNCZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJtQWdLTUtuTWpJdU15a2dZVzVrWEc0Z0tpQnliM1YwWlhNZ2RHaGxJR2x1Y0hWMElIUnZJSFJvWlNCZ2RHaGxibUFnYjNJZ1lHVnNjMlZnSUc5MWRIQjFkQzVjYmlBcUwxeHVRRzV2WkdVb1hDSmpiM0psTG1ac2IzY3VhV1pjSWl3Z2UxeHVJQ0JyYVc1a09pQmNJbU52Y21VdVpteHZkeTVwWmx3aUxGeHVJQ0JqWVhSbFoyOXllVG9nWENKR2JHOTNJRU52Ym5SeWIyeGNJaXhjYmlBZ1kyOXNiM0k2SUZ3aUkyWTFPV1V3WWx3aUxGeHVJQ0JwWTI5dU9pQmNJblJwTFdGeWNtOTNjeTF6Y0d4cGRDMHlYQ0lzWEc0Z0lIZHBaSFJvT2lBNU5peGNiaUFnYUdWcFoyaDBPaUE1Tml4Y2JpQWdiR0ZpWld4ek9pQmJYQ0ptYkc5M1hDSXNJRndpWTI5dVpHbDBhVzl1WVd4Y0lpd2dYQ0ppY21GdVkyaGNJbDBzWEc0Z0lHMWxkR0ZrWVhSaE9pQjdYRzRnSUNBZ2RHbDBiR1U2SUZ3aVNXWmNJaXhjYmlBZ0lDQmtaWE5qY21sd2RHbHZiam9nWENKRGIyNWthWFJwYjI1aGJDQmljbUZ1WTJndUlFVjJZV3gxWVhSbGN5QjBhR1VnWTI5dVptbG5kWEpsWkNCamIyNWthWFJwYjI0Z1lXNWtJSEp2ZFhSbGN5QjBhR1VnYVc1d2RYUWdkRzhnZEdobElHMWhkR05vYVc1bklHOTFkSEIxZEM1Y0lpeGNiaUFnSUNCamIyNWthWFJwYjI0NklIc2diM0E2SUZ3aVpYRmNJaXdnYkdWbWREb2dleUJqYjI1emREb2dkSEoxWlNCOUxDQnlhV2RvZERvZ2V5QmpiMjV6ZERvZ2RISjFaU0I5SUgwc1hHNGdJSDBzWEc1OUtWeHVRRzF2WkdWc0tDbGNibVY0Y0c5eWRDQmpiR0Z6Y3lCSlprWnNiM2RPYjJSbElHVjRkR1Z1WkhNZ1RXOWtaV3dnZTF4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lkR1Y0ZEdGeVpXRmNJaXdnZXlCc1lXSmxiRG9nWENKSmJuQjFkQ0IyWVd4MVpWd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSldZV3gxWlNCMGJ5QmxkbUZzZFdGMFpWd2lJSDBwWEc0Z0lFQnBibkIxZENoN0lHaGhibVJzWlRvZ1hDSjJZV3gxWlZ3aUlIMHBYRzRnSUhaaGJIVmxJVG9nZFc1cmJtOTNianRjYmx4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lhVzV3ZFhSY0lpd2dleUJzWVdKbGJEb2dYQ0pVYUdWdVhDSXNJSEJzWVdObGFHOXNaR1Z5T2lCY0lrOTFkSEIxZENCM2FHVnVJR052Ym1ScGRHbHZiaUJwY3lCMGNuVmxYQ0lnZlNsY2JpQWdRRzkxZEhCMWRDaDdJR2hoYm1Sc1pUb2dYQ0owYUdWdVhDSWdmU2xjYmlBZ2RHaGxiaUU2SUhWdWEyNXZkMjQ3WEc1Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJbWx1Y0hWMFhDSXNJSHNnYkdGaVpXdzZJRndpUld4elpWd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSlBkWFJ3ZFhRZ2QyaGxiaUJqYjI1a2FYUnBiMjRnYVhNZ1ptRnNjMlZjSWlCOUtWeHVJQ0JBYjNWMGNIVjBLSHNnYUdGdVpHeGxPaUJjSW1Wc2MyVmNJaUI5S1Z4dUlDQmxiSE5sSVRvZ2RXNXJibTkzYmp0Y2JuMWNibHh1THlvcVhHNGdLaUJUZDJsMFkyZ2c0b0NVSUcxMWJIUnBMV0p5WVc1amFDNGdVbTkxZEdWeklIUm9aU0JwYm5CMWRDQjBieUJ2Ym1VZ2IyWWdkR2hsSUdOaGMyVWdiM1YwY0hWMElIQnZjblJ6WEc0Z0tpQnZjaUJnWkdWbVlYVnNkR0FnWW1GelpXUWdiMjRnYldGMFkyaHBibWNnWTI5dVpHbDBhVzl1Y3k0Z1JXRmphQ0JqWVhObElHUmxabWx1WlhNZ1lWeHVJQ29nZTBCc2FXNXJJRk4zYVhSamFFTmhjMlZEYjI1a2FYUnBiMjU5SUNobmNtRndhR2xqWVd3Z2IzSWdZMjlrWlNCdGIyUmxLU0JoYm1RZ1lTQmtaV1JwWTJGMFpXUmNiaUFxSUc5MWRIQjFkQ0J3YjNKMExpQkRZWE5sY3lCaGNtVWdjM1J2Y21Wa0lHbHVJR0J0WlhSaFpHRjBZUzV6ZDJsMFkyZ3VZMkZ6WlhOZ0lHRnVaQ0IwYUdWY2JpQXFJSEpsYm1SbGNtVnlJR055WldGMFpYTWdaSGx1WVcxcFl5QnZkWFJ3ZFhRZ2NHOXlkSE1nWm5KdmJTQjBhR1Z0SUNoRVJVTkJSaTB6TWlEQ3B6SXlMakl1TWlrdVhHNGdLbHh1SUNvZ1ZHaGxJRzV2WkdVZ1ozSnZkM01nYVc0Z2FHVnBaMmgwSUdGeklHTmhjMlZ6SUdGeVpTQmhaR1JsWkM0Z1JXRmphQ0JqWVhObElHZGxkSE1nYVhSeklHOTNibHh1SUNvZ2IzVjBjSFYwSUhCdmNuUWdiMjRnZEdobElISnBaMmgwSUhOcFpHVXNJR3hoWW1Wc1pXUWdkMmwwYUNCMGFHVWdZMkZ6WlNCc1lXSmxiQzVjYmlBcUwxeHVRRzV2WkdVb1hDSmpiM0psTG1ac2IzY3VjM2RwZEdOb1hDSXNJSHRjYmlBZ2EybHVaRG9nWENKamIzSmxMbVpzYjNjdWMzZHBkR05vWENJc1hHNGdJR05oZEdWbmIzSjVPaUJjSWtac2IzY2dRMjl1ZEhKdmJGd2lMRnh1SUNCamIyeHZjam9nWENJalpqazNNekUyWENJc1hHNGdJR2xqYjI0NklGd2lkR2t0WVhKeWIzZHpMWE5vZFdabWJHVmNJaXhjYmlBZ2QybGtkR2c2SURFeU1DeGNiaUFnYUdWcFoyaDBPaUF4TkRBc1hHNGdJR3hoWW1Wc2N6b2dXMXdpWm14dmQxd2lMQ0JjSW5OM2FYUmphRndpTENCY0ltMTFiSFJwTFdKeVlXNWphRndpWFN4Y2JpQWdiV1YwWVdSaGRHRTZJSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDSlRkMmwwWTJoY0lpeGNiaUFnSUNCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pOZFd4MGFTMWljbUZ1WTJnZ2MzZHBkR05vTGlCU2IzVjBaWE1nZEdobElHbHVjSFYwSUhSdklIUm9aU0JtYVhKemRDQnRZWFJqYUdsdVp5QmpZWE5sSUc5MWRIQjFkQ3dnYjNJZ2RHaGxJR1JsWm1GMWJIUWdiM1YwY0hWMExsd2lMRnh1SUNBZ0lITjNhWFJqYURvZ2UxeHVJQ0FnSUNBZ1kyRnpaWE02SUZ0ZExGeHVJQ0FnSUNBZ1pHVm1ZWFZzZEZCdmNuUTZJRndpWkdWbVlYVnNkRndpTEZ4dUlDQWdJSDBzWEc0Z0lIMHNYRzU5S1Z4dVFHMXZaR1ZzS0NsY2JtVjRjRzl5ZENCamJHRnpjeUJUZDJsMFkyaEdiRzkzVG05a1pTQmxlSFJsYm1SeklFMXZaR1ZzSUh0Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJblJsZUhSaGNtVmhYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVNXNXdkWFFnZG1Gc2RXVmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lWbUZzZFdVZ2RHOGdjM2RwZEdOb0lHOXVYQ0lnZlNsY2JpQWdRR2x1Y0hWMEtIc2dhR0Z1Wkd4bE9pQmNJblpoYkhWbFhDSWdmU2xjYmlBZ2RtRnNkV1VoT2lCMWJtdHViM2R1TzF4dVhHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0pwYm5CMWRGd2lMQ0I3SUd4aFltVnNPaUJjSWtSbFptRjFiSFJjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpUkdWbVlYVnNkQ0J2ZFhSd2RYUWdkMmhsYmlCdWJ5QmpZWE5sSUcxaGRHTm9aWE5jSWlCOUtWeHVJQ0JBYjNWMGNIVjBLSHNnYUdGdVpHeGxPaUJjSW1SbFptRjFiSFJjSWlCOUtWeHVJQ0JrWldaaGRXeDBJVG9nZFc1cmJtOTNianRjYm4xY2JseHVMeW9xWEc0Z0tpQlFZWEpoYkd4bGJDRGlnSlFnYzNCc2FYUnpJR1Y0WldOMWRHbHZiaUJwYm5SdklHTnZibU4xY25KbGJuUWdZbkpoYm1Ob1pYTXVYRzRnS2k5Y2JrQnViMlJsS0Z3aVkyOXlaUzVtYkc5M0xuQmhjbUZzYkdWc1hDSXNJSHRjYmlBZ2EybHVaRG9nWENKamIzSmxMbVpzYjNjdWNHRnlZV3hzWld4Y0lpeGNiaUFnWTJGMFpXZHZjbms2SUZ3aVJteHZkeUJEYjI1MGNtOXNYQ0lzWEc0Z0lHTnZiRzl5T2lCY0lpTXdObUkyWkRSY0lpeGNiaUFnYVdOdmJqb2dYQ0owYVMxaGNuSnZkM010ZG1WeWRHbGpZV3hjSWl4Y2JpQWdkMmxrZEdnNklEazJMRnh1SUNCb1pXbG5hSFE2SURrMkxGeHVJQ0JzWVdKbGJITTZJRnRjSW1ac2IzZGNJaXdnWENKd1lYSmhiR3hsYkZ3aUxDQmNJbU52Ym1OMWNuSmxiblJjSWwwc1hHNGdJRzFsZEdGa1lYUmhPaUI3WEc0Z0lDQWdkR2wwYkdVNklGd2lVR0Z5WVd4c1pXeGNJaXhjYmlBZ0lDQmtaWE5qY21sd2RHbHZiam9nWENKVGNHeHBkSE1nWlhobFkzVjBhVzl1SUdsdWRHOGdZMjl1WTNWeWNtVnVkQ0JpY21GdVkyaGxjeTRnUVd4c0lHSnlZVzVqYUdWeklISjFiaUJwYmlCd1lYSmhiR3hsYkNCaGJtUWdiM1YwY0hWMGN5QmhjbVVnWTI5c2JHVmpkR1ZrTGx3aUxGeHVJQ0FnSUdKeVlXNWphRU52ZFc1ME9pQXlMRnh1SUNCOUxGeHVmU2xjYmtCdGIyUmxiQ2dwWEc1bGVIQnZjblFnWTJ4aGMzTWdVR0Z5WVd4c1pXeEdiRzkzVG05a1pTQmxlSFJsYm1SeklFMXZaR1ZzSUh0Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJblJsZUhSaGNtVmhYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVNXNXdkWFFnZG1Gc2RXVmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lWbUZzZFdVZ2RHOGdabUZ1SUc5MWRGd2lJSDBwWEc0Z0lFQnBibkIxZENoN0lHaGhibVJzWlRvZ1hDSjJZV3gxWlZ3aUlIMHBYRzRnSUhaaGJIVmxJVG9nZFc1cmJtOTNianRjYmx4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lhVzV3ZFhSY0lpd2dleUJzWVdKbGJEb2dYQ0pDY21GdVkyaGxjMXdpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pEYjJ4c1pXTjBaV1FnWW5KaGJtTm9JRzkxZEhCMWRITmNJaUI5S1Z4dUlDQkFiM1YwY0hWMEtIc2dhR0Z1Wkd4bE9pQmNJbUp5WVc1amFHVnpYQ0lnZlNsY2JpQWdZbkpoYm1Ob1pYTWhPaUIxYm10dWIzZHVXMTA3WEc1OVhHNWNiaThxS2x4dUlDb2dUV1Z5WjJVZzRvQ1VJRzV2Y20xaGJHbHpaWE1nWW5KaGJtTm9MM0JoY21Gc2JHVnNJRzkxZEhCMWRITWdhVzUwYnlCaElITnBibWRzWlNCdmRYUndkWFF1WEc0Z0tpOWNia0J1YjJSbEtGd2lZMjl5WlM1bWJHOTNMbTFsY21kbFhDSXNJSHRjYmlBZ2EybHVaRG9nWENKamIzSmxMbVpzYjNjdWJXVnlaMlZjSWl4Y2JpQWdZMkYwWldkdmNuazZJRndpVlhScGJHbDBlVndpTEZ4dUlDQmpiMnh2Y2pvZ1hDSWpNR1E1TkRnNFhDSXNYRzRnSUdsamIyNDZJRndpZEdrdFlYSnliM2R6TFcxbGNtZGxYQ0lzWEc0Z0lIZHBaSFJvT2lBNU5peGNiaUFnYUdWcFoyaDBPaUE1Tml4Y2JpQWdiR0ZpWld4ek9pQmJYQ0ptYkc5M1hDSXNJRndpYldWeVoyVmNJaXdnWENKcWIybHVYQ0pkTEZ4dUlDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lIUnBkR3hsT2lCY0lrMWxjbWRsWENJc1hHNGdJQ0FnWkdWelkzSnBjSFJwYjI0NklGd2lUV1Z5WjJWeklHMTFiSFJwY0d4bElHSnlZVzVqYUNCdmRYUndkWFJ6SUdsdWRHOGdZU0J6YVc1bmJHVWdibTl5YldGc2FYTmxaQ0J2ZFhSd2RYUWdiMkpxWldOMExsd2lMRnh1SUNBZ0lITjBjbUYwWldkNU9pQmNJbU52Ym1OaGRGd2lMRnh1SUNCOUxGeHVmU2xjYmtCdGIyUmxiQ2dwWEc1bGVIQnZjblFnWTJ4aGMzTWdUV1Z5WjJWR2JHOTNUbTlrWlNCbGVIUmxibVJ6SUUxdlpHVnNJSHRjYmlBZ1FISmxjWFZwY21Wa0tDbGNiaUFnUUhWcFpXeGxiV1Z1ZENoY0luUmxlSFJoY21WaFhDSXNJSHNnYkdGaVpXdzZJRndpUW5KaGJtTm9JRzkxZEhCMWRITmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lUM1YwY0hWMGN5QjBieUJ0WlhKblpWd2lJSDBwWEc0Z0lFQnBibkIxZENoN0lHaGhibVJzWlRvZ1hDSjJZV3gxWlhOY0lpQjlLVnh1SUNCMllXeDFaWE1oT2lCMWJtdHViM2R1VzEwN1hHNWNiaUFnUUhKbGNYVnBjbVZrS0NsY2JpQWdRSFZwWld4bGJXVnVkQ2hjSW1sdWNIVjBYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVRXVnlaMlZrSUc5MWRIQjFkRndpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pOWlhKblpXUWdjbVZ6ZFd4MFhDSWdmU2xjYmlBZ1FHOTFkSEIxZENoN0lHaGhibVJzWlRvZ1hDSnRaWEpuWldSY0lpQjlLVnh1SUNCdFpYSm5aV1FoT2lCMWJtdHViM2R1TzF4dWZWeHVYRzR2S2lwY2JpQXFJRTFoY0NEaWdKUWdkSEpoYm5ObWIzSnRjeUIwYUdVZ1kzVnljbVZ1ZENCcGJuQjFkQ0JwYm5SdklHRWdibVYzSUc5MWRIQjFkQ0J2WW1wbFkzUXVYRzRnS2k5Y2JrQnViMlJsS0Z3aVkyOXlaUzVtYkc5M0xtMWhjRndpTENCN1hHNGdJR3RwYm1RNklGd2lZMjl5WlM1bWJHOTNMbTFoY0Z3aUxGeHVJQ0JqWVhSbFoyOXllVG9nWENKVmRHbHNhWFI1WENJc1hHNGdJR052Ykc5eU9pQmNJaU00TkdOak1UWmNJaXhjYmlBZ2FXTnZiam9nWENKMGFTMWhjbkp2ZDNNdGNtbG5hSFF0YkdWbWRGd2lMRnh1SUNCM2FXUjBhRG9nT1RZc1hHNGdJR2hsYVdkb2REb2dPVFlzWEc0Z0lHeGhZbVZzY3pvZ1cxd2labXh2ZDF3aUxDQmNJbTFoY0Z3aUxDQmNJblJ5WVc1elptOXliVndpWFN4Y2JpQWdiV1YwWVdSaGRHRTZJSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDSk5ZWEJjSWl4Y2JpQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSlVjbUZ1YzJadmNtMXpJSFJvWlNCamRYSnlaVzUwSUdsdWNIVjBJR2x1ZEc4Z1lTQnVaWGNnYjNWMGNIVjBJRzlpYW1WamRDQjFjMmx1WnlCMGFHVWdZMjl1Wm1sbmRYSmxaQ0J0WVhCd1pYSXVYQ0lzWEc0Z0lDQWdiV0Z3Y0dWeU9pQjdmU3hjYmlBZ2ZTeGNibjBwWEc1QWJXOWtaV3dvS1Z4dVpYaHdiM0owSUdOc1lYTnpJRTFoY0Vac2IzZE9iMlJsSUdWNGRHVnVaSE1nVFc5a1pXd2dlMXh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWRHVjRkR0Z5WldGY0lpd2dleUJzWVdKbGJEb2dYQ0pKYm5CMWRDQjJZV3gxWlZ3aUxDQndiR0ZqWldodmJHUmxjam9nWENKV1lXeDFaU0IwYnlCMGNtRnVjMlp2Y20xY0lpQjlLVnh1SUNCQWFXNXdkWFFvZXlCb1lXNWtiR1U2SUZ3aWRtRnNkV1ZjSWlCOUtWeHVJQ0IyWVd4MVpTRTZJSFZ1YTI1dmQyNDdYRzVjYmlBZ1FISmxjWFZwY21Wa0tDbGNiaUFnUUhWcFpXeGxiV1Z1ZENoY0ltbHVjSFYwWENJc0lIc2diR0ZpWld3NklGd2lWSEpoYm5ObWIzSnRaV1FnYjNWMGNIVjBYQ0lzSUhCc1lXTmxhRzlzWkdWeU9pQmNJazFoY0hCbFpDQnlaWE4xYkhSY0lpQjlLVnh1SUNCQWIzVjBjSFYwS0hzZ2FHRnVaR3hsT2lCY0luSmxjM1ZzZEZ3aUlIMHBYRzRnSUhKbGMzVnNkQ0U2SUhWdWEyNXZkMjQ3WEc1OVhHNWNiaThxS2x4dUlDb2dSR1ZzWVhrZzRvQ1VJSEJoZFhObGN5QmxlR1ZqZFhScGIyNGdabTl5SUdFZ1kyOXVabWxuZFhKbFpDQmtkWEpoZEdsdmJpNWNiaUFxTDF4dVFHNXZaR1VvWENKamIzSmxMbVpzYjNjdVpHVnNZWGxjSWl3Z2UxeHVJQ0JyYVc1a09pQmNJbU52Y21VdVpteHZkeTVrWld4aGVWd2lMRnh1SUNCallYUmxaMjl5ZVRvZ1hDSlZkR2xzYVhSNVhDSXNYRzRnSUdOdmJHOXlPaUJjSWlOaE0yRXpZVE5jSWl4Y2JpQWdhV052YmpvZ1hDSjBhUzFqYkc5amF5MW9iM1Z5TFRSY0lpeGNiaUFnZDJsa2RHZzZJRGsyTEZ4dUlDQm9aV2xuYUhRNklEazJMRnh1SUNCc1lXSmxiSE02SUZ0Y0ltWnNiM2RjSWl3Z1hDSmtaV3hoZVZ3aUxDQmNJbmRoYVhSY0lsMHNYRzRnSUcxbGRHRmtZWFJoT2lCN1hHNGdJQ0FnZEdsMGJHVTZJRndpUkdWc1lYbGNJaXhjYmlBZ0lDQmtaWE5qY21sd2RHbHZiam9nWENKUVlYVnpaWE1nWlhobFkzVjBhVzl1SUdadmNpQjBhR1VnWTI5dVptbG5kWEpsWkNCa2RYSmhkR2x2YmlBb2FXNGdiV2xzYkdselpXTnZibVJ6S1N3Z2RHaGxiaUJtYjNKM1lYSmtjeUIwYUdVZ2FXNXdkWFFnZFc1amFHRnVaMlZrTGx3aUxGeHVJQ0FnSUdSMWNtRjBhVzl1VFhNNklERXdNREFzWEc0Z0lIMHNYRzU5S1Z4dVFHMXZaR1ZzS0NsY2JtVjRjRzl5ZENCamJHRnpjeUJFWld4aGVVWnNiM2RPYjJSbElHVjRkR1Z1WkhNZ1RXOWtaV3dnZTF4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lkR1Y0ZEdGeVpXRmNJaXdnZXlCc1lXSmxiRG9nWENKSmJuQjFkQ0IyWVd4MVpWd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSldZV3gxWlNCMGJ5Qm1iM0ozWVhKa0lHRm1kR1Z5SUdSbGJHRjVYQ0lnZlNsY2JpQWdRR2x1Y0hWMEtIc2dhR0Z1Wkd4bE9pQmNJblpoYkhWbFhDSWdmU2xjYmlBZ2RtRnNkV1VoT2lCMWJtdHViM2R1TzF4dVhHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0pwYm5CMWRGd2lMQ0I3SUd4aFltVnNPaUJjSWs5MWRIQjFkQ0IyWVd4MVpWd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSkdiM0ozWVhKa1pXUWdkbUZzZFdWY0lpQjlLVnh1SUNCQWIzVjBjSFYwS0hzZ2FHRnVaR3hsT2lCY0luWmhiSFZsWENJZ2ZTbGNiaUFnZG1Gc2RXVlBkWFFoT2lCMWJtdHViM2R1TzF4dWZWeHVYRzR2S2lwY2JpQXFJRVZ5Y205eUlHSnZkVzVrWVhKNUlPS0FsQ0IwY25rdlkyRjBZMmd2Wm1sdVlXeHNlU0IzYjNKclpteHZkeUJpWldoaGRtbHZkWEl1WEc0Z0tpOWNia0J1YjJSbEtGd2lZMjl5WlM1bWJHOTNMbVZ5Y205eVFtOTFibVJoY25sY0lpd2dlMXh1SUNCcmFXNWtPaUJjSW1OdmNtVXVabXh2ZHk1bGNuSnZja0p2ZFc1a1lYSjVYQ0lzWEc0Z0lHTmhkR1ZuYjNKNU9pQmNJa1pzYjNjZ1EyOXVkSEp2YkZ3aUxGeHVJQ0JqYjJ4dmNqb2dYQ0lqWldZME5EUTBYQ0lzWEc0Z0lHbGpiMjQ2SUZ3aWRHa3RjMmhwWld4a0xXTm9aV05yWENJc1hHNGdJSGRwWkhSb09pQTVOaXhjYmlBZ2FHVnBaMmgwT2lBNU5peGNiaUFnYkdGaVpXeHpPaUJiWENKbWJHOTNYQ0lzSUZ3aVpYSnliM0pjSWl3Z1hDSjBjbmt0WTJGMFkyaGNJbDBzWEc0Z0lHMWxkR0ZrWVhSaE9pQjdYRzRnSUNBZ2RHbDBiR1U2SUZ3aVJYSnliM0lnWW05MWJtUmhjbmxjSWl4Y2JpQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSlhjbUZ3Y3lCMGFHVWdhVzV3ZFhRZ2FXNGdZU0IwY25rdlkyRjBZMmd2Wm1sdVlXeHNlUzRnUlcxcGRITWdkR2hsSUhKbGMzVnNkQ0J2YmlCemRXTmpaWE56TENCdmNpQjBhR1VnWlhKeWIzSWdiMjRnWm1GcGJIVnlaUzVjSWl4Y2JpQWdJQ0JtYVc1aGJHeDVPaUJtWVd4elpTeGNiaUFnZlN4Y2JuMHBYRzVBYlc5a1pXd29LVnh1Wlhod2IzSjBJR05zWVhOeklFVnljbTl5UW05MWJtUmhjbmxHYkc5M1RtOWtaU0JsZUhSbGJtUnpJRTF2WkdWc0lIdGNiaUFnUUhKbGNYVnBjbVZrS0NsY2JpQWdRSFZwWld4bGJXVnVkQ2hjSW5SbGVIUmhjbVZoWENJc0lIc2diR0ZpWld3NklGd2lTVzV3ZFhRZ2RtRnNkV1ZjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpVm1Gc2RXVWdkRzhnWjNWaGNtUmNJaUI5S1Z4dUlDQkFhVzV3ZFhRb2V5Qm9ZVzVrYkdVNklGd2lkbUZzZFdWY0lpQjlLVnh1SUNCMllXeDFaU0U2SUhWdWEyNXZkMjQ3WEc1Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJbWx1Y0hWMFhDSXNJSHNnYkdGaVpXdzZJRndpVW1WemRXeDBYQ0lzSUhCc1lXTmxhRzlzWkdWeU9pQmNJazkxZEhCMWRDQnZiaUJ6ZFdOalpYTnpYQ0lnZlNsY2JpQWdRRzkxZEhCMWRDaDdJR2hoYm1Sc1pUb2dYQ0p5WlhOMWJIUmNJaUI5S1Z4dUlDQnlaWE4xYkhRaE9pQjFibXR1YjNkdU8xeHVYRzRnSUVCeVpYRjFhWEpsWkNncFhHNGdJRUIxYVdWc1pXMWxiblFvWENKcGJuQjFkRndpTENCN0lHeGhZbVZzT2lCY0lrVnljbTl5WENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWs5MWRIQjFkQ0J2YmlCbVlXbHNkWEpsWENJZ2ZTbGNiaUFnUUc5MWRIQjFkQ2g3SUdoaGJtUnNaVG9nWENKbGNuSnZjbHdpSUgwcFhHNGdJR1Z5Y205eUlUb2dkVzVyYm05M2JqdGNibjFjYmx4dUx5b3FYRzRnS2lCSWRXMWhiaUJoY0hCeWIzWmhiQ0RpZ0pRZ2MzVnpjR1Z1WkhNZ1pYaGxZM1YwYVc5dUlIVnVkR2xzSUdFZ2FIVnRZVzRnWVhCd2NtOTJaWE1nYjNJZ2NtVnFaV04wY3k1Y2JpQXFMMXh1UUc1dlpHVW9YQ0pqYjNKbExtWnNiM2N1YUhWdFlXNUJjSEJ5YjNaaGJGd2lMQ0I3WEc0Z0lHdHBibVE2SUZ3aVkyOXlaUzVtYkc5M0xtaDFiV0Z1UVhCd2NtOTJZV3hjSWl4Y2JpQWdZMkYwWldkdmNuazZJRndpUm14dmR5QkRiMjUwY205c1hDSXNYRzRnSUdOdmJHOXlPaUJjSWlOa09UUTJaV1pjSWl4Y2JpQWdhV052YmpvZ1hDSjBhUzExYzJWeUxXTm9aV05yWENJc1hHNGdJSGRwWkhSb09pQTVOaXhjYmlBZ2FHVnBaMmgwT2lBNU5peGNiaUFnYkdGaVpXeHpPaUJiWENKbWJHOTNYQ0lzSUZ3aVlYQndjbTkyWVd4Y0lpd2dYQ0p6ZFhOd1pXNWtYQ0pkTEZ4dUlDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lIUnBkR3hsT2lCY0lraDFiV0Z1SUdGd2NISnZkbUZzWENJc1hHNGdJQ0FnWkdWelkzSnBjSFJwYjI0NklGd2lVM1Z6Y0dWdVpITWdaWGhsWTNWMGFXOXVJSFZ1ZEdsc0lHRWdhSFZ0WVc0Z1lYQndjbTkyWlhNZ2IzSWdjbVZxWldOMGN5NGdSVzFwZEhNZ2RHaGxJR0Z3Y0hKdmRtVmtJSFpoYkhWbElHOXlJR0VnY21WcVpXTjBhVzl1TGx3aUxGeHVJQ0FnSUdGd2NISnZkbVZ5Y3pvZ1cxMHNYRzRnSUNBZ2RHbHRaVzkxZEUxek9pQTROalF3TURBd01DeGNiaUFnZlN4Y2JuMHBYRzVBYlc5a1pXd29LVnh1Wlhod2IzSjBJR05zWVhOeklFaDFiV0Z1UVhCd2NtOTJZV3hHYkc5M1RtOWtaU0JsZUhSbGJtUnpJRTF2WkdWc0lIdGNiaUFnUUhKbGNYVnBjbVZrS0NsY2JpQWdRSFZwWld4bGJXVnVkQ2hjSW5SbGVIUmhjbVZoWENJc0lIc2diR0ZpWld3NklGd2lTVzV3ZFhRZ2RtRnNkV1ZjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpVm1Gc2RXVWdjR1Z1WkdsdVp5QmhjSEJ5YjNaaGJGd2lJSDBwWEc0Z0lFQnBibkIxZENoN0lHaGhibVJzWlRvZ1hDSjJZV3gxWlZ3aUlIMHBYRzRnSUhaaGJIVmxJVG9nZFc1cmJtOTNianRjYmx4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lhVzV3ZFhSY0lpd2dleUJzWVdKbGJEb2dYQ0pCY0hCeWIzWmxaRndpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pQZFhSd2RYUWdkMmhsYmlCaGNIQnliM1psWkZ3aUlIMHBYRzRnSUVCdmRYUndkWFFvZXlCb1lXNWtiR1U2SUZ3aVlYQndjbTkyWldSY0lpQjlLVnh1SUNCaGNIQnliM1psWkNFNklIVnVhMjV2ZDI0N1hHNWNiaUFnUUhKbGNYVnBjbVZrS0NsY2JpQWdRSFZwWld4bGJXVnVkQ2hjSW1sdWNIVjBYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVVtVnFaV04wWldSY0lpd2djR3hoWTJWb2IyeGtaWEk2SUZ3aVQzVjBjSFYwSUhkb1pXNGdjbVZxWldOMFpXUmNJaUI5S1Z4dUlDQkFiM1YwY0hWMEtIc2dhR0Z1Wkd4bE9pQmNJbkpsYW1WamRHVmtYQ0lnZlNsY2JpQWdjbVZxWldOMFpXUWhPaUIxYm10dWIzZHVPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGSmxkSFZ5YmlEaWdKUWdaR1ZtYVc1bGN5QmhibVFnYm05eWJXRnNhWE5sY3lCMGFHVWdabWx1WVd3Z2QyOXlhMlpzYjNjZ2IzVjBjSFYwTGx4dUlDb3ZYRzVBYm05a1pTaGNJbU52Y21VdVpteHZkeTV5WlhSMWNtNWNJaXdnZTF4dUlDQnJhVzVrT2lCY0ltTnZjbVV1Wm14dmR5NXlaWFIxY201Y0lpeGNiaUFnWTJGMFpXZHZjbms2SUZ3aVZYUnBiR2wwZVZ3aUxGeHVJQ0JqYjJ4dmNqb2dYQ0lqTWpKak5UVmxYQ0lzWEc0Z0lHbGpiMjQ2SUZ3aWRHa3RZWEp5YjNjdFltRmpheTExY0Z3aUxGeHVJQ0IzYVdSMGFEb2dPVFlzWEc0Z0lHaGxhV2RvZERvZ09UWXNYRzRnSUd4aFltVnNjem9nVzF3aVpteHZkMXdpTENCY0luSmxkSFZ5Ymx3aUxDQmNJbTkxZEhCMWRGd2lYU3hjYmlBZ2JXVjBZV1JoZEdFNklIdGNiaUFnSUNCMGFYUnNaVG9nWENKU1pYUjFjbTVjSWl4Y2JpQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSk9iM0p0WVd4cGMyVnpJSFJvWlNCcGJuQjFkQ0JwYm5SdklIUm9aU0JtYVc1aGJDQjNiM0pyWm14dmR5QnZkWFJ3ZFhRZ2IySnFaV04wTGx3aUxGeHVJQ0FnSUc5MWRIQjFkRk5qYUdWdFlUb2dlMzBzWEc0Z0lIMHNYRzU5S1Z4dVFHMXZaR1ZzS0NsY2JtVjRjRzl5ZENCamJHRnpjeUJTWlhSMWNtNUdiRzkzVG05a1pTQmxlSFJsYm1SeklFMXZaR1ZzSUh0Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJblJsZUhSaGNtVmhYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVNXNXdkWFFnZG1Gc2RXVmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lWbUZzZFdVZ2RHOGdibTl5YldGc2FYTmxYQ0lnZlNsY2JpQWdRR2x1Y0hWMEtIc2dhR0Z1Wkd4bE9pQmNJblpoYkhWbFhDSWdmU2xjYmlBZ2RtRnNkV1VoT2lCMWJtdHViM2R1TzF4dVhHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0pwYm5CMWRGd2lMQ0I3SUd4aFltVnNPaUJjSWxKbGRIVnlibVZrSUc5MWRIQjFkRndpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pPYjNKdFlXeHBjMlZrSUc5MWRIQjFkRndpSUgwcFhHNGdJRUJ2ZFhSd2RYUW9leUJvWVc1a2JHVTZJRndpY21WemRXeDBYQ0lnZlNsY2JpQWdjbVZ6ZFd4MElUb2dkVzVyYm05M2JqdGNibjFjYmx4dUx5b3FYRzRnS2lCRGIyUmxJT0tBbENCellXNWtZbTk0WldRZ1NsTXZWRk1nWTI5a1pTQmxlR1ZqZFhScGIyNGdLRUZNUmxKRlJDMDFJTUtuTnlrdVhHNGdLbHh1SUNvZ1ZHaGxJR1Z1WjJsdVpTQmtiMlZ6SUc1dmRDQnBiWEJzWlcxbGJuUWdkR2hsSUhOaGJtUmliM2dnWkdseVpXTjBiSGtnS01Lbk1qSXVOQ2t1SUVFZ1puVjBkWEpsWEc0Z0tpQmxlR1ZqZFhSdmNpQnRZWGtnZDNKaGNDQjBhR1VnWUVOdlpHVlRZVzVrWW05NFlDQmpiMjUwY21GamRDQW9RVXhHVWtWRUxUVWd3cWMzTGpFM0tTQmhjeUJoWEc0Z0tpQndiSFZuWjJGaWJHVWdaWGhsWTNWMGIzSXVJRlJvWlNCd2JHRmpaV2h2YkdSbGNpQnplVzUwWVhnZ0tHQjdleUFrYVc1d2RYUWdmWDFnTENCZ2Uzc2dKR2wwWlcwZ2ZYMWdMRnh1SUNvZ1lIdDdJQ1JwYm1SbGVDQjlmV0FzSUdCN2V5QWtkbUZ5Y3lCOWZXQXNJR0I3ZXlBa2JtOWtaVnRjSWs1aGJXVmNJbDB1YjNWMGNIVjBJSDE5WUNrZ2FYTWdUV0Z6ZEhKaExWeHVJQ29nWVdkdWIzTjBhV01nWVc1a0lHeHBkbVZ6SUdsdUlIUm9aU0JrYjNkdWMzUnlaV0Z0SUhCeWIycGxZM1FuY3lCZ2JXOWtkV3hsY3k5amIzSmxZQ0FvUVV4R1VrVkVMVFlwTGx4dUlDb3ZYRzVBYm05a1pTaGNJbU52Y21VdVpteHZkeTVqYjJSbFhDSXNJSHRjYmlBZ2EybHVaRG9nWENKamIzSmxMbVpzYjNjdVkyOWtaVndpTEZ4dUlDQmpZWFJsWjI5eWVUb2dYQ0pWZEdsc2FYUjVYQ0lzWEc0Z0lHTnZiRzl5T2lCY0lpTTNZek5oWldSY0lpeGNiaUFnYVdOdmJqb2dYQ0owYVMxamIyUmxYQ0lzWEc0Z0lIZHBaSFJvT2lBNU5peGNiaUFnYUdWcFoyaDBPaUE1Tml4Y2JpQWdiR0ZpWld4ek9pQmJYQ0ptYkc5M1hDSXNJRndpWTI5a1pWd2lMQ0JjSW5OaGJtUmliM2hjSWl3Z1hDSjBjbUZ1YzJadmNtMWNJbDBzWEc0Z0lHMWxkR0ZrWVhSaE9pQjdYRzRnSUNBZ2RHbDBiR1U2SUZ3aVEyOWtaVndpTEZ4dUlDQWdJR1JsYzJOeWFYQjBhVzl1T2lCY0lsSjFibk1nZFhObGNpMWhkWFJvYjNKbFpDQktVeTlVVXlCcGJpQmhJSEpsYzNSeWFXTjBaV1FnVmswZ2MyRnVaR0p2ZUM0Z1UzVndjRzl5ZEhNZ2NHeGhZMlZvYjJ4a1pYSWdjM2x1ZEdGNElHWnZjaUIzYjNKclpteHZkeUJrWVhSaElISmxabVZ5Wlc1alpYTXVYQ0lzWEc0Z0lDQWdZMjlrWlRvZ1hDSmNJaXhjYmlBZ0lDQnNZVzVuZFdGblpUb2dYQ0pxWVhaaGMyTnlhWEIwWENJc1hHNGdJSDBzWEc1OUtWeHVRRzF2WkdWc0tDbGNibVY0Y0c5eWRDQmpiR0Z6Y3lCRGIyUmxSbXh2ZDA1dlpHVWdaWGgwWlc1a2N5Qk5iMlJsYkNCN1hHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0owWlhoMFlYSmxZVndpTENCN0lHeGhZbVZzT2lCY0lrbHVjSFYwWENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWtsdWNIVjBJRzlpYW1WamRDQW9ZV05qWlhOemFXSnNaU0JoY3lBa2FXNXdkWFFwWENJZ2ZTbGNiaUFnUUdsdWNIVjBLSHNnYUdGdVpHeGxPaUJjSW1sdWNIVjBYQ0lnZlNsY2JpQWdhVzV3ZFhRaE9pQjFibXR1YjNkdU8xeHVYRzRnSUVCeVpYRjFhWEpsWkNncFhHNGdJRUIxYVdWc1pXMWxiblFvWENKcGJuQjFkRndpTENCN0lHeGhZbVZzT2lCY0lsSmxjM1ZzZEZ3aUxDQndiR0ZqWldodmJHUmxjam9nWENKRGIyUmxJR1Y0WldOMWRHbHZiaUJ5WlhOMWJIUmNJaUI5S1Z4dUlDQkFiM1YwY0hWMEtIc2dhR0Z1Wkd4bE9pQmNJbkpsYzNWc2RGd2lJSDBwWEc0Z0lISmxjM1ZzZENFNklIVnVhMjV2ZDI0N1hHNTlYRzVjYmk4cUtseHVJQ29nUVd4c0lHSjFhV3gwTFdsdUlHWnNiM2N0WTI5dWRISnZiQ0J1YjJSbElHTnZibk4wY25WamRHOXljeTVjYmlBcUwxeHVaWGh3YjNKMElHTnZibk4wSUVkU1FWQklYMFpNVDFkZlEwOU9WRkpQVEY5T1QwUkZVeUE5SUZ0Y2JpQWdTV1pHYkc5M1RtOWtaU3hjYmlBZ1UzZHBkR05vUm14dmQwNXZaR1VzWEc0Z0lGQmhjbUZzYkdWc1JteHZkMDV2WkdVc1hHNGdJRTFsY21kbFJteHZkMDV2WkdVc1hHNGdJRTFoY0Vac2IzZE9iMlJsTEZ4dUlDQkVaV3hoZVVac2IzZE9iMlJsTEZ4dUlDQkZjbkp2Y2tKdmRXNWtZWEo1Um14dmQwNXZaR1VzWEc0Z0lFaDFiV0Z1UVhCd2NtOTJZV3hHYkc5M1RtOWtaU3hjYmlBZ1VtVjBkWEp1Um14dmQwNXZaR1VzWEc0Z0lFTnZaR1ZHYkc5M1RtOWtaU3hjYmwwZ1lYTWdZMjl1YzNRN1hHNGlYWDA9Il19
|